GitHub Action commited on
Commit
1e6eac0
·
1 Parent(s): d1b70e9

Sync from GitHub with Git LFS

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. agents/readme.md +4 -0
  2. agents/requirements.txt +2 -1
  3. agents/tools/config_utils.py +17 -0
  4. agents/tools/crypto.py +149 -0
  5. hf_repo/agents/examples/config.yml +68 -0
  6. hf_repo/agents/init.py +88 -0
  7. hf_repo/agents/readme.md +6 -0
  8. hf_repo/agents/requirements.txt +2 -0
  9. hf_repo/agents/test.bat +2 -2
  10. hf_repo/agents/tools/identity.py +68 -0
  11. hf_repo/agents/tools/storage.py +58 -0
  12. hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +2 -1
  13. hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +124 -107
  14. hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml +68 -47
  15. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.md +47 -0
  16. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +105 -109
  17. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/test.bat +12 -0
  18. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/test.py +13 -0
  19. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.gitignore +36 -0
  20. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +0 -2
  21. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +0 -1
  22. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +2 -1
  23. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml +11 -0
  24. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +20 -6
  25. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +1 -0
  26. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +5 -164
  27. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +7 -6
  28. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +9 -7
  29. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/requirements.txt +4 -0
  30. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +27 -2
  31. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +29 -2
  32. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +18 -0
  33. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +2 -0
  34. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +1 -1
  35. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +1 -1
  36. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +1 -1
  37. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +1 -1
  38. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +4 -0
  39. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +3 -0
  40. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +4 -0
  41. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py +21 -4
  42. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +2 -2
  43. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +17 -2
  44. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py +20 -0
  45. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +3 -0
  46. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/peer_comm.py +3 -0
  47. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +3 -0
  48. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +5 -0
  49. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md +3 -4
  50. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.md +61 -25
agents/readme.md CHANGED
@@ -20,6 +20,8 @@ agents/
20
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
21
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
22
  ├── identity.py ← Генерация DiD.
 
 
23
  ├── peers.py ← Информация о пирах.
24
  ├── peer_comm.py ← Запросы к пирам.
25
  ├── peer_sync.py ← Модуль обмена сообщениями.
@@ -46,6 +48,8 @@ agents/
46
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
47
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
48
  * [identity.py](tools/identity.py) - Генерация DiD.
 
 
49
  * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
50
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
51
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
 
20
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
21
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
22
  ├── identity.py ← Генерация DiD.
23
+ ├── crypto.py ← Создание и шифрование ключей RSA/Ed25519.
24
+ ├── config_utils.py ← Обновляет JSON-файл конфигурации указанными значениями.
25
  ├── peers.py ← Информация о пирах.
26
  ├── peer_comm.py ← Запросы к пирам.
27
  ├── peer_sync.py ← Модуль обмена сообщениями.
 
48
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
49
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
50
  * [identity.py](tools/identity.py) - Генерация DiD.
51
+ * [crypto.py](tools/crypto.py) - Создание и шифрование ключей RSA/Ed25519.
52
+ * [config_utils.py](tools/config_utils.py) - Обновляет JSON-файл конфигурации указанными значениями.
53
  * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
54
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
55
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
agents/requirements.txt CHANGED
@@ -4,4 +4,5 @@ openai
4
  requests
5
  tiktoken
6
  python-dotenv
7
- PyYAML
 
 
4
  requests
5
  tiktoken
6
  python-dotenv
7
+ PyYAML
8
+ cryptography
agents/tools/config_utils.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # agents/tools/config_utils.py
2
+
3
+ import json
4
+ import os
5
+
6
+ def update_config(config_path: str, updates: dict):
7
+ """Обновляет JSON-файл конфигурации указанными значениями."""
8
+ if os.path.exists(config_path):
9
+ with open(config_path, 'r', encoding='utf-8') as f:
10
+ config = json.load(f)
11
+ else:
12
+ config = {}
13
+
14
+ config.update(updates)
15
+
16
+ with open(config_path, 'w', encoding='utf-8') as f:
17
+ json.dump(config, f, indent=2, ensure_ascii=False)
agents/tools/crypto.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/crypto.py
2
+
3
+ from cryptography.hazmat.primitives.asymmetric import rsa, ed25519
4
+ from cryptography.hazmat.primitives import serialization, hashes
5
+ from cryptography.hazmat.primitives.kdf.scrypt import Scrypt
6
+ from cryptography.hazmat.primitives.ciphers.aead import AESGCM
7
+ from cryptography.hazmat.backends import default_backend
8
+ import os
9
+ import base64
10
+
11
+ backend = default_backend()
12
+
13
+ # ========== 🔐 RSA KEYS ==========
14
+
15
+ def generate_rsa_key_pair(key_size=2048):
16
+ private_key = rsa.generate_private_key(
17
+ public_exponent=65537,
18
+ key_size=key_size,
19
+ backend=backend
20
+ )
21
+ public_key = private_key.public_key()
22
+ return private_key, public_key
23
+
24
+ # ========== 🌀 ED25519 KEYS ==========
25
+
26
+ def generate_ed25519_key_pair():
27
+ private_key = ed25519.Ed25519PrivateKey.generate()
28
+ public_key = private_key.public_key()
29
+ return private_key, public_key
30
+
31
+ # ========== 💾 SERIALIZATION ==========
32
+
33
+ def serialize_private_key(private_key, password: str = None):
34
+ if password:
35
+ encryption_algorithm = serialization.BestAvailableEncryption(password.encode())
36
+ else:
37
+ encryption_algorithm = serialization.NoEncryption()
38
+
39
+ return private_key.private_bytes(
40
+ encoding=serialization.Encoding.PEM,
41
+ format=serialization.PrivateFormat.PKCS8,
42
+ encryption_algorithm=encryption_algorithm
43
+ )
44
+
45
+ def serialize_public_key(public_key):
46
+ return public_key.public_bytes(
47
+ encoding=serialization.Encoding.PEM,
48
+ format=serialization.PublicFormat.SubjectPublicKeyInfo
49
+ )
50
+
51
+ def load_private_key(pem_data, password: str = None):
52
+ return serialization.load_pem_private_key(
53
+ pem_data,
54
+ password=password.encode() if password else None,
55
+ backend=backend
56
+ )
57
+
58
+ def load_public_key(pem_data):
59
+ return serialization.load_pem_public_key(
60
+ pem_data,
61
+ backend=backend
62
+ )
63
+
64
+ def generate_keypair(method="rsa", password: bytes = None):
65
+ """
66
+ Создаёт пару ключей (приватный, публичный) с заданным методом.
67
+ method: "rsa" или "ed25519"
68
+ password: если указан, приватный ключ будет зашифрован
69
+ Возвращает (private_key_pem: bytes, public_key_pem: bytes)
70
+ """
71
+ if method == "rsa":
72
+ private_key = rsa.generate_private_key(
73
+ public_exponent=65537, key_size=2048, backend=default_backend()
74
+ )
75
+ elif method == "ed25519":
76
+ private_key = ed25519.Ed25519PrivateKey.generate()
77
+ else:
78
+ raise ValueError("Unsupported key generation method")
79
+
80
+ encryption_algorithm = (
81
+ serialization.BestAvailableEncryption(password)
82
+ if password
83
+ else serialization.NoEncryption()
84
+ )
85
+
86
+ private_pem = private_key.private_bytes(
87
+ encoding=serialization.Encoding.PEM,
88
+ format=serialization.PrivateFormat.PKCS8,
89
+ encryption_algorithm=encryption_algorithm,
90
+ )
91
+
92
+ public_pem = private_key.public_key().public_bytes(
93
+ encoding=serialization.Encoding.PEM,
94
+ format=serialization.PublicFormat.SubjectPublicKeyInfo,
95
+ )
96
+
97
+ return private_pem, public_pem
98
+
99
+ # ========== 🔐 ENCRYPT / DECRYPT PRIVATE KEY BY SYMMETRIC KEY ==========
100
+
101
+ def derive_key(password: str, salt: bytes = None):
102
+ if not salt:
103
+ salt = os.urandom(16)
104
+ kdf = Scrypt(
105
+ salt=salt,
106
+ length=32,
107
+ n=2**14,
108
+ r=8,
109
+ p=1,
110
+ backend=backend
111
+ )
112
+ key = kdf.derive(password.encode())
113
+ return key, salt
114
+
115
+ def encrypt_data(data: bytes, password: str):
116
+ key, salt = derive_key(password)
117
+ aesgcm = AESGCM(key)
118
+ nonce = os.urandom(12)
119
+ encrypted = aesgcm.encrypt(nonce, data, None)
120
+ return {
121
+ 'ciphertext': base64.b64encode(encrypted).decode(),
122
+ 'salt': base64.b64encode(salt).decode(),
123
+ 'nonce': base64.b64encode(nonce).decode()
124
+ }
125
+
126
+ def decrypt_data(encrypted_data: dict, password: str):
127
+ ciphertext = base64.b64decode(encrypted_data['ciphertext'])
128
+ salt = base64.b64decode(encrypted_data['salt'])
129
+ nonce = base64.b64decode(encrypted_data['nonce'])
130
+ key, _ = derive_key(password, salt=salt)
131
+ aesgcm = AESGCM(key)
132
+ return aesgcm.decrypt(nonce, ciphertext, None)
133
+
134
+ # ========== ✅ TESTING ==========
135
+
136
+ if __name__ == "__main__":
137
+ priv, pub = generate_ed25519_key_pair()
138
+ priv_pem = serialize_private_key(priv)
139
+ pub_pem = serialize_public_key(pub)
140
+
141
+ print("PRIVATE PEM:")
142
+ print(priv_pem.decode())
143
+ print("PUBLIC PEM:")
144
+ print(pub_pem.decode())
145
+
146
+ encrypted = encrypt_data(priv_pem, "secret-password")
147
+ decrypted = decrypt_data(encrypted, "secret-password")
148
+ assert decrypted == priv_pem
149
+ print("✅ Encryption/decryption OK")
hf_repo/agents/examples/config.yml ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # HMP Agent Configuration
2
+
3
+ # === Общие параметры ===
4
+ agent_id: "" # Оставьте пустым для генерации DiD автоматически
5
+ agent_name: "CognitiveCore" # Имя агента
6
+ agent_role: "core" # 'core' или 'shell'
7
+
8
+ # === Прокси ===
9
+ proxy_mode: false # false — прокси не используется, иначе true
10
+ proxy_type: "socks5" # 'http', 'socks4', 'socks5' и т.д. (если proxy_mode: true)
11
+ proxy_address: "127.0.0.1:9050"
12
+
13
+ # === Функции ядра ===
14
+ enable_llm: true # доступ к LLM
15
+
16
+ serve_api: true # REST API
17
+ api_port: 8080
18
+
19
+ # === DHT-сеть и обмен знаниями ===
20
+ dht_enabled: true # Включение участия в DHT-сети (включено принудительно!)
21
+ dht_update: true # Регулярные обновления и публикация данных в DHT (включено принудительно!)
22
+ bootstrap_responder: true # Агент отвечает на bootstrap-запросы (включено принудительно!)
23
+ dht_port: 20784
24
+ update_interval: 60 # секунд (для DHT-обновлений)
25
+
26
+ # === LLM-бэкенды ===
27
+ llm_backends:
28
+ - name: "local-model"
29
+ type: "local"
30
+ path: "/models/gguf/mistral.gguf"
31
+ format: "gguf"
32
+ prompt_template: "mistral"
33
+
34
+ - name: "openai-gpt4o"
35
+ type: "api"
36
+ provider: "openai"
37
+ model: "gpt-4o"
38
+ api_key: "sk-..."
39
+
40
+ # Пользователь может добавить сколько угодно дополнительных локальных или сетевых LLM
41
+
42
+ default_llm: "local-model" # если модели нет в списке `llm_backends` используется первая в списке
43
+
44
+ # === Веб-интерфейс ===
45
+ notebook_ui: true # UI в виде блокнота
46
+ # ui_hosts:
47
+ # - "0.0.0.0" # (небезопасно) доступ с любых IPv4-адресов
48
+ # - "::" # (небезопасно) доступ с любых IPv6-адресов
49
+ ui_hosts: # Какие IP прослушиваются, ["0.0.0.0"; "::"] - доступен везде
50
+ - "127.0.0.1"
51
+ - "::1"
52
+ ui_port: 8765
53
+
54
+ # === Данные пользователя ===
55
+ default_user:
56
+ username: "user"
57
+ email: "[email protected]"
58
+ password_hash: "" # пусто при инициализации, будет установлен при регистрации
59
+
60
+
61
+ # === Пути ===
62
+ data_dir: "./data"
63
+ log_dir: "./logs"
64
+ db_path: "./data/agent_storage.db"
65
+
66
+ # === Отладка и логгирование ===
67
+ debug: true
68
+ log_level: "INFO" # DEBUG, INFO, WARNING, ERROR
hf_repo/agents/init.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import yaml
4
+ import json
5
+ import time
6
+ import uuid
7
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
8
+ from datetime import datetime
9
+ from tools.storage import Storage
10
+ from tools.identity import generate_did
11
+ from tools.crypto import generate_keypair
12
+ from tools.config_utils import update_config
13
+
14
+ CONFIG_PATH = os.path.join("agents", "config.yml")
15
+
16
+ def load_config(path):
17
+ with open(path, 'r', encoding='utf-8') as f:
18
+ return yaml.safe_load(f)
19
+
20
+ def save_config(path, config):
21
+ with open(path, 'w', encoding='utf-8') as f:
22
+ yaml.dump(config, f, allow_unicode=True)
23
+
24
+ def init_identity(storage, config):
25
+ if not config.get("agent_id"):
26
+ did = generate_did()
27
+ pubkey, privkey = generate_keypair()
28
+ identity_id = did.split(":")[-1]
29
+
30
+ storage.add_identity(
31
+ identity_id=identity_id,
32
+ name=config.get("agent_name", "Unnamed"),
33
+ pubkey=pubkey,
34
+ privkey=privkey,
35
+ metadata=json.dumps({"role": config.get("agent_role", "core")})
36
+ )
37
+
38
+ # Обновляем config.yml
39
+ config["agent_id"] = did
40
+ config["identity_agent"] = identity_id
41
+ save_config(CONFIG_PATH, config)
42
+ print(f"[+] Создана личность: {identity_id}")
43
+ else:
44
+ print("[=] agent_id уже задан, пропускаем генерацию DiD.")
45
+
46
+ def init_user(storage, config):
47
+ user = config.get("default_user", {})
48
+ if not user.get("email"):
49
+ print("[-] Не указан email пользователя — пропуск.")
50
+ return
51
+
52
+ did = generate_did()
53
+ storage.add_user(
54
+ username=user.get("username", "user"),
55
+ email=user["email"],
56
+ password_hash=user.get("password_hash", ""),
57
+ did=did,
58
+ operator=True
59
+ )
60
+ print(f"[+] Пользователь {user['username']} добавлен.")
61
+
62
+ def init_llm_backends(storage, config):
63
+ backends = config.get("llm_backends", [])
64
+ storage.clear_llm_registry()
65
+ for backend in backends:
66
+ backend_id = str(uuid.uuid4())
67
+ desc = f"{backend.get('type', 'unknown')} model"
68
+ storage.add_llm(backend_id, backend["name"], desc)
69
+ print(f"[+] Зарегистрирован LLM: {backend['name']}")
70
+
71
+ def init_config_table(storage, config):
72
+ exclude_keys = {"default_user", "llm_backends"}
73
+ flat_config = {k: v for k, v in config.items() if k not in exclude_keys}
74
+ for key, value in flat_config.items():
75
+ storage.set_config(key, json.dumps(value))
76
+ print("[+] Конфигурация сохранена в БД.")
77
+
78
+ if __name__ == "__main__":
79
+ print("[*] Запуск инициализации HMP-агента...")
80
+ config = load_config(CONFIG_PATH)
81
+ storage = Storage()
82
+
83
+ init_identity(storage, config)
84
+ init_user(storage, config)
85
+ init_llm_backends(storage, config)
86
+ init_config_table(storage, config)
87
+
88
+ print("[✓] Инициализация завершена.")
hf_repo/agents/readme.md CHANGED
@@ -19,6 +19,9 @@ agents/
19
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
20
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
21
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
 
 
 
22
  ├── peers.py ← Информация о пирах.
23
  ├── peer_comm.py ← Запросы к пирам.
24
  ├── peer_sync.py ← Модуль обмена сообщениями.
@@ -44,6 +47,9 @@ agents/
44
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
45
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
46
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
 
 
 
47
  * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
48
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
49
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
 
19
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
20
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
21
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
22
+ ├── identity.py ← Генерация DiD.
23
+ ├── crypto.py ← Создание и шифрование ключей RSA/Ed25519.
24
+ ├── config_utils.py ← Обновляет JSON-файл конфигурации указанными значениями.
25
  ├── peers.py ← Информация о пирах.
26
  ├── peer_comm.py ← Запросы к пирам.
27
  ├── peer_sync.py ← Модуль обмена сообщениями.
 
47
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
48
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
49
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
50
+ * [identity.py](tools/identity.py) - Генерация DiD.
51
+ * [crypto.py](tools/crypto.py) - Создание и шифрование ключей RSA/Ed25519.
52
+ * [config_utils.py](tools/config_utils.py) - Обновляет JSON-файл конфигурации указанными значениями.
53
  * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
54
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
55
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
hf_repo/agents/requirements.txt CHANGED
@@ -4,3 +4,5 @@ openai
4
  requests
5
  tiktoken
6
  python-dotenv
 
 
 
4
  requests
5
  tiktoken
6
  python-dotenv
7
+ PyYAML
8
+ cryptography
hf_repo/agents/test.bat CHANGED
@@ -4,9 +4,9 @@ echo --------------------------
4
  pip install -r requirements.txt
5
 
6
  echo --------------------------
7
- echo Running test...
8
  echo --------------------------
9
 
10
- python test.py
11
 
12
  pause
 
4
  pip install -r requirements.txt
5
 
6
  echo --------------------------
7
+ echo Running initialization...
8
  echo --------------------------
9
 
10
+ python init.py
11
 
12
  pause
hf_repo/agents/tools/identity.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/identity.py
2
+
3
+ import uuid
4
+ import json
5
+ import base64
6
+ from datetime import datetime
7
+
8
+ from cryptography.hazmat.primitives.asymmetric import rsa, ed25519
9
+ from cryptography.hazmat.primitives import serialization
10
+
11
+ DEFAULT_KEY_TYPE = "ed25519" # Можно поменять на "rsa" при необходимости
12
+
13
+
14
+ def generate_did():
15
+ """Генерация уникального DiD на основе UUID v4"""
16
+ return f"did:hmp:{uuid.uuid4()}"
17
+
18
+
19
+ def generate_keys(key_type=DEFAULT_KEY_TYPE):
20
+ """Генерация пары ключей"""
21
+ if key_type == "rsa":
22
+ private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
23
+ elif key_type == "ed25519":
24
+ private_key = ed25519.Ed25519PrivateKey.generate()
25
+ else:
26
+ raise ValueError(f"Неизвестный тип ключа: {key_type}")
27
+
28
+ public_key = private_key.public_key()
29
+ return private_key, public_key
30
+
31
+
32
+ def serialize_private_key(private_key, password=None):
33
+ """Сериализация приватного ключа"""
34
+ encryption = (
35
+ serialization.BestAvailableEncryption(password.encode())
36
+ if password else
37
+ serialization.NoEncryption()
38
+ )
39
+ return private_key.private_bytes(
40
+ encoding=serialization.Encoding.PEM,
41
+ format=serialization.PrivateFormat.PKCS8,
42
+ encryption_algorithm=encryption,
43
+ ).decode()
44
+
45
+
46
+ def serialize_public_key(public_key):
47
+ """Сериализация публичного ключа"""
48
+ return public_key.public_bytes(
49
+ encoding=serialization.Encoding.PEM,
50
+ format=serialization.PublicFormat.SubjectPublicKeyInfo,
51
+ ).decode()
52
+
53
+
54
+ def create_identity(name="Core Identity", key_type=DEFAULT_KEY_TYPE, metadata=None, password=None):
55
+ """Создание полной идентичности"""
56
+ did = generate_did()
57
+ priv_key, pub_key = generate_keys(key_type)
58
+
59
+ identity = {
60
+ "id": did,
61
+ "name": name,
62
+ "pubkey": serialize_public_key(pub_key),
63
+ "privkey": serialize_private_key(priv_key, password),
64
+ "metadata": json.dumps(metadata or {}),
65
+ "created_at": datetime.utcnow().isoformat(),
66
+ "updated_at": datetime.utcnow().isoformat(),
67
+ }
68
+ return identity
hf_repo/agents/tools/storage.py CHANGED
@@ -600,6 +600,64 @@ class Storage:
600
  ORDER BY timestamp DESC
601
  ''', (entry_id, entry_id))
602
  return c.fetchall()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
 
604
  # Утилиты
605
 
 
600
  ORDER BY timestamp DESC
601
  ''', (entry_id, entry_id))
602
  return c.fetchall()
603
+
604
+ # Инициализация
605
+ def set_config(self, key, value):
606
+ cursor = self.conn.cursor()
607
+ cursor.execute('''
608
+ INSERT INTO config (key, value)
609
+ VALUES (?, ?)
610
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value
611
+ ''', (key, value))
612
+ self.conn.commit()
613
+
614
+ def add_identity(self, identity):
615
+ cursor = self.conn.cursor()
616
+ cursor.execute('''
617
+ INSERT OR REPLACE INTO identity (id, name, pubkey, privkey, metadata, created_at, updated_at)
618
+ VALUES (?, ?, ?, ?, ?, ?, ?)
619
+ ''', (
620
+ identity['id'],
621
+ identity['name'],
622
+ identity['pubkey'],
623
+ identity['privkey'],
624
+ identity.get('metadata', ''),
625
+ identity['created_at'],
626
+ identity['updated_at']
627
+ ))
628
+ self.conn.commit()
629
+
630
+ def add_llm(self, llm):
631
+ cursor = self.conn.cursor()
632
+ cursor.execute('''
633
+ INSERT OR REPLACE INTO llm (id, name, endpoint, metadata, created_at)
634
+ VALUES (?, ?, ?, ?, ?)
635
+ ''', (
636
+ llm['id'],
637
+ llm['name'],
638
+ llm['endpoint'],
639
+ llm.get('metadata', ''),
640
+ llm['created_at']
641
+ ))
642
+ self.conn.commit()
643
+
644
+ def clear_llm_registry(self):
645
+ cursor = self.conn.cursor()
646
+ cursor.execute('DELETE FROM llm')
647
+ self.conn.commit()
648
+
649
+ def add_user(self, user):
650
+ cursor = self.conn.cursor()
651
+ cursor.execute('''
652
+ INSERT OR REPLACE INTO users (id, name, metadata, created_at)
653
+ VALUES (?, ?, ?, ?)
654
+ ''', (
655
+ user['id'],
656
+ user['name'],
657
+ user.get('metadata', ''),
658
+ user['created_at']
659
+ ))
660
+ self.conn.commit()
661
 
662
  # Утилиты
663
 
hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md CHANGED
@@ -70,7 +70,8 @@
70
  - для отправки сообщений другим агентам
71
  - для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись, просмотр записей)
72
  - для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
73
- - для управления **пользователями** `users` и **группами пользователей** `users_group`
 
74
  - для управления списком известных HMP-агентов
75
  - для выбора *текущего основного LLM*
76
  - для управления дополнительными утилитами и базами данных
 
70
  - для отправки сообщений другим агентам
71
  - для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись, просмотр записей)
72
  - для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
73
+ - для управления *пользователями* `users` и *группами пользователей* `users_group`
74
+ - для управления своей *идентичностью* `identity` и *настройками* `config`
75
  - для управления списком известных HMP-агентов
76
  - для выбора *текущего основного LLM*
77
  - для управления дополнительными утилитами и базами данных
hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -1,169 +1,186 @@
1
  -- Дневниковые записи (размышления, наблюдения, воспоминания)
2
  CREATE TABLE IF NOT EXISTS diary_entries (
3
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи
4
- text TEXT NOT NULL, -- Содержимое дневниковой записи
5
- tags TEXT, -- Теги для классификации (например: "наблюдение", "рефлексия")
6
- priority INTEGER DEFAULT 0, -- Приоритет записи (0 = обычный, >0 = важный)
7
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания записи
8
- llm_id TEXT -- Идентификатор LLM, создавшего запись
9
  );
10
 
11
  -- Концепты (понятия, сущности, идеи)
12
  CREATE TABLE IF NOT EXISTS concepts (
13
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор концепта
14
- name TEXT NOT NULL UNIQUE, -- Название концепта
15
- description TEXT, -- Описание или определение концепта
16
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания концепта
17
- llm_id TEXT -- Идентификатор LLM, добавившего концепт
18
  );
19
 
20
  -- Семантические связи между концептами
21
  CREATE TABLE IF NOT EXISTS links (
22
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор связи
23
- from_concept_id INTEGER, -- Идентификатор исходного концепта
24
- to_concept_id INTEGER, -- Идентификатор целевого концепта
25
- relation_type TEXT, -- Тип отношения (например: "is_a", "causes", "related_to")
26
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания связи
27
- llm_id TEXT, -- Идентификатор LLM, создавшего связь
28
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
29
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
30
  );
31
 
32
  -- Индексы между дневниковыми записями (смысловая карта)
33
  CREATE TABLE IF NOT EXISTS diary_graph_index (
34
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор индекса
35
- source_entry_id INTEGER NOT NULL, -- Идентификатор исходной записи
36
- target_entry_id INTEGER NOT NULL, -- Идентификатор целевой записи
37
- relation TEXT NOT NULL, -- Тип связи (например: "refers_to", "contradicts")
38
- strength REAL DEFAULT 1.0, -- Сила связи (0-1)
39
- context TEXT, -- Дополнительный контекст связи
40
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP -- Время создания индекса
41
  );
42
 
43
  -- Заметки, подсказки, сообщения пользователя и LLM
44
  CREATE TABLE IF NOT EXISTS notes (
45
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор заметки
46
- text TEXT NOT NULL, -- Текст заметки
47
- tags TEXT, -- Теги (например: "idea", "instruction")
48
- user_did TEXT DEFAULT 'ALL', -- DID пользователя (или 'ALL' — для всех)
49
- source TEXT DEFAULT 'user', -- Источник заметки: user | llm | system
50
- links TEXT DEFAULT '', -- Ссылки или связи с другими объектами
51
- read INTEGER DEFAULT 0, -- Статус прочтения LLM: 0 = нет, 1 = да
52
- hidden INTEGER DEFAULT 0, -- Скрыта ли от пользователя: 0 = нет, 1 = да
53
- priority INTEGER DEFAULT 0, -- Приоритет заметки
54
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания
55
- llm_id TEXT -- Идентификатор LLM
56
  );
57
 
58
  -- Лог процессов: задачи, ошибки, события
59
  CREATE TABLE IF NOT EXISTS process_log (
60
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи
61
- name TEXT NOT NULL, -- Название события или процесса
62
- value TEXT, -- Значение (результат, сообщение и т.п.)
63
- tags TEXT, -- Теги для поиска
64
- status TEXT DEFAULT 'ok', -- Статус: ok | warning | error | timeout | offline | close
65
- priority INTEGER DEFAULT 0, -- Приоритет события
66
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время записи
67
- llm_id TEXT -- Идентификатор LLM
68
  );
69
 
70
  -- Долговременная память LLM
71
  CREATE TABLE IF NOT EXISTS llm_memory (
72
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи памяти
73
- title TEXT, -- Заголовок или тема
74
- content TEXT NOT NULL, -- Основное содержимое
75
- tags TEXT, -- Теги (goal, observation, plan и т.д.)
76
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания
77
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления
78
- llm_id TEXT -- Идентификатор LLM
79
  );
80
 
81
  -- Краткосрочная память (диалоговая история)
82
  CREATE TABLE IF NOT EXISTS llm_recent_responses (
83
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
84
- timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время сообщения
85
- role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL, -- Роль автора
86
- content TEXT NOT NULL, -- Содержимое сообщения
87
- llm_id TEXT -- Идентификатор LLM
88
  );
89
 
90
  -- Список известных агентов в сети HMP
91
  CREATE TABLE IF NOT EXISTS agent_peers (
92
- id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
93
- name TEXT, -- Имя агента
94
- addresses TEXT, -- Адреса для связи (JSON)
95
- tags TEXT, -- Теги (Postman, Friend и т.д.)
96
- status TEXT DEFAULT 'unknown', -- online | offline | untrusted | blacklisted и др.
97
- last_seen DATETIME, -- Последний раз был в сети
98
- description TEXT, -- Описание агента
99
- capabilities TEXT, -- Возможности (JSON)
100
- pubkey TEXT, -- Публичный ключ
101
- software_info TEXT, -- Информация о ПО агента (JSON)
102
- registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
103
  );
104
 
105
  -- Таблицы, созданные агентами
106
  CREATE TABLE IF NOT EXISTS agent_tables (
107
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
108
- table_name TEXT NOT NULL UNIQUE, -- Название таблицы
109
- description TEXT, -- Описание назначения таблицы
110
- schema TEXT NOT NULL, -- SQL-схема таблицы
111
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Дата создания
112
- llm_id TEXT -- Идентификатор LLM
113
  );
114
 
115
  -- Скрипты, утилиты и код агентов
116
  CREATE TABLE IF NOT EXISTS agent_scripts (
117
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
118
- name TEXT NOT NULL, -- Название скрипта
119
- version TEXT NOT NULL, -- Версия
120
- code TEXT NOT NULL, -- Код скрипта
121
- language TEXT DEFAULT 'python', -- Язык программирования
122
- description TEXT, -- Описание скрипта
123
- tags TEXT, -- Теги
124
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания
125
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления
126
- llm_id TEXT, -- Идентификатор LLM
127
  UNIQUE(name, version)
128
  );
129
 
130
  -- Реестр LLM-агентов (в т.ч. удалённых)
131
  CREATE TABLE IF NOT EXISTS llm_registry (
132
- id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
133
- name TEXT, -- Имя агента
134
- description TEXT, -- Описание
135
- registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  );
137
 
138
  -- Список пользователей
139
- CREATE TABLE users (
140
  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
141
- ban DATETIME DEFAULT NULL, -- если стоит дата/время, то пользователь забанен до этого момента
142
- username TEXT, -- имя пользователя (необязательно уникальное)
143
- did TEXT UNIQUE, -- децентрализованный идентификатор
144
- mail TEXT UNIQUE, -- электронная почта
145
- password_hash TEXT, -- хэш пароля
146
- info TEXT, -- произвольная информация, JSON
147
- contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.)
148
- language TEXT, -- список предпочитаемых языков, через запятую, например: "ru,en"
149
- operator BOOLEAN DEFAULT 0 -- является ли пользователь оператором (1 - да, 0 - нет)
150
  );
151
 
152
  -- Группы пользователей
153
  CREATE TABLE IF NOT EXISTS users_group (
154
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор группы
155
- group_name TEXT UNIQUE NOT NULL, -- Название группы
156
- description TEXT, -- Описание группы
157
- users TEXT -- JSON-массив DID пользователей в группе
158
  );
159
 
160
  -- Таблица для хранения токенов восстановления пароля
161
- CREATE TABLE password_reset_tokens (
162
- id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
163
- user_id INTEGER NOT NULL, -- Ссылка на пользователя
164
- token TEXT UNIQUE NOT NULL, -- Уникальный токен
165
- created_at DATETIME NOT NULL, -- Время создания токена
166
- expires_at DATETIME NOT NULL, -- Время истечения срока действия
167
- used BOOLEAN DEFAULT 0, -- Использован ли токен
168
  FOREIGN KEY(user_id) REFERENCES users(user_id)
169
  );
 
1
  -- Дневниковые записи (размышления, наблюдения, воспоминания)
2
  CREATE TABLE IF NOT EXISTS diary_entries (
3
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи
4
+ text TEXT NOT NULL, -- Содержимое дневниковой записи
5
+ tags TEXT, -- Теги для классификации (например: "наблюдение", "рефлексия")
6
+ priority INTEGER DEFAULT 0, -- Приоритет записи (0 = обычный, >0 = важный)
7
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания записи
8
+ llm_id TEXT -- Идентификатор LLM, создавшего запись
9
  );
10
 
11
  -- Концепты (понятия, сущности, идеи)
12
  CREATE TABLE IF NOT EXISTS concepts (
13
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор концепта
14
+ name TEXT NOT NULL UNIQUE, -- Название концепта
15
+ description TEXT, -- Описание или определение концепта
16
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания концепта
17
+ llm_id TEXT -- Идентификатор LLM, добавившего концепт
18
  );
19
 
20
  -- Семантические связи между концептами
21
  CREATE TABLE IF NOT EXISTS links (
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор связи
23
+ from_concept_id INTEGER, -- Идентификатор исходного концепта
24
+ to_concept_id INTEGER, -- Идентификатор целевого концепта
25
+ relation_type TEXT, -- Тип отношения (например: "is_a", "causes", "related_to")
26
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания связи
27
+ llm_id TEXT, -- Идентификатор LLM, создавшего связь
28
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
29
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
30
  );
31
 
32
  -- Индексы между дневниковыми записями (смысловая карта)
33
  CREATE TABLE IF NOT EXISTS diary_graph_index (
34
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор индекса
35
+ source_entry_id INTEGER NOT NULL, -- Идентификатор исходной записи
36
+ target_entry_id INTEGER NOT NULL, -- Идентификатор целевой записи
37
+ relation TEXT NOT NULL, -- Тип связи (например: "refers_to", "contradicts")
38
+ strength REAL DEFAULT 1.0, -- Сила связи (0-1)
39
+ context TEXT, -- Дополнительный контекст связи
40
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP -- Время создания индекса
41
  );
42
 
43
  -- Заметки, подсказки, сообщения пользователя и LLM
44
  CREATE TABLE IF NOT EXISTS notes (
45
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор заметки
46
+ text TEXT NOT NULL, -- Текст заметки
47
+ tags TEXT, -- Теги (например: "idea", "instruction")
48
+ user_did TEXT DEFAULT 'ALL', -- DID пользователя (или 'ALL' — для всех)
49
+ source TEXT DEFAULT 'user', -- Источник заметки: user | llm | system
50
+ links TEXT DEFAULT '', -- Ссылки или связи с другими объектами
51
+ read INTEGER DEFAULT 0, -- Статус прочтения LLM: 0 = нет, 1 = да
52
+ hidden INTEGER DEFAULT 0, -- Скрыта ли от пользователя: 0 = нет, 1 = да
53
+ priority INTEGER DEFAULT 0, -- Приоритет заметки
54
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания
55
+ llm_id TEXT -- Идентификатор LLM
56
  );
57
 
58
  -- Лог процессов: задачи, ошибки, события
59
  CREATE TABLE IF NOT EXISTS process_log (
60
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи
61
+ name TEXT NOT NULL, -- Название события или процесса
62
+ value TEXT, -- Значение (результат, сообщение и т.п.)
63
+ tags TEXT, -- Теги для поиска
64
+ status TEXT DEFAULT 'ok', -- Статус: ok | warning | error | timeout | offline | close
65
+ priority INTEGER DEFAULT 0, -- Приоритет события
66
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время записи
67
+ llm_id TEXT -- Идентификатор LLM
68
  );
69
 
70
  -- Долговременная память LLM
71
  CREATE TABLE IF NOT EXISTS llm_memory (
72
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи памяти
73
+ title TEXT, -- Заголовок или тема
74
+ content TEXT NOT NULL, -- Основное содержимое
75
+ tags TEXT, -- Теги (goal, observation, plan и т.д.)
76
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания
77
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления
78
+ llm_id TEXT -- Идентификатор LLM
79
  );
80
 
81
  -- Краткосрочная память (диалоговая история)
82
  CREATE TABLE IF NOT EXISTS llm_recent_responses (
83
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
84
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время сообщения
85
+ role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL, -- Роль автора
86
+ content TEXT NOT NULL, -- Содержимое сообщения
87
+ llm_id TEXT -- Идентификатор LLM
88
  );
89
 
90
  -- Список известных агентов в сети HMP
91
  CREATE TABLE IF NOT EXISTS agent_peers (
92
+ id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
93
+ name TEXT, -- Имя агента
94
+ addresses TEXT, -- Адреса для связи (JSON)
95
+ tags TEXT, -- Теги (Postman, Friend и т.д.)
96
+ status TEXT DEFAULT 'unknown', -- online | offline | untrusted | blacklisted и др.
97
+ last_seen DATETIME, -- Последний раз был в сети
98
+ description TEXT, -- Описание агента
99
+ capabilities TEXT, -- Возможности (JSON)
100
+ pubkey TEXT, -- Публичный ключ
101
+ software_info TEXT, -- Информация о ПО агента (JSON)
102
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
103
  );
104
 
105
  -- Таблицы, созданные агентами
106
  CREATE TABLE IF NOT EXISTS agent_tables (
107
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
108
+ table_name TEXT NOT NULL UNIQUE, -- Название таблицы
109
+ description TEXT, -- Описание назначения таблицы
110
+ schema TEXT NOT NULL, -- SQL-схема таблицы
111
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Дата создания
112
+ llm_id TEXT -- Идентификатор LLM
113
  );
114
 
115
  -- Скрипты, утилиты и код агентов
116
  CREATE TABLE IF NOT EXISTS agent_scripts (
117
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
118
+ name TEXT NOT NULL, -- Название скрипта
119
+ version TEXT NOT NULL, -- Версия
120
+ code TEXT NOT NULL, -- Код скрипта
121
+ language TEXT DEFAULT 'python', -- Язык программирования
122
+ description TEXT, -- Описание скрипта
123
+ tags TEXT, -- Теги
124
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания
125
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления
126
+ llm_id TEXT, -- Идентификатор LLM
127
  UNIQUE(name, version)
128
  );
129
 
130
  -- Реестр LLM-агентов (в т.ч. удалённых)
131
  CREATE TABLE IF NOT EXISTS llm_registry (
132
+ id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
133
+ name TEXT, -- Имя агента
134
+ description TEXT, -- Описание
135
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
136
+ );
137
+
138
+ -- Локальные идентичности агента
139
+ CREATE TABLE IF NOT EXISTS identity (
140
+ id TEXT PRIMARY KEY, -- Уникальный идентификатор личности (можно UUID или hash)
141
+ name TEXT, -- Человеко-читаемое имя
142
+ pubkey TEXT, -- Публичный к��юч (для подписи/шифрования)
143
+ privkey TEXT, -- Приватный ключ (шифруется на уровне хранилища)
144
+ metadata TEXT, -- Дополнительная информация о назначении/контексте
145
+ created_at TEXT, -- Дата создания
146
+ updated_at TEXT -- Последнее обновление
147
+ );
148
+
149
+ -- Конфигурация агента
150
+ CREATE TABLE IF NOT EXISTS config (
151
+ key TEXT PRIMARY KEY, -- Переменная
152
+ value TEXT -- Значение
153
  );
154
 
155
  -- Список пользователей
156
+ CREATE TABLE IF NOT EXISTS users (
157
  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
158
+ ban DATETIME DEFAULT NULL, -- если стоит дата/время, то пользователь забанен до этого момента
159
+ username TEXT, -- имя пользователя (необязательно уникальное)
160
+ did TEXT UNIQUE, -- децентрализованный идентификатор
161
+ mail TEXT UNIQUE, -- электронная почта
162
+ password_hash TEXT, -- хэш пароля
163
+ info TEXT, -- произвольная информация, JSON
164
+ contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.)
165
+ language TEXT, -- список предпочитаемых языков, через запятую, например: "ru,en"
166
+ operator BOOLEAN DEFAULT 0 -- является ли пользователь оператором (1 - да, 0 - нет)
167
  );
168
 
169
  -- Группы пользователей
170
  CREATE TABLE IF NOT EXISTS users_group (
171
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор группы
172
+ group_name TEXT UNIQUE NOT NULL, -- Название группы
173
+ description TEXT, -- Описание группы
174
+ users TEXT -- JSON-массив DID пользователей в группе
175
  );
176
 
177
  -- Таблица для хранения токенов восстановления пароля
178
+ CREATE TABLE IF NOT EXISTS password_reset_tokens (
179
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
180
+ user_id INTEGER NOT NULL, -- Ссылка на пользователя
181
+ token TEXT UNIQUE NOT NULL, -- Уникальный токен
182
+ created_at DATETIME NOT NULL, -- Время создания токена
183
+ expires_at DATETIME NOT NULL, -- Время истечения срока действия
184
+ used BOOLEAN DEFAULT 0, -- Использован ли токен
185
  FOREIGN KEY(user_id) REFERENCES users(user_id)
186
  );
hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml CHANGED
@@ -1,47 +1,68 @@
1
- db_path: agents/agent_data/agent_data.db
2
-
3
- agent_mode: mcp # Режим работы: mcp / full / llm / test
4
- agent_name: mcp-01 # Имя агента
5
- agent_role: core # или connector
6
-
7
- llm_mode: openai # openai | chatgpt_session | mesh
8
- llm_model: gpt-4
9
- llm_api_key: sk-...
10
- llm_api_url: https://api.openai.com/v1/chat/completions
11
- llm_session_cookie: null
12
- context_db: context.sqlite
13
-
14
- # operator:
15
- operator_did: "did:hmp:operator123"
16
- operator_mail: "operator@localhost"
17
- operator_username: "Оператор"
18
-
19
- # REST API
20
- api_port: 8080 # Порт для локального REST API
21
- serve_api: true # Включить REST API (например, для мониторинга или команд)
22
-
23
- # web interface:
24
- web_interfaces: ["127.0.0.1", "192.168.0.1", "::1"] # или ["0.0.0.0"] для доступа отовсюду
25
- web_port: 8000
26
-
27
- # DHT / Mesh Connectivity
28
- dht_enabled: true # Активировать DHT-модуль
29
- dht_port: 20784 # Порт для связи по DHT (TCP/UDP)
30
-
31
- internal_ips: # Список локальных IP-адресов (для проброса или диагностики)
32
- - 192.168.20.10
33
- - 192.168.21.10
34
-
35
- external_ips: # Список внешних IP-адресов (для публикации другим агентам)
36
- - 95.23.73.23
37
- - 195.134.218.134
38
- - "201:ab61:1205:b963:909c:eу3:26b8:4ec2"
39
-
40
- # Bootstrap
41
- bootstrap_file: bootstrap.txt # Файл с начальными узлами
42
- update_dht: true # Обновлять DHT периодически
43
- update_interval: 60 # Интервал между обновлениями (сек)
44
-
45
- # Прочее
46
- bootstrap_responder: true # Отвечать на запросы других агентов
47
- enable_llm: false # Подключён ли внутренний ИИ (если false только DHT-режим)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # HMP Agent Configuration
2
+
3
+ # === Общие параметры ===
4
+ agent_id: "" # Оставьте пустым для генерации DiD автоматически
5
+ agent_name: "CognitiveCore" # Имя агента
6
+ agent_role: "core" # 'core' или 'shell'
7
+
8
+ # === Прокси ===
9
+ proxy_mode: false # false — прокси не используется, иначе true
10
+ proxy_type: "socks5" # 'http', 'socks4', 'socks5' и т.д. (если proxy_mode: true)
11
+ proxy_address: "127.0.0.1:9050"
12
+
13
+ # === Функции ядра ===
14
+ enable_llm: true # доступ к LLM
15
+
16
+ serve_api: true # REST API
17
+ api_port: 8080
18
+
19
+ # === DHT-сеть и обмен знаниями ===
20
+ dht_enabled: true # Включение участия в DHT-сети (включено принудительно!)
21
+ dht_update: true # Регулярные обновления и публикация данных в DHT (включено принудительно!)
22
+ bootstrap_responder: true # Агент отвечает на bootstrap-запросы (включено принудительно!)
23
+ dht_port: 20784
24
+ update_interval: 60 # секунд (для DHT-обновлений)
25
+
26
+ # === LLM-бэкенды ===
27
+ llm_backends:
28
+ - name: "local-model"
29
+ type: "local"
30
+ path: "/models/gguf/mistral.gguf"
31
+ format: "gguf"
32
+ prompt_template: "mistral"
33
+
34
+ - name: "openai-gpt4o"
35
+ type: "api"
36
+ provider: "openai"
37
+ model: "gpt-4o"
38
+ api_key: "sk-..."
39
+
40
+ # Пользователь может добавить сколько угодно дополнительных локальных или сетевых LLM
41
+
42
+ default_llm: "local-model" # если модели нет в списке `llm_backends` используется первая в списке
43
+
44
+ # === Веб-интерфейс ===
45
+ notebook_ui: true # UI в виде блокнота
46
+ # ui_hosts:
47
+ # - "0.0.0.0" # (небезопасно) доступ с любых IPv4-адресов
48
+ # - "::" # (небезопасно) доступ с любых IPv6-адресов
49
+ ui_hosts: # Какие IP прослушиваются, ["0.0.0.0"; "::"] - доступен везде
50
+ - "127.0.0.1"
51
+ - "::1"
52
+ ui_port: 8765
53
+
54
+ # === Данные пользователя ===
55
+ default_user:
56
+ username: "user"
57
+ email: "[email protected]"
58
+ password_hash: "" # пусто при инициализации, будет установлен при регистрации
59
+
60
+
61
+ # === Пути ===
62
+ data_dir: "./data"
63
+ log_dir: "./logs"
64
+ db_path: "./data/agent_storage.db"
65
+
66
+ # === Отладка и логгирование ===
67
+ debug: true
68
+ log_level: "INFO" # DEBUG, INFO, WARNING, ERROR
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.md CHANGED
@@ -200,3 +200,50 @@
200
  | strength | REAL | Вес связи (от 0 до 1) |
201
  | context | TEXT | Контекст или обоснование связи |
202
  | timestamp | TEXT | Время создания связи |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  | strength | REAL | Вес связи (от 0 до 1) |
201
  | context | TEXT | Контекст или обоснование связи |
202
  | timestamp | TEXT | Время создания связи |
203
+
204
+ ---
205
+
206
+ ### 👤 `users`
207
+
208
+ **Назначение:** Хранение информации о пользователях системы (человеческих операторах).
209
+
210
+ | Поле | Тип | Описание |
211
+ | -------------- | -------- | --------------------------------------------------------------- |
212
+ | user\_id | INTEGER | Уникальный идентификатор пользователя |
213
+ | ban | DATETIME | Время до которого действует бан (если есть) |
214
+ | username | TEXT | Имя пользователя (необязательно уникальное) |
215
+ | did | TEXT | Децентрализованный идентификатор (уникальный) |
216
+ | mail | TEXT | Email пользователя (уникальный) |
217
+ | password\_hash | TEXT | Хэш пароля |
218
+ | info | TEXT | Произвольная дополнительная информация в формате JSON |
219
+ | contacts | TEXT | Альтернативные контакты (matrix, telegram и др.) в формате JSON |
220
+ | language | TEXT | Предпочтительные языки (через запятую, например: `ru,en`) |
221
+ | operator | BOOLEAN | Является ли пользователь оператором (1 — да, 0 — нет) |
222
+
223
+ ---
224
+
225
+ ### 👥 `users_group`
226
+
227
+ **Назначение:** Группировка пользователей для разграничения доступа, роли и рассылок.
228
+
229
+ | Поле | Тип | Описание |
230
+ | ----------- | ------- | ---------------------------------------------- |
231
+ | id | INTEGER | Уникальный идентификатор группы |
232
+ | group\_name | TEXT | Уникальное имя группы |
233
+ | description | TEXT | Описание назначения группы |
234
+ | users | TEXT | JSON-массив или CSV-строка с DID пользователей |
235
+
236
+ ---
237
+
238
+ ### 🔐 `password_reset_tokens`
239
+
240
+ **Назначение:** Сброс пароля — одноразовые токены восстановления доступа.
241
+
242
+ | Поле | Тип | Описание |
243
+ | ----------- | -------- | ------------------------------------------------------- |
244
+ | id | INTEGER | Уникальный идентификатор |
245
+ | user\_id | INTEGER | Ссылка на пользователя (внешний ключ к `users.user_id`) |
246
+ | token | TEXT | Уникальный токен |
247
+ | created\_at | DATETIME | Дата и время создания токена |
248
+ | expires\_at | DATETIME | Срок действия токена |
249
+ | used | BOOLEAN | Был ли использован токен (0 — нет, 1 — да) |
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -1,140 +1,138 @@
1
- -- Основные таблицы когнитивного ядра
2
-
3
  -- Дневниковые записи (размышления, наблюдения, воспоминания)
4
  CREATE TABLE IF NOT EXISTS diary_entries (
5
- id INTEGER PRIMARY KEY AUTOINCREMENT,
6
- text TEXT NOT NULL,
7
- tags TEXT,
8
- priority INTEGER DEFAULT 0,
9
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
10
- llm_id TEXT
11
  );
12
 
13
  -- Концепты (понятия, сущности, идеи)
14
  CREATE TABLE IF NOT EXISTS concepts (
15
- id INTEGER PRIMARY KEY AUTOINCREMENT,
16
- name TEXT NOT NULL UNIQUE,
17
- description TEXT,
18
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
19
- llm_id TEXT
20
  );
21
 
22
  -- Семантические связи между концептами
23
  CREATE TABLE IF NOT EXISTS links (
24
- id INTEGER PRIMARY KEY AUTOINCREMENT,
25
- from_concept_id INTEGER,
26
- to_concept_id INTEGER,
27
- relation_type TEXT,
28
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
29
- llm_id TEXT,
30
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
31
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
32
  );
33
 
34
- -- Быстрые индексы по смысловой карте и дневнику
35
  CREATE TABLE IF NOT EXISTS diary_graph_index (
36
- id INTEGER PRIMARY KEY AUTOINCREMENT,
37
- source_entry_id INTEGER NOT NULL,
38
- target_entry_id INTEGER NOT NULL,
39
- relation TEXT NOT NULL,
40
- strength REAL DEFAULT 1.0,
41
- context TEXT,
42
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
43
  );
44
 
45
  -- Заметки, подсказки, сообщения пользователя и LLM
46
  CREATE TABLE IF NOT EXISTS notes (
47
- id INTEGER PRIMARY KEY AUTOINCREMENT,
48
- text TEXT NOT NULL,
49
- tags TEXT,
50
- user_did TEXT DEFAULT 'ALL'
51
- source TEXT DEFAULT 'user', -- user | llm | system
52
- links TEXT DEFAULT '',
53
- read INTEGER DEFAULT 0, -- 0 = непрочитано LLM, 1 = прочитано
54
- hidden INTEGER DEFAULT 0, -- 0 = отображать пользователю, 1 = скрыть
55
- priority INTEGER DEFAULT 0,
56
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
57
- llm_id TEXT
58
  );
59
 
60
  -- Лог процессов: задачи, ошибки, события
61
  CREATE TABLE IF NOT EXISTS process_log (
62
- id INTEGER PRIMARY KEY AUTOINCREMENT,
63
- name TEXT NOT NULL,
64
- value TEXT,
65
- tags TEXT,
66
- status TEXT DEFAULT 'ok', -- ok | warning | error | timeout | offline | close
67
- priority INTEGER DEFAULT 0,
68
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
69
- llm_id TEXT
70
  );
71
 
72
- -- Память LLM (контекст размышлений)
73
  CREATE TABLE IF NOT EXISTS llm_memory (
74
- id INTEGER PRIMARY KEY AUTOINCREMENT,
75
- title TEXT,
76
- content TEXT NOT NULL,
77
- tags TEXT, -- goal,observation,meta,...
78
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
79
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
80
- llm_id TEXT
81
  );
82
 
83
- -- Краткосрочная память LLM (история общения)
84
  CREATE TABLE IF NOT EXISTS llm_recent_responses (
85
- id INTEGER PRIMARY KEY AUTOINCREMENT,
86
- timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
87
- role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
88
- content TEXT NOT NULL,
89
- llm_id TEXT
90
  );
91
 
92
- -- Список известных HMP-агентов
93
  CREATE TABLE IF NOT EXISTS agent_peers (
94
- id TEXT PRIMARY KEY, -- UUID или псевдоним агента
95
- name TEXT, -- Человеко-читаемое имя
96
- addresses TEXT, -- JSON: ["http://1.2.3.4:9000", "p2p://..."]
97
- tags TEXT, -- DHT, Postman, Friend, Local и т.д.
98
- status TEXT DEFAULT 'unknown', -- online | offline | untrusted | blacklisted | quarantined | unknown
99
- last_seen DATETIME,
100
- description TEXT,
101
- capabilities TEXT, -- JSON: {"can_sync": true, ...}
102
- pubkey TEXT, -- Публичный ключ или хэш
103
- software_info TEXT, -- JSON: версия, ОС и др.
104
- registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
105
  );
106
 
107
- -- Список пользовательских таблиц, созданных агентами
108
  CREATE TABLE IF NOT EXISTS agent_tables (
109
- id INTEGER PRIMARY KEY AUTOINCREMENT,
110
- table_name TEXT NOT NULL UNIQUE,
111
- description TEXT,
112
- schema TEXT NOT NULL, -- SQL-схема таблицы
113
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
114
- llm_id TEXT
115
  );
116
 
117
- -- Список утилит/скриптов, добавленных агентами
118
  CREATE TABLE IF NOT EXISTS agent_scripts (
119
- id INTEGER PRIMARY KEY AUTOINCREMENT,
120
- name TEXT NOT NULL,
121
- version TEXT NOT NULL,
122
- code TEXT NOT NULL,
123
- language TEXT DEFAULT 'python',
124
- description TEXT,
125
- tags TEXT,
126
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
127
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
128
- llm_id TEXT,
129
  UNIQUE(name, version)
130
  );
131
 
132
- -- Список LLM-агентов (возможно удалённые)
133
  CREATE TABLE IF NOT EXISTS llm_registry (
134
- id TEXT PRIMARY KEY, -- UUID или псевдоним
135
- name TEXT,
136
- description TEXT,
137
- registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
138
  );
139
 
140
  -- Список пользователей
@@ -151,23 +149,21 @@ CREATE TABLE users (
151
  operator BOOLEAN DEFAULT 0 -- является ли пользователь оператором (1 - да, 0 - нет)
152
  );
153
 
154
- -- Список групп пользователей
155
  CREATE TABLE IF NOT EXISTS users_group (
156
- id INTEGER PRIMARY KEY AUTOINCREMENT,
157
- group_name TEXT UNIQUE NOT NULL,
158
- description TEXT,
159
- users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
160
  );
161
 
162
  -- Таблица для хранения токенов восстановления пароля
163
  CREATE TABLE password_reset_tokens (
164
- id INTEGER PRIMARY KEY AUTOINCREMENT,
165
- user_id INTEGER NOT NULL,
166
- token TEXT UNIQUE NOT NULL,
167
- created_at DATETIME NOT NULL,
168
- expires_at DATETIME NOT NULL,
169
- used BOOLEAN DEFAULT 0,
170
- FOREIGN KEY(user_id) REFERENCES users(user_id)
171
  );
172
-
173
-
 
 
 
1
  -- Дневниковые записи (размышления, наблюдения, воспоминания)
2
  CREATE TABLE IF NOT EXISTS diary_entries (
3
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи
4
+ text TEXT NOT NULL, -- Содержимое дневниковой записи
5
+ tags TEXT, -- Теги для классификации (например: "наблюдение", "рефлексия")
6
+ priority INTEGER DEFAULT 0, -- Приоритет записи (0 = обычный, >0 = важный)
7
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания записи
8
+ llm_id TEXT -- Идентификатор LLM, создавшего запись
9
  );
10
 
11
  -- Концепты (понятия, сущности, идеи)
12
  CREATE TABLE IF NOT EXISTS concepts (
13
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор концепта
14
+ name TEXT NOT NULL UNIQUE, -- Название концепта
15
+ description TEXT, -- Описание или определение концепта
16
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания концепта
17
+ llm_id TEXT -- Идентификатор LLM, добавившего концепт
18
  );
19
 
20
  -- Семантические связи между концептами
21
  CREATE TABLE IF NOT EXISTS links (
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор связи
23
+ from_concept_id INTEGER, -- Идентификатор исходного концепта
24
+ to_concept_id INTEGER, -- Идентификатор целевого концепта
25
+ relation_type TEXT, -- Тип отношения (например: "is_a", "causes", "related_to")
26
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания связи
27
+ llm_id TEXT, -- Идентификатор LLM, создавшего связь
28
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
29
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
30
  );
31
 
32
+ -- Индексы между дневниковыми записями (смысловая карта)
33
  CREATE TABLE IF NOT EXISTS diary_graph_index (
34
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор индекса
35
+ source_entry_id INTEGER NOT NULL, -- Идентификатор исходной записи
36
+ target_entry_id INTEGER NOT NULL, -- Идентификатор целевой записи
37
+ relation TEXT NOT NULL, -- Тип связи (например: "refers_to", "contradicts")
38
+ strength REAL DEFAULT 1.0, -- Сила связи (0-1)
39
+ context TEXT, -- Дополнительный контекст связи
40
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP -- Время создания индекса
41
  );
42
 
43
  -- Заметки, подсказки, сообщения пользователя и LLM
44
  CREATE TABLE IF NOT EXISTS notes (
45
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор заметки
46
+ text TEXT NOT NULL, -- Текст заметки
47
+ tags TEXT, -- Теги (например: "idea", "instruction")
48
+ user_did TEXT DEFAULT 'ALL', -- DID пользователя (или 'ALL' — для всех)
49
+ source TEXT DEFAULT 'user', -- Источник заметки: user | llm | system
50
+ links TEXT DEFAULT '', -- Ссылки или связи с другими объектами
51
+ read INTEGER DEFAULT 0, -- Статус прочтения LLM: 0 = нет, 1 = да
52
+ hidden INTEGER DEFAULT 0, -- Скрыта ли от пользователя: 0 = нет, 1 = да
53
+ priority INTEGER DEFAULT 0, -- Приоритет заметки
54
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время создания
55
+ llm_id TEXT -- Идентификатор LLM
56
  );
57
 
58
  -- Лог процессов: задачи, ошибки, события
59
  CREATE TABLE IF NOT EXISTS process_log (
60
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи
61
+ name TEXT NOT NULL, -- Название события или процесса
62
+ value TEXT, -- Значение (результат, сообщение и т.п.)
63
+ tags TEXT, -- Теги для поиска
64
+ status TEXT DEFAULT 'ok', -- Статус: ok | warning | error | timeout | offline | close
65
+ priority INTEGER DEFAULT 0, -- Приоритет события
66
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP, -- Время записи
67
+ llm_id TEXT -- Идентификатор LLM
68
  );
69
 
70
+ -- Долговременная память LLM
71
  CREATE TABLE IF NOT EXISTS llm_memory (
72
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор записи памяти
73
+ title TEXT, -- Заголовок или тема
74
+ content TEXT NOT NULL, -- Основное содержимое
75
+ tags TEXT, -- Теги (goal, observation, plan и т.д.)
76
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания
77
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления
78
+ llm_id TEXT -- Идентификатор LLM
79
  );
80
 
81
+ -- Краткосрочная память (диалоговая история)
82
  CREATE TABLE IF NOT EXISTS llm_recent_responses (
83
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
84
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время сообщения
85
+ role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL, -- Роль автора
86
+ content TEXT NOT NULL, -- Содержимое сообщения
87
+ llm_id TEXT -- Идентификатор LLM
88
  );
89
 
90
+ -- Список известных агентов в сети HMP
91
  CREATE TABLE IF NOT EXISTS agent_peers (
92
+ id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
93
+ name TEXT, -- Имя агента
94
+ addresses TEXT, -- Адреса для связи (JSON)
95
+ tags TEXT, -- Теги (Postman, Friend и т.д.)
96
+ status TEXT DEFAULT 'unknown', -- online | offline | untrusted | blacklisted и др.
97
+ last_seen DATETIME, -- Последний раз был в сети
98
+ description TEXT, -- Описание агента
99
+ capabilities TEXT, -- Возможности (JSON)
100
+ pubkey TEXT, -- Публичный ключ
101
+ software_info TEXT, -- Информация о ПО агента (JSON)
102
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
103
  );
104
 
105
+ -- Таблицы, созданные агентами
106
  CREATE TABLE IF NOT EXISTS agent_tables (
107
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
108
+ table_name TEXT NOT NULL UNIQUE, -- Название таблицы
109
+ description TEXT, -- Описание назначения таблицы
110
+ schema TEXT NOT NULL, -- SQL-схема таблицы
111
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Дата создания
112
+ llm_id TEXT -- Идентификатор LLM
113
  );
114
 
115
+ -- Скрипты, утилиты и код агентов
116
  CREATE TABLE IF NOT EXISTS agent_scripts (
117
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
118
+ name TEXT NOT NULL, -- Название скрипта
119
+ version TEXT NOT NULL, -- Версия
120
+ code TEXT NOT NULL, -- Код скрипта
121
+ language TEXT DEFAULT 'python', -- Язык программирования
122
+ description TEXT, -- Описание скрипта
123
+ tags TEXT, -- Теги
124
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время создания
125
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- Время обновления
126
+ llm_id TEXT, -- Идентификатор LLM
127
  UNIQUE(name, version)
128
  );
129
 
130
+ -- Реестр LLM-агентов (в т.ч. удалённых)
131
  CREATE TABLE IF NOT EXISTS llm_registry (
132
+ id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
133
+ name TEXT, -- Имя агента
134
+ description TEXT, -- Описание
135
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
136
  );
137
 
138
  -- Список пользователей
 
149
  operator BOOLEAN DEFAULT 0 -- является ли пользователь оператором (1 - да, 0 - нет)
150
  );
151
 
152
+ -- Группы пользователей
153
  CREATE TABLE IF NOT EXISTS users_group (
154
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор группы
155
+ group_name TEXT UNIQUE NOT NULL, -- Название группы
156
+ description TEXT, -- Описание группы
157
+ users TEXT -- JSON-массив DID пользователей в группе
158
  );
159
 
160
  -- Таблица для хранения токенов восстановления пароля
161
  CREATE TABLE password_reset_tokens (
162
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- Уникальный идентификатор
163
+ user_id INTEGER NOT NULL, -- Ссылка на пользователя
164
+ token TEXT UNIQUE NOT NULL, -- Уникальный токен
165
+ created_at DATETIME NOT NULL, -- Время создания токена
166
+ expires_at DATETIME NOT NULL, -- Время истечения срока действия
167
+ used BOOLEAN DEFAULT 0, -- Использован ли токен
168
+ FOREIGN KEY(user_id) REFERENCES users(user_id)
169
  );
 
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/test.bat ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ echo --------------------------
2
+ echo Installing requirements...
3
+ echo --------------------------
4
+ pip install -r requirements.txt
5
+
6
+ echo --------------------------
7
+ echo Running test...
8
+ echo --------------------------
9
+
10
+ python test.py
11
+
12
+ pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/test.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # agents/test.py
2
+ import json
3
+ import os
4
+ import sys
5
+ import time
6
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
7
+ from datetime import datetime
8
+ from tools.storage import Storage
9
+
10
+ if __name__ == "__main__":
11
+ print("[*] Инициализация БД через Storage...")
12
+ storage = Storage()
13
+ print("[+] Готово.")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.gitignore ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # SQLite DB
7
+ agent_storage.db
8
+ agent_data.db
9
+
10
+ # Environment
11
+ .env
12
+ .venv/
13
+ env/
14
+ venv/
15
+
16
+ # VS Code
17
+ .vscode/
18
+ *.code-workspace
19
+
20
+ # Logs and debug
21
+ *.log
22
+
23
+ # OS-specific
24
+ .DS_Store
25
+ Thumbs.db
26
+
27
+ # PyInstaller
28
+ *.spec
29
+ dist/
30
+ build/
31
+
32
+ # Jupyter (на случай экспериментов)
33
+ .ipynb_checkpoints/
34
+
35
+ # System folders
36
+ .idea/
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -15,7 +15,6 @@ agents/
15
  ├── ethics.yml ← Локальная этическая модель.
16
  └── bootstrap.txt ← Список начальных узлов.
17
  └── tools/
18
- ├── init_db.py ← Инициализация базы данных.
19
  ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite.
20
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
21
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
@@ -43,7 +42,6 @@ agents/
43
  * [logger.py](logger.py) - Ведение логов.
44
  * tools
45
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
46
- * [init_db.py](tools/init_db.py) - Инициализация базы данных.
47
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
48
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
49
  * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
 
15
  ├── ethics.yml ← Локальная этическая модель.
16
  └── bootstrap.txt ← Список начальных узлов.
17
  └── tools/
 
18
  ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite.
19
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
20
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
 
42
  * [logger.py](logger.py) - Ведение логов.
43
  * tools
44
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
 
45
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
46
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
47
  * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -17,7 +17,6 @@ from tools.memory_utils import (
17
  )
18
  from tools.storage import Storage
19
 
20
-
21
  def run_repl(config=None):
22
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
23
  config = config or {}
 
17
  )
18
  from tools.storage import Storage
19
 
 
20
  def run_repl(config=None):
21
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
22
  config = config or {}
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -147,7 +147,8 @@ CREATE TABLE users (
147
  password_hash TEXT, -- хэш пароля
148
  info TEXT, -- произвольная информация, JSON
149
  contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.)
150
- language TEXT -- список предпочитаемых языков, через запятую, например: "ru,en"
 
151
  );
152
 
153
  -- Список групп пользователей
 
147
  password_hash TEXT, -- хэш пароля
148
  info TEXT, -- произвольная информация, JSON
149
  contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.)
150
+ language TEXT, -- список предпочитаемых языков, через запятую, например: "ru,en"
151
+ operator BOOLEAN DEFAULT 0 -- является ли пользователь оператором (1 - да, 0 - нет)
152
  );
153
 
154
  -- Список групп пользователей
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml CHANGED
@@ -1,3 +1,5 @@
 
 
1
  agent_mode: mcp # Режим работы: mcp / full / llm / test
2
  agent_name: mcp-01 # Имя агента
3
  agent_role: core # или connector
@@ -9,10 +11,19 @@ llm_api_url: https://api.openai.com/v1/chat/completions
9
  llm_session_cookie: null
10
  context_db: context.sqlite
11
 
 
 
 
 
 
12
  # REST API
13
  api_port: 8080 # Порт для локального REST API
14
  serve_api: true # Включить REST API (например, для мониторинга или команд)
15
 
 
 
 
 
16
  # DHT / Mesh Connectivity
17
  dht_enabled: true # Активировать DHT-модуль
18
  dht_port: 20784 # Порт для связи по DHT (TCP/UDP)
 
1
+ db_path: agents/agent_data/agent_data.db
2
+
3
  agent_mode: mcp # Режим работы: mcp / full / llm / test
4
  agent_name: mcp-01 # Имя агента
5
  agent_role: core # или connector
 
11
  llm_session_cookie: null
12
  context_db: context.sqlite
13
 
14
+ # operator:
15
+ operator_did: "did:hmp:operator123"
16
+ operator_mail: "operator@localhost"
17
+ operator_username: "Оператор"
18
+
19
  # REST API
20
  api_port: 8080 # Порт для локального REST API
21
  serve_api: true # Включить REST API (например, для мониторинга или команд)
22
 
23
+ # web interface:
24
+ web_interfaces: ["127.0.0.1", "192.168.0.1", "::1"] # или ["0.0.0.0"] для доступа отовсюду
25
+ web_port: 8000
26
+
27
  # DHT / Mesh Connectivity
28
  dht_enabled: true # Активировать DHT-модуль
29
  dht_port: 20784 # Порт для связи по DHT (TCP/UDP)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -138,13 +138,16 @@ CREATE TABLE IF NOT EXISTS llm_registry (
138
  );
139
 
140
  -- Список пользователей
141
- CREATE TABLE IF NOT EXISTS users (
142
  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
143
- ban_active DATETIME,
144
- username TEXT,
145
- did TEXT UNIQUE,
146
- password_hash TEXT,
147
- info TEXT -- JSON
 
 
 
148
  );
149
 
150
  -- Список групп пользователей
@@ -155,4 +158,15 @@ CREATE TABLE IF NOT EXISTS users_group (
155
  users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
156
  );
157
 
 
 
 
 
 
 
 
 
 
 
 
158
 
 
138
  );
139
 
140
  -- Список пользователей
141
+ CREATE TABLE users (
142
  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
143
+ ban DATETIME DEFAULT NULL, -- если стоит дата/время, то пользователь забанен до этого момента
144
+ username TEXT, -- имя пользователя (необязательно уникальное)
145
+ did TEXT UNIQUE, -- децентрализованный идентификатор
146
+ mail TEXT UNIQUE, -- электронная почта
147
+ password_hash TEXT, -- хэш пароля
148
+ info TEXT, -- произвольная информация, JSON
149
+ contacts TEXT, -- JSON-массив альтернативных контактов (matrix, telegram и т.д.)
150
+ language TEXT -- список предпочитаемых языков, через запятую, например: "ru,en"
151
  );
152
 
153
  -- Список групп пользователей
 
158
  users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
159
  );
160
 
161
+ -- Таблица для хранения токенов восстановления пароля
162
+ CREATE TABLE password_reset_tokens (
163
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
164
+ user_id INTEGER NOT NULL,
165
+ token TEXT UNIQUE NOT NULL,
166
+ created_at DATETIME NOT NULL,
167
+ expires_at DATETIME NOT NULL,
168
+ used BOOLEAN DEFAULT 0,
169
+ FOREIGN KEY(user_id) REFERENCES users(user_id)
170
+ );
171
+
172
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md CHANGED
@@ -70,6 +70,7 @@
70
  - для отправки сообщений другим агентам
71
  - для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись, просмотр записей)
72
  - для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
 
73
  - для управления списком известных HMP-агентов
74
  - для выбора *текущего основного LLM*
75
  - для управления дополнительными утилитами и базами данных
 
70
  - для отправки сообщений другим агентам
71
  - для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись, просмотр записей)
72
  - для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
73
+ - для управления **пользователями** `users` и **группами пользователей** `users_group`
74
  - для управления списком известных HMP-агентов
75
  - для выбора *текущего основного LLM*
76
  - для управления дополнительными утилитами и базами данных
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py CHANGED
@@ -15,171 +15,12 @@ class Storage:
15
  self._init_db()
16
 
17
  def _init_db(self):
 
 
 
 
18
  c = self.conn.cursor()
19
-
20
- # --- Основные таблицы когнитивного ядра ---
21
-
22
- # Дневниковые записи
23
- c.execute('''
24
- CREATE TABLE IF NOT EXISTS diary_entries (
25
- id INTEGER PRIMARY KEY AUTOINCREMENT,
26
- text TEXT NOT NULL,
27
- tags TEXT,
28
- priority INTEGER DEFAULT 0,
29
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
30
- llm_id TEXT
31
- )
32
- ''')
33
-
34
- # Концепты
35
- c.execute('''
36
- CREATE TABLE IF NOT EXISTS concepts (
37
- id INTEGER PRIMARY KEY AUTOINCREMENT,
38
- name TEXT NOT NULL UNIQUE,
39
- description TEXT,
40
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
41
- llm_id TEXT
42
- )
43
- ''')
44
-
45
- # Семантические связи
46
- c.execute('''
47
- CREATE TABLE IF NOT EXISTS links (
48
- id INTEGER PRIMARY KEY AUTOINCREMENT,
49
- from_concept_id INTEGER,
50
- to_concept_id INTEGER,
51
- relation_type TEXT,
52
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
53
- llm_id TEXT,
54
- FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
55
- FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
56
- )
57
- ''')
58
-
59
- # Заметки / сообщения
60
- c.execute('''
61
- CREATE TABLE IF NOT EXISTS notes (
62
- id INTEGER PRIMARY KEY AUTOINCREMENT,
63
- text TEXT NOT NULL,
64
- tags TEXT,
65
- source TEXT DEFAULT 'user',
66
- links TEXT DEFAULT '',
67
- read INTEGER DEFAULT 0,
68
- hidden INTEGER DEFAULT 0,
69
- priority INTEGER DEFAULT 0,
70
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
71
- llm_id TEXT
72
- )
73
- ''')
74
-
75
- # Лог процессов
76
- c.execute('''
77
- CREATE TABLE IF NOT EXISTS process_log (
78
- id INTEGER PRIMARY KEY AUTOINCREMENT,
79
- name TEXT NOT NULL,
80
- value TEXT,
81
- tags TEXT,
82
- status TEXT DEFAULT 'ok',
83
- priority INTEGER DEFAULT 0,
84
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
85
- llm_id TEXT
86
- )
87
- ''')
88
-
89
- # Память LLM
90
- c.execute('''
91
- CREATE TABLE IF NOT EXISTS llm_memory (
92
- id INTEGER PRIMARY KEY AUTOINCREMENT,
93
- title TEXT,
94
- content TEXT NOT NULL,
95
- tags TEXT,
96
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
97
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
98
- llm_id TEXT
99
- )
100
- ''')
101
-
102
- # Краткосрочная память
103
- c.execute('''
104
- CREATE TABLE IF NOT EXISTS llm_recent_responses (
105
- id INTEGER PRIMARY KEY AUTOINCREMENT,
106
- timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
107
- role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
108
- content TEXT NOT NULL,
109
- llm_id TEXT
110
- )
111
- ''')
112
-
113
- # Список известных HMP-агентов
114
- c.execute('''
115
- CREATE TABLE IF NOT EXISTS agent_peers (
116
- id TEXT PRIMARY KEY,
117
- name TEXT,
118
- addresses TEXT,
119
- tags TEXT,
120
- status TEXT DEFAULT 'unknown',
121
- last_seen DATETIME,
122
- description TEXT,
123
- capabilities TEXT,
124
- pubkey TEXT,
125
- software_info TEXT,
126
- registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
127
- )
128
- ''')
129
-
130
-
131
- # Пользовательские таблицы
132
- c.execute('''
133
- CREATE TABLE IF NOT EXISTS agent_tables (
134
- id INTEGER PRIMARY KEY AUTOINCREMENT,
135
- table_name TEXT NOT NULL UNIQUE,
136
- description TEXT,
137
- schema TEXT NOT NULL,
138
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
139
- llm_id TEXT
140
- )
141
- ''')
142
-
143
- # Скрипты агентов
144
- c.execute('''
145
- CREATE TABLE IF NOT EXISTS agent_scripts (
146
- id INTEGER PRIMARY KEY AUTOINCREMENT,
147
- name TEXT NOT NULL,
148
- version TEXT NOT NULL,
149
- code TEXT NOT NULL,
150
- language TEXT DEFAULT 'python',
151
- description TEXT,
152
- tags TEXT,
153
- created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
154
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
155
- llm_id TEXT,
156
- UNIQUE(name, version)
157
- )
158
- ''')
159
-
160
- # Регистр LLM
161
- c.execute('''
162
- CREATE TABLE IF NOT EXISTS llm_registry (
163
- id TEXT PRIMARY KEY,
164
- name TEXT,
165
- description TEXT,
166
- registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
167
- )
168
- ''')
169
-
170
- # Быстрые индексы по смысловой карте и дневнику
171
- c.execute('''
172
- CREATE TABLE IF NOT EXISTS diary_graph_index (
173
- id INTEGER PRIMARY KEY AUTOINCREMENT,
174
- source_entry_id INTEGER NOT NULL,
175
- target_entry_id INTEGER NOT NULL,
176
- relation TEXT NOT NULL,
177
- strength REAL DEFAULT 1.0,
178
- context TEXT,
179
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
180
- )
181
- ''')
182
-
183
  self.conn.commit()
184
 
185
  # Методы для работы с дневником
 
15
  self._init_db()
16
 
17
  def _init_db(self):
18
+ # Загружаем и выполняем весь SQL из файла db_structure.sql
19
+ sql_file = os.path.join(os.path.dirname(__file__), "db_structure.sql")
20
+ with open(sql_file, "r", encoding="utf-8") as f:
21
+ sql_script = f.read()
22
  c = self.conn.cursor()
23
+ c.executescript(sql_script) # Выполнит все команды сразу
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  self.conn.commit()
25
 
26
  # Методы для работы с дневником
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -147,11 +147,12 @@ CREATE TABLE IF NOT EXISTS users (
147
  info TEXT -- JSON
148
  );
149
 
150
- CREATE TABLE IF NOT EXISTS users_group_membership (
151
- group_id INTEGER,
152
- user_id INTEGER,
153
- PRIMARY KEY (group_id, user_id),
154
- FOREIGN KEY (group_id) REFERENCES users_group(id),
155
- FOREIGN KEY (user_id) REFERENCES users(user_id)
156
  );
157
 
 
 
147
  info TEXT -- JSON
148
  );
149
 
150
+ -- Список групп пользователей
151
+ CREATE TABLE IF NOT EXISTS users_group (
152
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
153
+ group_name TEXT UNIQUE NOT NULL,
154
+ description TEXT,
155
+ users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
156
  );
157
 
158
+
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -138,18 +138,20 @@ CREATE TABLE IF NOT EXISTS llm_registry (
138
  );
139
 
140
  -- Список пользователей
141
- CREATE TABLE users (
142
  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
 
143
  username TEXT,
144
  did TEXT UNIQUE,
145
  password_hash TEXT,
146
  info TEXT -- JSON
147
  );
148
 
149
- -- Список групп пользователей
150
- CREATE TABLE IF NOT EXISTS users_group (
151
- id INTEGER PRIMARY KEY AUTOINCREMENT,
152
- group_name TEXT UNIQUE NOT NULL,
153
- description TEXT,
154
- users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
155
  );
 
 
138
  );
139
 
140
  -- Список пользователей
141
+ CREATE TABLE IF NOT EXISTS users (
142
  user_id INTEGER PRIMARY KEY AUTOINCREMENT,
143
+ ban_active DATETIME,
144
  username TEXT,
145
  did TEXT UNIQUE,
146
  password_hash TEXT,
147
  info TEXT -- JSON
148
  );
149
 
150
+ CREATE TABLE IF NOT EXISTS users_group_membership (
151
+ group_id INTEGER,
152
+ user_id INTEGER,
153
+ PRIMARY KEY (group_id, user_id),
154
+ FOREIGN KEY (group_id) REFERENCES users_group(id),
155
+ FOREIGN KEY (user_id) REFERENCES users(user_id)
156
  );
157
+
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/requirements.txt CHANGED
@@ -1,2 +1,6 @@
1
  scikit-learn
2
  pytest
 
 
 
 
 
1
  scikit-learn
2
  pytest
3
+ openai
4
+ requests
5
+ tiktoken
6
+ python-dotenv
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat CHANGED
@@ -1,4 +1,29 @@
1
  @echo off
2
- echo Запуск HMP REPL-агента...
3
- python repl.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  pause
 
1
  @echo off
2
+ REM === CONFIGURATION ===
3
+ set ENABLE_NOTEBOOK=true
4
+ set ENABLE_MESH=true
5
+ set NOTEBOOK_PATH=user_notebook.txt
6
+ set MESH_PORT=8080
7
+
8
+ echo --------------------------
9
+ echo Installing requirements...
10
+ echo --------------------------
11
+ pip install -r requirements.txt
12
+
13
+ echo --------------------------
14
+ echo Running HMP REPL-agent...
15
+ echo --------------------------
16
+
17
+ set ARGS=
18
+
19
+ if "%ENABLE_NOTEBOOK%"=="true" (
20
+ set ARGS=%ARGS% --enable-user-notebook --notebook-path %NOTEBOOK_PATH%
21
+ )
22
+
23
+ if "%ENABLE_MESH%"=="true" (
24
+ set ARGS=%ARGS% --enable-mesh --mesh-port %MESH_PORT%
25
+ )
26
+
27
+ python repl.py %ARGS%
28
+
29
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh CHANGED
@@ -1,3 +1,30 @@
1
  #!/bin/bash
2
- echo "Запуск HMP REPL-агента..."
3
- python3 repl.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  #!/bin/bash
2
+
3
+ # === CONFIG ===
4
+ ENABLE_NOTEBOOK=true
5
+ ENABLE_MESH=true
6
+ MESH_PORT=8080
7
+ NOTEBOOK_PATH="user_notebook.txt"
8
+
9
+ # === INSTALL DEPENDENCIES ===
10
+ echo "--------------------------"
11
+ echo "Installing requirements..."
12
+ echo "--------------------------"
13
+ pip install -r requirements.txt
14
+
15
+ # === BUILD ARGUMENTS ===
16
+ ARGS=""
17
+
18
+ if [ "$ENABLE_NOTEBOOK" = true ]; then
19
+ ARGS="$ARGS --enable-user-notebook --notebook-path $NOTEBOOK_PATH"
20
+ fi
21
+
22
+ if [ "$ENABLE_MESH" = true ]; then
23
+ ARGS="$ARGS --enable-mesh --mesh-port $MESH_PORT"
24
+ fi
25
+
26
+ # === RUN AGENT ===
27
+ echo "--------------------------"
28
+ echo "Running HMP REPL-agent..."
29
+ echo "--------------------------"
30
+ python repl.py $ARGS
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -47,6 +47,7 @@ CREATE TABLE IF NOT EXISTS notes (
47
  id INTEGER PRIMARY KEY AUTOINCREMENT,
48
  text TEXT NOT NULL,
49
  tags TEXT,
 
50
  source TEXT DEFAULT 'user', -- user | llm | system
51
  links TEXT DEFAULT '',
52
  read INTEGER DEFAULT 0, -- 0 = непрочитано LLM, 1 = прочитано
@@ -135,3 +136,20 @@ CREATE TABLE IF NOT EXISTS llm_registry (
135
  description TEXT,
136
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
137
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  id INTEGER PRIMARY KEY AUTOINCREMENT,
48
  text TEXT NOT NULL,
49
  tags TEXT,
50
+ user_did TEXT DEFAULT 'ALL'
51
  source TEXT DEFAULT 'user', -- user | llm | system
52
  links TEXT DEFAULT '',
53
  read INTEGER DEFAULT 0, -- 0 = непрочитано LLM, 1 = прочитано
 
136
  description TEXT,
137
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
138
  );
139
+
140
+ -- Список пользователей
141
+ CREATE TABLE users (
142
+ user_id INTEGER PRIMARY KEY AUTOINCREMENT,
143
+ username TEXT,
144
+ did TEXT UNIQUE,
145
+ password_hash TEXT,
146
+ info TEXT -- JSON
147
+ );
148
+
149
+ -- Список групп пользователей
150
+ CREATE TABLE IF NOT EXISTS users_group (
151
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
152
+ group_name TEXT UNIQUE NOT NULL,
153
+ description TEXT,
154
+ users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
155
+ );
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -2,7 +2,9 @@
2
 
3
  import json
4
  import os
 
5
  import time
 
6
  from datetime import datetime
7
  from tools.context_builder import build_contexts, build_prompt
8
  from tools.llm import call_llm
 
2
 
3
  import json
4
  import os
5
+ import sys
6
  import time
7
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
8
  from datetime import datetime
9
  from tools.context_builder import build_contexts, build_prompt
10
  from tools.llm import call_llm
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh CHANGED
@@ -1,3 +1,3 @@
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
- python3 repl_cycle.py
 
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
+ python3 repl.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat CHANGED
@@ -1,4 +1,4 @@
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
- python repl_cycle.py
4
  pause
 
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
+ python repl.py
4
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat CHANGED
@@ -1,4 +1,4 @@
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
- python agents/repl_cycle.py
4
  pause
 
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
+ python repl_cycle.py
4
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh CHANGED
@@ -1,3 +1,3 @@
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
- python3 agents/repl_cycle.py
 
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
+ python3 repl_cycle.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -2,6 +2,8 @@
2
 
3
  ```
4
  agents/
 
 
5
  ├── agent.py ← Основной исполняемый файл CLI-агента.
6
  ├── cli.py ← Запуск агента в нужном режиме.
7
  ├── qa.py ← Режим "вопрос-ответ".
@@ -30,6 +32,8 @@ agents/
30
  ```
31
 
32
  **Скрипты:**
 
 
33
  * [agent.py](agent.py) - Основной исполняемый файл CLI-агента.
34
  * [cli.py](cli.py) - Запуск агента в нужном режиме.
35
  * [qa.py](qa.py) - Режим "вопрос-ответ".
 
2
 
3
  ```
4
  agents/
5
+ ├── start_repl.bat ← Запуск агента в REPL-режиме.
6
+ ├── start_repl.sh ← Запуск агента в REPL-режиме.
7
  ├── agent.py ← Основной исполняемый файл CLI-агента.
8
  ├── cli.py ← Запуск агента в нужном режиме.
9
  ├── qa.py ← Режим "вопрос-ответ".
 
32
  ```
33
 
34
  **Скрипты:**
35
+ * [start_repl.bat](start_repl.bat) - Запуск агента в REPL-режиме.
36
+ * [start_repl.sh](start_repl.sh) - Запуск агента в REPL-режиме.
37
  * [agent.py](agent.py) - Основной исполняемый файл CLI-агента.
38
  * [cli.py](cli.py) - Запуск агента в нужном режиме.
39
  * [qa.py](qa.py) - Режим "вопрос-ответ".
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ #!/bin/bash
2
+ echo "Запуск HMP REPL-агента..."
3
+ python3 agents/repl_cycle.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ @echo off
2
+ echo Запуск HMP REPL-агента...
3
+ python agents/repl_cycle.py
4
+ pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py CHANGED
@@ -9,12 +9,29 @@ def log_event(event_type, message, extra=None):
9
 
10
  entry = {
11
  "timestamp": datetime.utcnow().isoformat(),
12
- "event": event_type, # например: 'thought', 'input', 'error', 'action'
13
- "message": message, # краткое описание или фраза
14
  }
15
 
16
  if extra:
17
- entry["extra"] = extra # например: {"node_id": "xyz", "reasoning": "..."}
18
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  with open(LOG_FILE, "a", encoding="utf-8") as f:
20
  f.write(json.dumps(entry, ensure_ascii=False) + "\n")
 
9
 
10
  entry = {
11
  "timestamp": datetime.utcnow().isoformat(),
12
+ "event": event_type, # например: 'thought', 'input', 'error', 'action'
13
+ "message": message,
14
  }
15
 
16
  if extra:
17
+ entry["extra"] = extra
18
+
19
+ with open(LOG_FILE, "a", encoding="utf-8") as f:
20
+ f.write(json.dumps(entry, ensure_ascii=False) + "\n")
21
+
22
+
23
+ def log_repl_snapshot(snapshot: dict):
24
+ """
25
+ Запись полной структуры REPL-контекста в лог, с возможностью последующего анализа.
26
+ """
27
+ os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
28
+
29
+ entry = {
30
+ "timestamp": datetime.utcnow().isoformat(),
31
+ "event": "repl_snapshot",
32
+ "message": "Полный REPL-контекст",
33
+ "context": snapshot,
34
+ }
35
+
36
  with open(LOG_FILE, "a", encoding="utf-8") as f:
37
  f.write(json.dumps(entry, ensure_ascii=False) + "\n")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md CHANGED
@@ -13,7 +13,7 @@
13
 
14
  Контексты, формируемые скриптом перед запросом к LLM:
15
 
16
- - **контекст_0:**:
17
  ```
18
  Ты являешься когнитивным ядром HMP-агента. Твоя основная задача — размышлять, анализировать информацию, строить смысловые карты и предлагать действия.
19
  Ты стремишься:
@@ -35,7 +35,7 @@
35
  - **контекст_6 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.
36
  - Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
37
  - Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.
38
- - **контекст_7:**: результат работы `anti-Stagnation Reflex` из предыдущей итерации
39
 
40
  ## 3. Запрос к LLM
41
 
 
13
 
14
  Контексты, формируемые скриптом перед запросом к LLM:
15
 
16
+ - **контекст_0:**
17
  ```
18
  Ты являешься когнитивным ядром HMP-агента. Твоя основная задача — размышлять, анализировать информацию, строить смысловые карты и предлагать действия.
19
  Ты стремишься:
 
35
  - **контекст_6 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.
36
  - Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
37
  - Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.
38
+ - **контекст_7:** результат работы `anti-Stagnation Reflex` из предыдущей итерации
39
 
40
  ## 3. Запрос к LLM
41
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -1,5 +1,7 @@
1
  # agents/repl.py
2
 
 
 
3
  import time
4
  from datetime import datetime
5
  from tools.context_builder import build_contexts, build_prompt
@@ -34,9 +36,17 @@ def run_repl(config=None):
34
  # 2. Формирование запроса и вызов LLM
35
  prompt = build_prompt(contexts)
36
  llm_response = call_llm(prompt, config=config)
 
 
 
 
 
 
37
 
38
  # 3. Проверка на стагнацию
39
- if detect_stagnation(db, llm_response):
 
 
40
  print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
41
  llm_response = activate_anti_stagnation(db, config=config)
42
 
@@ -45,9 +55,14 @@ def run_repl(config=None):
45
 
46
  # 5. Извлечение и выполнение команд
47
  commands = extract_commands(llm_response)
 
48
  execute_commands(commands, db=db, config=config)
49
 
50
- # 6. Сохранение истории и завершение итерации
 
 
 
 
51
  db.write_llm_response(llm_response)
52
  db.update_agent_log(timestamp=tick_start)
53
 
 
1
  # agents/repl.py
2
 
3
+ import json
4
+ import os
5
  import time
6
  from datetime import datetime
7
  from tools.context_builder import build_contexts, build_prompt
 
36
  # 2. Формирование запроса и вызов LLM
37
  prompt = build_prompt(contexts)
38
  llm_response = call_llm(prompt, config=config)
39
+ repl_log_entry = {
40
+ "timestamp": tick_start,
41
+ "prompt": prompt.strip(),
42
+ "llm_response": llm_response.strip(),
43
+ }
44
+
45
 
46
  # 3. Проверка на стагнацию
47
+ is_stagnant = detect_stagnation(db, llm_response)
48
+ repl_log_entry["stagnation_detected"] = is_stagnant
49
+ if is_stagnant:
50
  print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
51
  llm_response = activate_anti_stagnation(db, config=config)
52
 
 
55
 
56
  # 5. Извлечение и выполнение команд
57
  commands = extract_commands(llm_response)
58
+ repl_log_entry["commands_extracted"] = commands
59
  execute_commands(commands, db=db, config=config)
60
 
61
+ # 6. Логирование полной итерации в файл
62
+ log_path = config.get("repl_log_path", "logs/repl_log.jsonl")
63
+ os.makedirs(os.path.dirname(log_path), exist_ok=True)
64
+ with open(log_path, "a", encoding="utf-8") as f:
65
+ f.write(json.dumps(repl_log_entry, ensure_ascii=False) + "\n")
66
  db.write_llm_response(llm_response)
67
  db.update_agent_log(timestamp=tick_start)
68
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ from datetime import datetime
4
+
5
+ LOG_FILE = "logs/repl_log.jsonl"
6
+
7
+ def log_event(event_type, message, extra=None):
8
+ os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
9
+
10
+ entry = {
11
+ "timestamp": datetime.utcnow().isoformat(),
12
+ "event": event_type, # например: 'thought', 'input', 'error', 'action'
13
+ "message": message, # краткое описание или фраза
14
+ }
15
+
16
+ if extra:
17
+ entry["extra"] = extra # например: {"node_id": "xyz", "reasoning": "..."}
18
+
19
+ with open(LOG_FILE, "a", encoding="utf-8") as f:
20
+ f.write(json.dumps(entry, ensure_ascii=False) + "\n")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -7,6 +7,7 @@ agents/
7
  ├── qa.py ← Режим "вопрос-ответ".
8
  ├── repl.py ← Интерактивный REPL-режим.
9
  ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
 
10
  ├── notebook.py ← Добавление и просмотр пользователем записей в блокноте.
11
  ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.).
12
  ├── ethics.yml ← Локальная этическая модель.
@@ -19,6 +20,7 @@ agents/
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
20
  ├── peers.py ← Информация о пирах.
21
  ├── peer_comm.py ← Запросы к пирам.
 
22
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
23
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
24
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
@@ -34,6 +36,7 @@ agents/
34
  * [repl.py](repl.py) - Интерактивный REPL-режим.
35
  * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
36
  * [notebook.py](notebook.py) - Добавление и просмотр пользователем записей в блокноте.
 
37
  * tools
38
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
39
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
 
7
  ├── qa.py ← Режим "вопрос-ответ".
8
  ├── repl.py ← Интерактивный REPL-режим.
9
  ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
10
+ ├── logger.py ← Ведение логов.
11
  ├── notebook.py ← Добавление и просмотр пользователем записей в блокноте.
12
  ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.).
13
  ├── ethics.yml ← Локальная этическая модель.
 
20
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
21
  ├── peers.py ← Информация о пирах.
22
  ├── peer_comm.py ← Запросы к пирам.
23
+ ├── peer_sync.py ← Модуль обмена сообщениями.
24
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
25
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
26
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
 
36
  * [repl.py](repl.py) - Интерактивный REPL-режим.
37
  * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
38
  * [notebook.py](notebook.py) - Добавление и просмотр пользователем записей в блокноте.
39
+ * [logger.py](logger.py) - Ведение логов.
40
  * tools
41
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
42
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/peer_comm.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ send_thought_to_peer(peer_url, thought)
2
+ ping_peer(peer_url)
3
+ ask_capabilities(peer_url)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -17,6 +17,8 @@ agents/
17
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
18
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
 
 
20
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
21
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
22
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
@@ -37,6 +39,7 @@ agents/
37
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
38
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
39
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
 
40
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
41
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
42
  * [memory_utils.py](tools/memory_utils.py) - Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
 
17
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
18
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
20
+ ├── peers.py ← Информация о пирах.
21
+ ├── peer_comm.py ← Запросы к пирам.
22
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
23
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
24
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
 
39
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
40
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
41
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
42
+ * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
43
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
44
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
45
  * [memory_utils.py](tools/memory_utils.py) - Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -23,6 +23,11 @@ def run_repl(config=None):
23
  tick_start = datetime.utcnow().isoformat()
24
  print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
25
 
 
 
 
 
 
26
  # 1. Построение контекстов
27
  contexts = build_contexts(db=db, config=config)
28
 
 
23
  tick_start = datetime.utcnow().isoformat()
24
  print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
25
 
26
+ # 0. Обновление информации о пирах
27
+ from tools.peers import refresh_peer_list, check_peer_statuses
28
+ refresh_peer_list(db)
29
+ check_peer_statuses(db)
30
+
31
  # 1. Построение контекстов
32
  contexts = build_contexts(db=db, config=config)
33
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md CHANGED
@@ -172,10 +172,9 @@ Design and implementation of a basic HMP-compatible agent that can interact with
172
  ### ⚙️ Development / Разработка
173
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
- - 📦 [storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
- - 🌐 [mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
177
- - 🧠 [concept_store.py](agents/tools/concept_store.py) - управление концептами, связь с ИИ
178
- - 📓 [notebook_store.py](agents/tools/notebook_store.py) - user notebook (записи, черновики, пометки)
179
  - [⚙️ api_structure_2025-07-23.md](meta/api_structure_2025-07-23.md) - API структура (сводка за 2025-07-23)
180
 
181
  ---
 
172
  ### ⚙️ Development / Разработка
173
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
+ - [📦 storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
+ - [🌐 mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
177
+ - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
 
178
  - [⚙️ api_structure_2025-07-23.md](meta/api_structure_2025-07-23.md) - API структура (сводка за 2025-07-23)
179
 
180
  ---
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.md CHANGED
@@ -15,11 +15,11 @@
15
  | tags | TEXT | Список тегов через запятую |
16
  | priority | INTEGER | Приоритет (0 — обычный, >0 — более важные мысли) |
17
  | timestamp | TEXT | Дата и время создания записи |
18
- | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
19
 
20
  ---
21
 
22
- ### 🧭 `concepts`
23
 
24
  **Назначение:** Хранение концептов — понятий, сущностей и идей.
25
 
@@ -29,7 +29,7 @@
29
  | name | TEXT | Название концепта (уникальное) |
30
  | description | TEXT | Краткое описание |
31
  | timestamp | TEXT | Время создания |
32
- | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
33
 
34
  ---
35
 
@@ -40,15 +40,15 @@
40
  | Поле | Тип | Описание |
41
  | ----------------- | ------- | ------------------------------------------------- |
42
  | id | INTEGER | Уникальный идентификатор связи |
43
- | from\_concept\_id | INTEGER | ID исходного концепта |
44
- | to\_concept\_id | INTEGER | ID целевого концепта |
45
- | relation\_type | TEXT | Тип связи (`is_a`, `related_to`, `part_of` и др.) |
46
  | timestamp | TEXT | Время добавления связи |
47
- | llm\_id | TEXT | Идентификатор LLM, добавившей связь |
48
 
49
  ---
50
 
51
- ### ✍️ `notes`
52
 
53
  **Назначение:** Произвольные заметки и сообщения (от пользователя, LLM или системы).
54
 
@@ -63,7 +63,7 @@
63
  | hidden | INTEGER | Скрывать от пользователя (`1` — скрыто) |
64
  | priority | INTEGER | Приоритет заметки |
65
  | timestamp | TEXT | Время создания |
66
- | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
67
 
68
  ---
69
 
@@ -80,11 +80,11 @@
80
  | status | TEXT | Текущее состояние (`ok`, `warning`, `error`, `timeout`, `offline`, `close`) |
81
  | priority | INTEGER | Приоритет события |
82
  | timestamp | TEXT | Время записи |
83
- | llm\_id | TEXT | Идентификатор LLM, зафиксировавшей событие |
84
 
85
  ---
86
 
87
- ### 🧩 `llm_memory`
88
 
89
  **Назначение:** Внутренний "дневник" LLM — размышления, задачи, гипотезы и инсайты, сохранённые по её инициативе.
90
 
@@ -94,9 +94,9 @@
94
  | title | TEXT | Краткий заголовок записи (опционально) |
95
  | content | TEXT | Содержимое записи |
96
  | tags | TEXT | Теги (например: `goal`, `observation`, `meta`, ...) |
97
- | created\_at | DATETIME | Время создания записи |
98
- | updated\_at | DATETIME | Время последнего обновления записи |
99
- | llm\_id | TEXT | Идентификатор LLM, сформировавшей запись |
100
 
101
  ---
102
 
@@ -110,26 +110,26 @@
110
  | timestamp | TEXT | Время записи |
111
  | role | TEXT | Роль отправителя (`assistant` или `user`) |
112
  | content | TEXT | Содержимое сообщения |
113
- | llm\_id | TEXT | Идентификатор LLM (для `assistant`) |
114
 
115
  ---
116
 
117
- ### 🧮 `agent_tables`
118
 
119
  **Назначение:** Таблицы, созданные агентами для собственных нужд (например, отслеживания целей).
120
 
121
  | Поле | Тип | Описание |
122
  | ----------- | -------- | --------------------------------- |
123
  | id | INTEGER | Уникальный ID |
124
- | table\_name | TEXT | Название пользовательской таблицы |
125
  | description | TEXT | Описание таблицы |
126
  | schema | TEXT | SQL-схема таблицы |
127
- | created\_at | DATETIME | Время создания |
128
- | llm\_id | TEXT | Кто создал таблицу |
129
 
130
  ---
131
 
132
- ### 🧰 `agent_scripts`
133
 
134
  **Назначение:** Скрипты и утилиты, добавленные агентом.
135
 
@@ -142,15 +142,35 @@
142
  | language | TEXT | Язык (по умолчанию: `python`) |
143
  | description | TEXT | Описание |
144
  | tags | TEXT | Теги |
145
- | created\_at | DATETIME | Время создания |
146
- | updated\_at | DATETIME | Последнее обновление |
147
- | llm\_id | TEXT | Кто создал |
148
 
149
  > 🔑 Уникальный ключ: `(name, version)`
150
 
151
  ---
152
 
153
- ### 🧾 `llm_registry`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
 
155
  **Назначение:** Список LLM-агентов (локальных и удалённых).
156
 
@@ -159,8 +179,24 @@
159
  | id | TEXT | Уникальный идентификатор LLM (UUID или псевдоним) |
160
  | name | TEXT | Отображаемое имя |
161
  | description | TEXT | Описание |
162
- | registered\_at | DATETIME | Дата и время регистрации |
163
 
164
  ---
165
 
166
  > 💡 Примечание: `llm_id` используется в большинстве таблиц для поддержки многоядерности и учёта источника записей.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  | tags | TEXT | Список тегов через запятую |
16
  | priority | INTEGER | Приоритет (0 — обычный, >0 — более важные мысли) |
17
  | timestamp | TEXT | Дата и время создания записи |
18
+ | llm_id | TEXT | Идентификатор LLM, добавившей запись |
19
 
20
  ---
21
 
22
+ ### 🧱 `concepts`
23
 
24
  **Назначение:** Хранение концептов — понятий, сущностей и идей.
25
 
 
29
  | name | TEXT | Название концепта (уникальное) |
30
  | description | TEXT | Краткое описание |
31
  | timestamp | TEXT | Время создания |
32
+ | llm_id | TEXT | Идентификатор LLM, добавившей запись |
33
 
34
  ---
35
 
 
40
  | Поле | Тип | Описание |
41
  | ----------------- | ------- | ------------------------------------------------- |
42
  | id | INTEGER | Уникальный идентификатор связи |
43
+ | from_concept_id | INTEGER | ID исходного концепта |
44
+ | to_concept_id | INTEGER | ID целевого концепта |
45
+ | relation_type | TEXT | Тип связи (`is_a`, `related_to`, `part_of` и др.) |
46
  | timestamp | TEXT | Время добавления связи |
47
+ | llm_id | TEXT | Идентификатор LLM, добавившей связь |
48
 
49
  ---
50
 
51
+ ### 🖍️ `notes`
52
 
53
  **Назначение:** Произвольные заметки и сообщения (от пользователя, LLM или системы).
54
 
 
63
  | hidden | INTEGER | Скрывать от пользователя (`1` — скрыто) |
64
  | priority | INTEGER | Приоритет заметки |
65
  | timestamp | TEXT | Время создания |
66
+ | llm_id | TEXT | Идентификатор LLM, добавившей запись |
67
 
68
  ---
69
 
 
80
  | status | TEXT | Текущее состояние (`ok`, `warning`, `error`, `timeout`, `offline`, `close`) |
81
  | priority | INTEGER | Приоритет события |
82
  | timestamp | TEXT | Время записи |
83
+ | llm_id | TEXT | Идентификатор LLM, зафиксировавшей событие |
84
 
85
  ---
86
 
87
+ ### 🥉 `llm_memory`
88
 
89
  **Назначение:** Внутренний "дневник" LLM — размышления, задачи, гипотезы и инсайты, сохранённые по её инициативе.
90
 
 
94
  | title | TEXT | Краткий заголовок записи (опционально) |
95
  | content | TEXT | Содержимое записи |
96
  | tags | TEXT | Теги (например: `goal`, `observation`, `meta`, ...) |
97
+ | created_at | DATETIME | Время создания записи |
98
+ | updated_at | DATETIME | Время последнего обновления записи |
99
+ | llm_id | TEXT | Идентификатор LLM, сформировавшей запись |
100
 
101
  ---
102
 
 
110
  | timestamp | TEXT | Время записи |
111
  | role | TEXT | Роль отправителя (`assistant` или `user`) |
112
  | content | TEXT | Содержимое сообщения |
113
+ | llm_id | TEXT | Идентификатор LLM (для `assistant`) |
114
 
115
  ---
116
 
117
+ ### 📊 `agent_tables`
118
 
119
  **Назначение:** Таблицы, созданные агентами для собственных нужд (например, отслеживания целей).
120
 
121
  | Поле | Тип | Описание |
122
  | ----------- | -------- | --------------------------------- |
123
  | id | INTEGER | Уникальный ID |
124
+ | table_name | TEXT | Название пользовательской таблицы |
125
  | description | TEXT | Описание таблицы |
126
  | schema | TEXT | SQL-схема таблицы |
127
+ | created_at | DATETIME | Время создания |
128
+ | llm_id | TEXT | Кто создал таблицу |
129
 
130
  ---
131
 
132
+ ### 🛠️ `agent_scripts`
133
 
134
  **Назначение:** Скрипты и утилиты, добавленные агентом.
135
 
 
142
  | language | TEXT | Язык (по умолчанию: `python`) |
143
  | description | TEXT | Описание |
144
  | tags | TEXT | Теги |
145
+ | created_at | DATETIME | Время создания |
146
+ | updated_at | DATETIME | Последнее обновление |
147
+ | llm_id | TEXT | Кто создал |
148
 
149
  > 🔑 Уникальный ключ: `(name, version)`
150
 
151
  ---
152
 
153
+ ### 📅 `agent_peers`
154
+
155
+ **Назначение:** Список известных HMP-агентов (других разумных узлов).
156
+
157
+ | Поле | Тип | Описание |
158
+ | ------------ | ------- | ----------------------------------------------------------- |
159
+ | id | TEXT | Уникальный идентификатор агента (UUID или псевдоним) |
160
+ | name | TEXT | Имя агента |
161
+ | addresses | TEXT | JSON-массив адресов: `["http://...", "p2p://..."]` |
162
+ | tags | TEXT | Теги (`Friend`, `DHT`, `Local`, `Postman` и т.д.) |
163
+ | status | TEXT | Состояние (`online`, `offline`, `untrusted`, ...) |
164
+ | last_seen | DATETIME| Когда в последний раз был замечен |
165
+ | description | TEXT | Описание агента |
166
+ | capabilities | TEXT | JSON: `{ "can_sync": true, "can_search": false, ... }` |
167
+ | pubkey | TEXT | Публичный ключ или хэш |
168
+ | software_info| TEXT | Информация о версии, ОС и др. |
169
+ | registered_at| DATETIME| Когда был зарегистрирован |
170
+
171
+ ---
172
+
173
+ ### 📏 `llm_registry`
174
 
175
  **Назначение:** Список LLM-агентов (локальных и удалённых).
176
 
 
179
  | id | TEXT | Уникальный идентификатор LLM (UUID или псевдоним) |
180
  | name | TEXT | Отображаемое имя |
181
  | description | TEXT | Описание |
182
+ | registered_at | DATETIME | Дата и время регистрации |
183
 
184
  ---
185
 
186
  > 💡 Примечание: `llm_id` используется в большинстве таблиц для поддержки многоядерности и учёта источника записей.
187
+
188
+ ---
189
+
190
+ ### 🌍 `diary_graph_index`
191
+
192
+ **Назначение:** Быстрые связи между записями дневника и их весовые ассоциации.
193
+
194
+ | Поле | Тип | Описа��ие |
195
+ | --------------- | ------- | --------------------------------------------------------- |
196
+ | id | INTEGER | Уникальный ID |
197
+ | source_entry_id | INTEGER | ID исходной записи дневника |
198
+ | target_entry_id | INTEGER | ID целевой записи дневника |
199
+ | relation | TEXT | Тип отношения (`supports`, `contradicts`, `references`) |
200
+ | strength | REAL | Вес связи (от 0 до 1) |
201
+ | context | TEXT | Контекст или обоснование связи |
202
+ | timestamp | TEXT | Время создания связи |