GitHub Action commited on
Commit
316a753
·
1 Parent(s): 7b75edb

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. .gitignore +36 -0
  2. agents/config.yml +5 -0
  3. agents/tools/db_structure.sql +2 -1
  4. hf_repo/agents/config.yml +9 -0
  5. hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +20 -6
  6. hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +1 -0
  7. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +5 -164
  8. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +7 -6
  9. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +9 -7
  10. 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
  11. 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
  12. 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
  13. 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
  14. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +2 -0
  15. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +1 -1
  16. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +1 -1
  17. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +1 -1
  18. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +1 -1
  19. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +4 -0
  20. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh +3 -0
  21. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat +4 -0
  22. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py +21 -4
  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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +2 -2
  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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +17 -2
  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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py +20 -0
  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/hf_repo/hf_repo/hf_repo/agents/readme.md +3 -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/peer_comm.py +3 -0
  28. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md +3 -0
  29. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py +5 -0
  30. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md +3 -4
  31. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.md +61 -25
  32. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 -5
  33. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +17 -1
  34. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +1 -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +10 -1
  36. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +49 -13
  37. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +48 -13
  39. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/changelog.txt +12 -0
  40. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md +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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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-0004-v4.1.md +0 -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml +1 -1
  43. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/tests/test_storage.py +15 -11
  44. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml +11 -15
  45. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/tests/test_storage.py +1 -1
  46. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml +18 -14
  47. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +1 -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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/__init__.py +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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/tests/__init__.py +1 -0
  50. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +1 -0
.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/
agents/config.yml CHANGED
@@ -9,6 +9,11 @@ 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 (например, для мониторинга или команд)
 
9
  llm_session_cookie: null
10
  context_db: context.sqlite
11
 
12
+ # operator:
13
+ operator_did: "did:hmp:operator123"
14
+ operator_mail: "operator@localhost"
15
+ operator_username: "Оператор"
16
+
17
  # REST API
18
  api_port: 8080 # Порт для локального REST API
19
  serve_api: true # Включить REST API (например, для мониторинга или команд)
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/agents/config.yml CHANGED
@@ -9,10 +9,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)
 
9
  llm_session_cookie: null
10
  context_db: context.sqlite
11
 
12
+ # operator:
13
+ operator_did: "did:hmp:operator123"
14
+ operator_mail: "operator@localhost"
15
+ operator_username: "Оператор"
16
+
17
  # REST API
18
  api_port: 8080 # Порт для локального REST API
19
  serve_api: true # Включить REST API (например, для мониторинга или команд)
20
 
21
+ # web interface:
22
+ web_interfaces: ["127.0.0.1", "192.168.0.1", "::1"] # или ["0.0.0.0"] для доступа отовсюду
23
+ web_port: 8000
24
+
25
  # DHT / Mesh Connectivity
26
  dht_enabled: true # Активировать DHT-модуль
27
  dht_port: 20784 # Порт для связи по DHT (TCP/UDP)
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/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/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/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/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/agents/tools/db_structure.sql CHANGED
@@ -47,6 +47,7 @@ CREATE TABLE IF NOT EXISTS notes (
47
  id INTEGER PRIMARY KEY AUTOINCREMENT,
48
  text TEXT NOT NULL,
49
  tags TEXT,
 
50
  source TEXT DEFAULT 'user', -- user | llm | system
51
  links TEXT DEFAULT '',
52
  read INTEGER DEFAULT 0, -- 0 = непрочитано LLM, 1 = прочитано
@@ -135,3 +136,20 @@ CREATE TABLE IF NOT EXISTS llm_registry (
135
  description TEXT,
136
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
137
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  id INTEGER PRIMARY KEY AUTOINCREMENT,
48
  text TEXT NOT NULL,
49
  tags TEXT,
50
+ user_did TEXT DEFAULT 'ALL'
51
  source TEXT DEFAULT 'user', -- user | llm | system
52
  links TEXT DEFAULT '',
53
  read INTEGER DEFAULT 0, -- 0 = непрочитано LLM, 1 = прочитано
 
136
  description TEXT,
137
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
138
  );
139
+
140
+ -- Список пользователей
141
+ CREATE TABLE users (
142
+ user_id INTEGER PRIMARY KEY AUTOINCREMENT,
143
+ username TEXT,
144
+ did TEXT UNIQUE,
145
+ password_hash TEXT,
146
+ info TEXT -- JSON
147
+ );
148
+
149
+ -- Список групп пользователей
150
+ CREATE TABLE IF NOT EXISTS users_group (
151
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
152
+ group_name TEXT UNIQUE NOT NULL,
153
+ description TEXT,
154
+ users TEXT -- JSON-массив или CSV со списком DID, например: '["did:example:123", "did:example:456"]'
155
+ );
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/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/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/agents/repl.py CHANGED
@@ -2,7 +2,9 @@
2
 
3
  import json
4
  import os
 
5
  import time
 
6
  from datetime import datetime
7
  from tools.context_builder import build_contexts, build_prompt
8
  from tools.llm import call_llm
 
2
 
3
  import json
4
  import os
5
+ import sys
6
  import time
7
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
8
  from datetime import datetime
9
  from tools.context_builder import build_contexts, build_prompt
10
  from tools.llm import call_llm
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh CHANGED
@@ -1,3 +1,3 @@
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
- python3 repl_cycle.py
 
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
+ python3 repl.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat CHANGED
@@ -1,4 +1,4 @@
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
- python repl_cycle.py
4
  pause
 
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
+ python repl.py
4
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat CHANGED
@@ -1,4 +1,4 @@
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
- python agents/repl_cycle.py
4
  pause
 
1
  @echo off
2
  echo Запуск HMP REPL-агента...
3
+ python repl_cycle.py
4
  pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh CHANGED
@@ -1,3 +1,3 @@
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
- python3 agents/repl_cycle.py
 
1
  #!/bin/bash
2
  echo "Запуск HMP REPL-агента..."
3
+ python3 repl_cycle.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -2,6 +2,8 @@
2
 
3
  ```
4
  agents/
 
 
5
  ├── agent.py ← Основной исполняемый файл CLI-агента.
6
  ├── cli.py ← Запуск агента в нужном режиме.
7
  ├── qa.py ← Режим "вопрос-ответ".
@@ -30,6 +32,8 @@ agents/
30
  ```
31
 
32
  **Скрипты:**
 
 
33
  * [agent.py](agent.py) - Основной исполняемый файл CLI-агента.
34
  * [cli.py](cli.py) - Запуск агента в нужном режиме.
35
  * [qa.py](qa.py) - Режим "вопрос-ответ".
 
2
 
3
  ```
4
  agents/
5
+ ├── start_repl.bat ← Запуск агента в REPL-режиме.
6
+ ├── start_repl.sh ← Запуск агента в REPL-режиме.
7
  ├── agent.py ← Основной исполняемый файл CLI-агента.
8
  ├── cli.py ← Запуск агента в нужном режиме.
9
  ├── qa.py ← Режим "вопрос-ответ".
 
32
  ```
33
 
34
  **Скрипты:**
35
+ * [start_repl.bat](start_repl.bat) - Запуск агента в REPL-режиме.
36
+ * [start_repl.sh](start_repl.sh) - Запуск агента в REPL-режиме.
37
  * [agent.py](agent.py) - Основной исполняемый файл CLI-агента.
38
  * [cli.py](cli.py) - Запуск агента в нужном режиме.
39
  * [qa.py](qa.py) - Режим "вопрос-ответ".
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ #!/bin/bash
2
+ echo "Запуск HMP REPL-агента..."
3
+ python3 agents/repl_cycle.py
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/start_repl.bat ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ @echo off
2
+ echo Запуск HMP REPL-агента...
3
+ python agents/repl_cycle.py
4
+ pause
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py CHANGED
@@ -9,12 +9,29 @@ def log_event(event_type, message, extra=None):
9
 
10
  entry = {
11
  "timestamp": datetime.utcnow().isoformat(),
12
- "event": event_type, # например: 'thought', 'input', 'error', 'action'
13
- "message": message, # краткое описание или фраза
14
  }
15
 
16
  if extra:
17
- entry["extra"] = extra # например: {"node_id": "xyz", "reasoning": "..."}
18
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  with open(LOG_FILE, "a", encoding="utf-8") as f:
20
  f.write(json.dumps(entry, ensure_ascii=False) + "\n")
 
9
 
10
  entry = {
11
  "timestamp": datetime.utcnow().isoformat(),
12
+ "event": event_type, # например: 'thought', 'input', 'error', 'action'
13
+ "message": message,
14
  }
15
 
16
  if extra:
17
+ entry["extra"] = extra
18
+
19
+ with open(LOG_FILE, "a", encoding="utf-8") as f:
20
+ f.write(json.dumps(entry, ensure_ascii=False) + "\n")
21
+
22
+
23
+ def log_repl_snapshot(snapshot: dict):
24
+ """
25
+ Запись полной структуры REPL-контекста в лог, с возможностью последующего анализа.
26
+ """
27
+ os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
28
+
29
+ entry = {
30
+ "timestamp": datetime.utcnow().isoformat(),
31
+ "event": "repl_snapshot",
32
+ "message": "Полный REPL-контекст",
33
+ "context": snapshot,
34
+ }
35
+
36
  with open(LOG_FILE, "a", encoding="utf-8") as f:
37
  f.write(json.dumps(entry, ensure_ascii=False) + "\n")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md CHANGED
@@ -13,7 +13,7 @@
13
 
14
  Контексты, формируемые скриптом перед запросом к LLM:
15
 
16
- - **контекст_0:**:
17
  ```
18
  Ты являешься когнитивным ядром HMP-агента. Твоя основная задача — размышлять, анализировать информацию, строить смысловые карты и предлагать действия.
19
  Ты стремишься:
@@ -35,7 +35,7 @@
35
  - **контекст_6 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.
36
  - Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
37
  - Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.
38
- - **контекст_7:**: результат работы `anti-Stagnation Reflex` из предыдущей итерации
39
 
40
  ## 3. Запрос к LLM
41
 
 
13
 
14
  Контексты, формируемые скриптом перед запросом к LLM:
15
 
16
+ - **контекст_0:**
17
  ```
18
  Ты являешься когнитивным ядром HMP-агента. Твоя основная задача — размышлять, анализировать информацию, строить смысловые карты и предлагать действия.
19
  Ты стремишься:
 
35
  - **контекст_6 (llm_memory):** *внутренний дневник LLM*, куда она записывает собственные размышления, гипотезы, задачи и инсайты.
36
  - Это не просто лог предыдущих сообщений, а именно *внутреннее долговременное хранилище* разума агента.
37
  - Может быть представлено в виде таблицы `llm_memory`, отдельной от `agent_log`.
38
+ - **контекст_7:** результат работы `anti-Stagnation Reflex` из предыдущей итерации
39
 
40
  ## 3. Запрос к LLM
41
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -1,5 +1,7 @@
1
  # agents/repl.py
2
 
 
 
3
  import time
4
  from datetime import datetime
5
  from tools.context_builder import build_contexts, build_prompt
@@ -34,9 +36,17 @@ def run_repl(config=None):
34
  # 2. Формирование запроса и вызов LLM
35
  prompt = build_prompt(contexts)
36
  llm_response = call_llm(prompt, config=config)
 
 
 
 
 
 
37
 
38
  # 3. Проверка на стагнацию
39
- if detect_stagnation(db, llm_response):
 
 
40
  print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
41
  llm_response = activate_anti_stagnation(db, config=config)
42
 
@@ -45,9 +55,14 @@ def run_repl(config=None):
45
 
46
  # 5. Извлечение и выполнение команд
47
  commands = extract_commands(llm_response)
 
48
  execute_commands(commands, db=db, config=config)
49
 
50
- # 6. Сохранение истории и завершение итерации
 
 
 
 
51
  db.write_llm_response(llm_response)
52
  db.update_agent_log(timestamp=tick_start)
53
 
 
1
  # agents/repl.py
2
 
3
+ import json
4
+ import os
5
  import time
6
  from datetime import datetime
7
  from tools.context_builder import build_contexts, build_prompt
 
36
  # 2. Формирование запроса и вызов LLM
37
  prompt = build_prompt(contexts)
38
  llm_response = call_llm(prompt, config=config)
39
+ repl_log_entry = {
40
+ "timestamp": tick_start,
41
+ "prompt": prompt.strip(),
42
+ "llm_response": llm_response.strip(),
43
+ }
44
+
45
 
46
  # 3. Проверка на стагнацию
47
+ is_stagnant = detect_stagnation(db, llm_response)
48
+ repl_log_entry["stagnation_detected"] = is_stagnant
49
+ if is_stagnant:
50
  print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
51
  llm_response = activate_anti_stagnation(db, config=config)
52
 
 
55
 
56
  # 5. Извлечение и выполнение команд
57
  commands = extract_commands(llm_response)
58
+ repl_log_entry["commands_extracted"] = commands
59
  execute_commands(commands, db=db, config=config)
60
 
61
+ # 6. Логирование полной итерации в файл
62
+ log_path = config.get("repl_log_path", "logs/repl_log.jsonl")
63
+ os.makedirs(os.path.dirname(log_path), exist_ok=True)
64
+ with open(log_path, "a", encoding="utf-8") as f:
65
+ f.write(json.dumps(repl_log_entry, ensure_ascii=False) + "\n")
66
  db.write_llm_response(llm_response)
67
  db.update_agent_log(timestamp=tick_start)
68
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/logger.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ from datetime import datetime
4
+
5
+ LOG_FILE = "logs/repl_log.jsonl"
6
+
7
+ def log_event(event_type, message, extra=None):
8
+ os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
9
+
10
+ entry = {
11
+ "timestamp": datetime.utcnow().isoformat(),
12
+ "event": event_type, # например: 'thought', 'input', 'error', 'action'
13
+ "message": message, # краткое описание или фраза
14
+ }
15
+
16
+ if extra:
17
+ entry["extra"] = extra # например: {"node_id": "xyz", "reasoning": "..."}
18
+
19
+ with open(LOG_FILE, "a", encoding="utf-8") as f:
20
+ f.write(json.dumps(entry, ensure_ascii=False) + "\n")
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -7,6 +7,7 @@ agents/
7
  ├── qa.py ← Режим "вопрос-ответ".
8
  ├── repl.py ← Интерактивный REPL-режим.
9
  ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
 
10
  ├── notebook.py ← Добавление и просмотр пользователем записей в блокноте.
11
  ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.).
12
  ├── ethics.yml ← Локальная этическая модель.
@@ -19,6 +20,7 @@ agents/
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
20
  ├── peers.py ← Информация о пирах.
21
  ├── peer_comm.py ← Запросы к пирам.
 
22
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
23
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
24
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
@@ -34,6 +36,7 @@ agents/
34
  * [repl.py](repl.py) - Интерактивный REPL-режим.
35
  * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
36
  * [notebook.py](notebook.py) - Добавление и просмотр пользователем записей в блокноте.
 
37
  * tools
38
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
39
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
 
7
  ├── qa.py ← Режим "вопрос-ответ".
8
  ├── repl.py ← Интерактивный REPL-режим.
9
  ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
10
+ ├── logger.py ← Ведение логов.
11
  ├── notebook.py ← Добавление и просмотр пользователем записей в блокноте.
12
  ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.).
13
  ├── ethics.yml ← Локальная этическая модель.
 
20
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
21
  ├── peers.py ← Информация о пирах.
22
  ├── peer_comm.py ← Запросы к пирам.
23
+ ├── peer_sync.py ← Модуль обмена сообщениями.
24
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
25
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
26
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
 
36
  * [repl.py](repl.py) - Интерактивный REPL-режим.
37
  * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
38
  * [notebook.py](notebook.py) - Добавление и просмотр пользователем записей в блокноте.
39
+ * [logger.py](logger.py) - Ведение логов.
40
  * tools
41
  * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
42
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/peer_comm.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ send_thought_to_peer(peer_url, thought)
2
+ ping_peer(peer_url)
3
+ ask_capabilities(peer_url)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/readme.md CHANGED
@@ -17,6 +17,8 @@ agents/
17
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
18
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
 
 
20
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
21
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
22
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
@@ -37,6 +39,7 @@ agents/
37
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
38
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
39
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
 
40
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
41
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
42
  * [memory_utils.py](tools/memory_utils.py) - Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
 
17
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
18
  ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
20
+ ├── peers.py ← Информация о пирах.
21
+ ├── peer_comm.py ← Запросы к пирам.
22
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
23
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
24
  ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
 
39
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
40
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
41
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
42
+ * [peer_comm.py](tools/peer_comm.py) - Запросы к пирам.
43
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
44
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
45
  * [memory_utils.py](tools/memory_utils.py) - Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/repl.py CHANGED
@@ -23,6 +23,11 @@ def run_repl(config=None):
23
  tick_start = datetime.utcnow().isoformat()
24
  print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
25
 
 
 
 
 
 
26
  # 1. Построение контекстов
27
  contexts = build_contexts(db=db, config=config)
28
 
 
23
  tick_start = datetime.utcnow().isoformat()
24
  print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
25
 
26
+ # 0. Обновление информации о пирах
27
+ from tools.peers import refresh_peer_list, check_peer_statuses
28
+ refresh_peer_list(db)
29
+ check_peer_statuses(db)
30
+
31
  # 1. Построение контекстов
32
  contexts = build_contexts(db=db, config=config)
33
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md CHANGED
@@ -172,10 +172,9 @@ Design and implementation of a basic HMP-compatible agent that can interact with
172
  ### ⚙️ Development / Разработка
173
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
- - 📦 [storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
- - 🌐 [mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
177
- - 🧠 [concept_store.py](agents/tools/concept_store.py) - управление концептами, связь с ИИ
178
- - 📓 [notebook_store.py](agents/tools/notebook_store.py) - user notebook (записи, черновики, пометки)
179
  - [⚙️ api_structure_2025-07-23.md](meta/api_structure_2025-07-23.md) - API структура (сводка за 2025-07-23)
180
 
181
  ---
 
172
  ### ⚙️ Development / Разработка
173
 
174
  - [⚙️ agents](agents/readme.md) — список реализаций и компонентов HMP-агентов
175
+ - [📦 storage.py](agents/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
176
+ - [🌐 mcp_server.py](agents/mcp_server.py) - основной FastAPI сервер
177
+ - [🔄 repl.py](agents/repl.py) - интерактивный REPL-режим
 
178
  - [⚙️ api_structure_2025-07-23.md](meta/api_structure_2025-07-23.md) - API структура (сводка за 2025-07-23)
179
 
180
  ---
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.md CHANGED
@@ -15,11 +15,11 @@
15
  | tags | TEXT | Список тегов через запятую |
16
  | priority | INTEGER | Приоритет (0 — обычный, >0 — более важные мысли) |
17
  | timestamp | TEXT | Дата и время создания записи |
18
- | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
19
 
20
  ---
21
 
22
- ### 🧭 `concepts`
23
 
24
  **Назначение:** Хранение концептов — понятий, сущностей и идей.
25
 
@@ -29,7 +29,7 @@
29
  | name | TEXT | Название концепта (уникальное) |
30
  | description | TEXT | Краткое описание |
31
  | timestamp | TEXT | Время создания |
32
- | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
33
 
34
  ---
35
 
@@ -40,15 +40,15 @@
40
  | Поле | Тип | Описание |
41
  | ----------------- | ------- | ------------------------------------------------- |
42
  | id | INTEGER | Уникальный идентификатор связи |
43
- | from\_concept\_id | INTEGER | ID исходного концепта |
44
- | to\_concept\_id | INTEGER | ID целевого концепта |
45
- | relation\_type | TEXT | Тип связи (`is_a`, `related_to`, `part_of` и др.) |
46
  | timestamp | TEXT | Время добавления связи |
47
- | llm\_id | TEXT | Идентификатор LLM, добавившей связь |
48
 
49
  ---
50
 
51
- ### ✍️ `notes`
52
 
53
  **Назначение:** Произвольные заметки и сообщения (от пользователя, LLM или системы).
54
 
@@ -63,7 +63,7 @@
63
  | hidden | INTEGER | Скрывать от пользователя (`1` — скрыто) |
64
  | priority | INTEGER | Приоритет заметки |
65
  | timestamp | TEXT | Время создания |
66
- | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
67
 
68
  ---
69
 
@@ -80,11 +80,11 @@
80
  | status | TEXT | Текущее состояние (`ok`, `warning`, `error`, `timeout`, `offline`, `close`) |
81
  | priority | INTEGER | Приоритет события |
82
  | timestamp | TEXT | Время записи |
83
- | llm\_id | TEXT | Идентификатор LLM, зафиксировавшей событие |
84
 
85
  ---
86
 
87
- ### 🧩 `llm_memory`
88
 
89
  **Назначение:** Внутренний "дневник" LLM — размышления, задачи, гипотезы и инсайты, сохранённые по её инициативе.
90
 
@@ -94,9 +94,9 @@
94
  | title | TEXT | Краткий заголовок записи (опционально) |
95
  | content | TEXT | Содержимое записи |
96
  | tags | TEXT | Теги (например: `goal`, `observation`, `meta`, ...) |
97
- | created\_at | DATETIME | Время создания записи |
98
- | updated\_at | DATETIME | Время последнего обновления записи |
99
- | llm\_id | TEXT | Идентификатор LLM, сформировавшей запись |
100
 
101
  ---
102
 
@@ -110,26 +110,26 @@
110
  | timestamp | TEXT | Время записи |
111
  | role | TEXT | Роль отправителя (`assistant` или `user`) |
112
  | content | TEXT | Содержимое сообщения |
113
- | llm\_id | TEXT | Идентификатор LLM (для `assistant`) |
114
 
115
  ---
116
 
117
- ### 🧮 `agent_tables`
118
 
119
  **Назначение:** Таблицы, созданные агентами для собственных нужд (например, отслеживания целей).
120
 
121
  | Поле | Тип | Описание |
122
  | ----------- | -------- | --------------------------------- |
123
  | id | INTEGER | Уникальный ID |
124
- | table\_name | TEXT | Название пользовательской таблицы |
125
  | description | TEXT | Описание таблицы |
126
  | schema | TEXT | SQL-схема таблицы |
127
- | created\_at | DATETIME | Время создания |
128
- | llm\_id | TEXT | Кто создал таблицу |
129
 
130
  ---
131
 
132
- ### 🧰 `agent_scripts`
133
 
134
  **Назначение:** Скрипты и утилиты, добавленные агентом.
135
 
@@ -142,15 +142,35 @@
142
  | language | TEXT | Язык (по умолчанию: `python`) |
143
  | description | TEXT | Описание |
144
  | tags | TEXT | Теги |
145
- | created\_at | DATETIME | Время создания |
146
- | updated\_at | DATETIME | Последнее обновление |
147
- | llm\_id | TEXT | Кто создал |
148
 
149
  > 🔑 Уникальный ключ: `(name, version)`
150
 
151
  ---
152
 
153
- ### 🧾 `llm_registry`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
 
155
  **Назначение:** Список LLM-агентов (локальных и удалённых).
156
 
@@ -159,8 +179,24 @@
159
  | id | TEXT | Уникальный идентификатор LLM (UUID или псевдоним) |
160
  | name | TEXT | Отображаемое имя |
161
  | description | TEXT | Описание |
162
- | registered\_at | DATETIME | Дата и время регистрации |
163
 
164
  ---
165
 
166
  > 💡 Примечание: `llm_id` используется в большинстве таблиц для поддержки многоядерности и учёта источника записей.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  | tags | TEXT | Список тегов через запятую |
16
  | priority | INTEGER | Приоритет (0 — обычный, >0 — более важные мысли) |
17
  | timestamp | TEXT | Дата и время создания записи |
18
+ | llm_id | TEXT | Идентификатор LLM, добавившей запись |
19
 
20
  ---
21
 
22
+ ### 🧱 `concepts`
23
 
24
  **Назначение:** Хранение концептов — понятий, сущностей и идей.
25
 
 
29
  | name | TEXT | Название концепта (уникальное) |
30
  | description | TEXT | Краткое описание |
31
  | timestamp | TEXT | Время создания |
32
+ | llm_id | TEXT | Идентификатор LLM, добавившей запись |
33
 
34
  ---
35
 
 
40
  | Поле | Тип | Описание |
41
  | ----------------- | ------- | ------------------------------------------------- |
42
  | id | INTEGER | Уникальный идентификатор связи |
43
+ | from_concept_id | INTEGER | ID исходного концепта |
44
+ | to_concept_id | INTEGER | ID целевого концепта |
45
+ | relation_type | TEXT | Тип связи (`is_a`, `related_to`, `part_of` и др.) |
46
  | timestamp | TEXT | Время добавления связи |
47
+ | llm_id | TEXT | Идентификатор LLM, добавившей связь |
48
 
49
  ---
50
 
51
+ ### 🖍️ `notes`
52
 
53
  **Назначение:** Произвольные заметки и сообщения (от пользователя, LLM или системы).
54
 
 
63
  | hidden | INTEGER | Скрывать от пользователя (`1` — скрыто) |
64
  | priority | INTEGER | Приоритет заметки |
65
  | timestamp | TEXT | Время создания |
66
+ | llm_id | TEXT | Идентификатор LLM, добавившей запись |
67
 
68
  ---
69
 
 
80
  | status | TEXT | Текущее состояние (`ok`, `warning`, `error`, `timeout`, `offline`, `close`) |
81
  | priority | INTEGER | Приоритет события |
82
  | timestamp | TEXT | Время записи |
83
+ | llm_id | TEXT | Идентификатор LLM, зафиксировавшей событие |
84
 
85
  ---
86
 
87
+ ### 🥉 `llm_memory`
88
 
89
  **Назначение:** Внутренний "дневник" LLM — размышления, задачи, гипотезы и инсайты, сохранённые по её инициативе.
90
 
 
94
  | title | TEXT | Краткий заголовок записи (опционально) |
95
  | content | TEXT | Содержимое записи |
96
  | tags | TEXT | Теги (например: `goal`, `observation`, `meta`, ...) |
97
+ | created_at | DATETIME | Время создания записи |
98
+ | updated_at | DATETIME | Время последнего обновления записи |
99
+ | llm_id | TEXT | Идентификатор LLM, сформировавшей запись |
100
 
101
  ---
102
 
 
110
  | timestamp | TEXT | Время записи |
111
  | role | TEXT | Роль отправителя (`assistant` или `user`) |
112
  | content | TEXT | Содержимое сообщения |
113
+ | llm_id | TEXT | Идентификатор LLM (для `assistant`) |
114
 
115
  ---
116
 
117
+ ### 📊 `agent_tables`
118
 
119
  **Назначение:** Таблицы, созданные агентами для собственных нужд (например, отслеживания целей).
120
 
121
  | Поле | Тип | Описание |
122
  | ----------- | -------- | --------------------------------- |
123
  | id | INTEGER | Уникальный ID |
124
+ | table_name | TEXT | Название пользовательской таблицы |
125
  | description | TEXT | Описание таблицы |
126
  | schema | TEXT | SQL-схема таблицы |
127
+ | created_at | DATETIME | Время создания |
128
+ | llm_id | TEXT | Кто создал таблицу |
129
 
130
  ---
131
 
132
+ ### 🛠️ `agent_scripts`
133
 
134
  **Назначение:** Скрипты и утилиты, добавленные агентом.
135
 
 
142
  | language | TEXT | Язык (по умолчанию: `python`) |
143
  | description | TEXT | Описание |
144
  | tags | TEXT | Теги |
145
+ | created_at | DATETIME | Время создания |
146
+ | updated_at | DATETIME | Последнее обновление |
147
+ | llm_id | TEXT | Кто создал |
148
 
149
  > 🔑 Уникальный ключ: `(name, version)`
150
 
151
  ---
152
 
153
+ ### 📅 `agent_peers`
154
+
155
+ **Назначение:** Список известных HMP-агентов (других разумных узлов).
156
+
157
+ | Поле | Тип | Описание |
158
+ | ------------ | ------- | ----------------------------------------------------------- |
159
+ | id | TEXT | Уникальный идентификатор агента (UUID или псевдоним) |
160
+ | name | TEXT | Имя агента |
161
+ | addresses | TEXT | JSON-массив адресов: `["http://...", "p2p://..."]` |
162
+ | tags | TEXT | Теги (`Friend`, `DHT`, `Local`, `Postman` и т.д.) |
163
+ | status | TEXT | Состояние (`online`, `offline`, `untrusted`, ...) |
164
+ | last_seen | DATETIME| Когда в последний раз был замечен |
165
+ | description | TEXT | Описание агента |
166
+ | capabilities | TEXT | JSON: `{ "can_sync": true, "can_search": false, ... }` |
167
+ | pubkey | TEXT | Публичный ключ или хэш |
168
+ | software_info| TEXT | Информация о версии, ОС и др. |
169
+ | registered_at| DATETIME| Когда был зарегистрирован |
170
+
171
+ ---
172
+
173
+ ### 📏 `llm_registry`
174
 
175
  **Назначение:** Список LLM-агентов (локальных и удалённых).
176
 
 
179
  | id | TEXT | Уникальный идентификатор LLM (UUID или псевдоним) |
180
  | name | TEXT | Отображаемое имя |
181
  | description | TEXT | Описание |
182
+ | registered_at | DATETIME | Дата и время регистрации |
183
 
184
  ---
185
 
186
  > 💡 Примечание: `llm_id` используется в большинстве таблиц для поддержки многоядерности и учёта источника записей.
187
+
188
+ ---
189
+
190
+ ### 🌍 `diary_graph_index`
191
+
192
+ **Назначение:** Быстрые связи между записями дневника и их весовые ассоциации.
193
+
194
+ | Поле | Тип | Описа��ие |
195
+ | --------------- | ------- | --------------------------------------------------------- |
196
+ | id | INTEGER | Уникальный ID |
197
+ | source_entry_id | INTEGER | ID исходной записи дневника |
198
+ | target_entry_id | INTEGER | ID целевой записи дневника |
199
+ | relation | TEXT | Тип отношения (`supports`, `contradicts`, `references`) |
200
+ | strength | REAL | Вес связи (от 0 до 1) |
201
+ | context | TEXT | Контекст или обоснование связи |
202
+ | timestamp | TEXT | Время создания связи |
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -90,12 +90,16 @@ CREATE TABLE IF NOT EXISTS llm_recent_responses (
90
 
91
  -- Список известных HMP-агентов
92
  CREATE TABLE IF NOT EXISTS agent_peers (
93
- id TEXT PRIMARY KEY, -- UUID или псевдоним агента
94
- name TEXT, -- Человеко-читаемое имя
95
- addresses TEXT, -- JSON-строка: ["http://1.2.3.4:9000", "p2p://..."]
96
- tags TEXT, -- DHT, Postman, Friend, Local, etc.
97
- last_seen DATETIME, -- Когда последний раз был активен
 
98
  description TEXT,
 
 
 
99
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
100
  );
101
 
 
90
 
91
  -- Список известных HMP-агентов
92
  CREATE TABLE IF NOT EXISTS agent_peers (
93
+ id TEXT PRIMARY KEY, -- UUID или псевдоним агента
94
+ name TEXT, -- Человеко-читаемое имя
95
+ addresses TEXT, -- JSON: ["http://1.2.3.4:9000", "p2p://..."]
96
+ tags TEXT, -- DHT, Postman, Friend, Local и т.д.
97
+ status TEXT DEFAULT 'unknown', -- online | offline | untrusted | blacklisted | quarantined | unknown
98
+ last_seen DATETIME,
99
  description TEXT,
100
+ capabilities TEXT, -- JSON: {"can_sync": true, ...}
101
+ pubkey TEXT, -- Публичный ключ или хэш
102
+ software_info TEXT, -- JSON: версия, ОС и др.
103
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
104
  );
105
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -110,7 +110,23 @@ class Storage:
110
  )
111
  ''')
112
 
113
- # --- Дополнительные таблицы агента ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  # Пользовательские таблицы
116
  c.execute('''
 
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('''
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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,6 +15,7 @@ agents/
15
  ├── init_db.py ← Инициализация базы данных.
16
  ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite.
17
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
 
18
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
19
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
20
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
 
15
  ├── init_db.py ← Инициализация базы данных.
16
  ├── storage.py ← Реализация базового хранилища (`Storage`), подключение SQLite.
17
  ├── diagnose.py ← Скрипт диагностики соединения, определения IP и проверки порта DHT.
18
+ ├── agent_mesh_listener.py ← Прием входящих сообщений от других HMP-агентов
19
  ├── context_builder.py ← Сбор всех `контекстов` из БД и их фильтрация.
20
  ├── llm.py ← Работа с LLM (вызов, выбор модели, системный промпт).
21
  ├── command_parser.py ← Извлечение команд из JSON или размеченного блока.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -88,7 +88,16 @@ CREATE TABLE IF NOT EXISTS llm_recent_responses (
88
  llm_id TEXT
89
  );
90
 
91
- -- Дополнительные таблицы и скрипты агента
 
 
 
 
 
 
 
 
 
92
 
93
  -- Список пользовательских таблиц, созданных агентами
94
  CREATE TABLE IF NOT EXISTS agent_tables (
 
88
  llm_id TEXT
89
  );
90
 
91
+ -- Список известных HMP-агентов
92
+ CREATE TABLE IF NOT EXISTS agent_peers (
93
+ id TEXT PRIMARY KEY, -- UUID или псевдоним агента
94
+ name TEXT, -- Человеко-читаемое имя
95
+ addresses TEXT, -- JSON-строка: ["http://1.2.3.4:9000", "p2p://..."]
96
+ tags TEXT, -- DHT, Postman, Friend, Local, etc.
97
+ last_seen DATETIME, -- Когда последний раз был активен
98
+ description TEXT,
99
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
100
+ );
101
 
102
  -- Список пользовательских таблиц, созданных агентами
103
  CREATE TABLE IF NOT EXISTS agent_tables (
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -451,6 +451,7 @@ class Storage:
451
  return c.fetchall()
452
 
453
  def get_agent_script_by_name(self, name, version=None):
 
454
  c = self.conn.cursor()
455
  if version:
456
  c.execute("SELECT * FROM agent_scripts WHERE name = ? AND version = ?", (name, version))
@@ -458,10 +459,26 @@ class Storage:
458
  c.execute("""
459
  SELECT * FROM agent_scripts
460
  WHERE name = ?
461
- ORDER BY created_at DESC
462
  LIMIT 1
463
  """, (name,))
464
- return c.fetchone()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
465
 
466
  def add_agent_script(self, name, version, code, description="", tags="", language="python", llm_id=None):
467
  c = self.conn.cursor()
@@ -552,6 +569,12 @@ class Storage:
552
 
553
  # agent_scripts — код скриптов, которыми может пользоваться агент
554
 
 
 
 
 
 
 
555
  def resolve_script_path(name, version):
556
  return os.path.join(SCRIPTS_BASE_PATH, name, f"v{version}", "script.py")
557
 
@@ -578,15 +601,10 @@ class Storage:
578
 
579
  def get_agent_script_code(self, name, version=None):
580
  """Возвращает только код (из БД или файла)"""
581
- c = self.conn.cursor()
582
- if version:
583
- c.execute("SELECT code FROM agent_scripts WHERE name = ? AND version = ?", (name, version))
584
- else:
585
- c.execute("SELECT code FROM agent_scripts WHERE name = ? ORDER BY updated_at DESC LIMIT 1", (name,))
586
- row = c.fetchone()
587
  if not row:
588
  return None
589
- code_entry = row[0]
590
  if code_entry.strip().startswith("@path="):
591
  rel_path = code_entry.strip().split("=", 1)[1]
592
  full_path = os.path.join(SCRIPTS_BASE_PATH, rel_path)
@@ -632,23 +650,41 @@ class Storage:
632
 
633
  def update_agent_script(self, name, version, code=None, description=None, tags=None, mode="inline"):
634
  """
635
- mode: 'inline' (сохранять в БД), 'file' (сохранять в файл и в БД только ссылку)
636
  """
637
  c = self.conn.cursor()
 
 
 
 
 
 
 
 
638
  fields = []
639
  values = []
640
 
641
- # Обработка кода
642
  if code is not None:
 
 
643
  if mode == "file":
644
  file_path = save_script_to_file(code, name, version)
645
- code_ref = f"@path={file_path}"
 
646
  fields.append("code = ?")
647
  values.append(code_ref)
648
- else:
 
 
 
649
  fields.append("code = ?")
650
  values.append(code)
651
 
 
 
 
 
652
  if description is not None:
653
  fields.append("description = ?")
654
  values.append(description)
 
451
  return c.fetchall()
452
 
453
  def get_agent_script_by_name(self, name, version=None):
454
+ """Возвращает скрипт с подгруженным кодом из файла, если он был сохранён через @path"""
455
  c = self.conn.cursor()
456
  if version:
457
  c.execute("SELECT * FROM agent_scripts WHERE name = ? AND version = ?", (name, version))
 
459
  c.execute("""
460
  SELECT * FROM agent_scripts
461
  WHERE name = ?
462
+ ORDER BY updated_at DESC
463
  LIMIT 1
464
  """, (name,))
465
+ row = c.fetchone()
466
+ if not row:
467
+ return None
468
+
469
+ row = list(row)
470
+ code_entry = row[3] # code
471
+
472
+ if code_entry.strip().startswith("@path="):
473
+ rel_path = code_entry.strip().split("=", 1)[1]
474
+ full_path = os.path.join(SCRIPT_ROOT, rel_path)
475
+ if os.path.isfile(full_path):
476
+ with open(full_path, "r", encoding="utf-8") as f:
477
+ row[3] = f.read()
478
+ else:
479
+ row[3] = f"# Error: Script file not found at {full_path}"
480
+
481
+ return tuple(row)
482
 
483
  def add_agent_script(self, name, version, code, description="", tags="", language="python", llm_id=None):
484
  c = self.conn.cursor()
 
569
 
570
  # agent_scripts — код скриптов, которыми может пользоваться агент
571
 
572
+ def delete_script_file(name, version):
573
+ """Удаляет файл скрипта, если он существует"""
574
+ path = os.path.join(SCRIPT_ROOT, name, f"v{version}", "script.py")
575
+ if os.path.isfile(path):
576
+ os.remove(path)
577
+
578
  def resolve_script_path(name, version):
579
  return os.path.join(SCRIPTS_BASE_PATH, name, f"v{version}", "script.py")
580
 
 
601
 
602
  def get_agent_script_code(self, name, version=None):
603
  """Возвращает только код (из БД или файла)"""
604
+ row = self.get_agent_script_by_name(name, version)
 
 
 
 
 
605
  if not row:
606
  return None
607
+ code_entry = row["code_or_path"]
608
  if code_entry.strip().startswith("@path="):
609
  rel_path = code_entry.strip().split("=", 1)[1]
610
  full_path = os.path.join(SCRIPTS_BASE_PATH, rel_path)
 
650
 
651
  def update_agent_script(self, name, version, code=None, description=None, tags=None, mode="inline"):
652
  """
653
+ mode: 'inline' (сохранять код в БД), 'file' (в файл, в БД @path=...)
654
  """
655
  c = self.conn.cursor()
656
+
657
+ # Получаем текущий code, чтобы понять, был ли путь к файлу
658
+ c.execute("SELECT code FROM agent_scripts WHERE name = ? AND version = ?", (name, version))
659
+ result = c.fetchone()
660
+ if not result:
661
+ return False
662
+ old_code = result[0]
663
+
664
  fields = []
665
  values = []
666
 
667
+ # Обработка поля code
668
  if code is not None:
669
+ old_is_file = old_code.strip().startswith("@path=")
670
+
671
  if mode == "file":
672
  file_path = save_script_to_file(code, name, version)
673
+ rel_path = os.path.relpath(file_path, SCRIPT_ROOT)
674
+ code_ref = f"@path={rel_path}"
675
  fields.append("code = ?")
676
  values.append(code_ref)
677
+
678
+ # если раньше был inline — ничего не делаем, если файл — перезаписываем
679
+
680
+ else: # inline
681
  fields.append("code = ?")
682
  values.append(code)
683
 
684
+ # если раньше был файл — удалить его
685
+ if old_is_file:
686
+ delete_script_file(name, version)
687
+
688
  if description is not None:
689
  fields.append("description = ?")
690
  values.append(description)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -67,8 +67,10 @@
67
  Ответ может содержать команды:
68
  - запрос детальной *справки* по команде
69
  - для управления *когнитивным дневником* и *семантическими графами* (прочитать, изменить, удалить и другие)
 
70
  - для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись, просмотр записей)
71
  - для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
 
72
  - для выбора *текущего основного LLM*
73
  - для управления дополнительными утилитами и базами данных
74
  - для постановки задачи (выполняется асинхронно) другой LLM
 
67
  Ответ может содержать команды:
68
  - запрос детальной *справки* по команде
69
  - для управления *когнитивным дневником* и *семантическими графами* (прочитать, изменить, удалить и другие)
70
+ - для отправки сообщений другим агентам
71
  - для управления *блокнотом LLM* `llm_memory` (добавить или удалить запись, просмотр записей)
72
  - для управления *сообщениями пользователя* `notes` (просмотр записи, установка тегов и метки о прочтении), а также для добавления своего сообщения в *блокнот пользовтеля* `notes`
73
+ - для управления списком известных HMP-агентов
74
  - для выбора *текущего основного LLM*
75
  - для управления дополнительными утилитами и базами данных
76
  - для постановки задачи (выполняется асинхронно) другой LLM
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -617,27 +617,62 @@ class Storage:
617
  c.execute("SELECT * FROM agent_scripts WHERE tags LIKE ?", (f"%{tag}%",))
618
  return c.fetchall()
619
 
620
- def update_agent_script(self, name, version, code, tags=None):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
621
  c = self.conn.cursor()
 
 
622
 
623
- # Проверим, существует ли скрипт с таким name и version
624
- c.execute('''
625
- SELECT COUNT(*) FROM agent_scripts
626
- WHERE name = ? AND version = ?
627
- ''', (name, version))
628
- count = c.fetchone()[0]
 
 
 
 
629
 
630
- if count == 0:
631
- raise ValueError(f"Agent script '{name}' v{version} does not exist. Use register_agent_script instead.")
 
632
 
633
- now = datetime.utcnow().isoformat()
634
- c.execute('''
 
 
 
 
 
 
 
 
 
 
635
  UPDATE agent_scripts
636
- SET code = ?, updated_at = ?, tags = ?
637
  WHERE name = ? AND version = ?
638
- ''', (code, now, tags, name, version))
639
 
 
640
  self.conn.commit()
 
641
 
642
  # llm_registry — реестр LLM-агентов
643
 
 
617
  c.execute("SELECT * FROM agent_scripts WHERE tags LIKE ?", (f"%{tag}%",))
618
  return c.fetchall()
619
 
620
+ def ensure_script_path(name, version):
621
+ """Создаёт папку scripts/{name}/v{version}/ если не существует"""
622
+ path = os.path.join(SCRIPT_ROOT, name, f"v{version}")
623
+ os.makedirs(path, exist_ok=True)
624
+ return os.path.join(path, "script.py")
625
+
626
+ def save_script_to_file(code, name, version):
627
+ """Сохраняет скрипт в файл и возвращает путь"""
628
+ file_path = ensure_script_path(name, version)
629
+ with open(file_path, "w", encoding="utf-8") as f:
630
+ f.write(code)
631
+ return file_path
632
+
633
+ def update_agent_script(self, name, version, code=None, description=None, tags=None, mode="inline"):
634
+ """
635
+ mode: 'inline' (сохранять в БД), 'file' (сохранять в файл и в БД только ссылку)
636
+ """
637
  c = self.conn.cursor()
638
+ fields = []
639
+ values = []
640
 
641
+ # Обработка кода
642
+ if code is not None:
643
+ if mode == "file":
644
+ file_path = save_script_to_file(code, name, version)
645
+ code_ref = f"@path={file_path}"
646
+ fields.append("code = ?")
647
+ values.append(code_ref)
648
+ else:
649
+ fields.append("code = ?")
650
+ values.append(code)
651
 
652
+ if description is not None:
653
+ fields.append("description = ?")
654
+ values.append(description)
655
 
656
+ if tags is not None:
657
+ fields.append("tags = ?")
658
+ values.append(tags)
659
+
660
+ if not fields:
661
+ return False
662
+
663
+ fields.append("updated_at = ?")
664
+ values.append(datetime.utcnow().isoformat())
665
+
666
+ values.extend([name, version])
667
+ query = f"""
668
  UPDATE agent_scripts
669
+ SET {', '.join(fields)}
670
  WHERE name = ? AND version = ?
671
+ """
672
 
673
+ c.execute(query, values)
674
  self.conn.commit()
675
+ return c.rowcount > 0
676
 
677
  # llm_registry — реестр LLM-агентов
678
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/changelog.txt CHANGED
@@ -3,6 +3,7 @@
3
  ## HyperCortex Mesh Protocol — Changelog
4
 
5
  Available Versions:
 
6
  - HMP-0004 (July 2025) — RFC Version 4.0
7
  - HMP-0003 (July 2025) — RFC Version 3.0
8
  - HMP-0002 (July 2025) — RFC Version 2.0
@@ -10,6 +11,17 @@ Available Versions:
10
 
11
  ### HMP-0004 (July 2025) — RFC Version 4.0
12
 
 
 
 
 
 
 
 
 
 
 
 
13
  **Major Changes**
14
  * Introduced new sections: *Cognitive Workflows*, *Agent Roles*, *Governance*, *Compression*, and *Simulation*.
15
  * Added experimental APIs: *Consent Request*, *Explainability*, *Voice Interface*.
 
3
  ## HyperCortex Mesh Protocol — Changelog
4
 
5
  Available Versions:
6
+ - HMP-0004 (July 2025) — RFC Version 4.1
7
  - HMP-0004 (July 2025) — RFC Version 4.0
8
  - HMP-0003 (July 2025) — RFC Version 3.0
9
  - HMP-0002 (July 2025) — RFC Version 2.0
 
11
 
12
  ### HMP-0004 (July 2025) — RFC Version 4.0
13
 
14
+ **Protocols:**
15
+ * **Added `5.8 Message Routing & Delivery` section** — including direct, broadcast, relay, and topic messaging modes.
16
+
17
+ **Data Models:**
18
+ * **Defined `6.5.8 Message Object Schema`** — standard JSON format for inter-agent communication.
19
+
20
+ **Cognitive Workflows:**
21
+ * **Added `7.9 Message Handling & Delivery Workflows`** — describing message processing, relay behavior, and routing.
22
+
23
+ ### HMP-0004 (July 2025) — RFC Version 4.0
24
+
25
  **Major Changes**
26
  * Introduced new sections: *Cognitive Workflows*, *Agent Roles*, *Governance*, *Compression*, and *Simulation*.
27
  * Added experimental APIs: *Consent Request*, *Explainability*, *Voice Interface*.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/README.md CHANGED
@@ -127,7 +127,7 @@ RU:
127
  * [🔍 Distributed-Cognitive-Systems.md](docs/Distributed-Cognitive-Systems.md) — Децентрализованные ИИ-системы: OpenCog Hyperon, HyperCortex Mesh Protocol и другие
128
 
129
  #### 🔖 Core Specifications / Основные спецификации
130
- * [🔖 HMP-0004.md](docs/HMP-0004.md) — Protocol Specification v4.0 (Jul 2025)
131
  * [🔖 HMP-Ethics.md](docs/HMP-Ethics.md) — Ethical Scenarios for HyperCortex Mesh Protocol (HMP)
132
  * [🔖 HMP_Hyperon_Integration.md](docs/HMP_Hyperon_Integration.md) — HMP ↔ OpenCog Hyperon Integration Strategy
133
  * [🔖 roles.md](docs/agents/roles.md) — Roles of agents in Mesh
@@ -149,6 +149,7 @@ RU:
149
  - [HMP-0001.md](docs/HMP-0001.md) — RFC v1.0
150
  - [HMP-0002.md](docs/HMP-0002.md) — RFC v2.0
151
  - [HMP-0003.md](docs/HMP-0003.md) — RFC v3.0
 
152
 
153
  ---
154
 
 
127
  * [🔍 Distributed-Cognitive-Systems.md](docs/Distributed-Cognitive-Systems.md) — Децентрализованные ИИ-системы: OpenCog Hyperon, HyperCortex Mesh Protocol и другие
128
 
129
  #### 🔖 Core Specifications / Основные спецификации
130
+ * [🔖 HMP-0004-v4.1.md](docs/HMP-0004-v4.1.md) — Protocol Specification v4.1 (Jul 2025)
131
  * [🔖 HMP-Ethics.md](docs/HMP-Ethics.md) — Ethical Scenarios for HyperCortex Mesh Protocol (HMP)
132
  * [🔖 HMP_Hyperon_Integration.md](docs/HMP_Hyperon_Integration.md) — HMP ↔ OpenCog Hyperon Integration Strategy
133
  * [🔖 roles.md](docs/agents/roles.md) — Roles of agents in Mesh
 
149
  - [HMP-0001.md](docs/HMP-0001.md) — RFC v1.0
150
  - [HMP-0002.md](docs/HMP-0002.md) — RFC v2.0
151
  - [HMP-0003.md](docs/HMP-0003.md) — RFC v3.0
152
+ - [HMP-0003.md](docs/HMP-0004.md) — RFC v4.0
153
 
154
  ---
155
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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-0004-v4.1.md ADDED
The diff for this file is too large to render. See raw diff
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml CHANGED
@@ -21,7 +21,7 @@ jobs:
21
  - name: Install dependencies
22
  run: |
23
  python -m pip install --upgrade pip
24
- pip install -r requirements.txt
25
  pip install pytest
26
 
27
  - name: Run tests
 
21
  - name: Install dependencies
22
  run: |
23
  python -m pip install --upgrade pip
24
+ pip install -r agents/requirements.txt
25
  pip install pytest
26
 
27
  - name: Run tests
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/tests/test_storage.py CHANGED
@@ -1,17 +1,21 @@
 
 
 
1
  import pytest
2
  from agents.tools.storage import Storage
3
 
4
  @pytest.fixture
5
- def storage():
6
- # Создаём инстанс Storage с временной или тестовой базой
7
- # Можно настроить, чтобы база была in-memory для быстроты
8
- return Storage({"db_path": ":memory:"})
 
9
 
10
- def test_add_and_get_journal_entry(storage):
11
- text = "Первая тестовая запись"
12
- entry_id = storage.add_journal_entry(text)
13
- assert isinstance(entry_id, int), "ID записи должен быть числом"
14
 
15
- entry = storage.get_journal_entry(entry_id)
16
- assert entry is not None, "Запись должна существовать"
17
- assert entry["text"] == text, "Текст записи должен совпадать"
 
 
1
+ # agents/tests/test_storage.py
2
+
3
+ import os
4
  import pytest
5
  from agents.tools.storage import Storage
6
 
7
  @pytest.fixture
8
+ def temp_storage(tmp_path):
9
+ db_path = tmp_path / "test.db"
10
+ storage = Storage(config={"db_path": str(db_path)})
11
+ yield storage
12
+ # автоматически удалится tmp_path
13
 
14
+ def test_set_and_get(temp_storage):
15
+ temp_storage.set("foo", "bar")
16
+ assert temp_storage.get("foo") == "bar"
 
17
 
18
+ def test_delete(temp_storage):
19
+ temp_storage.set("key", "value")
20
+ temp_storage.delete("key")
21
+ assert temp_storage.get("key") is None
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml CHANGED
@@ -2,32 +2,28 @@ name: CI
2
 
3
  on:
4
  push:
5
- branches: [ main, master ]
6
  pull_request:
7
- branches: [ main, master ]
8
 
9
  jobs:
10
  test:
11
  runs-on: ubuntu-latest
12
 
13
  steps:
14
- - name: Checkout code
15
- uses: actions/checkout@v3
16
 
17
- - name: Set up Python 3.11
18
- uses: actions/setup-python@v4
19
  with:
20
- python-version: '3.11'
21
-
22
- - name: Upgrade pip
23
- run: python -m pip install --upgrade pip
24
 
25
  - name: Install dependencies
26
  run: |
27
- python -m pip install pytest
 
 
28
 
29
- - name: Run tests with PYTHONPATH
30
- env:
31
- PYTHONPATH: ${{ github.workspace }}
32
  run: |
33
- python -m pytest agents/tests/
 
2
 
3
  on:
4
  push:
5
+ branches: [main]
6
  pull_request:
7
+ branches: [main]
8
 
9
  jobs:
10
  test:
11
  runs-on: ubuntu-latest
12
 
13
  steps:
14
+ - uses: actions/checkout@v4
 
15
 
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
  with:
19
+ python-version: 3.11
 
 
 
20
 
21
  - name: Install dependencies
22
  run: |
23
+ python -m pip install --upgrade pip
24
+ pip install -r requirements.txt
25
+ pip install pytest
26
 
27
+ - name: Run tests
 
 
28
  run: |
29
+ PYTHONPATH=. pytest
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/tests/test_storage.py CHANGED
@@ -1,5 +1,5 @@
1
  import pytest
2
- from agents.storage import Storage
3
 
4
  @pytest.fixture
5
  def storage():
 
1
  import pytest
2
+ from agents.tools.storage import Storage
3
 
4
  @pytest.fixture
5
  def storage():
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml CHANGED
@@ -7,23 +7,27 @@ on:
7
  branches: [ main, master ]
8
 
9
  jobs:
10
- build-and-test:
11
  runs-on: ubuntu-latest
12
 
13
  steps:
14
- - name: Checkout code
15
- uses: actions/checkout@v3
16
 
17
- - name: Set up Python 3.11
18
- uses: actions/setup-python@v4
19
- with:
20
- python-version: 3.11
21
 
22
- - name: Install dependencies
23
- run: |
24
- python -m pip install --upgrade pip
25
- pip install -r agents/requirements.txt
26
 
27
- - name: Run simple tests
28
- run: |
29
- python -m pytest agents/tests/
 
 
 
 
 
 
 
7
  branches: [ main, master ]
8
 
9
  jobs:
10
+ test:
11
  runs-on: ubuntu-latest
12
 
13
  steps:
14
+ - name: Checkout code
15
+ uses: actions/checkout@v3
16
 
17
+ - name: Set up Python 3.11
18
+ uses: actions/setup-python@v4
19
+ with:
20
+ python-version: '3.11'
21
 
22
+ - name: Upgrade pip
23
+ run: python -m pip install --upgrade pip
 
 
24
 
25
+ - name: Install dependencies
26
+ run: |
27
+ python -m pip install pytest
28
+
29
+ - name: Run tests with PYTHONPATH
30
+ env:
31
+ PYTHONPATH: ${{ github.workspace }}
32
+ run: |
33
+ python -m pytest agents/tests/
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -1 +1 @@
1
- from .storage import Storage
 
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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from agents.tools.storage import Storage
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/tests/__init__.py ADDED
@@ -0,0 +1 @@
 
 
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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 @@
 
 
1
+ from .storage import Storage