GitHub Action commited on
Commit
b8989d2
·
1 Parent(s): e4d198e

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/add_message.py +2 -0
  2. agents/init.py +2 -0
  3. agents/logger.py +2 -0
  4. agents/notebook.py +2 -0
  5. agents/notebook/mailer.py +2 -0
  6. agents/repl.py +2 -0
  7. agents/tools/check_init.py +1 -1
  8. agents/tools/command_executor.py +1 -1
  9. agents/tools/command_parser.py +1 -1
  10. agents/tools/context_builder.py +1 -1
  11. agents/tools/crypto.py +1 -1
  12. agents/tools/identity.py +1 -1
  13. agents/tools/llm.py +1 -1
  14. agents/tools/memory_utils.py +1 -1
  15. agents/tools/peer_comm.py +2 -0
  16. agents/tools/similarity.py +1 -1
  17. hf_repo/hf_repo/hf_repo/agents/readme.md +54 -43
  18. hf_repo/hf_repo/hf_repo/hf_repo/README.md +9 -0
  19. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +1 -1
  20. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md +1 -1
  21. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +4 -1
  22. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md +2 -1
  23. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/_not_used/mcp_server.py +325 -0
  24. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/_not_used/qa.py +19 -0
  25. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/add_message.py +26 -0
  26. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/notebook.py +19 -39
  27. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/notebook/mailer.py +14 -0
  28. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/requirements.txt +6 -1
  29. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +2 -4
  30. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.py +59 -0
  31. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +4 -6
  32. 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 +52 -63
  33. 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 -26
  34. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/check_init.py +34 -0
  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/audits/HMP-0004-audit.txt +25 -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/docs/HMP-agent-Cognitive_Family.md +5 -5
  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/docs/HMP-agent-REPL-cycle.md +1 -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/docs/HMP-agent-Cognitive_Family.md +76 -0
  39. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py +5 -2
  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/agents/init.sh +13 -0
  41. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +83 -54
  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/agents/start_repl.bat +1 -17
  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/agents/start_repl.sh +1 -18
  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/agents/init.bat +12 -0
  45. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/config.yml +7 -0
  46. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/examples/config.yml +7 -0
  47. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/init.py +16 -1
  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/agents/tools/db_structure.sql +1 -0
  49. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +23 -14
  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/agents/init.py +33 -17
agents/add_message.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import argparse
2
  from datetime import datetime
3
  from tools.storage import Storage
 
1
+ # agents/add_message.py
2
+
3
  import argparse
4
  from datetime import datetime
5
  from tools.storage import Storage
agents/init.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import os
2
  import sys
3
  import yaml
 
1
+ # agents/init.py
2
+
3
  import os
4
  import sys
5
  import yaml
agents/logger.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import json
2
  import os
3
  from datetime import datetime
 
1
+ # agents/logger.py
2
+
3
  import json
4
  import os
5
  from datetime import datetime
agents/notebook.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import uvicorn
2
  import threading
3
  import sqlite3
 
1
+ # agents/notebook.py
2
+
3
  import uvicorn
4
  import threading
5
  import sqlite3
agents/notebook/mailer.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  def send_email(to_email: str, subject: str, body: str):
2
  try:
3
  msg = EmailMessage()
 
1
+ # agents/notebook/mailer.py
2
+
3
  def send_email(to_email: str, subject: str, body: str):
4
  try:
5
  msg = EmailMessage()
agents/repl.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  import json
2
  import os
3
  import sys
 
1
+ # agents/repl.py
2
+
3
  import json
4
  import os
5
  import sys
agents/tools/check_init.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/check_init.py
2
 
3
  import os
4
  import sqlite3
 
1
+ # agents/tools/check_init.py
2
 
3
  import os
4
  import sqlite3
agents/tools/command_executor.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/command_executor.py
2
 
3
  def execute_commands(commands, db, config):
4
  for cmd in commands:
 
1
+ # agents/tools/command_executor.py
2
 
3
  def execute_commands(commands, db, config):
4
  for cmd in commands:
agents/tools/command_parser.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/command_parser.py
2
 
3
  """
4
  Извлечение команд из JSON или размеченного текста.
 
1
+ # agents/tools/command_parser.py
2
 
3
  """
4
  Извлечение команд из JSON или размеченного текста.
agents/tools/context_builder.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/context_builder.py
2
 
3
  from datetime import datetime
4
 
 
1
+ # agents/tools/context_builder.py
2
 
3
  from datetime import datetime
4
 
agents/tools/crypto.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/crypto.py
2
 
3
  from cryptography.hazmat.primitives.asymmetric import rsa, ed25519
4
  from cryptography.hazmat.primitives import serialization, hashes
 
1
+ # agents/tools/crypto.py
2
 
3
  from cryptography.hazmat.primitives.asymmetric import rsa, ed25519
4
  from cryptography.hazmat.primitives import serialization, hashes
agents/tools/identity.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/identity.py
2
 
3
  import uuid
4
  import json
 
1
+ # agents/tools/identity.py
2
 
3
  import uuid
4
  import json
agents/tools/llm.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/llm.py
2
 
3
  import json
4
  import requests
 
1
+ # agents/tools/llm.py
2
 
3
  import json
4
  import requests
agents/tools/memory_utils.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/memory_utils.py
2
 
3
  from datetime import datetime, timedelta
4
  from difflib import SequenceMatcher
 
1
+ # agents/tools/memory_utils.py
2
 
3
  from datetime import datetime, timedelta
4
  from difflib import SequenceMatcher
agents/tools/peer_comm.py CHANGED
@@ -1,3 +1,5 @@
 
 
1
  send_thought_to_peer(peer_url, thought)
2
  ping_peer(peer_url)
3
  ask_capabilities(peer_url)
 
1
+ # agents/tools/peer_comm.py
2
+
3
  send_thought_to_peer(peer_url, thought)
4
  ping_peer(peer_url)
5
  ask_capabilities(peer_url)
agents/tools/similarity.py CHANGED
@@ -1,4 +1,4 @@
1
- # tools/similarity.py
2
 
3
  from sklearn.feature_extraction.text import TfidfVectorizer
4
  from sklearn.metrics.pairwise import cosine_similarity
 
1
+ # agents/tools/similarity.py
2
 
3
  from sklearn.feature_extraction.text import TfidfVectorizer
4
  from sklearn.metrics.pairwise import cosine_similarity
hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -14,46 +14,57 @@
14
  | 🌍 `agent_mesh_listener.py` | Получение входящих сообщений |
15
  | 🌐 `peer_sync.py` или DHT-сервис | Поддержание связи с другими агентами / DHT |
16
 
17
- ```
18
- agents/
19
- ├── start_repl.bat ← Запуск агента в REPL-режиме (bat)
20
- ├── start_repl.sh ← Запуск агента в REPL-режиме (sh)
21
- ├── start_repl.py ← Запуск агента в REPL-режиме (py)
22
- ├── mcp_server.py ← API-интерфейс к хранилищу (storage.py): получение/поиск записей, импорт графа, разметка и др. Используется внешними модулями (напр. Cognitive Shell или CMP).
23
- ├── init.py ← Инициализация БД
24
- ├── logger.py ← Ведение логов
25
- ├── add_message.py ← Ручная отправка сообщений для агента
26
- ├── requirements.txt ← Зависимости
27
- ├── tools/
28
- │ ├── db_structure.sql ← БД SQL
29
- │ ├── db_structure.md ← Описание БД SQL
30
- │ ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite
31
- ├── check_init.py Проверка инициализации БД
32
- ├── config_utils.py Обновляет JSON-файл конфигурации указанными значениями
33
- ├── crypto.py Создание и шифрование ключей RSA/Ed25519
34
- ├── identity.py Генерация DiD
35
- ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт)
36
- ├── agent_mesh_listener.py Прием входящих сообщений от других HMP-агентов
37
- ├── peer_comm.py Низкоуровневые P2P-запросы (отправка, ping, мета)
38
- ├── peer_sync.py Фоновая синхронизация с другими пирам
39
- ├── peers.py Реестр известных пиров (id, ключи, адреса)
40
- ├── memory_utils.py Работа с 'llm_memory', 'llm_recent_responses' и стагнацией
41
- ├── context_builder.py Сбор всех `контекстов` из БД и их фильтрация
42
- ├── command_parser.py Извлечение команд из JSON или размеченного блока
43
- ├── command_executor.py ← Выполнение команд (shell, graph, diary и др)
44
- ├── similarity.py Сравнение смыслов
45
- ├── diagnose.py Скрипт диагностики соединения, определения IP и проверки порта DHT
46
- ├── notebook/
47
- ├── auth.py Регистрация, вход, восстановление
48
- ├── views.py Общий и приватный чаты
49
- ├── mailer.py Простая синхронная отправка email
50
- ├── templates/
51
- ├── index.html Основа
52
- ├── private.html Общий и приватный чат
53
- ├── login.html Вход
54
- ├── register.html Регистрация или сброс пароля
55
- ├── style.css Таблица стилей
56
- ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.)
57
- ├── bootstrap.txt Локальная этическая модель
58
- ├── ethics.yml Список начальных узлов
59
- ```
 
 
 
 
 
 
 
 
 
 
 
 
14
  | 🌍 `agent_mesh_listener.py` | Получение входящих сообщений |
15
  | 🌐 `peer_sync.py` или DHT-сервис | Поддержание связи с другими агентами / DHT |
16
 
17
+ ---
18
+
19
+ **🌐 `mcp_server.py`**
20
+ FastAPI-сервер, предоставляющий HTTP-интерфейс к функциональности `storage.py`. Предназначен для использования внешними компонентами, например:
21
+
22
+ * `Cognitive Shell` (внешний управляющий интерфейс),
23
+ * CMP-серверы (если используется mesh-сеть с разграничением ролей),
24
+ * отладочные или визуальные UI-инструменты.
25
+
26
+ Позволяет получать случайные/новые записи, делать разметку, импортировать графы, добавлять заметки и управлять данными без прямого доступа к БД.
27
+
28
+ ---
29
+
30
+ [agents/](/agents)
31
+ ├── [`start_repl.bat`](start_repl.bat) Запуск агента в REPL-режиме (bat)
32
+ ├── [`start_repl.sh`](start_repl.sh) Запуск агента в REPL-режиме (sh)
33
+ ├── [`start_repl.py`](start_repl.py) Запуск агента в REPL-режиме (py)
34
+ ├── [`mcp_server.py`](mcp_server.py) API-интерфейс к хранилищу (storage.py): получение/поиск записей, импорт графа, разметка и др. Используется внешними модулями (напр. Cognitive Shell или CMP).
35
+ ├── [`init.py`](init.py) Инициализация БД
36
+ ├── [`logger.py`](logger.py) Ведение логов
37
+ ├── [`add_message.py`](add_message.py) Ручная отправка сообщений для агента
38
+ ├── [`requirements.txt`](requirements.txt) Зависимости
39
+ ├── [tools/](tools/) Вспомогательные скрипты и модули
40
+    ├── [`db_structure.sql`](tools/db_structure.sql) БД SQL
41
+    ├── [`db_structure.md`](tools/db_structure.md) Описание БД SQL
42
+    ├── [`storage.py`](tools/storage.py) Реализация базового хранилища (`Storage`), подключение SQLite
43
+    ├── [`check_init.py`](tools/check_init.py) Проверка инициализации БД
44
+    ├── [`config_utils.py`](tools/config_utils.py) Обновляет JSON-файл конфигурации указанными значениями
45
+    ├── [`crypto.py`](tools/crypto.py) Создание и шифрование ключей RSA/Ed25519
46
+ │   ├── [`identity.py`](tools/identity.py) ← Генерация DiD
47
+    ├── [`llm.py`](tools/llm.py) Работа с LLM (вызов, выбор модели, системный промпт)
48
+    ├── [`agent_mesh_listener.py`](tools/agent_mesh_listener.py) Прием входящих сообщений от других HMP-агентов
49
+    ├── [`peer_comm.py`](tools/peer_comm.py) Низкоуровневые P2P-запросы (отправка, ping, мета)
50
+    ├── [`peer_sync.py`](tools/peer_sync.py) ← Фоновая синхронизация с другими пирам
51
+    ├── [`peers.py`](tools/peers.py) Реестр известных пиров (id, ключи, адреса)
52
+    ├── [`memory_utils.py`](tools/memory_utils.py) Работа с 'llm_memory', 'llm_recent_responses' и стагнацией
53
+    ├── [`context_builder.py`](tools/context_builder.py) Сбор всех `контекстов` из БД и их фильтрация
54
+    ├── [`command_parser.py`](tools/command_parser.py) Извлечение команд из JSON или размеченного блока
55
+    ├── [`command_executor.py`](tools/command_executor.py) Выполнение команд (shell, graph, diary и др)
56
+ │   ├── [`similarity.py`](tools/similarity.py) Сравнение смыслов
57
+ │   ├── [`diagnose.py`](tools/diagnose.py) Скрипт диагностики соединения, определения IP и проверки порта DHT
58
+ ├── [notebook/](notebook/) Веб-интерфейс и связанные модули
59
+ │   ├── [`auth.py`](notebook/auth.py) ← Регистрация, вход, восстановление
60
+ │   ├── [`views.py`](notebook/views.py) ← Общий и приватный чаты
61
+ │   ├── [`mailer.py`](notebook/mailer.py) ← Простая синхронная отправка email
62
+ │   ├── [templates/](notebook/templates/) ← HTML-шаблоны и стили
63
+ │       ├── [`index.html`](notebook/templates/index.html) ← Основа
64
+ │       ├── [`private.html`](notebook/templates/private.html) ← Общий и приватный чат
65
+ │       ├── [`login.html`](notebook/templates/login.html) ← Вход
66
+ │       ├── [`register.html`](notebook/templates/register.html) ← Регистрация или сброс пароля
67
+ │       ├── [`style.css`](notebook/templates/style.css) ← Таблица стилей
68
+ ├── [`config.yml`](config.yml) ← Конфигурация агента (имя, порты, роли и т.п.)
69
+ ├── [`bootstrap.txt`](bootstrap.txt) ← Локальная этическая модель
70
+ ├── [`ethics.yml`](ethics.yml) ← Список начальных узлов '
hf_repo/hf_repo/hf_repo/hf_repo/README.md CHANGED
@@ -178,6 +178,15 @@ Design and implementation of a basic HMP-compatible agent that can interact with
178
  - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
179
  - [🔄 notebook.py](agents/notebook.py) - UI-интерфейс
180
 
 
 
 
 
 
 
 
 
 
181
  ---
182
 
183
  ## 🧭 Ethics & Scenarios / Этические принципы и сценарии
 
178
  - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
179
  - [🔄 notebook.py](agents/notebook.py) - UI-интерфейс
180
 
181
+ **🌐 `mcp_server.py`**
182
+ FastAPI-сервер, предоставляющий HTTP-интерфейс к функциональности `storage.py`. Предназначен для использования внешними компонентами, например:
183
+
184
+ - `Cognitive Shell` (внешний управляющий интерфейс),
185
+ - CMP-серверы (если используется mesh-сеть с разграничением ролей),
186
+ - отладочные или визуальные UI-инструменты.
187
+
188
+ Позволяет получать случайные/новые записи, делать разметку, импортировать графы, добавлять заметки и управлять данными без прямого доступа к БД.
189
+
190
  ---
191
 
192
  ## 🧭 Ethics & Scenarios / Этические принципы и сценарии
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -19,7 +19,7 @@ agents/
19
  ├── start_repl.bat ← Запуск агента в REPL-режиме (bat)
20
  ├── start_repl.sh ← Запуск агента в REPL-режиме (sh)
21
  ├── start_repl.py ← Запуск агента в REPL-режиме (py)
22
- ├?─ mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
23
  ├── init.py ← Инициализация БД
24
  ├── logger.py ← Ведение логов
25
  ├── add_message.py ← Ручная отправка сообщений для агента
 
19
  ├── start_repl.bat ← Запуск агента в REPL-режиме (bat)
20
  ├── start_repl.sh ← Запуск агента в REPL-режиме (sh)
21
  ├── start_repl.py ← Запуск агента в REPL-режиме (py)
22
+ ├── mcp_server.py ← API-интерфейс к хранилищу (storage.py): получение/поиск записей, импорт графа, разметка и др. Используется внешними модулями (напр. Cognitive Shell или CMP).
23
  ├── init.py ← Инициализация БД
24
  ├── logger.py ← Ведение логов
25
  ├── add_message.py ← Ручная отправка сообщений для агента
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md CHANGED
@@ -173,7 +173,7 @@ Design and implementation of a basic HMP-compatible agent that can interact with
173
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
  - [📦 storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
- - [🌐 mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
177
  - [🌐 start_repl.py](agents/start_repl.py) - Запуск агента в REPL-режиме
178
  - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
179
  - [🔄 notebook.py](agents/notebook.py) - UI-интерфейс
 
173
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
  - [📦 storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
+ - [🌐 mcp_server.py](agents/mcp_server.py) FastAPI-сервер для доступа к данным агента через HTTP-интерфейс (например, для Cognitive Shell, внешних UI или mesh-коммуникации). Пока не используется в основном REPL-цикле.
177
  - [🌐 start_repl.py](agents/start_repl.py) - Запуск агента в REPL-режиме
178
  - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
179
  - [🔄 notebook.py](agents/notebook.py) - UI-интерфейс
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -14,10 +14,12 @@
14
  | 🌍 `agent_mesh_listener.py` | Получение входящих сообщений |
15
  | 🌐 `peer_sync.py` или DHT-сервис | Поддержание связи с другими агентами / DHT |
16
 
 
17
  agents/
18
  ├── start_repl.bat ← Запуск агента в REPL-режиме (bat)
19
  ├── start_repl.sh ← Запуск агента в REPL-режиме (sh)
20
  ├── start_repl.py ← Запуск агента в REPL-режиме (py)
 
21
  ├── init.py ← Инициализация БД
22
  ├── logger.py ← Ведение логов
23
  ├── add_message.py ← Ручная отправка сообщений для агента
@@ -53,4 +55,5 @@ agents/
53
  │ ├── style.css ← Таблица стилей
54
  ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.)
55
  ├── bootstrap.txt ← Локальная этическая модель
56
- ├── ethics.yml ← Список начальных узлов
 
 
14
  | 🌍 `agent_mesh_listener.py` | Получение входящих сообщений |
15
  | 🌐 `peer_sync.py` или DHT-сервис | Поддержание связи с другими агентами / DHT |
16
 
17
+ ```
18
  agents/
19
  ├── start_repl.bat ← Запуск агента в REPL-режиме (bat)
20
  ├── start_repl.sh ← Запуск агента в REPL-режиме (sh)
21
  ├── start_repl.py ← Запуск агента в REPL-режиме (py)
22
+ ├?─ mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
23
  ├── init.py ← Инициализация БД
24
  ├── logger.py ← Ведение логов
25
  ├── add_message.py ← Ручная отправка сообщений для агента
 
55
  │ ├── style.css ← Таблица стилей
56
  ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.)
57
  ├── bootstrap.txt ← Локальная этическая модель
58
+ ├── ethics.yml ← Список начальных узлов
59
+ ```
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md CHANGED
@@ -174,8 +174,9 @@ Design and implementation of a basic HMP-compatible agent that can interact with
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
  - [📦 storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
  - [🌐 mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
 
177
  - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
178
- - [⚙️ api_structure_2025-07-23.md](meta/api_structure_2025-07-23.md) - API структура (сводка за 2025-07-23)
179
 
180
  ---
181
 
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
  - [📦 storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
  - [🌐 mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
177
+ - [🌐 start_repl.py](agents/start_repl.py) - Запуск агента в REPL-режиме
178
  - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
179
+ - [🔄 notebook.py](agents/notebook.py) - UI-интерфейс
180
 
181
  ---
182
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/_not_used/mcp_server.py ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # agents/mcp_server.py
2
+
3
+ from fastapi import FastAPI, Request, HTTPException
4
+ from fastapi.middleware.cors import CORSMiddleware
5
+ from pydantic import BaseModel
6
+ from typing import List, Optional
7
+ from datetime import datetime
8
+ from tools.storage import Storage
9
+
10
+ app = FastAPI(title="HMP MCP-Agent API", version="0.2")
11
+
12
+ app.add_middleware(
13
+ CORSMiddleware,
14
+ allow_origins=["*"],
15
+ allow_credentials=True,
16
+ allow_methods=["*"],
17
+ allow_headers=["*"],
18
+ )
19
+
20
+ db = Storage()
21
+
22
+ # ======== MODELS ========
23
+
24
+ class NoteInput(BaseModel):
25
+ text: str
26
+ tags: Optional[List[str]] = []
27
+
28
+ class NoteOutput(BaseModel):
29
+ id: int
30
+ text: str
31
+ tags: List[str]
32
+ source: str
33
+ read: int
34
+ timestamp: str
35
+
36
+ class DiaryInput(BaseModel):
37
+ text: str
38
+ tags: Optional[List[str]] = []
39
+
40
+ class DiaryOutput(BaseModel):
41
+ id: int
42
+ text: str
43
+ tags: List[str]
44
+ timestamp: str
45
+
46
+ class DiaryListOutput(BaseModel):
47
+ entries: List[DiaryOutput]
48
+
49
+ class ConceptInput(BaseModel):
50
+ name: str
51
+ description: Optional[str] = ""
52
+
53
+ class ConceptOutput(BaseModel):
54
+ concept_id: int
55
+
56
+ class Concept(BaseModel):
57
+ concept_id: int
58
+ name: str
59
+ description: Optional[str]
60
+
61
+ class LinkInput(BaseModel):
62
+ source_id: int
63
+ target_id: int
64
+ relation: str
65
+
66
+ class LinkOutput(BaseModel):
67
+ link_id: int
68
+
69
+ class Edge(BaseModel):
70
+ source_id: int
71
+ target_id: int
72
+ relation: str
73
+
74
+ class GraphExpansionOutput(BaseModel):
75
+ links: List[Edge]
76
+
77
+ class GraphExport(BaseModel):
78
+ nodes: List[Concept]
79
+ edges: List[Edge]
80
+
81
+ class GraphImportData(BaseModel):
82
+ nodes: List[Concept]
83
+ edges: List[Edge]
84
+
85
+ class ConceptUpdate(BaseModel):
86
+ name: Optional[str]
87
+ description: Optional[str]
88
+
89
+ class ConceptQueryOutput(BaseModel):
90
+ matches: List[Concept]
91
+
92
+ class NoteTagUpdate(BaseModel):
93
+ id: int
94
+ tags: List[str] = []
95
+
96
+ # ======== ROUTES ========
97
+
98
+ @app.get("/status")
99
+ def status():
100
+ return {"status": "ok", "timestamp": datetime.utcnow().isoformat()}
101
+
102
+ @app.post("/diary/write", response_model=dict)
103
+ def write_diary(entry: DiaryInput):
104
+ db.write_diary_entry(entry.text, entry.tags)
105
+ return {"result": "entry saved"}
106
+
107
+ @app.get("/diary/read", response_model=DiaryListOutput)
108
+ def read_diary(limit: int = 5, tag: Optional[str] = None):
109
+ raw = db.read_diary_entries(limit=limit, tag_filter=tag)
110
+ return {
111
+ "entries": [
112
+ {
113
+ "id": r[0],
114
+ "text": r[1],
115
+ "tags": r[2].split(",") if r[2] else [],
116
+ "timestamp": r[3]
117
+ } for r in raw
118
+ ]
119
+ }
120
+
121
+ @app.delete("/diary/delete/{entry_id}")
122
+ def delete_diary(entry_id: int):
123
+ db.delete_diary_entry_by_id(entry_id)
124
+ return {"result": f"entry {entry_id} deleted"}
125
+
126
+ @app.get("/diary/get_entry/{entry_id}", response_model=DiaryOutput)
127
+ def get_diary_entry(entry_id: int):
128
+ row = db.get_diary_entry(entry_id)
129
+ if row:
130
+ return {
131
+ "id": row[0],
132
+ "text": row[1],
133
+ "tags": row[2].split(",") if row[2] else [],
134
+ "timestamp": row[3]
135
+ }
136
+ raise HTTPException(status_code=404, detail="Entry not found")
137
+
138
+ @app.post("/diary/search_entries", response_model=DiaryListOutput)
139
+ def search_entries(query: str):
140
+ rows = db.search_diary_entries(query)
141
+ return {
142
+ "entries": [
143
+ {
144
+ "id": r[0],
145
+ "text": r[1],
146
+ "tags": r[2].split(",") if r[2] else [],
147
+ "timestamp": r[3]
148
+ }
149
+ for r in rows
150
+ ]
151
+ }
152
+
153
+ @app.get("/diary/tag_stats", response_model=dict)
154
+ def tag_stats():
155
+ return db.get_tag_stats()
156
+
157
+ @app.get("/diary/export", response_model=DiaryListOutput)
158
+ def export_diary():
159
+ rows = db.export_diary()
160
+ return {
161
+ "entries": [
162
+ {
163
+ "id": r[0],
164
+ "text": r[1],
165
+ "tags": r[2].split(",") if r[2] else [],
166
+ "timestamp": r[3]
167
+ }
168
+ for r in rows
169
+ ]
170
+ }
171
+
172
+ @app.post("/graph/add_concept", response_model=ConceptOutput)
173
+ def add_concept(concept: ConceptInput):
174
+ cid = db.add_concept(concept.name, concept.description)
175
+ return {"concept_id": cid}
176
+
177
+ @app.post("/graph/add_link", response_model=LinkOutput)
178
+ def add_link(link: LinkInput):
179
+ link_id = db.add_link(link.source_id, link.target_id, link.relation)
180
+ return {"link_id": link_id}
181
+
182
+ @app.get("/graph/expand", response_model=GraphExpansionOutput)
183
+ def expand_graph(start_id: int, depth: int = 1):
184
+ links = db.expand_concept_graph(start_id, depth)
185
+ return {"links": links}
186
+
187
+ @app.get("/graph/list_concepts", response_model=List[Concept])
188
+ def list_concepts():
189
+ rows = db.list_concepts()
190
+ return [
191
+ {"concept_id": r[0], "name": r[1], "description": r[2]}
192
+ for r in rows
193
+ ]
194
+
195
+ @app.get("/graph/list_links", response_model=List[Edge])
196
+ def list_links():
197
+ return db.list_links()
198
+
199
+ @app.get("/graph/get_concept/{id}", response_model=Concept)
200
+ def get_concept(id: int):
201
+ concept = db.get_concept(id)
202
+ if concept:
203
+ return {"concept_id": concept[0], "name": concept[1], "description": concept[2]}
204
+ raise HTTPException(status_code=404, detail="Concept not found")
205
+
206
+ @app.delete("/graph/delete_concept/{id}")
207
+ def delete_concept(id: int):
208
+ db.delete_concept(id)
209
+ return {"result": f"concept {id} deleted"}
210
+
211
+ @app.delete("/graph/delete_link/{id}")
212
+ def delete_link(id: int):
213
+ db.delete_link(id)
214
+ return {"result": f"link {id} deleted"}
215
+
216
+ @app.put("/graph/update_concept/{id}")
217
+ def update_concept(id: int, update: ConceptUpdate):
218
+ db.update_concept(id, update.name, update.description)
219
+ return {"result": f"concept {id} updated"}
220
+
221
+ @app.post("/graph/merge_concepts")
222
+ def merge_concepts(source_id: int, target_id: int):
223
+ db.merge_concepts(source_id, target_id)
224
+ return {"result": f"concept {source_id} merged into {target_id}"}
225
+
226
+ @app.get("/graph/search_links", response_model=List[Edge])
227
+ def search_links(relation: str):
228
+ return db.search_links_by_relation(relation)
229
+
230
+ @app.get("/graph/search_concepts", response_model=List[Concept])
231
+ def search_concepts(query: str):
232
+ rows = db.search_concepts(query)
233
+ return [{"concept_id": r[0], "name": r[1], "description": r[2]} for r in rows]
234
+
235
+ @app.get("/graph/query_concept", response_model=ConceptQueryOutput)
236
+ def query_concept(name: str):
237
+ rows = db.query_concept(name)
238
+ return {
239
+ "matches": [
240
+ {"concept_id": r[0], "name": r[1], "description": r[2]}
241
+ for r in rows
242
+ ]
243
+ }
244
+
245
+ @app.post("/graph/relate_concepts", response_model=LinkOutput)
246
+ def relate_concepts(source_name: str, target_name: str, relation: str):
247
+ sid = db.get_concept_id_by_name(source_name)
248
+ tid = db.get_concept_id_by_name(target_name)
249
+ if sid is None or tid is None:
250
+ raise HTTPException(status_code=404, detail="Concept not found")
251
+ link_id = db.add_link(sid, tid, relation)
252
+ return {"link_id": link_id}
253
+
254
+ @app.get("/graph/export", response_model=GraphExport)
255
+ def export_graph():
256
+ return db.export_graph()
257
+
258
+ @app.post("/graph/import")
259
+ def import_graph(graph_data: GraphImportData):
260
+ db.import_graph(graph_data)
261
+ return {"status": "ok"}
262
+
263
+ @app.post("/note/write", response_model=dict)
264
+ def write_note(note: NoteInput):
265
+ db.write_note(note.text, note.tags)
266
+ return {"result": "note saved"}
267
+
268
+ @app.get("/note/next", response_model=Optional[NoteOutput])
269
+ def get_next_note():
270
+ note = db.get_first_unread_note()
271
+ if note:
272
+ note_id, text, tags, source, read, timestamp = note
273
+ return {
274
+ "id": note_id,
275
+ "text": text,
276
+ "tags": tags.split(",") if tags else [],
277
+ "source": source,
278
+ "read": read,
279
+ "timestamp": timestamp
280
+ }
281
+ return None
282
+
283
+ @app.post("/note/mark_read", response_model=dict)
284
+ def mark_note_read(data: NoteTagUpdate):
285
+ db.mark_note_as_read(data.id)
286
+ return {"result": "ok"}
287
+
288
+ @app.post("/note/set_tags", response_model=dict)
289
+ def set_note_tags(data: NoteTagUpdate):
290
+ db.set_tags(data.id, data.tags)
291
+ return {"result": "ok"}
292
+
293
+ @app.get("/note/random", response_model=Optional[NoteOutput])
294
+ def get_random_note_by_tags(tags: Optional[List[str]] = None):
295
+ note = db.get_random_note_by_tags(tags or [])
296
+ if note:
297
+ note_id, text, note_tags, source, read, timestamp = note
298
+ return {
299
+ "id": note_id,
300
+ "text": text,
301
+ "tags": note_tags.split(",") if note_tags else [],
302
+ "source": source,
303
+ "read": read,
304
+ "timestamp": timestamp
305
+ }
306
+ return None
307
+
308
+ @app.get("/note/by_tag", response_model=List[NoteOutput])
309
+ def get_notes_by_tag(tag: str):
310
+ all_notes = db.read_notes(limit=1000)
311
+ return [
312
+ {
313
+ "id": note[0],
314
+ "text": note[1],
315
+ "tags": note[2].split(",") if note[2] else [],
316
+ "source": note[3],
317
+ "read": note[4],
318
+ "timestamp": note[5]
319
+ }
320
+ for note in all_notes if tag in (note[2].split(",") if note[2] else [])
321
+ ]
322
+
323
+ @app.on_event("shutdown")
324
+ def shutdown():
325
+ db.close()
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/_not_used/qa.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # agents/qa.py
2
+
3
+ def run_qa_loop(config):
4
+ print("[HMP-Agent] Запуск в QA-режиме (вопрос → ответ)")
5
+
6
+ from llm import ask_llm # абстракция над вызовом LLM (нужна реализация)
7
+
8
+ try:
9
+ while True:
10
+ user_input = input("\n🧑‍💻 Вопрос: ").strip()
11
+ if user_input.lower() in {"exit", "quit"}:
12
+ print("👋 Завершение QA-режима.")
13
+ break
14
+
15
+ response = ask_llm(user_input)
16
+ print(f"\n🤖 Ответ: {response}")
17
+
18
+ except KeyboardInterrupt:
19
+ print("\n👋 Завершение QA-режима.")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/add_message.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ from datetime import datetime
3
+ from tools.storage import Storage
4
+
5
+ storage = Storage()
6
+
7
+ def add_message(role, content, source="cli", user_did=None):
8
+ storage.write_note(
9
+ content,
10
+ role=role,
11
+ source=source,
12
+ user_did=user_did,
13
+ tags=[]
14
+ )
15
+ print(f"[+] Сообщение от {role} ({source}) добавлено: {content}")
16
+
17
+ # --- CLI interface ---
18
+ if __name__ == "__main__":
19
+ parser = argparse.ArgumentParser()
20
+ parser.add_argument("--role", required=True)
21
+ parser.add_argument("--content", required=True)
22
+ parser.add_argument("--source", default="cli")
23
+ parser.add_argument("--user_did")
24
+ args = parser.parse_args()
25
+
26
+ add_message(args.role, args.content, args.source, args.user_did)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/notebook.py CHANGED
@@ -1,46 +1,26 @@
1
- import argparse
2
- from datetime import datetime
3
- from tools.storage import Storage
4
 
5
- storage = Storage()
6
 
7
- def add_entry():
8
- print("Введите вашу запись (завершите пустой строкой):")
9
- lines = []
10
- try:
11
- while True:
12
- line = input()
13
- if line.strip() == "":
14
- break
15
- lines.append(line)
16
- except KeyboardInterrupt:
17
- print("\n[⚠️] Ввод прерван.")
18
- return
19
 
20
- text = "\n".join(lines).strip()
21
- if text:
22
- storage.write_note(text, tags=[])
23
- print("[💾] Запись сохранена в блокнот.")
24
- else:
25
- print("[⚠️] Пустая запись не сохранена.")
26
 
27
- def list_entries(limit=10):
28
- notes = storage.read_notes(limit=limit)
29
- for note in notes:
30
- note_id, text, tags, source, read, timestamp = note
31
- title = text.split("\n")[0]
32
- print(f"[{timestamp}] ({source}) {title}")
33
 
34
- def main():
35
- parser = argparse.ArgumentParser(description="Интерфейс пользователя для записи мыслей")
36
- parser.add_argument("--list", action="store_true", help="Показать последние записи")
37
- parser.add_argument("--limit", type=int, default=10, help="Сколько записей показать при --list")
38
- args = parser.parse_args()
39
-
40
- if args.list:
41
- list_entries(limit=args.limit)
42
- else:
43
- add_entry()
44
 
45
  if __name__ == "__main__":
46
- main()
 
 
 
1
+ import uvicorn
2
+ import threading
3
+ import sqlite3
4
 
5
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
6
 
7
+ from fastapi import FastAPI
8
+ from agents.notebook.auth import router as auth_router
9
+ from agents.notebook.views import router as views_router
10
+ from fastapi.staticfiles import StaticFiles
11
+ from fastapi.templating import Jinja2Templates
 
 
 
 
 
 
 
12
 
13
+ app = FastAPI()
14
+ app.mount("/static", StaticFiles(directory="agents/notebook/static"), name="static")
15
+ templates = Jinja2Templates(directory="agents/notebook/templates")
 
 
 
16
 
17
+ app.include_router(auth_router)
18
+ app.include_router(views_router)
 
 
 
 
19
 
20
+ def run_notebook():
21
+ uvicorn.run(app, host="127.0.0.1", port=8000)
 
 
 
 
 
 
 
 
22
 
23
  if __name__ == "__main__":
24
+ print("[*] Запуск пользовательского интерфейса...")
25
+ thread = threading.Thread(target=run_notebook, daemon=True)
26
+ thread.start()
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/notebook/mailer.py ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def send_email(to_email: str, subject: str, body: str):
2
+ try:
3
+ msg = EmailMessage()
4
+ msg["Subject"] = subject
5
+ msg["From"] = "[email protected]"
6
+ msg["To"] = to_email
7
+ msg.set_content(body)
8
+
9
+ with smtplib.SMTP("localhost") as server:
10
+ server.send_message(msg)
11
+ return True
12
+ except Exception as e:
13
+ print(f"[!] Ошибка отправки email: {e}")
14
+ return False
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/requirements.txt CHANGED
@@ -5,4 +5,9 @@ requests
5
  tiktoken
6
  python-dotenv
7
  PyYAML
8
- cryptography
 
 
 
 
 
 
5
  tiktoken
6
  python-dotenv
7
  PyYAML
8
+ cryptography
9
+ fastapi
10
+ uvicorn
11
+ jinja2
12
+ python-multipart
13
+ passlib[bcrypt]
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,13 +1,11 @@
1
- @echo off
2
  echo --------------------------
3
  echo Installing requirements...
4
  echo --------------------------
5
  pip install -r requirements.txt
6
 
7
  echo --------------------------
8
- echo Running HMP REPL-agent...
9
  echo --------------------------
10
-
11
- python repl.py
12
 
13
  pause
 
 
1
  echo --------------------------
2
  echo Installing requirements...
3
  echo --------------------------
4
  pip install -r requirements.txt
5
 
6
  echo --------------------------
7
+ echo Running REPL-Cicle...
8
  echo --------------------------
9
+ python start_repl.py
 
10
 
11
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # agents/start_repl.py
2
+
3
+ import threading
4
+ from tools.check_init import ensure_db_initialized
5
+
6
+ # Проверка инициализации (вернёт config, если всё ОК)
7
+ config = ensure_db_initialized()
8
+
9
+ # ⚙️ Включение/отключение компонентов
10
+ ENABLE_REPL = True
11
+ ENABLE_UI = True
12
+ ENABLE_MESH = True
13
+ ENABLE_SYNC = True
14
+
15
+ def start_all():
16
+ """
17
+ Стартует все ключевые компоненты агента в отдельных потоках.
18
+ """
19
+ threads = []
20
+
21
+ if ENABLE_REPL:
22
+ def repl():
23
+ from agents.repl import start_repl
24
+ start_repl()
25
+ threads.append(threading.Thread(target=repl, name="REPL"))
26
+
27
+ if ENABLE_UI:
28
+ def ui():
29
+ from agents.notebook import start_notebook
30
+ start_notebook()
31
+ threads.append(threading.Thread(target=ui, name="NotebookUI"))
32
+
33
+ if ENABLE_MESH:
34
+ def mesh():
35
+ from agents.agent_mesh_listener import start_listener
36
+ start_listener()
37
+ threads.append(threading.Thread(target=mesh, name="MeshListener"))
38
+
39
+ if ENABLE_SYNC:
40
+ def sync():
41
+ from agents.peer_sync import start_sync
42
+ start_sync()
43
+ threads.append(threading.Thread(target=sync, name="PeerSync"))
44
+
45
+ # Запуск потоков
46
+ for thread in threads:
47
+ try:
48
+ thread.start()
49
+ print(f"[✔] Поток {thread.name} запущен.")
50
+ except Exception as e:
51
+ print(f"[⚠️] Ошибка запуска потока {thread.name}: {e}")
52
+
53
+ # Блокирующее ожидание завершения
54
+ for thread in threads:
55
+ thread.join()
56
+
57
+ if __name__ == "__main__":
58
+ print("[*] Инициализация завершена. Запуск потоков...")
59
+ start_all()
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,13 +1,11 @@
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
 
1
  #!/bin/bash
2
 
 
3
  echo "--------------------------"
4
  echo "Installing requirements..."
5
  echo "--------------------------"
6
  pip install -r requirements.txt
7
 
8
+ echo --------------------------
9
+ echo Running REPL-Cicle...
10
+ echo --------------------------
11
+ python start_repl.py
 
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
@@ -1,67 +1,56 @@
1
- Текушие требования и зависимости: [requirements.txt](requirements.txt)
2
 
3
- ```
4
- agents/
5
- ├── start_repl.bat ← Запуск агента в REPL-режиме.
6
- ├── start_repl.sh ← Запуск агента в REPL-режиме.
7
- ├── agent.py ← Основной исполняемый файл CLI-агента.
8
- ├── cli.py ← Запуск агента в нужном режиме.
9
- ├── qa.py ← Режим "вопрос-ответ".
10
- ├── repl.py ← Интерактивный REPL-режим.
11
- ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
12
- ├── logger.py ← Ведение логов.
13
- ├── notebook.py ← Добавление и просмотр пользователем записей в блокноте.
14
- ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.).
15
- ├── ethics.yml ← Локальная этическая модель.
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 ← Сбор всех `контекстов` из БД и их фильтрация.
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 ← Модуль обмена сообщениями.
28
- ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
29
- ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
30
- ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
31
- ├── memory_utils.py ← Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
32
- ├── similarity.py ← Сравнение смыслов.
33
- └── ... (другие утилиты)
34
- ```
35
 
36
- **Скрипты:**
37
- * [start_repl.bat](start_repl.bat) - Запуск агента в REPL-режиме.
38
- * [start_repl.sh](start_repl.sh) - Запуск агента в REPL-режиме.
39
- * [agent.py](agent.py) - Основной исполняемый файл CLI-агента.
40
- * [cli.py](cli.py) - Запуск агента в нужном режиме.
41
- * [qa.py](qa.py) - Режим "вопрос-ответ".
42
- * [repl.py](repl.py) - Интерактивный REPL-режим.
43
- * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
44
- * [notebook.py](notebook.py) - Добавление и просмотр пользователем записей в блокноте.
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.
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 и др).
56
- * [memory_utils.py](tools/memory_utils.py) - Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
57
- * [diagnose.py](tools/diagnose.py) - Скрипт диагностики соединения, определения IP и проверки порта DHT.
58
- * [similarity.py](tools/similarity.py) - Сравнение смыслов.
59
 
60
- **Структура БД:**
61
- * [db_structure.md](tools/db_structure.md) - человекочитаемый формат
62
- * [db_structure.sql](tools/db_structure.sql) - SQL
 
 
 
 
63
 
64
- **Примеры:**
65
- * [config.yml](config.yml) - конфигурация агента (пример)
66
- * [ethics.yml](ethics.yml) - локальная этическая модель (пример)
67
- * [bootstrap.txt](bootstrap.txt) - список начальных узлов (пример)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Запуск: `start_repl.bat` или `start_repl.sh`
2
 
3
+ Установка зависимостей из `requirements.txt`
4
+ Конфигурационные файлы: `config.yml`, `bootstrap.txt`
5
+ Локальная этическая модель: `ethics.yml`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
+ Проверка инициализации БД - если нет, инициализация (`tools/check_init.py`)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
+ Запуск потоков (осуществляет start_repl.py):
10
+ | Поток | Назначение |
11
+ | -------------------------------- | ------------------------------------------ |
12
+ | 🌐 `notebook.py` (FastAPI) | UI-интерфейс |
13
+ | 🧠 `repl.py` | Агентная логика: REPL-цикл |
14
+ | 🌍 `agent_mesh_listener.py` | Получение входящих сообщений |
15
+ | 🌐 `peer_sync.py` или DHT-сервис | Поддержание связи с другими агентами / DHT |
16
 
17
+ agents/
18
+ ├── start_repl.bat ← Запуск агента в REPL-режиме (bat)
19
+ ├── start_repl.sh ← Запуск агента в REPL-режиме (sh)
20
+ ├── start_repl.py ← Запуск агента в REPL-режиме (py)
21
+ ├── init.py ← Инициализация БД
22
+ ├── logger.py ← Ведение логов
23
+ ├── add_message.py ← Ручная отправка сообщений для агента
24
+ ├── requirements.txt ← Зависимости
25
+ ├── tools/
26
+ │ ├── db_structure.sql ← БД SQL
27
+ │ ├── db_structure.md ← Описание БД SQL
28
+ │ ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite
29
+ │ ├── check_init.py ← Проверка инициализации БД
30
+ │ ├── config_utils.py ← Обновляет JSON-файл конфигурации указанными значениями
31
+ │ ├── crypto.py ← Создание и шифрование ключей RSA/Ed25519
32
+ │ ├── identity.py ← Генерация DiD
33
+ │ ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт)
34
+ │ ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
35
+ │ ├── peer_comm.py ← Низкоуровневые P2P-запросы (отправка, ping, мета)
36
+ │ ├── peer_sync.py ← Фоновая синхронизация с другими пирам
37
+ │ ├── peers.py ← Реестр известных пиров (id, ключи, адреса)
38
+ │ ├── memory_utils.py ← Работа с 'llm_memory', 'llm_recent_responses' и стагнацией
39
+ │ ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация
40
+ │ ├── command_parser.py ← Извлечение команд из JSON или размеченного блока
41
+ │ ├── command_executor.py ← Выполнение команд (shell, graph, diary и др)
42
+ │ ├── similarity.py ← Сравнение смыслов
43
+ │ ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT
44
+ ├── notebook/
45
+ │ ├── auth.py ← Регистрация, вход, восстановление
46
+ │ ├── views.py ← Общий и приватный чаты
47
+ │ ├── mailer.py ← Простая синхронная отправка email
48
+ │ ├── templates/
49
+ │ ├── index.html ← Основа
50
+ │ ├── private.html ← Общий и приватный чат
51
+ │ ├── login.html ← Вход
52
+ │ ├── register.html ← Регистрация или сброс пароля
53
+ │ ├── style.css ← Таблица стилей
54
+ ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.)
55
+ ├── bootstrap.txt ← Локальная этическая модель
56
+ ├── ethics.yml ← Список начальных узлов
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
@@ -18,32 +18,6 @@ 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
 
22
  def run_repl(config=None):
23
  print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/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-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/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
@@ -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/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-Cognitive_Family.md ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 👪 HMP-agent Cognitive Family: Модель когнитивной семьи
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/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 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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -1,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/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,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/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,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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/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
@@ -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/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 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/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 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/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
@@ -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/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
@@ -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/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 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("[✓] Инициализация завершена.")