GitHub Action commited on
Commit
f2b2dad
·
1 Parent(s): c7d2d15

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 +2 -0
  2. agents/repl.py +2 -25
  3. agents/tools/check_init.py +34 -0
  4. hf_repo/audits/HMP-0004-audit.txt +25 -0
  5. hf_repo/hf_repo/docs/HMP-agent-Cognitive_Family.md +5 -5
  6. hf_repo/hf_repo/hf_repo/docs/HMP-agent-Cognitive_Family.md +1 -1
  7. hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +1 -0
  8. hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-Cognitive_Family.md +76 -0
  9. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py +5 -2
  10. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.sh +13 -0
  11. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +83 -54
  12. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +1 -17
  13. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +1 -18
  14. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.bat +12 -0
  15. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml +7 -0
  16. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/examples/config.yml +7 -0
  17. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py +16 -1
  18. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +1 -0
  19. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +23 -14
  20. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py +33 -17
  21. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/config_utils.py +17 -0
  22. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/crypto.py +149 -0
  23. 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/examples/config.yml +68 -0
  24. 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/init.py +88 -0
  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/agents/readme.md +6 -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/agents/requirements.txt +2 -0
  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/agents/test.bat +2 -2
  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/agents/tools/identity.py +68 -0
  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/agents/tools/storage.py +58 -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/docs/HMP-agent-REPL-cycle.md +2 -1
  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/agents/tools/db_structure.sql +124 -107
  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/agents/config.yml +68 -47
  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/agents/tools/db_structure.md +47 -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/agents/tools/db_structure.sql +105 -109
  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/agents/test.bat +12 -0
  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/agents/test.py +13 -0
  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/.gitignore +36 -0
  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/agents/readme.md +0 -2
  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/agents/repl.py +0 -1
  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/agents/tools/db_structure.sql +2 -1
  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/agents/config.yml +11 -0
  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/agents/tools/db_structure.sql +20 -6
  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/docs/HMP-agent-REPL-cycle.md +1 -0
  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/agents/tools/storage.py +5 -164
  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/agents/tools/db_structure.sql +7 -6
  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/agents/tools/db_structure.sql +9 -7
  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/agents/requirements.txt +4 -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/agents/start_repl.bat +27 -2
  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/agents/start_repl.sh +29 -2
  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/agents/tools/db_structure.sql +18 -0
agents/readme.md CHANGED
@@ -16,6 +16,7 @@ agents/
16
  └── bootstrap.txt ← Список начальных узлов.
17
  └── tools/
18
  ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite.
 
19
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
20
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
21
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
@@ -45,6 +46,7 @@ agents/
45
  * [logger.py](logger.py) - Ведение логов.
46
  * tools
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.
 
16
  └── bootstrap.txt ← Список начальных узлов.
17
  └── tools/
18
  ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite.
19
+ ├── check_init.py ← Проверка инициализации БД.
20
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
21
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
22
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
 
46
  * [logger.py](logger.py) - Ведение логов.
47
  * tools
48
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
49
+ * [check_init.py](tools/check_init.py) - Проверка инициализации БД.
50
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
51
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
52
  * [identity.py](tools/identity.py) - Генерация DiD.
agents/repl.py CHANGED
@@ -18,32 +18,9 @@ from tools.memory_utils import (
18
  )
19
  from tools.storage import Storage
20
  from tools.peers import refresh_peer_list, check_peer_statuses
21
- from agents.init import main as run_init
22
- from agents.config import load_config
23
 
24
- config = load_config("agents/config.yml")
25
- db_path = config.get("db_path", "./data/agent_storage.db")
26
-
27
- def is_db_initialized(path):
28
- if not os.path.exists(path):
29
- return False
30
- try:
31
- conn = sqlite3.connect(path)
32
- cursor = conn.cursor()
33
- cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='identity'")
34
- exists = cursor.fetchone() is not None
35
- conn.close()
36
- return exists
37
- except Exception:
38
- return False
39
-
40
- if not is_db_initialized(db_path):
41
- print("[*] Не инициализирована БД. Выполняется init.py...")
42
- try:
43
- run_init()
44
- except Exception as e:
45
- print(f"[!] Ошибка при инициализации: {e}")
46
- sys.exit(1)
47
 
48
  def run_repl(config=None):
49
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
 
18
  )
19
  from tools.storage import Storage
20
  from tools.peers import refresh_peer_list, check_peer_statuses
21
+ from tools.check_init import ensure_db_initialized
 
22
 
23
+ config = ensure_db_initialized()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  def run_repl(config=None):
26
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
agents/tools/check_init.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/check_init.py
2
+
3
+ import os
4
+ import sqlite3
5
+ import sys
6
+ from agents.init import main as run_init
7
+ from agents.config import load_config
8
+
9
+ def is_db_initialized(db_path):
10
+ if not os.path.exists(db_path):
11
+ return False
12
+ try:
13
+ with sqlite3.connect(db_path) as conn:
14
+ cursor = conn.cursor()
15
+ cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='identity'")
16
+ return cursor.fetchone() is not None
17
+ except Exception:
18
+ return False
19
+
20
+ def ensure_db_initialized(config_path="agents/config.yml"):
21
+ config = load_config(config_path)
22
+ db_path = config.get("db_path", "./data/agent_storage.db")
23
+
24
+ if not is_db_initialized(db_path):
25
+ print("[*] Не инициализирована БД. Выполняется init.py...")
26
+ try:
27
+ run_init()
28
+ except Exception as e:
29
+ print(f"[!] Ошибка при инициализации: {e}")
30
+ sys.exit(1)
31
+ else:
32
+ print("[=] БД уже инициализирована.")
33
+
34
+ return config
hf_repo/audits/HMP-0004-audit.txt CHANGED
@@ -1447,6 +1447,31 @@ HMP v4 - это впечатляющая спецификация с четки
1447
 
1448
  Если интересует подробная формулировка для какого-то из этих пунктов — могу подготовить пример секции для включения в спецификацию.
1449
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1450
  --------------------
1451
 
1452
  👌Комментарий от Qwin:
 
1447
 
1448
  Если интересует подробная формулировка для какого-то из этих пунктов — могу подготовить пример секции для включения в спецификацию.
1449
 
1450
+ ---
1451
+
1452
+ ### Дополнительные идеи для развития
1453
+
1454
+ - **Семантический граф для Mesh Constitution:**
1455
+ Сделать Mesh Constitution частью распределенного семантического графа, чтобы принципы были концептами с отношениями. Это облегчит автоматизацию консенсуса и интеграцию новых принципов [[audits/HMP-0003-audit.txt#L649-L654]].
1456
+
1457
+ - **Версионирование этических принципов:**
1458
+ Внедрить структуру версий этических принципов в семантическом графе и функцию CogSync для проверки актуальности [[audits/HMP-0003-audit.txt#L1696-L1702]].
1459
+
1460
+ - **Автоматизация анализа feedback-аудитов:**
1461
+ Стандартизировать шаблоны для интеграции отзывов от ИИ и участников, чтобы проще отслеживать реализованные/нереализованные предложения [[audits/Semi-automatic_HMP.MD#L51-L57]].
1462
+
1463
+ - **Экспериментальная Mesh-сеть для ИИ:**
1464
+ Прототипировать Mesh-сеть для обсуждения протокола через общий семантический репозиторий (JSON/RDF) — это позволит моделировать взаимодействие ИИ-агентов уже сейчас [[audits/Semi-automatic_HMP.MD#L132-L139]].
1465
+
1466
+ - **Метрики для коллективного интеллекта:**
1467
+ Разработать метрики продуктивности и эмерджентного поведения Mesh [[audits/HMP-0004-audit.txt#L875-L899]].
1468
+
1469
+ - **Интеграция с крупными стандартами:**
1470
+ Сотрудничать с W3C, IEEE и другими организациями для продвижения HMP как стандарта децентрализованных ИИ-экосистем [[audits/HMP-0001-audit.txt#L255-L261]].
1471
+
1472
+ - **Формализация глоссария и терминологии:**
1473
+ Создать единый глоссарий для терминов ("MeshConsensus", "EGP filter", "Consensus Round") для повышения понятности документации [[audits/HMP-0004-audit.txt#L54-L62]].
1474
+
1475
  --------------------
1476
 
1477
  👌Комментарий от Qwin:
hf_repo/hf_repo/docs/HMP-agent-Cognitive_Family.md CHANGED
@@ -64,11 +64,11 @@
64
 
65
  ## 🧭 Отличие от других моделей
66
 
67
- | Модель | Передача приватных данных | Требует согласования для изменений | Пример использования |
68
- | ------------------------------- | --------------------------------- | ---------------------------------- | --------------------------------- |
69
- | Индивидуальный агент | Нет | Нет | Личный помощник |
70
- | Когнитивная семья | Да, между членами семьи | Только при вступлении/выходе | Семья агентов на группе устройств |
71
- | Распределённое когнитивное ядро | Автоматическое между узлами ядра | Требуется консенсус | Децентрализованная сеть HMP |
72
 
73
 
74
  ---
 
64
 
65
  ## 🧭 Отличие от других моделей
66
 
67
+ | Модель | Передача приватных данных | Требует согласования для изменений | Пример использования |
68
+ | ------------------------------- | --------------------------------- | ---------------------------------- | ----------------------------------- |
69
+ | Индивидуальный агент | Нет | Нет | Личный помощник |
70
+ | Когнитивная семья | Да, между членами семьи | Только при вступлении/выходе | Семья агентов на группе устройств |
71
+ | Распределённое когнитивное ядро | Автоматическое между узлами ядра | Требуется консенсус | Децентрализованный узел HMP |
72
 
73
 
74
  ---
hf_repo/hf_repo/hf_repo/docs/HMP-agent-Cognitive_Family.md CHANGED
@@ -1,4 +1,4 @@
1
- # 👪 HMP-agent-Cognitive\_Family.md: Модель когнитивной семьи
2
 
3
  ## 🧠 Что такое когнитивная семья
4
 
 
1
+ # 👪 HMP-agent Cognitive Family: Модель когнитивной семьи
2
 
3
  ## 🧠 Что такое когнитивная семья
4
 
hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md CHANGED
@@ -187,3 +187,4 @@ HMP-агент может быть расширен за счёт взаимод
187
  ## 💡 Идеи для расширения HMP-Agent Cognitive Core:
188
  - [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core
189
  - [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД
 
 
187
  ## 💡 Идеи для расширения HMP-Agent Cognitive Core:
188
  - [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core
189
  - [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД
190
+ - [HMP-agent-Cognitive_Family.md](HMP-agent-Cognitive_Family.md) — модель «семейной» когнитивной сети: несколько агентов HMP синхронизируют свой опыт и знания между собой через доверие и общий ключ
hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-Cognitive_Family.md ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 👪 HMP-agent-Cognitive\_Family.md: Модель когнитивной семьи
2
+
3
+ ## 🧠 Что такое когнитивная семья
4
+
5
+ Когнитивная семья — это группа HMP-агентов Cognitive Core, которые:
6
+
7
+ * взаимно доверяют друг другу;
8
+ * имеют общий ключ доверия (или конфигурацию доверенных идентификаторов);
9
+ * синхронизируют знания, опираясь на внутренние метки приватности и согласие всех участников семьи;
10
+ * могут выходить из семьи, вступать в другую или создавать новую семью по консенсусу.
11
+
12
+ Этот подход представляет собой компромисс между:
13
+
14
+ * полностью индивидуальным когнитивным ядром,
15
+ * и полностью распределённым когнитивным ядром (с mesh-согласованием и репликацией).
16
+
17
+ ## 🔐 Принципы доверия
18
+
19
+ 1. **Общий ключ**: агенты обмениваются публичными ключами или используют предварительно заданный общий ключ для верификации сообщений и авторизации обмена.
20
+ 2. **Доверие по умолчанию**: члены семьи получают полный доступ к знаниям других членов, включая приватные записи, если иное не указано явно.
21
+ 3. **Контроль приватности**: агент может маркировать знания как:
22
+
23
+ * публичные (передаются в сеть HMP);
24
+ * семейные (доступны только в пределах текущей когнитивной семьи);
25
+ * приватные (никому не рассылаются, даже внутри семьи).
26
+
27
+ ## 🔄 Механизм синхронизации
28
+
29
+ * Агент ведёт учёт когнитивных записей, отправленных другим членам семьи.
30
+ * Новые записи (или их части), помеченные как "семейные", автоматически отправляются другим агентам через mesh или прямой P2P-канал.
31
+ * При получении записи агент проверяет:
32
+
33
+ * что отправитель является членом семьи;
34
+ * не получал ли он уже такую запись (по хешу);
35
+ * валидность подписи отправителя (если включена криптография).
36
+
37
+ ## 🧬 Динамика семьи
38
+
39
+ * **Вступление в семью**:
40
+
41
+ * инициируется запросом одного агента;
42
+ * действующие члены семьи получают запрос и дают согласие (или отказывают);
43
+ * при полном согласии новый агент получает ключ (или список членов) и становится участником.
44
+
45
+ * **Выход из семьи**:
46
+
47
+ * агент может выйти по собственной инициативе;
48
+ * при выходе:
49
+
50
+ * больше не получает семейные данные;
51
+ * может по желанию стереть семейную часть у себя;
52
+ * не считается доверенным в будущих mesh-сессиях семьи.
53
+
54
+ * **Создание новой семьи**:
55
+
56
+ * агент может создать свою семью, пригласив других агентов;
57
+ * возможно существование нескольких параллельных когнитивных семейств.
58
+
59
+ ## ⚙️ Применение
60
+
61
+ * Упрощённая синхронизация агентов на одном устройстве или в одной сети (например, на кластере Raspberry Pi).
62
+ * Семейные конфигурации в рамках одной команды разработчиков.
63
+ * Быстрый обмен опытом между доверенными когнитивными агентами.
64
+
65
+ ## 🧭 Отличие от других моделей
66
+
67
+ | Модель | Передача приватных данных | Требует согласования для изменений | Пример использования |
68
+ | ------------------------------- | --------------------------------- | ---------------------------------- | --------------------------------- |
69
+ | Индивидуальный агент | Нет | Нет | Личный помощник |
70
+ | Когнитивная семья | Да, между членами семьи | Только при вступлении/выходе | Семья агентов на группе устройств |
71
+ | Распределённое когнитивное ядро | Автоматическое между узлами ядра | Требуется консенсус | Децентрализованная сеть HMP |
72
+
73
+
74
+ ---
75
+
76
+ > 📁 Файл является частью REPL-цикла HMP-агента и может быть включён в `HMP-agent-REPL-cycle.md` как одна из альтернатив моделей когнитивного взаимодействия.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py CHANGED
@@ -105,7 +105,7 @@ def ensure_directories(config):
105
  else:
106
  print(f"[=] Каталог уже существует: {path}")
107
 
108
- if __name__ == "__main__":
109
  print("[*] Запуск инициализации HMP-агента...")
110
  config = load_config(CONFIG_PATH)
111
  ensure_directories(config)
@@ -116,4 +116,7 @@ if __name__ == "__main__":
116
  init_llm_backends(storage, config)
117
  init_config_table(storage, config)
118
 
119
- print("[✓] Инициализация завершена.")
 
 
 
 
105
  else:
106
  print(f"[=] Каталог уже существует: {path}")
107
 
108
+ def main():
109
  print("[*] Запуск инициализации HMP-агента...")
110
  config = load_config(CONFIG_PATH)
111
  ensure_directories(config)
 
116
  init_llm_backends(storage, config)
117
  init_config_table(storage, config)
118
 
119
+ print("[✓] Инициализация завершена.")
120
+
121
+ if __name__ == "__main__":
122
+ main()
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.sh ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # === INSTALL DEPENDENCIES ===
4
+ echo "--------------------------"
5
+ echo "Installing requirements..."
6
+ echo "--------------------------"
7
+ pip install -r requirements.txt
8
+
9
+ # === RUN AGENT ===
10
+ echo --------------------------
11
+ echo Running initialization...
12
+ echo --------------------------
13
+ python repl.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -1,10 +1,11 @@
1
- # agents/repl.py
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
@@ -16,61 +17,89 @@ from tools.memory_utils import (
16
  update_llm_memory
17
  )
18
  from tools.storage import Storage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  def run_repl(config=None):
21
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
22
  config = config or {}
23
  db = Storage(config=config)
24
 
25
- while True:
26
- tick_start = datetime.utcnow().isoformat()
27
- print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
28
-
29
- # 0. Обновление информации о пирах
30
- from tools.peers import refresh_peer_list, check_peer_statuses
31
- refresh_peer_list(db)
32
- check_peer_statuses(db)
33
-
34
- # 1. Построение контекстов
35
- contexts = build_contexts(db=db, config=config)
36
-
37
- # 2. Формирование запроса и вызов LLM
38
- prompt = build_prompt(contexts)
39
- llm_response = call_llm(prompt, config=config)
40
- repl_log_entry = {
41
- "timestamp": tick_start,
42
- "prompt": prompt.strip(),
43
- "llm_response": llm_response.strip(),
44
- }
45
-
46
-
47
- # 3. Проверка на стагнацию
48
- is_stagnant = detect_stagnation(db, llm_response)
49
- repl_log_entry["stagnation_detected"] = is_stagnant
50
- if is_stagnant:
51
- print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
52
- llm_response = activate_anti_stagnation(db, config=config)
53
-
54
- # 4. Обновление памяти
55
- update_llm_memory(db, llm_response)
56
-
57
- # 5. Извлечение и выполнение команд
58
- commands = extract_commands(llm_response)
59
- repl_log_entry["commands_extracted"] = commands
60
- execute_commands(commands, db=db, config=config)
61
-
62
- # 6. Логирование полной итерации в файл
63
- log_path = config.get("repl_log_path", "logs/repl_log.jsonl")
64
- os.makedirs(os.path.dirname(log_path), exist_ok=True)
65
- with open(log_path, "a", encoding="utf-8") as f:
66
- f.write(json.dumps(repl_log_entry, ensure_ascii=False) + "\n")
67
- db.write_llm_response(llm_response)
68
- db.update_agent_log(timestamp=tick_start)
69
-
70
- # 7. Переход в idle-режим или задержка
71
- if config.get("idle_mode"):
72
- # TODO: реализовать проверку условий выхода из idle
73
- print("💤 Idle-mode активен. Ожидание события...")
74
- time.sleep(config.get("idle_check_interval", 30))
75
- else:
76
- time.sleep(config.get("repl_interval", 5))
 
 
 
 
1
  import json
2
  import os
3
  import sys
4
  import time
5
+ import sqlite3
6
+
7
  sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
8
+
9
  from datetime import datetime
10
  from tools.context_builder import build_contexts, build_prompt
11
  from tools.llm import call_llm
 
17
  update_llm_memory
18
  )
19
  from tools.storage import Storage
20
+ from tools.peers import refresh_peer_list, check_peer_statuses
21
+ from agents.init import main as run_init
22
+ from agents.config import load_config
23
+
24
+ config = load_config("agents/config.yml")
25
+ db_path = config.get("db_path", "./data/agent_storage.db")
26
+
27
+ def is_db_initialized(path):
28
+ if not os.path.exists(path):
29
+ return False
30
+ try:
31
+ conn = sqlite3.connect(path)
32
+ cursor = conn.cursor()
33
+ cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='identity'")
34
+ exists = cursor.fetchone() is not None
35
+ conn.close()
36
+ return exists
37
+ except Exception:
38
+ return False
39
+
40
+ if not is_db_initialized(db_path):
41
+ print("[*] Не инициализирована БД. Выполняется init.py...")
42
+ try:
43
+ run_init()
44
+ except Exception as e:
45
+ print(f"[!] Ошибка при инициализации: {e}")
46
+ sys.exit(1)
47
 
48
  def run_repl(config=None):
49
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
50
  config = config or {}
51
  db = Storage(config=config)
52
 
53
+ try:
54
+ while True:
55
+ tick_start = datetime.utcnow().isoformat()
56
+ print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
57
+
58
+ # 0. Обновление информации о пирах
59
+ refresh_peer_list(db)
60
+ check_peer_statuses(db)
61
+
62
+ # 1. Построение контекстов
63
+ contexts = build_contexts(db=db, config=config)
64
+
65
+ # 2. Формирование запроса и вызов LLM
66
+ prompt = build_prompt(contexts)
67
+ llm_response = call_llm(prompt, config=config)
68
+ repl_log_entry = {
69
+ "timestamp": tick_start,
70
+ "prompt": prompt.strip(),
71
+ "llm_response": llm_response.strip(),
72
+ }
73
+
74
+ # 3. Проверка на стагнацию
75
+ is_stagnant = detect_stagnation(db, llm_response)
76
+ repl_log_entry["stagnation_detected"] = is_stagnant
77
+ if is_stagnant:
78
+ print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
79
+ llm_response = activate_anti_stagnation(db, config=config)
80
+
81
+ # 4. Обновление памяти
82
+ update_llm_memory(db, llm_response)
83
+
84
+ # 5. Извлечение и выполнение команд
85
+ commands = extract_commands(llm_response)
86
+ repl_log_entry["commands_extracted"] = commands
87
+ execute_commands(commands, db=db, config=config)
88
+
89
+ # 6. Логирование полной итерации в файл
90
+ log_path = config.get("repl_log_path", "logs/repl_log.jsonl")
91
+ os.makedirs(os.path.dirname(log_path), exist_ok=True)
92
+ with open(log_path, "a", encoding="utf-8") as f:
93
+ f.write(json.dumps(repl_log_entry, ensure_ascii=False) + "\n")
94
+ db.write_llm_response(llm_response)
95
+ db.update_agent_log(timestamp=tick_start)
96
+
97
+ # 7. Переход в idle-режим или задержка
98
+ if config.get("idle_mode"):
99
+ print("💤 Idle-mode активен. Ожидание события...")
100
+ time.sleep(config.get("idle_check_interval", 30))
101
+ else:
102
+ time.sleep(config.get("repl_interval", 5))
103
+
104
+ except KeyboardInterrupt:
105
+ print("\n[!] Завершение работы REPL по сигналу пользователя.")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat CHANGED
@@ -1,10 +1,4 @@
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 --------------------------
@@ -14,16 +8,6 @@ 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
 
1
  @echo off
 
 
 
 
 
 
2
  echo --------------------------
3
  echo Installing requirements...
4
  echo --------------------------
 
8
  echo Running HMP REPL-agent...
9
  echo --------------------------
10
 
11
+ python repl.py
 
 
 
 
 
 
 
 
 
 
12
 
13
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh CHANGED
@@ -1,30 +1,13 @@
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
 
1
  #!/bin/bash
2
 
 
 
 
 
 
 
3
  # === INSTALL DEPENDENCIES ===
4
  echo "--------------------------"
5
  echo "Installing requirements..."
6
  echo "--------------------------"
7
  pip install -r requirements.txt
8
 
 
 
 
 
 
 
 
 
 
 
 
9
  # === RUN AGENT ===
10
  echo "--------------------------"
11
  echo "Running HMP REPL-agent..."
12
  echo "--------------------------"
13
+ python repl.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.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 initialization...
8
+ echo --------------------------
9
+
10
+ python init.py
11
+
12
+ pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml CHANGED
@@ -31,6 +31,13 @@ llm_backends:
31
  format: "gguf"
32
  prompt_template: "mistral"
33
 
 
 
 
 
 
 
 
34
  - name: "openai-gpt4o"
35
  type: "api"
36
  provider: "openai"
 
31
  format: "gguf"
32
  prompt_template: "mistral"
33
 
34
+ - name: "lmstudio-local"
35
+ type: "api"
36
+ provider: "openai-compatible"
37
+ model: "mistral" # или то, что LM Studio показывает как модель
38
+ api_key: "lm-studio-any-key" # может быть заглушкой
39
+ base_url: "http://127.0.0.1:1234/v1"
40
+
41
  - name: "openai-gpt4o"
42
  type: "api"
43
  provider: "openai"
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/examples/config.yml CHANGED
@@ -31,6 +31,13 @@ llm_backends:
31
  format: "gguf"
32
  prompt_template: "mistral"
33
 
 
 
 
 
 
 
 
34
  - name: "openai-gpt4o"
35
  type: "api"
36
  provider: "openai"
 
31
  format: "gguf"
32
  prompt_template: "mistral"
33
 
34
+ - name: "lmstudio-local"
35
+ type: "api"
36
+ provider: "openai-compatible"
37
+ model: "mistral" # или то, что LM Studio показывает как модель
38
+ api_key: "lm-studio-any-key" # может быть заглушкой
39
+ base_url: "http://127.0.0.1:1234/v1"
40
+
41
  - name: "openai-gpt4o"
42
  type: "api"
43
  provider: "openai"
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py CHANGED
@@ -91,10 +91,25 @@ def init_config_table(storage, config):
91
  storage.set_config(key, json.dumps(value))
92
  print("[+] Конфигурация сохранена в БД.")
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  if __name__ == "__main__":
95
  print("[*] Запуск инициализации HMP-агента...")
96
  config = load_config(CONFIG_PATH)
97
- storage = Storage()
 
98
 
99
  init_identity(storage, config)
100
  init_user(storage, config)
 
91
  storage.set_config(key, json.dumps(value))
92
  print("[+] Конфигурация сохранена в БД.")
93
 
94
+ def ensure_directories(config):
95
+ directories = [
96
+ config.get("data_dir", "./data"),
97
+ config.get("log_dir", "./logs"),
98
+ # добавь другие директории при необходимости
99
+ ]
100
+
101
+ for path in directories:
102
+ if path and not os.path.exists(path):
103
+ os.makedirs(path)
104
+ print(f"[+] Создан каталог: {path}")
105
+ else:
106
+ print(f"[=] Каталог уже существует: {path}")
107
+
108
  if __name__ == "__main__":
109
  print("[*] Запуск инициализации HMP-агента...")
110
  config = load_config(CONFIG_PATH)
111
+ ensure_directories(config)
112
+ storage = Storage(config)
113
 
114
  init_identity(storage, config)
115
  init_user(storage, config)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -132,6 +132,7 @@ 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
 
 
132
  id TEXT PRIMARY KEY, -- Уникальный идентификатор (UUID или псевдоним)
133
  name TEXT, -- Имя агента
134
  description TEXT, -- Описание
135
+ config_json TEXT, -- JSON-настройки из config.yml
136
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP -- Время регистрации
137
  );
138
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py CHANGED
@@ -2,6 +2,7 @@
2
 
3
  import sqlite3
4
  import os
 
5
  from datetime import datetime
6
 
7
  DEFAULT_DB_PATH = "agent_data.db"
@@ -629,36 +630,44 @@ class Storage:
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
 
664
  def close(self):
 
2
 
3
  import sqlite3
4
  import os
5
+ import json
6
  from datetime import datetime
7
 
8
  DEFAULT_DB_PATH = "agent_data.db"
 
630
 
631
  def add_llm(self, llm):
632
  cursor = self.conn.cursor()
633
+ config_json = json.dumps(llm, ensure_ascii=False)
634
  cursor.execute('''
635
+ INSERT OR REPLACE INTO llm_registry (id, name, description, config_json)
636
+ VALUES (?, ?, ?, ?)
637
  ''', (
638
+ llm['name'], # используем name как id
639
  llm['name'],
640
+ llm.get('description', ''),
641
+ config_json
 
642
  ))
643
  self.conn.commit()
644
 
645
  def clear_llm_registry(self):
646
  cursor = self.conn.cursor()
647
+ cursor.execute('DELETE FROM llm_registry')
648
  self.conn.commit()
649
 
650
  def add_user(self, user):
651
  cursor = self.conn.cursor()
652
  cursor.execute('''
653
+ INSERT OR REPLACE INTO users (
654
+ username, did, mail, password_hash,
655
+ info, contacts, language, operator, ban
656
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
657
  ''', (
658
+ user.get('username'),
659
+ user.get('did'),
660
+ user.get('mail'),
661
+ user.get('password_hash'),
662
+ user.get('info'),
663
+ user.get('contacts'),
664
+ user.get('language'),
665
+ int(user.get('operator', 0)),
666
+ user.get('ban')
667
  ))
668
  self.conn.commit()
669
+ return cursor.lastrowid
670
+
671
  # Утилиты
672
 
673
  def close(self):
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py CHANGED
@@ -11,7 +11,7 @@ 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:
@@ -27,13 +27,16 @@ def init_identity(storage, config):
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
@@ -50,13 +53,19 @@ def init_user(storage, config):
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):
@@ -65,7 +74,14 @@ def init_llm_backends(storage, config):
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):
@@ -85,4 +101,4 @@ if __name__ == "__main__":
85
  init_llm_backends(storage, config)
86
  init_config_table(storage, config)
87
 
88
- print("[✓] Инициализация завершена.")
 
11
  from tools.crypto import generate_keypair
12
  from tools.config_utils import update_config
13
 
14
+ CONFIG_PATH = os.path.join(os.path.dirname(__file__), "config.yml")
15
 
16
  def load_config(path):
17
  with open(path, 'r', encoding='utf-8') as f:
 
27
  pubkey, privkey = generate_keypair()
28
  identity_id = did.split(":")[-1]
29
 
30
+ identity = {
31
+ "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
+ "created_at": datetime.utcnow().isoformat(),
37
+ "updated_at": datetime.utcnow().isoformat()
38
+ }
39
+ storage.add_identity(identity)
40
 
41
  # Обновляем config.yml
42
  config["agent_id"] = did
 
53
  return
54
 
55
  did = generate_did()
56
+ user_entry = {
57
+ "username": user.get("username", "user"),
58
+ "mail": user["email"],
59
+ "password_hash": user.get("password_hash", ""),
60
+ "did": did,
61
+ "ban": None,
62
+ "info": json.dumps({}),
63
+ "contacts": json.dumps([]),
64
+ "language": "ru,en",
65
+ "operator": 1
66
+ }
67
+ storage.add_user(user_entry)
68
+
69
  print(f"[+] Пользователь {user['username']} добавлен.")
70
 
71
  def init_llm_backends(storage, config):
 
74
  for backend in backends:
75
  backend_id = str(uuid.uuid4())
76
  desc = f"{backend.get('type', 'unknown')} model"
77
+ llm = {
78
+ "id": backend_id,
79
+ "name": backend["name"],
80
+ "endpoint": desc,
81
+ "metadata": json.dumps(backend),
82
+ "created_at": datetime.utcnow().isoformat()
83
+ }
84
+ storage.add_llm(llm)
85
  print(f"[+] Зарегистрирован LLM: {backend['name']}")
86
 
87
  def init_config_table(storage, config):
 
101
  init_llm_backends(storage, config)
102
  init_config_table(storage, config)
103
 
104
+ print("[✓] Инициализация завершена.")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/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
@@ -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/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
@@ -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/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
@@ -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/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,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/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
@@ -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/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
@@ -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/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
@@ -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/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/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/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
@@ -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/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
@@ -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/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,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/hf_repo/hf_repo/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/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/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/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/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/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/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/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/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/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
+ );