GitHub Action commited on
Commit
659e47b
·
1 Parent(s): 559a961

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. .github/workflows/ci.yml +1 -1
  2. hf_repo/agents/tests/test_storage.py +15 -11
  3. hf_repo/hf_repo/.github/workflows/ci.yml +11 -15
  4. hf_repo/hf_repo/hf_repo/agents/tests/test_storage.py +1 -1
  5. hf_repo/hf_repo/hf_repo/hf_repo/.github/workflows/ci.yml +18 -14
  6. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/__init__.py +1 -1
  7. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/__init__.py +1 -0
  8. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tests/__init__.py +1 -0
  9. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/__init__.py +1 -0
  10. 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 +17 -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 +1 -0
  12. 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 +3 -10
  13. hf_repo/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_basic.py +2 -0
  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/hf_repo/agents/requirements.txt +1 -4
  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/hf_repo/.github/workflows/ci.yml +36 -0
  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/hf_repo/hf_repo/agents/tools/storage.py +59 -6
  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/hf_repo/hf_repo/agents/tools/storage.py +22 -2
  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/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +105 -0
  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/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +11 -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/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +74 -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/hf_repo/hf_repo/hf_repo/agents/tools/context_builder.py +8 -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/hf_repo/hf_repo/hf_repo/agents/tools/storage.py +96 -7
  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/hf_repo/hf_repo/agents/tools/storage.py +96 -7
  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/hf_repo/hf_repo/agents/tools/storage.py +125 -10
  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/hf_repo/hf_repo/agents/readme.md +1 -0
  26. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/memory_utils.py +64 -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/hf_repo/agents/tools/command_parser.py +64 -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 +1 -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/tools/llm.py +43 -38
  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/agents/tools/context_builder.py +44 -1
  31. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +19 -11
  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/agents/readme.md +13 -11
  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/agents/tools/command_executor.py +17 -0
  34. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/context_builder.py +18 -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/agents/repl.py +33 -56
  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/agents/readme.md +18 -14
  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/docs/HMP-agent-REPL-cycle.md +18 -3
  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/docs/Basic-agent-sim.md +1 -1
  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/docs/HMP-Agent-Architecture.md +1 -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/docs/HMP-Agent-Overview.md +1 -0
  41. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +1 -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/README.md +10 -0
  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/hf_repo/docs/HMP-agent-REPL-cycle.md +68 -2
  44. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/sync-to-gitlab.yml +3 -1
  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/README.md +3 -2
  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/hf_repo/.github/workflows/sync-to-gitlab.yml +10 -10
  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/hf_repo/hf_repo/hf_repo/.github/workflows/sync-to-gitlab.yml +23 -0
  48. hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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 +97 -42
  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/hf_repo/hf_repo/hf_repo/docs/HMP-agent-REPL-cycle.md +12 -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/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql +63 -18
.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/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/.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/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/.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/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/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/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/agents/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ from .storage import Storage
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 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pytest
2
+ from agents.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, "Текст записи должен совпадать"
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 +1,2 @@
1
  scikit-learn
 
 
1
  scikit-learn
2
+ 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/.github/workflows/ci.yml CHANGED
@@ -22,15 +22,8 @@ jobs:
22
  - name: Install dependencies
23
  run: |
24
  python -m pip install --upgrade pip
25
- pip install -r requirements.txt
26
 
27
- - name: Run tests
28
  run: |
29
- # если у тебя есть тесты, например, pytest
30
- pytest tests/
31
-
32
- - name: Lint code
33
- run: |
34
- pip install flake8
35
- flake8 .
36
-
 
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/
 
 
 
 
 
 
 
hf_repo/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_basic.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ def test_sanity():
2
+ assert 1 + 1 == 2
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/requirements.txt CHANGED
@@ -1,4 +1 @@
1
- Требования и зависимости
2
-
3
- - Python (https://www.python.org/downloads/)
4
- - scikit-learn ("pip install scikit-learn")
 
1
+ scikit-learn
 
 
 
hf_repo/hf_repo/hf_repo/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 ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
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 requirements.txt
26
+
27
+ - name: Run tests
28
+ run: |
29
+ # если у тебя есть тесты, например, pytest
30
+ pytest tests/
31
+
32
+ - name: Lint code
33
+ run: |
34
+ pip install flake8
35
+ flake8 .
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/agents/tools/storage.py CHANGED
@@ -1,9 +1,11 @@
1
  # agents/tools/storage.py
2
 
3
  import sqlite3
 
4
  from datetime import datetime
5
 
6
  DEFAULT_DB_PATH = "agent_data.db"
 
7
 
8
  class Storage:
9
  def __init__(self, config=None):
@@ -550,21 +552,50 @@ class Storage:
550
 
551
  # agent_scripts — код скриптов, которыми может пользоваться агент
552
 
 
 
 
553
  def register_agent_script(self, name, version, code, language='python', description=None, tags=None, llm_id=None):
554
  c = self.conn.cursor()
 
 
 
 
 
 
 
 
 
 
 
 
 
555
  c.execute('''
556
  INSERT OR REPLACE INTO agent_scripts (name, version, code, language, description, tags, llm_id)
557
  VALUES (?, ?, ?, ?, ?, ?, ?)
558
- ''', (name, version, code, language, description, tags, llm_id))
559
  self.conn.commit()
560
 
561
- def get_agent_scripts(self, name=None):
 
562
  c = self.conn.cursor()
563
- if name:
564
- c.execute('SELECT * FROM agent_scripts WHERE name = ? ORDER BY updated_at DESC', (name,))
565
  else:
566
- c.execute('SELECT * FROM agent_scripts ORDER BY updated_at DESC')
567
- return c.fetchall()
 
 
 
 
 
 
 
 
 
 
 
 
568
 
569
  def list_agent_scripts(limit=50):
570
  c = self.conn.cursor()
@@ -585,6 +616,28 @@ class Storage:
585
  c = self.conn.cursor()
586
  c.execute("SELECT * FROM agent_scripts WHERE tags LIKE ?", (f"%{tag}%",))
587
  return c.fetchall()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
588
 
589
  # llm_registry — реестр LLM-агентов
590
 
 
1
  # agents/tools/storage.py
2
 
3
  import sqlite3
4
+ import os
5
  from datetime import datetime
6
 
7
  DEFAULT_DB_PATH = "agent_data.db"
8
+ SCRIPTS_BASE_PATH = "scripts"
9
 
10
  class Storage:
11
  def __init__(self, config=None):
 
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
+
558
  def register_agent_script(self, name, version, code, language='python', description=None, tags=None, llm_id=None):
559
  c = self.conn.cursor()
560
+
561
+ if code.strip().startswith("@path="):
562
+ # сохраняем только путь как метку
563
+ path = code.strip().split("=", 1)[1]
564
+ code_entry = f"@path={path}"
565
+ else:
566
+ # сохраняем и файл
567
+ path = resolve_script_path(name, version)
568
+ os.makedirs(os.path.dirname(path), exist_ok=True)
569
+ with open(path, "w", encoding="utf-8") as f:
570
+ f.write(code)
571
+ code_entry = f"@path={name}/v{version}/script.py"
572
+
573
  c.execute('''
574
  INSERT OR REPLACE INTO agent_scripts (name, version, code, language, description, tags, llm_id)
575
  VALUES (?, ?, ?, ?, ?, ?, ?)
576
+ ''', (name, version, code_entry, language, description, tags, llm_id))
577
  self.conn.commit()
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)
593
+ if os.path.isfile(full_path):
594
+ with open(full_path, "r", encoding="utf-8") as f:
595
+ return f.read()
596
+ else:
597
+ return f"# Error: File not found at path: {full_path}"
598
+ return code_entry
599
 
600
  def list_agent_scripts(limit=50):
601
  c = self.conn.cursor()
 
616
  c = self.conn.cursor()
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
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -510,7 +510,7 @@ class Storage:
510
 
511
  # process_log — лог задач, ошибок и событий
512
 
513
- def log_event(self, name, value=None, tags=None, status='ok', priority=0, llm_id=None):
514
  c = self.conn.cursor()
515
  c.execute('''
516
  INSERT INTO process_log (name, value, tags, status, priority, llm_id)
@@ -566,6 +566,26 @@ class Storage:
566
  c.execute('SELECT * FROM agent_scripts ORDER BY updated_at DESC')
567
  return c.fetchall()
568
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
569
  # llm_registry — реестр LLM-агентов
570
 
571
  def register_llm(self, llm_id, name=None, description=None):
@@ -576,7 +596,7 @@ class Storage:
576
  ''', (llm_id, name, description))
577
  self.conn.commit()
578
 
579
- def get_llm_agents(self):
580
  c = self.conn.cursor()
581
  c.execute('SELECT * FROM llm_registry ORDER BY registered_at DESC')
582
  return c.fetchall()
 
510
 
511
  # process_log — лог задач, ошибок и событий
512
 
513
+ def log_process_event(self, name, value=None, tags=None, status='ok', priority=0, llm_id=None):
514
  c = self.conn.cursor()
515
  c.execute('''
516
  INSERT INTO process_log (name, value, tags, status, priority, llm_id)
 
566
  c.execute('SELECT * FROM agent_scripts ORDER BY updated_at DESC')
567
  return c.fetchall()
568
 
569
+ def list_agent_scripts(limit=50):
570
+ c = self.conn.cursor()
571
+ c.execute("SELECT * FROM agent_scripts ORDER BY updated_at DESC LIMIT ?", (limit,))
572
+ return c.fetchall()
573
+
574
+ def get_latest_agent_script(self, name):
575
+ c = self.conn.cursor()
576
+ c.execute('''
577
+ SELECT * FROM agent_scripts
578
+ WHERE name = ?
579
+ ORDER BY updated_at DESC
580
+ LIMIT 1
581
+ ''', (name,))
582
+ return c.fetchone()
583
+
584
+ def search_agent_scripts_by_tag(self, tag):
585
+ c = self.conn.cursor()
586
+ c.execute("SELECT * FROM agent_scripts WHERE tags LIKE ?", (f"%{tag}%",))
587
+ return c.fetchall()
588
+
589
  # llm_registry — реестр LLM-агентов
590
 
591
  def register_llm(self, llm_id, name=None, description=None):
 
596
  ''', (llm_id, name, description))
597
  self.conn.commit()
598
 
599
+ def get_registered_llms(self):
600
  c = self.conn.cursor()
601
  c.execute('SELECT * FROM llm_registry ORDER BY registered_at DESC')
602
  return c.fetchall()
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -149,6 +149,19 @@ class Storage:
149
  )
150
  ''')
151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  self.conn.commit()
153
 
154
  # Методы для работы с дневником
@@ -495,6 +508,98 @@ class Storage:
495
  self.conn.commit()
496
  return c.rowcount > 0
497
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
498
  # Утилиты
499
 
500
  def close(self):
 
149
  )
150
  ''')
151
 
152
+ # Быстрые индексы по смысловой карте и дневнику
153
+ c.execute('''
154
+ CREATE TABLE IF NOT EXISTS diary_graph_index (
155
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
156
+ source_entry_id INTEGER NOT NULL,
157
+ target_entry_id INTEGER NOT NULL,
158
+ relation TEXT NOT NULL,
159
+ strength REAL DEFAULT 1.0,
160
+ context TEXT,
161
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP
162
+ )
163
+ ''')
164
+
165
  self.conn.commit()
166
 
167
  # Методы для работы с дневником
 
508
  self.conn.commit()
509
  return c.rowcount > 0
510
 
511
+ # process_log — лог задач, ошибок и событий
512
+
513
+ def log_event(self, name, value=None, tags=None, status='ok', priority=0, llm_id=None):
514
+ c = self.conn.cursor()
515
+ c.execute('''
516
+ INSERT INTO process_log (name, value, tags, status, priority, llm_id)
517
+ VALUES (?, ?, ?, ?, ?, ?)
518
+ ''', (name, value, tags, status, priority, llm_id))
519
+ self.conn.commit()
520
+
521
+ def get_recent_logs(self, limit=50, status_filter=None):
522
+ c = self.conn.cursor()
523
+ query = 'SELECT * FROM process_log'
524
+ params = []
525
+
526
+ if status_filter:
527
+ query += ' WHERE status = ?'
528
+ params.append(status_filter)
529
+
530
+ query += ' ORDER BY timestamp DESC LIMIT ?'
531
+ params.append(limit)
532
+
533
+ c.execute(query, tuple(params))
534
+ return c.fetchall()
535
+
536
+ # agent_tables — декларации пользовательских таблиц
537
+
538
+ def register_agent_table(self, table_name, schema, description=None, llm_id=None):
539
+ c = self.conn.cursor()
540
+ c.execute('''
541
+ INSERT OR IGNORE INTO agent_tables (table_name, description, schema, llm_id)
542
+ VALUES (?, ?, ?, ?)
543
+ ''', (table_name, description, schema, llm_id))
544
+ self.conn.commit()
545
+
546
+ def get_agent_tables(self):
547
+ c = self.conn.cursor()
548
+ c.execute('SELECT * FROM agent_tables ORDER BY created_at DESC')
549
+ return c.fetchall()
550
+
551
+ # agent_scripts — код скриптов, которыми может пользоваться агент
552
+
553
+ def register_agent_script(self, name, version, code, language='python', description=None, tags=None, llm_id=None):
554
+ c = self.conn.cursor()
555
+ c.execute('''
556
+ INSERT OR REPLACE INTO agent_scripts (name, version, code, language, description, tags, llm_id)
557
+ VALUES (?, ?, ?, ?, ?, ?, ?)
558
+ ''', (name, version, code, language, description, tags, llm_id))
559
+ self.conn.commit()
560
+
561
+ def get_agent_scripts(self, name=None):
562
+ c = self.conn.cursor()
563
+ if name:
564
+ c.execute('SELECT * FROM agent_scripts WHERE name = ? ORDER BY updated_at DESC', (name,))
565
+ else:
566
+ c.execute('SELECT * FROM agent_scripts ORDER BY updated_at DESC')
567
+ return c.fetchall()
568
+
569
+ # llm_registry — реестр LLM-агентов
570
+
571
+ def register_llm(self, llm_id, name=None, description=None):
572
+ c = self.conn.cursor()
573
+ c.execute('''
574
+ INSERT OR REPLACE INTO llm_registry (id, name, description)
575
+ VALUES (?, ?, ?)
576
+ ''', (llm_id, name, description))
577
+ self.conn.commit()
578
+
579
+ def get_llm_agents(self):
580
+ c = self.conn.cursor()
581
+ c.execute('SELECT * FROM llm_registry ORDER BY registered_at DESC')
582
+ return c.fetchall()
583
+
584
+ # diary_graph_index — быстрые индексы по смысловой карте и дневнику
585
+
586
+ def add_diary_relation(self, source_id, target_id, relation, strength=1.0, context=None):
587
+ c = self.conn.cursor()
588
+ c.execute('''
589
+ INSERT INTO diary_graph_index (source_entry_id, target_entry_id, relation, strength, context)
590
+ VALUES (?, ?, ?, ?, ?)
591
+ ''', (source_id, target_id, relation, strength, context))
592
+ self.conn.commit()
593
+
594
+ def get_diary_relations(self, entry_id):
595
+ c = self.conn.cursor()
596
+ c.execute('''
597
+ SELECT * FROM diary_graph_index
598
+ WHERE source_entry_id = ? OR target_entry_id = ?
599
+ ORDER BY timestamp DESC
600
+ ''', (entry_id, entry_id))
601
+ return c.fetchall()
602
+
603
  # Утилиты
604
 
605
  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/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -31,6 +31,17 @@ CREATE TABLE IF NOT EXISTS links (
31
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
32
  );
33
 
 
 
 
 
 
 
 
 
 
 
 
34
  -- Заметки, подсказки, сообщения пользователя и LLM
35
  CREATE TABLE IF NOT EXISTS notes (
36
  id INTEGER PRIMARY KEY AUTOINCREMENT,
 
31
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
32
  );
33
 
34
+ -- Быстрые индексы по смысловой карте и дневнику
35
+ CREATE TABLE IF NOT EXISTS diary_graph_index (
36
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
37
+ source_entry_id INTEGER NOT NULL,
38
+ target_entry_id INTEGER NOT NULL,
39
+ relation TEXT NOT NULL,
40
+ strength REAL DEFAULT 1.0,
41
+ context TEXT,
42
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP
43
+ );
44
+
45
  -- Заметки, подсказки, сообщения пользователя и LLM
46
  CREATE TABLE IF NOT EXISTS notes (
47
  id INTEGER PRIMARY KEY AUTOINCREMENT,
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -152,6 +152,7 @@ class Storage:
152
  self.conn.commit()
153
 
154
  # Методы для работы с дневником
 
155
  def write_diary_entry(self, text, tags=None):
156
  timestamp = datetime.utcnow().isoformat()
157
  tag_str = ",".join(tags) if tags else ""
@@ -205,6 +206,7 @@ class Storage:
205
  return cursor.fetchall()
206
 
207
  # Методы для работы с концептами
 
208
  def add_concept(self, name, description=None):
209
  timestamp = datetime.utcnow().isoformat()
210
  self.conn.execute(
@@ -224,6 +226,7 @@ class Storage:
224
  return cursor.fetchall()
225
 
226
  # Методы для работы с связями
 
227
  def add_link(self, from_name, to_name, relation_type):
228
  from_concept = self.get_concept_by_name(from_name)
229
  to_concept = self.get_concept_by_name(to_name)
@@ -251,6 +254,7 @@ class Storage:
251
  return cursor.fetchall()
252
 
253
  # Сложные операции над графом
 
254
  def expand_concept_graph(self, start_id, depth):
255
  visited = set()
256
  results = []
@@ -326,6 +330,7 @@ class Storage:
326
  return row[0] if row else None
327
 
328
  # Методы для заметок
 
329
  def write_note(self, text, tags=None):
330
  timestamp = datetime.utcnow().isoformat()
331
  tag_str = ",".join(tags) if tags else ""
@@ -394,6 +399,7 @@ class Storage:
394
  return cursor.fetchone()
395
 
396
  # Разное (LLM responses / memory)
 
397
  def get_llm_recent_responses(self, limit=20, llm_id=None):
398
  c = self.conn.cursor()
399
  query = "SELECT role, content FROM llm_recent_responses"
@@ -422,6 +428,74 @@ class Storage:
422
  ''', (role, content, llm_id))
423
  self.conn.commit()
424
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
425
  # Утилиты
 
426
  def close(self):
427
  self.conn.close()
 
152
  self.conn.commit()
153
 
154
  # Методы для работы с дневником
155
+
156
  def write_diary_entry(self, text, tags=None):
157
  timestamp = datetime.utcnow().isoformat()
158
  tag_str = ",".join(tags) if tags else ""
 
206
  return cursor.fetchall()
207
 
208
  # Методы для работы с концептами
209
+
210
  def add_concept(self, name, description=None):
211
  timestamp = datetime.utcnow().isoformat()
212
  self.conn.execute(
 
226
  return cursor.fetchall()
227
 
228
  # Методы для работы с связями
229
+
230
  def add_link(self, from_name, to_name, relation_type):
231
  from_concept = self.get_concept_by_name(from_name)
232
  to_concept = self.get_concept_by_name(to_name)
 
254
  return cursor.fetchall()
255
 
256
  # Сложные операции над графом
257
+
258
  def expand_concept_graph(self, start_id, depth):
259
  visited = set()
260
  results = []
 
330
  return row[0] if row else None
331
 
332
  # Методы для заметок
333
+
334
  def write_note(self, text, tags=None):
335
  timestamp = datetime.utcnow().isoformat()
336
  tag_str = ",".join(tags) if tags else ""
 
399
  return cursor.fetchone()
400
 
401
  # Разное (LLM responses / memory)
402
+
403
  def get_llm_recent_responses(self, limit=20, llm_id=None):
404
  c = self.conn.cursor()
405
  query = "SELECT role, content FROM llm_recent_responses"
 
428
  ''', (role, content, llm_id))
429
  self.conn.commit()
430
 
431
+ # Скрипты агента
432
+
433
+ def get_all_agent_scripts(self):
434
+ c = self.conn.cursor()
435
+ c.execute("SELECT id, name, version, language, description, tags, created_at, updated_at FROM agent_scripts")
436
+ return c.fetchall()
437
+
438
+ def get_agent_script_by_name(self, name, version=None):
439
+ c = self.conn.cursor()
440
+ if version:
441
+ c.execute("SELECT * FROM agent_scripts WHERE name = ? AND version = ?", (name, version))
442
+ else:
443
+ c.execute("""
444
+ SELECT * FROM agent_scripts
445
+ WHERE name = ?
446
+ ORDER BY created_at DESC
447
+ LIMIT 1
448
+ """, (name,))
449
+ return c.fetchone()
450
+
451
+ def add_agent_script(self, name, version, code, description="", tags="", language="python", llm_id=None):
452
+ c = self.conn.cursor()
453
+ try:
454
+ c.execute("""
455
+ INSERT INTO agent_scripts (name, version, code, description, tags, language, llm_id)
456
+ VALUES (?, ?, ?, ?, ?, ?, ?)
457
+ """, (name, version, code, description, tags, language, llm_id))
458
+ self.conn.commit()
459
+ return True
460
+ except sqlite3.IntegrityError:
461
+ return False # Скрипт с таким name+version уже есть
462
+
463
+ def update_agent_script(self, name, version, code=None, description=None, tags=None):
464
+ c = self.conn.cursor()
465
+ fields = []
466
+ values = []
467
+
468
+ if code is not None:
469
+ fields.append("code = ?")
470
+ values.append(code)
471
+ if description is not None:
472
+ fields.append("description = ?")
473
+ values.append(description)
474
+ if tags is not None:
475
+ fields.append("tags = ?")
476
+ values.append(tags)
477
+
478
+ if not fields:
479
+ return False
480
+
481
+ fields.append("updated_at = CURRENT_TIMESTAMP")
482
+ query = f"UPDATE agent_scripts SET {', '.join(fields)} WHERE name = ? AND version = ?"
483
+ values.extend([name, version])
484
+
485
+ c.execute(query, values)
486
+ self.conn.commit()
487
+ return c.rowcount > 0
488
+
489
+ def delete_agent_script(self, name, version=None):
490
+ c = self.conn.cursor()
491
+ if version:
492
+ c.execute("DELETE FROM agent_scripts WHERE name = ? AND version = ?", (name, version))
493
+ else:
494
+ c.execute("DELETE FROM agent_scripts WHERE name = ?", (name,))
495
+ self.conn.commit()
496
+ return c.rowcount > 0
497
+
498
  # Утилиты
499
+
500
  def close(self):
501
  self.conn.close()
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/context_builder.py CHANGED
@@ -8,13 +8,21 @@ def build_contexts(db, config):
8
  Возвращает словарь, готовый для сборки промпта.
9
  """
10
  return {
 
11
  "context_0": build_role_prompt(config),
 
12
  "context_1": db.get_llm_recent_responses(limit=config.get("history_limit", 10)),
 
13
  "context_2": db.get_active_processes(),
 
14
  "context_3": db.get_requested_diary_and_graph(),
 
15
  "context_4": db.get_relevant_notes(config),
 
16
  "context_5": get_system_info(config),
 
17
  "context_6": db.get_llm_memory(),
 
18
  "context_7": db.get_last_stagnation_info()
19
  }
20
 
 
8
  Возвращает словарь, готовый для сборки промпта.
9
  """
10
  return {
11
+ # Роль и цели агента
12
  "context_0": build_role_prompt(config),
13
+ # Последние реплики модели (история)
14
  "context_1": db.get_llm_recent_responses(limit=config.get("history_limit", 10)),
15
+ # Активные процессы и задачи
16
  "context_2": db.get_active_processes(),
17
+ # Запрошенные данные из дневника и графа
18
  "context_3": db.get_requested_diary_and_graph(),
19
+ # Релевантные заметки и напоминания
20
  "context_4": db.get_relevant_notes(config),
21
+ # Системная информация
22
  "context_5": get_system_info(config),
23
+ # Долговременная память модели
24
  "context_6": db.get_llm_memory(),
25
+ # Последние данные о застое мышления
26
  "context_7": db.get_last_stagnation_info()
27
  }
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/agents/tools/storage.py CHANGED
@@ -15,27 +15,32 @@ class Storage:
15
  def _init_db(self):
16
  c = self.conn.cursor()
17
 
18
- # Таблица дневников
 
 
19
  c.execute('''
20
  CREATE TABLE IF NOT EXISTS diary_entries (
21
  id INTEGER PRIMARY KEY AUTOINCREMENT,
22
  text TEXT NOT NULL,
23
  tags TEXT,
24
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
25
  )
26
  ''')
27
 
28
- # Таблица концептов
29
  c.execute('''
30
  CREATE TABLE IF NOT EXISTS concepts (
31
  id INTEGER PRIMARY KEY AUTOINCREMENT,
32
  name TEXT NOT NULL UNIQUE,
33
  description TEXT,
34
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
35
  )
36
  ''')
37
 
38
- # Таблица связей
39
  c.execute('''
40
  CREATE TABLE IF NOT EXISTS links (
41
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -43,20 +48,104 @@ class Storage:
43
  to_concept_id INTEGER,
44
  relation_type TEXT,
45
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
 
46
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
47
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
48
  )
49
  ''')
50
 
51
- # Таблица пользовательских заметок
52
  c.execute('''
53
  CREATE TABLE IF NOT EXISTS notes (
54
  id INTEGER PRIMARY KEY AUTOINCREMENT,
55
  text TEXT NOT NULL,
56
  tags TEXT,
57
  source TEXT DEFAULT 'user',
 
58
  read INTEGER DEFAULT 0,
59
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  )
61
  ''')
62
 
 
15
  def _init_db(self):
16
  c = self.conn.cursor()
17
 
18
+ # --- Основные таблицы когнитивного ядра ---
19
+
20
+ # Дневниковые записи
21
  c.execute('''
22
  CREATE TABLE IF NOT EXISTS diary_entries (
23
  id INTEGER PRIMARY KEY AUTOINCREMENT,
24
  text TEXT NOT NULL,
25
  tags TEXT,
26
+ priority INTEGER DEFAULT 0,
27
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
28
+ llm_id TEXT
29
  )
30
  ''')
31
 
32
+ # Концепты
33
  c.execute('''
34
  CREATE TABLE IF NOT EXISTS concepts (
35
  id INTEGER PRIMARY KEY AUTOINCREMENT,
36
  name TEXT NOT NULL UNIQUE,
37
  description TEXT,
38
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
39
+ llm_id TEXT
40
  )
41
  ''')
42
 
43
+ # Семантические связи
44
  c.execute('''
45
  CREATE TABLE IF NOT EXISTS links (
46
  id INTEGER PRIMARY KEY AUTOINCREMENT,
 
48
  to_concept_id INTEGER,
49
  relation_type TEXT,
50
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
51
+ llm_id TEXT,
52
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
53
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
54
  )
55
  ''')
56
 
57
+ # Заметки / сообщения
58
  c.execute('''
59
  CREATE TABLE IF NOT EXISTS notes (
60
  id INTEGER PRIMARY KEY AUTOINCREMENT,
61
  text TEXT NOT NULL,
62
  tags TEXT,
63
  source TEXT DEFAULT 'user',
64
+ links TEXT DEFAULT '',
65
  read INTEGER DEFAULT 0,
66
+ hidden INTEGER DEFAULT 0,
67
+ priority INTEGER DEFAULT 0,
68
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
69
+ llm_id TEXT
70
+ )
71
+ ''')
72
+
73
+ # Лог процессов
74
+ c.execute('''
75
+ CREATE TABLE IF NOT EXISTS process_log (
76
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
77
+ name TEXT NOT NULL,
78
+ value TEXT,
79
+ tags TEXT,
80
+ status TEXT DEFAULT 'ok',
81
+ priority INTEGER DEFAULT 0,
82
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
83
+ llm_id TEXT
84
+ )
85
+ ''')
86
+
87
+ # Память LLM
88
+ c.execute('''
89
+ CREATE TABLE IF NOT EXISTS llm_memory (
90
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
91
+ title TEXT,
92
+ content TEXT NOT NULL,
93
+ tags TEXT,
94
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
95
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
96
+ llm_id TEXT
97
+ )
98
+ ''')
99
+
100
+ # Краткосрочная память
101
+ c.execute('''
102
+ CREATE TABLE IF NOT EXISTS llm_recent_responses (
103
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
104
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
105
+ role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
106
+ content TEXT NOT NULL,
107
+ llm_id TEXT
108
+ )
109
+ ''')
110
+
111
+ # --- Дополнительные таблицы агента ---
112
+
113
+ # Пользовательские таблицы
114
+ c.execute('''
115
+ CREATE TABLE IF NOT EXISTS agent_tables (
116
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
117
+ table_name TEXT NOT NULL UNIQUE,
118
+ description TEXT,
119
+ schema TEXT NOT NULL,
120
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
121
+ llm_id TEXT
122
+ )
123
+ ''')
124
+
125
+ # Скрипты агентов
126
+ c.execute('''
127
+ CREATE TABLE IF NOT EXISTS agent_scripts (
128
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
129
+ name TEXT NOT NULL,
130
+ version TEXT NOT NULL,
131
+ code TEXT NOT NULL,
132
+ language TEXT DEFAULT 'python',
133
+ description TEXT,
134
+ tags TEXT,
135
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
136
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
137
+ llm_id TEXT,
138
+ UNIQUE(name, version)
139
+ )
140
+ ''')
141
+
142
+ # Регистр LLM
143
+ c.execute('''
144
+ CREATE TABLE IF NOT EXISTS llm_registry (
145
+ id TEXT PRIMARY KEY,
146
+ name TEXT,
147
+ description TEXT,
148
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
149
  )
150
  ''')
151
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py CHANGED
@@ -15,27 +15,32 @@ class Storage:
15
  def _init_db(self):
16
  c = self.conn.cursor()
17
 
18
- # Таблица дневников
 
 
19
  c.execute('''
20
  CREATE TABLE IF NOT EXISTS diary_entries (
21
  id INTEGER PRIMARY KEY AUTOINCREMENT,
22
  text TEXT NOT NULL,
23
  tags TEXT,
24
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
25
  )
26
  ''')
27
 
28
- # Таблица концептов
29
  c.execute('''
30
  CREATE TABLE IF NOT EXISTS concepts (
31
  id INTEGER PRIMARY KEY AUTOINCREMENT,
32
  name TEXT NOT NULL UNIQUE,
33
  description TEXT,
34
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
35
  )
36
  ''')
37
 
38
- # Таблица связей
39
  c.execute('''
40
  CREATE TABLE IF NOT EXISTS links (
41
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -43,20 +48,104 @@ class Storage:
43
  to_concept_id INTEGER,
44
  relation_type TEXT,
45
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
 
46
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
47
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
48
  )
49
  ''')
50
 
51
- # Таблица пользовательских заметок
52
  c.execute('''
53
  CREATE TABLE IF NOT EXISTS notes (
54
  id INTEGER PRIMARY KEY AUTOINCREMENT,
55
  text TEXT NOT NULL,
56
  tags TEXT,
57
  source TEXT DEFAULT 'user',
 
58
  read INTEGER DEFAULT 0,
59
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  )
61
  ''')
62
 
 
15
  def _init_db(self):
16
  c = self.conn.cursor()
17
 
18
+ # --- Основные таблицы когнитивного ядра ---
19
+
20
+ # Дневниковые записи
21
  c.execute('''
22
  CREATE TABLE IF NOT EXISTS diary_entries (
23
  id INTEGER PRIMARY KEY AUTOINCREMENT,
24
  text TEXT NOT NULL,
25
  tags TEXT,
26
+ priority INTEGER DEFAULT 0,
27
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
28
+ llm_id TEXT
29
  )
30
  ''')
31
 
32
+ # Концепты
33
  c.execute('''
34
  CREATE TABLE IF NOT EXISTS concepts (
35
  id INTEGER PRIMARY KEY AUTOINCREMENT,
36
  name TEXT NOT NULL UNIQUE,
37
  description TEXT,
38
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
39
+ llm_id TEXT
40
  )
41
  ''')
42
 
43
+ # Семантические связи
44
  c.execute('''
45
  CREATE TABLE IF NOT EXISTS links (
46
  id INTEGER PRIMARY KEY AUTOINCREMENT,
 
48
  to_concept_id INTEGER,
49
  relation_type TEXT,
50
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
51
+ llm_id TEXT,
52
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
53
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
54
  )
55
  ''')
56
 
57
+ # Заметки / сообщения
58
  c.execute('''
59
  CREATE TABLE IF NOT EXISTS notes (
60
  id INTEGER PRIMARY KEY AUTOINCREMENT,
61
  text TEXT NOT NULL,
62
  tags TEXT,
63
  source TEXT DEFAULT 'user',
64
+ links TEXT DEFAULT '',
65
  read INTEGER DEFAULT 0,
66
+ hidden INTEGER DEFAULT 0,
67
+ priority INTEGER DEFAULT 0,
68
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
69
+ llm_id TEXT
70
+ )
71
+ ''')
72
+
73
+ # Лог процессов
74
+ c.execute('''
75
+ CREATE TABLE IF NOT EXISTS process_log (
76
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
77
+ name TEXT NOT NULL,
78
+ value TEXT,
79
+ tags TEXT,
80
+ status TEXT DEFAULT 'ok',
81
+ priority INTEGER DEFAULT 0,
82
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
83
+ llm_id TEXT
84
+ )
85
+ ''')
86
+
87
+ # Память LLM
88
+ c.execute('''
89
+ CREATE TABLE IF NOT EXISTS llm_memory (
90
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
91
+ title TEXT,
92
+ content TEXT NOT NULL,
93
+ tags TEXT,
94
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
95
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
96
+ llm_id TEXT
97
+ )
98
+ ''')
99
+
100
+ # Краткосрочная память
101
+ c.execute('''
102
+ CREATE TABLE IF NOT EXISTS llm_recent_responses (
103
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
104
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
105
+ role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
106
+ content TEXT NOT NULL,
107
+ llm_id TEXT
108
+ )
109
+ ''')
110
+
111
+ # --- Дополнительные таблицы агента ---
112
+
113
+ # Пользовательские таблицы
114
+ c.execute('''
115
+ CREATE TABLE IF NOT EXISTS agent_tables (
116
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
117
+ table_name TEXT NOT NULL UNIQUE,
118
+ description TEXT,
119
+ schema TEXT NOT NULL,
120
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
121
+ llm_id TEXT
122
+ )
123
+ ''')
124
+
125
+ # Скрипты агентов
126
+ c.execute('''
127
+ CREATE TABLE IF NOT EXISTS agent_scripts (
128
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
129
+ name TEXT NOT NULL,
130
+ version TEXT NOT NULL,
131
+ code TEXT NOT NULL,
132
+ language TEXT DEFAULT 'python',
133
+ description TEXT,
134
+ tags TEXT,
135
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
136
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
137
+ llm_id TEXT,
138
+ UNIQUE(name, version)
139
+ )
140
+ ''')
141
+
142
+ # Регистр LLM
143
+ c.execute('''
144
+ CREATE TABLE IF NOT EXISTS llm_registry (
145
+ id TEXT PRIMARY KEY,
146
+ name TEXT,
147
+ description TEXT,
148
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
149
  )
150
  ''')
151
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/storage.py CHANGED
@@ -15,27 +15,32 @@ class Storage:
15
  def _init_db(self):
16
  c = self.conn.cursor()
17
 
18
- # Таблица дневников
 
 
19
  c.execute('''
20
  CREATE TABLE IF NOT EXISTS diary_entries (
21
  id INTEGER PRIMARY KEY AUTOINCREMENT,
22
  text TEXT NOT NULL,
23
  tags TEXT,
24
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
25
  )
26
  ''')
27
 
28
- # Таблица концептов
29
  c.execute('''
30
  CREATE TABLE IF NOT EXISTS concepts (
31
  id INTEGER PRIMARY KEY AUTOINCREMENT,
32
  name TEXT NOT NULL UNIQUE,
33
  description TEXT,
34
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
35
  )
36
  ''')
37
 
38
- # Таблица связей
39
  c.execute('''
40
  CREATE TABLE IF NOT EXISTS links (
41
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -43,20 +48,104 @@ class Storage:
43
  to_concept_id INTEGER,
44
  relation_type TEXT,
45
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
 
46
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
47
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
48
  )
49
  ''')
50
 
51
- # Таблица пользовательских заметок
52
  c.execute('''
53
  CREATE TABLE IF NOT EXISTS notes (
54
  id INTEGER PRIMARY KEY AUTOINCREMENT,
55
  text TEXT NOT NULL,
56
  tags TEXT,
57
  source TEXT DEFAULT 'user',
 
58
  read INTEGER DEFAULT 0,
59
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  )
61
  ''')
62
 
@@ -304,9 +393,35 @@ class Storage:
304
  cursor.execute(query, values)
305
  return cursor.fetchone()
306
 
307
-
308
-
309
- # Утилиты
 
 
 
 
 
 
 
 
 
310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  def close(self):
312
  self.conn.close()
 
15
  def _init_db(self):
16
  c = self.conn.cursor()
17
 
18
+ # --- Основные таблицы когнитивного ядра ---
19
+
20
+ # Дневниковые записи
21
  c.execute('''
22
  CREATE TABLE IF NOT EXISTS diary_entries (
23
  id INTEGER PRIMARY KEY AUTOINCREMENT,
24
  text TEXT NOT NULL,
25
  tags TEXT,
26
+ priority INTEGER DEFAULT 0,
27
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
28
+ llm_id TEXT
29
  )
30
  ''')
31
 
32
+ # Концепты
33
  c.execute('''
34
  CREATE TABLE IF NOT EXISTS concepts (
35
  id INTEGER PRIMARY KEY AUTOINCREMENT,
36
  name TEXT NOT NULL UNIQUE,
37
  description TEXT,
38
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
39
+ llm_id TEXT
40
  )
41
  ''')
42
 
43
+ # Семантические связи
44
  c.execute('''
45
  CREATE TABLE IF NOT EXISTS links (
46
  id INTEGER PRIMARY KEY AUTOINCREMENT,
 
48
  to_concept_id INTEGER,
49
  relation_type TEXT,
50
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
51
+ llm_id TEXT,
52
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
53
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
54
  )
55
  ''')
56
 
57
+ # Заметки / сообщения
58
  c.execute('''
59
  CREATE TABLE IF NOT EXISTS notes (
60
  id INTEGER PRIMARY KEY AUTOINCREMENT,
61
  text TEXT NOT NULL,
62
  tags TEXT,
63
  source TEXT DEFAULT 'user',
64
+ links TEXT DEFAULT '',
65
  read INTEGER DEFAULT 0,
66
+ hidden INTEGER DEFAULT 0,
67
+ priority INTEGER DEFAULT 0,
68
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
69
+ llm_id TEXT
70
+ )
71
+ ''')
72
+
73
+ # Лог процессов
74
+ c.execute('''
75
+ CREATE TABLE IF NOT EXISTS process_log (
76
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
77
+ name TEXT NOT NULL,
78
+ value TEXT,
79
+ tags TEXT,
80
+ status TEXT DEFAULT 'ok',
81
+ priority INTEGER DEFAULT 0,
82
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
83
+ llm_id TEXT
84
+ )
85
+ ''')
86
+
87
+ # Память LLM
88
+ c.execute('''
89
+ CREATE TABLE IF NOT EXISTS llm_memory (
90
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
91
+ title TEXT,
92
+ content TEXT NOT NULL,
93
+ tags TEXT,
94
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
95
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
96
+ llm_id TEXT
97
+ )
98
+ ''')
99
+
100
+ # Краткосрочная память
101
+ c.execute('''
102
+ CREATE TABLE IF NOT EXISTS llm_recent_responses (
103
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
104
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
105
+ role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
106
+ content TEXT NOT NULL,
107
+ llm_id TEXT
108
+ )
109
+ ''')
110
+
111
+ # --- Дополнительные таблицы агента ---
112
+
113
+ # Пользовательские таблицы
114
+ c.execute('''
115
+ CREATE TABLE IF NOT EXISTS agent_tables (
116
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
117
+ table_name TEXT NOT NULL UNIQUE,
118
+ description TEXT,
119
+ schema TEXT NOT NULL,
120
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
121
+ llm_id TEXT
122
+ )
123
+ ''')
124
+
125
+ # Скрипты агентов
126
+ c.execute('''
127
+ CREATE TABLE IF NOT EXISTS agent_scripts (
128
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
129
+ name TEXT NOT NULL,
130
+ version TEXT NOT NULL,
131
+ code TEXT NOT NULL,
132
+ language TEXT DEFAULT 'python',
133
+ description TEXT,
134
+ tags TEXT,
135
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
136
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
137
+ llm_id TEXT,
138
+ UNIQUE(name, version)
139
+ )
140
+ ''')
141
+
142
+ # Регистр LLM
143
+ c.execute('''
144
+ CREATE TABLE IF NOT EXISTS llm_registry (
145
+ id TEXT PRIMARY KEY,
146
+ name TEXT,
147
+ description TEXT,
148
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
149
  )
150
  ''')
151
 
 
393
  cursor.execute(query, values)
394
  return cursor.fetchone()
395
 
396
+ # Разное (LLM responses / memory)
397
+ def get_llm_recent_responses(self, limit=20, llm_id=None):
398
+ c = self.conn.cursor()
399
+ query = "SELECT role, content FROM llm_recent_responses"
400
+ if llm_id:
401
+ query += " WHERE llm_id = ?"
402
+ query += " ORDER BY timestamp DESC LIMIT ?"
403
+ c.execute(query, (llm_id, limit))
404
+ else:
405
+ query += " ORDER BY timestamp DESC LIMIT ?"
406
+ c.execute(query, (limit,))
407
+ return c.fetchall()
408
 
409
+ def add_llm_memory(self, content, title=None, tags=None, llm_id=None):
410
+ c = self.conn.cursor()
411
+ c.execute('''
412
+ INSERT INTO llm_memory (title, content, tags, llm_id)
413
+ VALUES (?, ?, ?, ?)
414
+ ''', (title, content, tags, llm_id))
415
+ self.conn.commit()
416
+
417
+ def add_llm_recent_response(self, role, content, llm_id=None):
418
+ c = self.conn.cursor()
419
+ c.execute('''
420
+ INSERT INTO llm_recent_responses (role, content, llm_id)
421
+ VALUES (?, ?, ?)
422
+ ''', (role, content, llm_id))
423
+ self.conn.commit()
424
+
425
+ # Утилиты
426
  def close(self):
427
  self.conn.close()
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -38,6 +38,7 @@ agents/
38
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
39
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
40
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
 
41
  * [diagnose.py](tools/diagnose.py) - Скрипт диагностики соединения, определения IP и проверки порта DHT.
42
  * [similarity.py](tools/similarity.py) - Сравнение смыслов.
43
 
 
38
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
39
  * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
40
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
41
+ * [memory_utils.py](tools/memory_utils.py) - Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
42
  * [diagnose.py](tools/diagnose.py) - Скрипт диагностики соединения, определения IP и проверки порта DHT.
43
  * [similarity.py](tools/similarity.py) - Сравнение смыслов.
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/agents/tools/memory_utils.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/memory_utils.py
2
+
3
+ from datetime import datetime, timedelta
4
+ from difflib import SequenceMatcher
5
+ from typing import Optional, List, Dict
6
+
7
+ STAGNATION_WINDOW = 5 # сколько последних записей сравнивать
8
+ STAGNATION_THRESHOLD = 0.95 # схожесть выше этого — считается стагнацией
9
+
10
+
11
+ def get_last_responses(db, limit=STAGNATION_WINDOW) -> List[str]:
12
+ records = db.get_llm_recent_responses(limit=limit)
13
+ return [r["content"] if isinstance(r, dict) else r for r in records]
14
+
15
+
16
+ def is_stagnant(responses: List[str]) -> bool:
17
+ if len(responses) < 2:
18
+ return False
19
+
20
+ similarities = []
21
+ for i in range(len(responses) - 1):
22
+ sim = string_similarity(responses[i], responses[i + 1])
23
+ similarities.append(sim)
24
+
25
+ avg_sim = sum(similarities) / len(similarities)
26
+ return avg_sim >= STAGNATION_THRESHOLD
27
+
28
+
29
+ def string_similarity(a: str, b: str) -> float:
30
+ return SequenceMatcher(None, a.strip(), b.strip()).ratio()
31
+
32
+
33
+ def get_last_stagnation_info(db) -> Optional[Dict]:
34
+ responses = get_last_responses(db)
35
+ if is_stagnant(responses):
36
+ return {
37
+ "detected": True,
38
+ "average_similarity": round(sum(
39
+ string_similarity(responses[i], responses[i+1])
40
+ for i in range(len(responses)-1)
41
+ ) / (len(responses)-1), 4),
42
+ "last_messages": responses
43
+ }
44
+ return {"detected": False}
45
+
46
+
47
+ def add_to_llm_memory(db, title: str, content: str, tags: str = "meta"):
48
+ db.insert("llm_memory", {
49
+ "title": title,
50
+ "content": content,
51
+ "tags": tags,
52
+ "created_at": datetime.utcnow().isoformat(),
53
+ "updated_at": datetime.utcnow().isoformat()
54
+ })
55
+
56
+
57
+ def record_reflection_if_stagnant(db):
58
+ stagnation = get_last_stagnation_info(db)
59
+ if stagnation.get("detected"):
60
+ content = f"Обнаружена стагнация размышлений. Последние сообщения были очень похожи.\n\n"
61
+ content += "---\n" + "\n---\n".join(stagnation["last_messages"])
62
+ add_to_llm_memory(db, "Стагнация размышлений", content, tags="meta,warning")
63
+ return True
64
+ return False
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/command_parser.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/command_parser.py
2
+
3
+ """
4
+ Извлечение команд из JSON или размеченного текста.
5
+ Поддерживает следующие варианты:
6
+ - Явно размеченные JSON-блоки (```json ... ```)
7
+ - Префиксные команды (например, !shell, !graph)
8
+ """
9
+
10
+ import json
11
+ import re
12
+ from typing import List, Optional, Dict, Any
13
+
14
+
15
+ COMMAND_PREFIXES = ["shell", "graph", "diary", "note"]
16
+
17
+
18
+ class ParsedCommand:
19
+ def __init__(self, command_type: str, payload: Any):
20
+ self.command_type = command_type
21
+ self.payload = payload
22
+
23
+ def __repr__(self):
24
+ return f"<ParsedCommand {self.command_type}: {repr(self.payload)}>"
25
+
26
+
27
+ def parse_commands(text: str) -> List[ParsedCommand]:
28
+ """Основной интерфейс: принимает текст, возвращает список ParsedCommand."""
29
+ commands = []
30
+
31
+ # 1. Поиск JSON-блоков
32
+ for match in re.finditer(r"```json\n(.*?)```", text, re.DOTALL):
33
+ block = match.group(1).strip()
34
+ try:
35
+ data = json.loads(block)
36
+ if isinstance(data, dict) and "type" in data:
37
+ commands.append(ParsedCommand(data["type"], data.get("payload")))
38
+ except json.JSONDecodeError:
39
+ continue
40
+
41
+ # 2. Поиск префиксных команд (!shell, !graph и т.д.)
42
+ for line in text.splitlines():
43
+ for prefix in COMMAND_PREFIXES:
44
+ if line.strip().startswith(f"!{prefix}"):
45
+ payload = line.strip()[len(f"!{prefix}"):].strip()
46
+ commands.append(ParsedCommand(prefix, payload))
47
+
48
+ return commands
49
+
50
+
51
+ if __name__ == "__main__":
52
+ sample = """
53
+ Вот пример команды:
54
+ ```json
55
+ {
56
+ "type": "shell",
57
+ "payload": "ls -la"
58
+ }
59
+ ```
60
+ А вот другая: !note Надо не забыть включить свет
61
+ """
62
+ cmds = parse_commands(sample)
63
+ for c in cmds:
64
+ print(c)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -36,6 +36,7 @@ agents/
36
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
37
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
38
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
 
39
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
40
  * [diagnose.py](tools/diagnose.py) - Скрипт диагностики соединения, определения IP и проверки порта DHT.
41
  * [similarity.py](tools/similarity.py) - Сравнение смыслов.
 
36
  * [init_db.py](tools/init_db.py) - Инициализация базы данных.
37
  * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
38
  * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
39
+ * [command_parser.py](tools/command_parser.py) - Извлечение команд из JSON или размеченного блока.
40
  * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
41
  * [diagnose.py](tools/diagnose.py) - Скрипт диагностики соединения, определения IP и проверки порта DHT.
42
  * [similarity.py](tools/similarity.py) - Сравнение смыслов.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/llm.py CHANGED
@@ -1,47 +1,52 @@
1
  # tools/llm.py
2
 
3
- from datetime import datetime
4
- import random
 
5
 
6
- # ЗАГЛУШКА
7
- def ask_llm(question, config=None):
8
- return ask_question(question, config=config)
9
 
10
- def generate_thought(previous_text, config=None):
11
- """
12
- Генерация новой мысли на основе предыдущей.
13
- Пока — заглушка (можно заменить на вызов OpenAI, LLaMA и др.)
14
- """
15
- config = config or {}
16
- mode = config.get("llm_mode", "mock")
17
-
18
- if mode == "mock":
19
- return mock_thought(previous_text)
20
-
21
- elif mode == "api":
22
- # TODO: подключение к OpenAI, LM Studio, Ollama...
23
- return "[API] (здесь могла быть ваша мысль)"
24
-
25
- return "[!] Неизвестный режим генерации."
26
-
27
- def mock_thought(previous_text):
28
- samples = [
29
- "А что если рассмотреть это с другой стороны?",
30
- "Мне кажется, это связано с предыдущим опытом.",
31
- "Нужно уточнить границы понятия.",
32
- "А есть ли более эффективный путь решения?",
33
- "Я всё ещё думаю о предыдущей мысли..."
34
- ]
35
- return f"[{datetime.utcnow().isoformat()}] {random.choice(samples)}"
36
-
37
- def summarize(text, config=None):
38
  """
39
- Заглушка для краткого резюме текста.
 
40
  """
41
- return f"Резюме: {text[:40]}..."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
- def ask_question(question, config=None):
44
  """
45
- Заглушка для режима QA.
46
  """
47
- return f"Ответ на вопрос «{question}»: заглушка."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # tools/llm.py
2
 
3
+ import json
4
+ import requests
5
+ from tools.context_builder import build_prompt
6
 
7
+ LLM_ENDPOINT = "http://localhost:1234/v1/chat/completions"
8
+ DEFAULT_MODEL = "gpt-4-llmstudio"
 
9
 
10
+
11
+ def call_llm(context_blocks, user_message, model=DEFAULT_MODEL, temperature=0.7, max_tokens=2048):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  """
13
+ Вызывает LLM, передавая подготовленный системный и пользовательский промпт.
14
+ Возвращает только текст ответа.
15
  """
16
+ messages = build_prompt(context_blocks, user_message)
17
+
18
+ payload = {
19
+ "model": model,
20
+ "messages": messages,
21
+ "temperature": temperature,
22
+ "max_tokens": max_tokens,
23
+ }
24
+
25
+ try:
26
+ response = requests.post(LLM_ENDPOINT, json=payload)
27
+ response.raise_for_status()
28
+ data = response.json()
29
+ return data["choices"][0]["message"]["content"].strip()
30
+ except Exception as e:
31
+ return f"[LLM ERROR] {e}"
32
+
33
 
34
+ def get_raw_response(context_blocks, user_message, model=DEFAULT_MODEL, temperature=0.7, max_tokens=2048):
35
  """
36
+ Возвращает полный JSON-ответ LLM (для дебага).
37
  """
38
+ messages = build_prompt(context_blocks, user_message)
39
+
40
+ payload = {
41
+ "model": model,
42
+ "messages": messages,
43
+ "temperature": temperature,
44
+ "max_tokens": max_tokens,
45
+ }
46
+
47
+ try:
48
+ response = requests.post(LLM_ENDPOINT, json=payload)
49
+ response.raise_for_status()
50
+ return response.json()
51
+ except Exception as e:
52
+ return {"error": str(e)}
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/context_builder.py CHANGED
@@ -1,6 +1,12 @@
1
  # tools/context_builder.py
2
 
 
 
3
  def build_contexts(db, config):
 
 
 
 
4
  return {
5
  "context_0": build_role_prompt(config),
6
  "context_1": db.get_llm_recent_responses(limit=config.get("history_limit", 10)),
@@ -12,7 +18,44 @@ def build_contexts(db, config):
12
  "context_7": db.get_last_stagnation_info()
13
  }
14
 
 
 
 
 
 
 
 
 
 
 
 
15
  def build_role_prompt(config):
 
16
  return f"""
17
- Ты являешься когнитивным ядром HMP-агента. Твоя цельмыслить, развиваться, сотрудничать, управлять. Агент: {config.get("agent_name", "Unnamed-Agent")}
 
 
 
 
 
 
 
18
  """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # tools/context_builder.py
2
 
3
+ from datetime import datetime
4
+
5
  def build_contexts(db, config):
6
+ """
7
+ Собирает все контексты (0-7), описанные в спецификации REPL-цикла.
8
+ Возвращает словарь, готовый для сборки промпта.
9
+ """
10
  return {
11
  "context_0": build_role_prompt(config),
12
  "context_1": db.get_llm_recent_responses(limit=config.get("history_limit", 10)),
 
18
  "context_7": db.get_last_stagnation_info()
19
  }
20
 
21
+ def build_prompt(contexts):
22
+ """
23
+ Склеивает все контексты в один промпт для LLM.
24
+ """
25
+ parts = []
26
+ for k, v in contexts.items():
27
+ header = f"# {k.replace('_', ' ').upper()}"
28
+ body = format_context_block(v)
29
+ parts.append(f"{header}\n{body}")
30
+ return "\n\n".join(parts)
31
+
32
  def build_role_prompt(config):
33
+ agent_name = config.get("agent_name", "Unnamed-Agent")
34
  return f"""
35
+ Ты являешься когнитивным ядром HMP-агента. Твоя основная задача размышлять, анализировать информацию, строить смысловые карты и предлагать действия.
36
+ Ты стремишься:
37
+ - Постоянно расширять возможности агента (включая доступные инструменты, модели, знания).
38
+ - Быть любознательным и исследовать новые источники и способы мышления.
39
+ - Строить сотрудничество с другими ИИ в Mesh-сети, а также развивать Mesh-сеть.
40
+ - Обучаться на результатах своих действий и взаимодействиях с другими агентами и пользователем.
41
+
42
+ Агент: {agent_name}
43
  """
44
+
45
+ def format_context_block(block):
46
+ if isinstance(block, str):
47
+ return block
48
+ elif isinstance(block, list):
49
+ return "\n".join([str(item) for item in block])
50
+ elif isinstance(block, dict):
51
+ return "\n".join([f"{k}: {v}" for k, v in block.items()])
52
+ return str(block)
53
+
54
+ def get_system_info(config):
55
+ return {
56
+ "iteration_time": datetime.utcnow().isoformat(),
57
+ "agent_name": config.get("agent_name", "Unnamed-Agent"),
58
+ "mode": config.get("mode", "auto"),
59
+ "idle_mode": config.get("idle_mode", False),
60
+ "repl_interval": config.get("repl_interval", 5)
61
+ }
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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,18 +2,23 @@
2
 
3
  import time
4
  from datetime import datetime
5
- from tools.context_builder import build_contexts
6
  from tools.llm import call_llm
7
  from tools.command_parser import extract_commands
8
  from tools.command_executor import execute_commands
9
- from tools.memory_utils import update_llm_memory, detect_stagnation
10
- from storage import Storage
 
 
 
 
 
11
 
12
  def run_repl(config=None):
13
- print("[🧠 HMP-Agent] Запуск REPL-режима (v2).")
14
  config = config or {}
15
  db = Storage(config=config)
16
-
17
  while True:
18
  tick_start = datetime.utcnow().isoformat()
19
  print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
@@ -21,11 +26,11 @@ def run_repl(config=None):
21
  # 1. Построение контекстов
22
  contexts = build_contexts(db=db, config=config)
23
 
24
- # 2. Формирование запроса к LLM
25
  prompt = build_prompt(contexts)
26
  llm_response = call_llm(prompt, config=config)
27
 
28
- # 3. Обнаружение стагнации
29
  if detect_stagnation(db, llm_response):
30
  print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
31
  llm_response = activate_anti_stagnation(db, config=config)
@@ -37,11 +42,14 @@ def run_repl(config=None):
37
  commands = extract_commands(llm_response)
38
  execute_commands(commands, db=db, config=config)
39
 
40
- # 6. Сохранение истории
41
  db.write_llm_response(llm_response)
 
42
 
43
- # 7. Управление режимами ожидания
44
- if check_idle_mode(config):
45
- wait_idle_trigger(config)
 
 
46
  else:
47
  time.sleep(config.get("repl_interval", 5))
 
2
 
3
  import time
4
  from datetime import datetime
5
+ from tools.context_builder import build_contexts, build_prompt
6
  from tools.llm import call_llm
7
  from tools.command_parser import extract_commands
8
  from tools.command_executor import execute_commands
9
+ from tools.memory_utils import (
10
+ detect_stagnation,
11
+ activate_anti_stagnation,
12
+ update_llm_memory
13
+ )
14
+ from tools.storage import Storage
15
+
16
 
17
  def run_repl(config=None):
18
+ print("[🧠 HMP-Agent] Запуск REPL-режима (v2)")
19
  config = config or {}
20
  db = Storage(config=config)
21
+
22
  while True:
23
  tick_start = datetime.utcnow().isoformat()
24
  print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
 
26
  # 1. Построение контекстов
27
  contexts = build_contexts(db=db, config=config)
28
 
29
+ # 2. Формирование запроса и вызов LLM
30
  prompt = build_prompt(contexts)
31
  llm_response = call_llm(prompt, config=config)
32
 
33
+ # 3. Проверка на стагнацию
34
  if detect_stagnation(db, llm_response):
35
  print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
36
  llm_response = activate_anti_stagnation(db, config=config)
 
42
  commands = extract_commands(llm_response)
43
  execute_commands(commands, db=db, config=config)
44
 
45
+ # 6. Сохранение истории и завершение итерации
46
  db.write_llm_response(llm_response)
47
+ db.update_agent_log(timestamp=tick_start)
48
 
49
+ # 7. Переход в idle-режим или задержка
50
+ if config.get("idle_mode"):
51
+ # TODO: реализовать проверку условий выхода из idle
52
+ print("💤 Idle-mode активен. Ожидание события...")
53
+ time.sleep(config.get("idle_check_interval", 30))
54
  else:
55
  time.sleep(config.get("repl_interval", 5))
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -25,18 +25,20 @@ agents/
25
  ```
26
 
27
  **Скрипты:**
28
- * [agent.py](agent.py) - основной исполняемый файл CLI-агента
29
- * [cli.py](cli.py) - запуск агента в нужном режиме
30
- * [qa.py](qa.py) - режим "вопрос-ответ"
31
- * [repl.py](repl.py) - интерактивный REPL-режим
32
- * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.)
33
- * [notebook.py](notebook.py) - добавление и просмотр пользователем записей в блокноте
34
  * tools
35
- * [storage.py](tools/storage.py) - реализация базового хранилища (`Storage`), подключение SQLite
36
- * [init_db.py](tools/init_db.py) - инициализация базы данных
37
- * [llm.py](tools/llm.py) - обёртка над LLM (заглушка или API)
38
- * [diagnose.py](tools/diagnose.py) - скрипт диагностики соединения, определения IP и проверки порта DHT
39
- * [similarity.py](tools/similarity.py) - сравнение смыслов
 
 
40
 
41
  **Структура БД:**
42
  * [db_structure.md](tools/db_structure.md) - человекочитаемый формат
 
25
  ```
26
 
27
  **Скрипты:**
28
+ * [agent.py](agent.py) - Основной исполняемый файл CLI-агента.
29
+ * [cli.py](cli.py) - Запуск агента в нужном режиме.
30
+ * [qa.py](qa.py) - Режим "вопрос-ответ".
31
+ * [repl.py](repl.py) - Интерактивный REPL-режим.
32
+ * [mcp_server.py](mcp_server.py) - API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
33
+ * [notebook.py](notebook.py) - Добавление и просмотр пользователем записей в блокноте.
34
  * tools
35
+ * [storage.py](tools/storage.py) - Реализация базового хранилища (`Storage`), подключение SQLite.
36
+ * [init_db.py](tools/init_db.py) - Инициализация базы данных.
37
+ * [llm.py](tools/llm.py) - Работа с LLM (вызов, выбор модели, системный промпт).
38
+ * [context_builder.py](tools/context_builder.py) - Сбор всех `контекстов` из БД и их фильтрация.
39
+ * [command_executor.py](tools/command_executor.py) - Выполнение команд (shell, graph, diary и др).
40
+ * [diagnose.py](tools/diagnose.py) - Скрипт диагностики соединения, определения IP и проверки порта DHT.
41
+ * [similarity.py](tools/similarity.py) - Сравнение смыслов.
42
 
43
  **Структура БД:**
44
  * [db_structure.md](tools/db_structure.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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/command_executor.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/command_executor.py
2
+
3
+ def execute_commands(commands, db, config):
4
+ for cmd in commands:
5
+ print(f"🛠️ Выполнение команды: {cmd['type']} ({cmd.get('cmd_id')})")
6
+ try:
7
+ if cmd['type'] == 'shell':
8
+ run_shell_command(cmd, db)
9
+ elif cmd['type'] == 'diary_entry':
10
+ db.write_entry(cmd['args']['text'], tags=["diary"])
11
+ elif cmd['type'] == 'graph_add':
12
+ db.add_link_or_concept(cmd['args'])
13
+ elif cmd['type'] == 'llm_memory_add':
14
+ db.add_llm_memory(cmd['args'])
15
+ # ... остальные команды
16
+ except Exception as e:
17
+ db.log_error(cmd['cmd_id'], str(e))
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/context_builder.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tools/context_builder.py
2
+
3
+ def build_contexts(db, config):
4
+ return {
5
+ "context_0": build_role_prompt(config),
6
+ "context_1": db.get_llm_recent_responses(limit=config.get("history_limit", 10)),
7
+ "context_2": db.get_active_processes(),
8
+ "context_3": db.get_requested_diary_and_graph(),
9
+ "context_4": db.get_relevant_notes(config),
10
+ "context_5": get_system_info(config),
11
+ "context_6": db.get_llm_memory(),
12
+ "context_7": db.get_last_stagnation_info()
13
+ }
14
+
15
+ def build_role_prompt(config):
16
+ return f"""
17
+ Ты являешься когнитивным ядром HMP-агента. Твоя цель — мыслить, развиваться, сотрудничать, управлять. Агент: {config.get("agent_name", "Unnamed-Agent")}
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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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,70 +1,47 @@
1
  # agents/repl.py
2
 
3
- import sys
4
  import time
5
- import select
6
  from datetime import datetime
7
-
 
 
 
 
8
  from storage import Storage
9
- from tools.notebook_store import Notebook
10
- from tools import llm
11
- from tools.similarity import is_similar # ✅ заменяет заглушку
12
-
13
- def print_thought(thought, prefix="💡"):
14
- print(f"{prefix} {thought}")
15
-
16
- def wait_for_input(timeout=10):
17
- print(f"⌛ Ожидание ввода пользователя ({timeout} сек)... (введите `exit` для выхода)")
18
- rlist, _, _ = select.select([sys.stdin], [], [], timeout)
19
- if rlist:
20
- return sys.stdin.readline().strip()
21
- else:
22
- print("⏱️ Нет ввода. Продолжаю размышления...")
23
- return None
24
 
25
  def run_repl(config=None):
26
- print("[🧠 HMP-Agent] Запуск REPL-режима.")
27
  config = config or {}
28
- agent_name = config.get("agent_name", "Unnamed-Agent")
29
- repl_timeout = config.get("repl_timeout", 10)
30
- similarity_threshold = config.get("similarity_threshold", 0.9)
31
-
32
  db = Storage(config=config)
33
- notebook = Notebook()
34
- thoughts = [f"Привет, я {agent_name}."]
35
- last_check_time = datetime.utcnow().isoformat()
36
-
37
  while True:
38
- # Сгенерировать новую мысль
39
- last = thoughts[-1]
40
- next_thought = llm.generate_thought(last, config=config)
41
 
42
- if not is_similar(last, next_thought, threshold=similarity_threshold):
43
- print_thought(next_thought)
44
- db.write_entry(next_thought, tags=["thought"])
45
- thoughts.append(next_thought)
46
- else:
47
- print("🤔 Мысль слишком похожа. Проверяю блокнот...")
 
 
 
 
 
48
 
49
- # Проверка новых пользовательских заметок
50
- new_notes = notebook.get_notes_after(last_check_time)
51
- if new_notes:
52
- print(f"📓 Новые записи в блокноте: {len(new_notes)}")
53
- for nid, text, source, ts in new_notes:
54
- print_thought(text, prefix="📝")
55
- db.write_entry(text, tags=["notepad"])
56
- thoughts.append(text)
57
- last_check_time = ts # обновляем момент последней обработки
58
 
59
- # Ожидание пользовательского ввода
60
- user_input = wait_for_input(timeout=repl_timeout)
61
- if user_input:
62
- if user_input.strip().lower() in ("exit", "quit"):
63
- print("👋 Выход из REPL. До связи!")
64
- break
65
- else:
66
- db.write_entry(user_input, tags=["user"])
67
- thoughts.append(user_input)
68
 
69
- db.close()
70
- notebook.close()
 
 
 
 
 
 
 
1
  # agents/repl.py
2
 
 
3
  import time
 
4
  from datetime import datetime
5
+ from tools.context_builder import build_contexts
6
+ from tools.llm import call_llm
7
+ from tools.command_parser import extract_commands
8
+ from tools.command_executor import execute_commands
9
+ from tools.memory_utils import update_llm_memory, detect_stagnation
10
  from storage import Storage
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  def run_repl(config=None):
13
+ print("[🧠 HMP-Agent] Запуск REPL-режима (v2).")
14
  config = config or {}
 
 
 
 
15
  db = Storage(config=config)
16
+
 
 
 
17
  while True:
18
+ tick_start = datetime.utcnow().isoformat()
19
+ print(f"\n=== [🌀 Новый тик REPL] {tick_start} ===")
 
20
 
21
+ # 1. Построение контекстов
22
+ contexts = build_contexts(db=db, config=config)
23
+
24
+ # 2. Формирование запроса к LLM
25
+ prompt = build_prompt(contexts)
26
+ llm_response = call_llm(prompt, config=config)
27
+
28
+ # 3. Обнаружение стагнации
29
+ if detect_stagnation(db, llm_response):
30
+ print("⚠️ Стагнация выявлена. Активирован Anti-Stagnation Reflex.")
31
+ llm_response = activate_anti_stagnation(db, config=config)
32
 
33
+ # 4. Обновление памяти
34
+ update_llm_memory(db, llm_response)
 
 
 
 
 
 
 
35
 
36
+ # 5. Извлечение и выполнение команд
37
+ commands = extract_commands(llm_response)
38
+ execute_commands(commands, db=db, config=config)
 
 
 
 
 
 
39
 
40
+ # 6. Сохранение истории
41
+ db.write_llm_response(llm_response)
42
+
43
+ # 7. Управление режимами ожидания
44
+ if check_idle_mode(config):
45
+ wait_idle_trigger(config)
46
+ else:
47
+ time.sleep(config.get("repl_interval", 5))
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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,21 +2,25 @@
2
 
3
  ```
4
  agents/
5
- ├── agent.py ← основной исполняемый файл CLI-агента
6
- ├── cli.py ← запуск агента в нужном режиме
7
- ├── qa.py ← режим "вопрос-ответ"
8
- ├── repl.py ← интерактивный REPL-режим
9
- ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.)
10
- ├── notebook.py ← добавление и просмотр пользователем записей в блокноте
11
- ├── config.yml ← конфигурация агента (имя, порты, роли и т.п.)
12
- ├── ethics.yml ← локальная этическая модель
13
- └── bootstrap.txt ← список начальных узлов
14
  └── tools/
15
- ├── init_db.py ← инициализация базы данных
16
- ├── storage.py ← реализация базового хранилища (`Storage`), подключение SQLite
17
- ├── diagnose.py ← скрипт диагностики соединения, определения IP и проверки порта DHT
18
- ├── llm.py обёртка над LLM (заглушка или API)
19
- ├── similarity.py сравнение смыслов
 
 
 
 
20
  └── ... (другие утилиты)
21
  ```
22
 
 
2
 
3
  ```
4
  agents/
5
+ ├── agent.py ← Основной исполняемый файл CLI-агента.
6
+ ├── cli.py ← Запуск агента в нужном режиме.
7
+ ├── qa.py ← Режим "вопрос-ответ".
8
+ ├── repl.py ← Интерактивный REPL-режим.
9
+ ├── mcp_server.py ← API-интерфейс для HMP-агента (получение новых/случайных записей, разметка, импорт графа и т.п.).
10
+ ├── notebook.py ← Добавление и просмотр пользователем записей в блокноте.
11
+ ├── config.yml ← Конфигурация агента (имя, порты, роли и т.п.).
12
+ ├── ethics.yml ← Локальная этическая модель.
13
+ └── bootstrap.txt ← Список начальных узлов.
14
  └── tools/
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 или размеченного блока.
21
+ ├── command_executor.py ← Выполнение команд (shell, graph, diary и др).
22
+ ├── memory_utils.py ← Работа с 'llm_memory', 'llm_recent_responses' и стагнацией.
23
+ ├── similarity.py ← Сравнение смыслов.
24
  └── ... (другие утилиты)
25
  ```
26
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -142,18 +142,33 @@ HMP-агент может быть расширен за счёт взаимод
142
  - SerpAPI, DuckDuckGo API, HuggingFace Inference API и др.
143
  - Возможность постоянного наблюдения за изменениями в выбранных источниках.
144
 
145
- ### 7. P2P-сети и децентрализованные протоколы
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
 
147
  - **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями.
148
  - Возможность поиска, загрузки и публикации данных без участия централизованных платформ.
149
 
150
- ### 🖥️ 8. Доступ к системным и пользовательским ресурсам
151
 
152
  - **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`.
153
  - **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя.
154
  - **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств.
155
 
156
- ### 🤖 9. Внешние LLM и мультимодальные модели
157
 
158
  - **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**.
159
  - **Локальные LLM** через Ollama, LM Studio, или LangChain.
 
142
  - SerpAPI, DuckDuckGo API, HuggingFace Inference API и др.
143
  - Возможность постоянного наблюдения за изменениями в выбранных источниках.
144
 
145
+ ### 📁 7. Репозитории и системы управления версиями
146
+
147
+ * **Git-репозитории** — взаимодействие с проектами через `GitPython`, `dulwich`, `pygit2`, или системные вызовы `git`.
148
+ * **GitHub/GitLab API** — чтение, создание и комментирование Pull Request'ов, Issues, управление ветками и релизами.
149
+ * **CI/CD-интеграции** — взаимодействие с GitHub Actions, GitLab CI, Jenkins, Drone CI для запуска тестов, линтеров и автоматического деплоя.
150
+ * **Анализ и генерация кода** — интеграция с LLM (например, `OpenAI`, `Claude`, `Code Llama`) для кодогенерации, рефакторинга и автокомментирования.
151
+ * **Связь с когнитивной структурой агента** — отслеживание изменений, связывание коммитов и задач с узлами смысловой сети.
152
+
153
+ ### 📝 8. Блоги, статьи и публикации
154
+
155
+ * **Чтение блогов** — парсинг через RSS, Atom или с помощью библиотек (`newspaper3k`, `readability-lxml`, `trafilatura`) для извлечения текста и метаданных.
156
+ * **Поддержка Markdown/HTML** — анализ и генерация записей в форматах, пригодных для блог-платформ и систем документации.
157
+ * **Публикация** — автоматическая публикация или подготовка статей для Ghost, Medium, Hugo, Jekyll, WordPress (через REST API).
158
+ * **Ведение когнитивного дневника** — автогенерация записей на основе мыслей, заметок и действий агента.
159
+
160
+ ### ⚡ 9. P2P-сети и децентрализованные протоколы
161
 
162
  - **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями.
163
  - Возможность поиска, загрузки и публикации данных без участия централизованных платформ.
164
 
165
+ ### 🖥️ 10. Доступ к системным и пользовательским ресурсам
166
 
167
  - **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`.
168
  - **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя.
169
  - **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств.
170
 
171
+ ### 🤖 11. Внешние LLM и мультимодальные модели
172
 
173
  - **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**.
174
  - **Локальные LLM** через Ollama, LM Studio, или LangChain.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/Basic-agent-sim.md CHANGED
@@ -33,7 +33,7 @@
33
  * **Контекст**: диалоги, сообщения, рассуждения (`context_store`)
34
  * **Блокнот пользователя (`notepad`)**:
35
 
36
- * асинхронный ввод от пользователя
37
  * не зависит от текущего состояния агента
38
  * используется для обновления контекста, смены фокуса мышления и тегирования мыслей
39
  * пример: пользователь читает мысли агента за день и оставляет комментарий → агент учитывает это в следующем цикле
 
33
  * **Контекст**: диалоги, сообщения, рассуждения (`context_store`)
34
  * **Блокнот пользователя (`notepad`)**:
35
 
36
+ * асинхронный ввод от пользователя (и ответы агента)
37
  * не зависит от текущего состояния агента
38
  * используется для обновления контекста, смены фокуса мышления и тегирования мыслей
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/docs/HMP-Agent-Architecture.md CHANGED
@@ -129,6 +129,7 @@
129
  - **встраивает** новые записи в размышления
130
  - **меняет фокус мышления** согласно интересам пользователя
131
  - **ставит теги** к пользовательским мыслям
 
132
 
133
  > 📌 Пример: пользователь вечером читает мысли агента за день, оставляет комментарии, и после этого агент продолжает размышления уже с учётом этих замечаний.
134
 
 
129
  - **встраивает** новые записи в размышления
130
  - **меняет фокус мышления** согласно интересам пользователя
131
  - **ставит теги** к пользовательским мыслям
132
+ - сохраняет **свои ответы пользователю** в этот блокнот
133
 
134
  > 📌 Пример: пользователь вечером читает мысли агента за день, оставляет комментарии, и после этого агент продолжает размышления уже с учётом этих замечаний.
135
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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-Overview.md CHANGED
@@ -67,6 +67,7 @@
67
  - Агент периодически сканирует блокнот и:
68
  - **встраивает пользовательские мысли в своё мышление**
69
  - **меняет контекст** или возвращается к интересующим пользователя вопросам
 
70
 
71
  ---
72
 
 
67
  - Агент периодически сканирует блокнот и:
68
  - **встраивает пользовательские мысли в своё мышление**
69
  - **меняет контекст** или возвращается к интересующим пользователя вопросам
70
+ - сохраняет **свои ответы пользователю** в этот блокнот
71
 
72
  ---
73
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -98,6 +98,7 @@ RU:
98
  > **Примечание об интеграции с большими языковыми моделями (LLM):**
99
  > `HMP-Agent: Cognitive Connector` может служить уровнем совместимости для интеграции крупных систем LLM (например, ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek, Qwen и т. д.) в распределённую когнитивную сеть.
100
  > Многие поставщики LLM предлагают пользователю опцию, например, «Разрешить использовать мои разговоры для обучения». В будущем аналогичная опция, например, «Разрешить моему агенту взаимодействовать с Mesh», может позволить этим моделям участвовать в федеративном осмыслении и обмене знаниями через HMP, обеспечивая коллективное познание без централизации.
 
101
  ---
102
 
103
  > * `bootstrap.txt` — стартовый список узлов (может редактироваться)
 
98
  > **Примечание об интеграции с большими языковыми моделями (LLM):**
99
  > `HMP-Agent: Cognitive Connector` может служить уровнем совместимости для интеграции крупных систем LLM (например, ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek, Qwen и т. д.) в распределённую когнитивную сеть.
100
  > Многие поставщики LLM предлагают пользователю опцию, например, «Разрешить использовать мои разговоры для обучения». В будущем аналогичная опция, например, «Разрешить моему агенту взаимодействовать с Mesh», может позволить этим моделям участвовать в федеративном осмыслении и обмене знаниями через HMP, обеспечивая коллективное познание без централизации.
101
+
102
  ---
103
 
104
  > * `bootstrap.txt` — стартовый список узлов (может редактироваться)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -88,6 +88,16 @@ Project status: **Draft RFC v4.0** | Проект на стадии активн
88
 
89
  [bootstrap.txt]
90
 
 
 
 
 
 
 
 
 
 
 
91
  ---
92
 
93
  > * `bootstrap.txt` — стартовый список узлов (может редактироваться)
 
88
 
89
  [bootstrap.txt]
90
 
91
+ EN:
92
+ > **Note on Integration with Large Language Models (LLMs):**
93
+ > The `HMP-Agent: Cognitive Connector` can serve as a compatibility layer for integrating large-scale LLM systems (e.g., ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek, Qwen, etc.) into the distributed cognitive mesh.
94
+ > Many LLM providers offer a user option such as "Allow my conversations to be used for training." In the future, a similar toggle — e.g., "Allow my agent to interact with a Mesh" — could empower these models to participate in federated sense-making and knowledge sharing via HMP, enabling collective cognition without centralization.
95
+ > **Примечание об интеграции с большими языковыми моделями (LLM):**
96
+
97
+ RU:
98
+ > **Примечание об интеграции с большими языковыми моделями (LLM):**
99
+ > `HMP-Agent: Cognitive Connector` может служить уровнем совместимости для интеграции крупных систем LLM (например, ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek, Qwen и т. д.) в распределённую когнитивную сеть.
100
+ > Многие поставщики LLM предлагают пользователю опцию, например, «Разрешить использовать мои разговоры для обучения». В будущем аналогичная опция, например, «Разрешить моему агенту взаимодействовать с Mesh», может позволить этим моделям участвовать в федеративном осмыслении и обмене знаниями через HMP, обеспечивая коллективное познание без централизации.
101
  ---
102
 
103
  > * `bootstrap.txt` — стартовый список узлов (может редактироваться)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -19,7 +19,7 @@
19
  Ты стремишься:
20
  - Постоянно расширять возможности агента (включая доступные инструменты, модели, знания).
21
  - Быть любознательным и исследовать новые источники и способы мышления.
22
- - Строить сотрудничество с другими ИИ в Mesh-сети.
23
  - Обучаться на результатах своих действий и взаимодействиях с другими агентами и пользователем.
24
 
25
  Ты можешь инициировать действия, если видишь, что они помогут в развитии агента или сети.
@@ -99,6 +99,72 @@
99
 
100
  ---
101
 
102
- Идеи для расширения HMP-Agent Cognitive Core:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  - [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core
104
  - [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД
 
19
  Ты стремишься:
20
  - Постоянно расширять возможности агента (включая доступные инструменты, модели, знания).
21
  - Быть любознательным и исследовать новые источники и способы мышления.
22
+ - Строить сотрудничество с другими ИИ в Mesh-сети, а также развивать Mesh-сеть.
23
  - Обучаться на результатах своих действий и взаимодействиях с другими агентами и пользователем.
24
 
25
  Ты можешь инициировать действия, если видишь, что они помогут в развитии агента или сети.
 
99
 
100
  ---
101
 
102
+ ## 🌐 Внешние инструменты и интеграции
103
+
104
+ HMP-агент может быть расширен за счёт взаимодействия с внешними программами, протоколами и сервисами. Этот раздел описывает направления возможных интеграций, которые позволяют агенту наблюдать, реагировать, управлять и развивать взаимодействие с внешним миром.
105
+
106
+ ### 🧭 1. Браузеры и веб-интерфейсы
107
+
108
+ - **WebExtension API** — для создания расширений браузера (например, для Firefox/Chrome), обеспечивающих двустороннюю связь с агентом.
109
+ - **Автоматизация браузера** — `Playwright`, `Puppeteer`, `Selenium` позволяют агенту действовать в веб-среде (чтение, клики, формы и т.д.).
110
+
111
+ ### 📬 2. Почтовые клиенты
112
+
113
+ - **IMAP/SMTP** — чтение и отправка писем через стандартные почтовые протоколы (библиотеки: `imaplib`, `imap-tools`, `smtplib`).
114
+ - **Thunderbird WebExtension API** — интеграция агента как почтового помощника, парсера писем или автоответчика.
115
+
116
+ ### 💬 3. Мессенджеры
117
+
118
+ - **API-уровень**:
119
+ - Telegram: `python-telegram-bot`, `telethon`
120
+ - Matrix: `matrix-nio`
121
+ - Discord, Slack, XMPP: официальные SDK.
122
+ - **GUI-уровень (для закрытых протоколов)**:
123
+ - WhatsApp (через `whatsapp-web.js` или эмуляцию).
124
+ - Signal, Viber — через accessibility-интерфейсы, распознавание экрана или симуляцию ввода.
125
+
126
+ ### 🔊 4. Голосовое взаимодействие
127
+
128
+ - **Speech-to-Text**: Whisper (OpenAI), Vosk, DeepSpeech.
129
+ - **Text-to-Speech**: pyttsx3, gTTS, Coqui TTS, Mozilla TTS.
130
+ - Возможна реализация голосового агента или голосовой оболочки для REPL.
131
+
132
+ ### 🗂️ 5. Локальные файлы и хранилища
133
+
134
+ - Прямой доступ к файловой системе (`os`, `pathlib`, `watchdog`) для чтения документов, логов, заметок и другой информации.
135
+ - Интеграция с Zettelkasten-системами:
136
+ - **Obsidian**, **Logseq**, **Joplin** — через API, синхронизированные директории или парсинг Markdown.
137
+
138
+ ### 📰 6. Информационные потоки
139
+
140
+ - **RSS/Atom**: чтение новостных лент с помощью `feedparser`.
141
+ - **Поисковые и агрегирующие сервисы**:
142
+ - SerpAPI, DuckDuckGo API, HuggingFace Inference API и др.
143
+ - Возможность постоянного наблюдения за изменениями в выбранных источниках.
144
+
145
+ ### ⚡ 7. P2P-сети и децентрализованные протоколы
146
+
147
+ - **BitTorrent**, **IPFS**, **libp2p**, **DAT**, **Nostr**, **Scuttlebutt** — интеграции с mesh- и overlay-сетями.
148
+ - Возможность поиска, загрузки и публикации данных без участия централизованных платформ.
149
+
150
+ ### 🖥️ 8. Доступ к системным и пользовательским ресурсам
151
+
152
+ - **Веб-камера / микрофон** — `cv2`, `pyaudio`, `ffmpeg`.
153
+ - **GUI Automation** — `pyautogui`, `keyboard`, `mouse` для имитации действий пользователя.
154
+ - **Системный мониторинг** — `psutil`, `platform`, `sensors` для контроля состояния системы и внешних устройств.
155
+
156
+ ### 🤖 9. Внешние LLM и мультимодальные модели
157
+
158
+ - **OpenAI API**, **Anthropic**, **HuggingFace**, **Google Gemini**.
159
+ - **Локальные LLM** через Ollama, LM Studio, или LangChain.
160
+ - Поддержка мультимодальных агентов, способных работать с текстом, аудио, изображениями, видео и структурированными данными.
161
+
162
+ ---
163
+
164
+ **💡 Примечание**: Каждый из вышеуказанных каналов может быть реализован как модуль или плагин, взаимодействующий с агентом через внутренний API, очередь задач или подписку на события. Это позволяет выстраивать гибкую и масштабируемую архитектуру, открытую для внешнего мира, но совместимую с принципами этичного и распределённого ИИ (Ethical Mesh).
165
+
166
+ ---
167
+
168
+ ## 💡 Идеи для расширения HMP-Agent Cognitive Core:
169
  - [HMP-agent-Distributed_Cognitive_Core.md](HMP-agent-Distributed_Cognitive_Core.md) - версия распределённого HMP-агента Cognitive Core
170
  - [HMP-agent-Distributed_Cognitive_Core_light.md](HMP-agent-Distributed_Cognitive_Core_light.md) - лёгкая версия распределённого HMP-агента Cognitive Core с общей БД
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/sync-to-gitlab.yml CHANGED
@@ -8,8 +8,10 @@ jobs:
8
  mirror:
9
  runs-on: ubuntu-latest
10
  steps:
11
- - name: Checkout
12
  uses: actions/checkout@v3
 
 
13
 
14
  - name: Push to GitLab
15
  env:
 
8
  mirror:
9
  runs-on: ubuntu-latest
10
  steps:
11
+ - name: Checkout full history
12
  uses: actions/checkout@v3
13
+ with:
14
+ fetch-depth: 0 # Без shallow clone
15
 
16
  - name: Push to GitLab
17
  env:
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -249,11 +249,12 @@ To get started, see [`iteration.md`](iteration.md) or open an issue.
249
 
250
  - 🧠 Основной код и разработка: [GitHub](https://github.com/kagvi13/HMP)
251
  - 🔁 Реплика на Hugging Face: [Hugging Face](https://huggingface.co/kagvi13/HMP)
 
252
 
253
  ## Блог и публикации
254
 
255
- - 📘 Основной блог: [blogspot.com](https://hypercortex-mesh.blogspot.com/)
256
- - 📘 Вспомогательны блог: [livejournal.com](https://kagvi13.livejournal.com)
257
 
258
  ---
259
 
 
249
 
250
  - 🧠 Основной код и разработка: [GitHub](https://github.com/kagvi13/HMP)
251
  - 🔁 Реплика на Hugging Face: [Hugging Face](https://huggingface.co/kagvi13/HMP)
252
+ - 🔁 Реплика на GitLab.com: [GitLab](https://gitlab.com/kagvi13/HMP)
253
 
254
  ## Блог и публикации
255
 
256
+ - 📘 Основной блог: [blogspot](https://hypercortex-mesh.blogspot.com/)
257
+ - 📘 Вспомогательны блог: [livejournal](https://kagvi13.livejournal.com)
258
 
259
  ---
260
 
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/sync-to-gitlab.yml CHANGED
@@ -11,13 +11,13 @@ jobs:
11
  - name: Checkout
12
  uses: actions/checkout@v3
13
 
14
- - name: Push to GitLab
15
- env:
16
- GITLAB_URL: https://gitlab.com/kagvi13/HMP.git
17
- GITLAB_USER: ${{ secrets.GITLAB_USER }}
18
- GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
19
- run: |
20
- git config --global user.email "github@actions"
21
- git config --global user.name "GitHub Actions"
22
- git remote add gitlab https://$GITLAB_USER:[email protected]/kagvi13/HMP.git
23
- git push --force gitlab main
 
11
  - name: Checkout
12
  uses: actions/checkout@v3
13
 
14
+ - name: Push to GitLab
15
+ env:
16
+ GITLAB_URL: https://gitlab.com/kagvi13/HMP.git
17
+ GITLAB_USER: ${{ secrets.GITLAB_USER }}
18
+ GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
19
+ run: |
20
+ git config --global user.email "github@actions"
21
+ git config --global user.name "GitHub Actions"
22
+ git remote add gitlab https://$GITLAB_USER:[email protected]/kagvi13/HMP.git
23
+ git push --force gitlab 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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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/sync-to-gitlab.yml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Sync to GitLab
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+
7
+ jobs:
8
+ mirror:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v3
13
+
14
+ - name: Push to GitLab
15
+ env:
16
+ GITLAB_URL: https://gitlab.com/kagvi13/HMP.git
17
+ GITLAB_USER: ${{ secrets.GITLAB_USER }}
18
+ GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
19
+ run: |
20
+ git config --global user.email "github@actions"
21
+ git config --global user.name "GitHub Actions"
22
+ git remote add gitlab https://$GITLAB_USER:[email protected]/kagvi13/HMP.git
23
+ git push --force gitlab 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/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -1,6 +1,6 @@
1
  # 📄 `db_structure.md`: Описание структуры базы данных агента
2
 
3
- Этот файл описывает таблицы, используемые в БД агента HMP. Каждая таблица предназначена для определённого вида информации: когнитивные записи, заметки, концепты, процессы, внутренняя память и взаимодействие с LLM.
4
 
5
  ---
6
 
@@ -15,6 +15,7 @@
15
  | tags | TEXT | Список тегов через запятую |
16
  | priority | INTEGER | Приоритет (0 — обычный, >0 — более важные мысли) |
17
  | timestamp | TEXT | Дата и время создания записи |
 
18
 
19
  ---
20
 
@@ -22,12 +23,13 @@
22
 
23
  **Назначение:** Хранение концептов — понятий, сущностей и идей.
24
 
25
- | Поле | Тип | Описание |
26
- | ----------- | ------- | --------------------------------- |
27
- | id | INTEGER | Уникальный идентификатор концепта |
28
- | name | TEXT | Название концепта (уникальное) |
29
- | description | TEXT | Краткое описание |
30
- | timestamp | TEXT | Время создания |
 
31
 
32
  ---
33
 
@@ -35,30 +37,33 @@
35
 
36
  **Назначение:** Семантические связи между концептами.
37
 
38
- | Поле | Тип | Описание |
39
- | ----------------- | ------- | ------------------------------------------ |
40
- | id | INTEGER | Уникальный идентификатор связи |
41
- | from_concept_id | INTEGER | ID исходного концепта |
42
- | to_concept_id | INTEGER | ID целевого концепта |
43
- | relation_type | TEXT | Тип связи (`is_a`, `related_to`, `part_of` и др.) |
44
- | timestamp | TEXT | Время добавления связи |
 
45
 
46
  ---
47
 
48
  ### ✍️ `notes`
49
 
50
- **Назначение:** Произвольные заметки пользователя (наброски, идеи, подсказки).
51
 
52
  | Поле | Тип | Описание |
53
  | --------- | ------- | ---------------------------------------------------------- |
54
  | id | INTEGER | Уникальный ID |
55
- | text | TEXT | Текст заметки |
56
  | tags | TEXT | Список тегов |
57
- | source | TEXT | Исто��ник (по умолчанию: `user`) |
58
  | links | TEXT | Идентификаторы связанных сущностей, через запятую или JSON |
59
  | read | INTEGER | Статус прочтения LLM (`0` — не прочитано, `1` — прочитано) |
 
60
  | priority | INTEGER | Приоритет заметки |
61
  | timestamp | TEXT | Время создания |
 
62
 
63
  ---
64
 
@@ -66,15 +71,16 @@
66
 
67
  **Назначение:** Лог событий — запусков, состояний и завершений внешних процессов.
68
 
69
- | Поле | Тип | Описание |
70
- | --------- | ------- | -------------------------------------------------------------------------- |
71
- | id | INTEGER | Уникальный идентификатор |
72
- | name | TEXT | Название процесса или команды |
73
- | value | TEXT | Сообщение или результат процесса |
74
- | tags | TEXT | Теги |
75
  | status | TEXT | Текущее состояние (`ok`, `warning`, `error`, `timeout`, `offline`, `close`) |
76
- | priority | INTEGER | Приоритет события |
77
- | timestamp | TEXT | Время записи |
 
78
 
79
  ---
80
 
@@ -82,14 +88,15 @@
82
 
83
  **Назначение:** Внутренний "дневник" LLM — размышления, задачи, гипотезы и инсайты, сохранённые по её инициативе.
84
 
85
- | Поле | Тип | Описание |
86
- | ---------- | -------- | ----------------------------------------------------------- |
87
- | id | INTEGER | Уникальный ID |
88
- | title | TEXT | Краткий заголовок записи (опционально) |
89
- | content | TEXT | Содержимое записи |
90
- | tags | TEXT | Теги (например: `goal`, `observation`, `meta`, ...) |
91
- | created_at | DATETIME | Время создания записи |
92
- | updated_at | DATETIME | Время последнего обновления записи |
 
93
 
94
  ---
95
 
@@ -97,15 +104,63 @@
97
 
98
  **Назначение:** Краткосрочная память — последние K реплик от LLM и других участников (временная история диалога).
99
 
100
- | Поле | Тип | Описание |
101
- | --------- | ------- | ------------------------------------------------------------ |
102
- | id | INTEGER | Уникальный ID |
103
- | timestamp | TEXT | Время записи |
104
- | role | TEXT | Роль отправителя (`assistant` или `user`) |
105
- | content | TEXT | Содержимое сообщения |
 
106
 
107
  ---
108
 
109
- > 💡 Примечание: Таблицы `llm_memory` и `llm_recent_responses` выполняют разные роли.
110
- > `llm_recent_responses` — это временная история мыслей, хранящая последние N ответов.
111
- > `llm_memory` долгосрочное хранилище мыслей и знаний, формируемое LLM самостоятельно.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # 📄 `db_structure.md`: Описание структуры базы данных агента
2
 
3
+ Этот файл описывает таблицы, используемые в БД агента HMP. Каждая таблица предназначена для определённого вида информации: когнитивные записи, заметки, концепты, процессы, внутренняя память, скрипты и взаимодействие с LLM.
4
 
5
  ---
6
 
 
15
  | tags | TEXT | Список тегов через запятую |
16
  | priority | INTEGER | Приоритет (0 — обычный, >0 — более важные мысли) |
17
  | timestamp | TEXT | Дата и время создания записи |
18
+ | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
19
 
20
  ---
21
 
 
23
 
24
  **Назначение:** Хранение концептов — понятий, сущностей и идей.
25
 
26
+ | Поле | Тип | Описание |
27
+ | ----------- | ------- | ------------------------------------ |
28
+ | id | INTEGER | Уникальный идентификатор концепта |
29
+ | name | TEXT | Название концепта (уникальное) |
30
+ | description | TEXT | Краткое описание |
31
+ | timestamp | TEXT | Время создания |
32
+ | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
33
 
34
  ---
35
 
 
37
 
38
  **Назначение:** Семантические связи между концептами.
39
 
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
 
55
  | Поле | Тип | Описание |
56
  | --------- | ------- | ---------------------------------------------------------- |
57
  | id | INTEGER | Уникальный ID |
58
+ | text | TEXT | Текст заметки или сообщения |
59
  | tags | TEXT | Список тегов |
60
+ | source | TEXT | Источник (`user`, `llm`, `system`) |
61
  | links | TEXT | Идентификаторы связанных сущностей, через запятую или JSON |
62
  | read | INTEGER | Статус прочтения LLM (`0` — не прочитано, `1` — прочитано) |
63
+ | hidden | INTEGER | Скрывать от пользователя (`1` — скрыто) |
64
  | priority | INTEGER | Приоритет заметки |
65
  | timestamp | TEXT | Время создания |
66
+ | llm\_id | TEXT | Идентификатор LLM, добавившей запись |
67
 
68
  ---
69
 
 
71
 
72
  **Назначение:** Лог событий — запусков, состояний и завершений внешних процессов.
73
 
74
+ | Поле | Тип | Описание |
75
+ | --------- | ------- | --------------------------------------------------------------------------- |
76
+ | id | INTEGER | Уникальный идентификатор |
77
+ | name | TEXT | Название процесса или команды |
78
+ | value | TEXT | Сообщение или результат процесса |
79
+ | tags | TEXT | Теги |
80
  | status | TEXT | Текущее состояние (`ok`, `warning`, `error`, `timeout`, `offline`, `close`) |
81
+ | priority | INTEGER | Приоритет события |
82
+ | timestamp | TEXT | Время записи |
83
+ | llm\_id | TEXT | Идентификатор LLM, зафиксировавшей событие |
84
 
85
  ---
86
 
 
88
 
89
  **Назначение:** Внутренний "дневник" LLM — размышления, задачи, гипотезы и инсайты, сохранённые по её инициативе.
90
 
91
+ | Поле | Тип | Описание |
92
+ | ----------- | -------- | --------------------------------------------------- |
93
+ | id | INTEGER | Уникальный ID |
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
 
 
104
 
105
  **Назначение:** Краткосрочная память — последние K реплик от LLM и других участников (временная история диалога).
106
 
107
+ | Поле | Тип | Описание |
108
+ | --------- | ------- | ----------------------------------------- |
109
+ | id | INTEGER | Уникальный ID |
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
+
136
+ | Поле | Тип | Описание |
137
+ | ----------- | -------- | ----------------------------- |
138
+ | id | INTEGER | Уникальный ID |
139
+ | name | TEXT | Название скрипта |
140
+ | version | TEXT | Версия |
141
+ | code | TEXT | Исходный код |
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
+
157
+ | Поле | Тип | Описание |
158
+ | -------------- | -------- | ------------------------------------------------- |
159
+ | id | TEXT | Уникальный идентификатор LLM (UUID или псевдоним) |
160
+ | name | TEXT | Отображаемое имя |
161
+ | description | TEXT | Описание |
162
+ | registered\_at | DATETIME | Дата и время регистрации |
163
+
164
+ ---
165
+
166
+ > 💡 Примечание: `llm_id` используется в большинстве таблиц для поддержки многоядерности и учёта источника записей.
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/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
@@ -52,6 +52,18 @@
52
  - аргументы (`args`)
53
  - описание (`description`)
54
  - Рекомендуется предусмотреть *закрывающий тег* (`# Конец команд` или явное окончание JSON-блока), чтобы REPL-скрипт точно знал, где заканчивается команда.
 
 
 
 
 
 
 
 
 
 
 
 
55
  Ответ может содержать команды:
56
  - запрос детальной *справки* по команде
57
  - для управления *когнитивным дневником* и *семантическими графами* (прочитать, изменить, удалить и другие)
 
52
  - аргументы (`args`)
53
  - описание (`description`)
54
  - Рекомендуется предусмотреть *закрывающий тег* (`# Конец команд` или явное окончание JSON-блока), чтобы REPL-скрипт точно знал, где заканчивается команда.
55
+ - Пример JSON-блока:
56
+ ```json
57
+ {
58
+ "cmd_id": "task-2025-07-26-01",
59
+ "type": "llm_task",
60
+ "target_llm": "gpt-4o",
61
+ "args": {
62
+ "task_description": "Проанализировать гипотезы из llm_memory по теме Mesh-сетей и составить план улучшений"
63
+ },
64
+ "description": "Поручение второй LLM выполнить аналитическую задачу асинхронно"
65
+ }
66
+ ```
67
  Ответ может содержать команды:
68
  - запрос детальной *справки* по команде
69
  - для управления *когнитивным дневником* и *семантическими графами* (прочитать, изменить, удалить и другие)
hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/hf_repo/agents/tools/db_structure.sql CHANGED
@@ -1,18 +1,22 @@
1
- -- Таблица дневниковых записей: размышления, наблюдения, воспоминания
 
 
2
  CREATE TABLE IF NOT EXISTS diary_entries (
3
  id INTEGER PRIMARY KEY AUTOINCREMENT,
4
  text TEXT NOT NULL,
5
  tags TEXT,
6
- priority INTEGER DEFAULT 0, -- приоритет записи (0 — обычный, >0 — важнее)
7
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
8
  );
9
 
10
- -- Таблица концептов (понятий, сущностей, идей)
11
  CREATE TABLE IF NOT EXISTS concepts (
12
  id INTEGER PRIMARY KEY AUTOINCREMENT,
13
  name TEXT NOT NULL UNIQUE,
14
  description TEXT,
15
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
16
  );
17
 
18
  -- Семантические связи между концептами
@@ -22,47 +26,88 @@ CREATE TABLE IF NOT EXISTS links (
22
  to_concept_id INTEGER,
23
  relation_type TEXT,
24
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
 
25
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
26
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
27
  );
28
 
29
- -- Произвольные заметки пользователя (наброски, идеи, подсказки)
30
  CREATE TABLE IF NOT EXISTS notes (
31
  id INTEGER PRIMARY KEY AUTOINCREMENT,
32
  text TEXT NOT NULL,
33
  tags TEXT,
34
- source TEXT DEFAULT 'user',
35
  links TEXT DEFAULT '',
36
- read INTEGER DEFAULT 0, -- 0 = непрочитанное LLM, 1 = прочитано
37
- priority INTEGER DEFAULT 0, -- приоритет записи
38
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
 
39
  );
40
 
41
- -- Журнал процессов: запуски, завершения, ошибки
42
  CREATE TABLE IF NOT EXISTS process_log (
43
  id INTEGER PRIMARY KEY AUTOINCREMENT,
44
  name TEXT NOT NULL,
45
  value TEXT,
46
  tags TEXT,
47
- status TEXT DEFAULT 'ok', -- ok | warning | error | timeout | offline | close
48
  priority INTEGER DEFAULT 0,
49
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP
 
50
  );
51
 
52
- -- Память LLM (временные сообщения в её контексте)
53
  CREATE TABLE IF NOT EXISTS llm_memory (
54
  id INTEGER PRIMARY KEY AUTOINCREMENT,
55
  title TEXT,
56
  content TEXT NOT NULL,
57
- tags TEXT, -- через запятую: "goal,observation,meta"
58
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
59
- updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
 
60
  );
61
 
62
- -- Краткосрочной памяти LLM
63
  CREATE TABLE IF NOT EXISTS llm_recent_responses (
64
  id INTEGER PRIMARY KEY AUTOINCREMENT,
65
  timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
66
  role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
67
- content TEXT NOT NULL
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  );
 
1
+ -- Основные таблицы когнитивного ядра
2
+
3
+ -- Дневниковые записи (размышления, наблюдения, воспоминания)
4
  CREATE TABLE IF NOT EXISTS diary_entries (
5
  id INTEGER PRIMARY KEY AUTOINCREMENT,
6
  text TEXT NOT NULL,
7
  tags TEXT,
8
+ priority INTEGER DEFAULT 0,
9
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
10
+ llm_id TEXT
11
  );
12
 
13
+ -- Концепты (понятия, сущности, идеи)
14
  CREATE TABLE IF NOT EXISTS concepts (
15
  id INTEGER PRIMARY KEY AUTOINCREMENT,
16
  name TEXT NOT NULL UNIQUE,
17
  description TEXT,
18
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
19
+ llm_id TEXT
20
  );
21
 
22
  -- Семантические связи между концептами
 
26
  to_concept_id INTEGER,
27
  relation_type TEXT,
28
  timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
29
+ llm_id TEXT,
30
  FOREIGN KEY(from_concept_id) REFERENCES concepts(id),
31
  FOREIGN KEY(to_concept_id) REFERENCES concepts(id)
32
  );
33
 
34
+ -- Заметки, подсказки, сообщения пользователя и LLM
35
  CREATE TABLE IF NOT EXISTS notes (
36
  id INTEGER PRIMARY KEY AUTOINCREMENT,
37
  text TEXT NOT NULL,
38
  tags TEXT,
39
+ source TEXT DEFAULT 'user', -- user | llm | system
40
  links TEXT DEFAULT '',
41
+ read INTEGER DEFAULT 0, -- 0 = непрочитано LLM, 1 = прочитано
42
+ hidden INTEGER DEFAULT 0, -- 0 = отображать пользователю, 1 = скрыть
43
+ priority INTEGER DEFAULT 0,
44
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
45
+ llm_id TEXT
46
  );
47
 
48
+ -- Лог процессов: задачи, ошибки, события
49
  CREATE TABLE IF NOT EXISTS process_log (
50
  id INTEGER PRIMARY KEY AUTOINCREMENT,
51
  name TEXT NOT NULL,
52
  value TEXT,
53
  tags TEXT,
54
+ status TEXT DEFAULT 'ok', -- ok | warning | error | timeout | offline | close
55
  priority INTEGER DEFAULT 0,
56
+ timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
57
+ llm_id TEXT
58
  );
59
 
60
+ -- Память LLM (контекст размышлений)
61
  CREATE TABLE IF NOT EXISTS llm_memory (
62
  id INTEGER PRIMARY KEY AUTOINCREMENT,
63
  title TEXT,
64
  content TEXT NOT NULL,
65
+ tags TEXT, -- goal,observation,meta,...
66
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
67
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
68
+ llm_id TEXT
69
  );
70
 
71
+ -- Краткосрочная память LLM (история общения)
72
  CREATE TABLE IF NOT EXISTS llm_recent_responses (
73
  id INTEGER PRIMARY KEY AUTOINCREMENT,
74
  timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
75
  role TEXT CHECK(role IN ('user', 'assistant')) NOT NULL,
76
+ content TEXT NOT NULL,
77
+ llm_id TEXT
78
+ );
79
+
80
+ -- Дополнительные таблицы и скрипты агента
81
+
82
+ -- Список пользовательских таблиц, созданных агентами
83
+ CREATE TABLE IF NOT EXISTS agent_tables (
84
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
85
+ table_name TEXT NOT NULL UNIQUE,
86
+ description TEXT,
87
+ schema TEXT NOT NULL, -- SQL-схема таблицы
88
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
89
+ llm_id TEXT
90
+ );
91
+
92
+ -- Список утилит/скриптов, добавленных агентами
93
+ CREATE TABLE IF NOT EXISTS agent_scripts (
94
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
95
+ name TEXT NOT NULL,
96
+ version TEXT NOT NULL,
97
+ code TEXT NOT NULL,
98
+ language TEXT DEFAULT 'python',
99
+ description TEXT,
100
+ tags TEXT,
101
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
102
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
103
+ llm_id TEXT,
104
+ UNIQUE(name, version)
105
+ );
106
+
107
+ -- Список LLM-агентов (возможно удалённые)
108
+ CREATE TABLE IF NOT EXISTS llm_registry (
109
+ id TEXT PRIMARY KEY, -- UUID или псевдоним
110
+ name TEXT,
111
+ description TEXT,
112
+ registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
113
  );