agent-notes 2.14.0__tar.gz → 2.15.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. {agent_notes-2.14.0 → agent_notes-2.15.0}/PKG-INFO +1 -1
  2. agent_notes-2.15.0/agent_notes/VERSION +1 -0
  3. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/cli.py +1 -1
  4. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/memory.py +171 -4
  5. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/config.py +2 -0
  6. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/state.py +1 -1
  7. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/memory_backend.py +1 -1
  8. agent_notes-2.15.0/agent_notes/services/wiki_backend.py +669 -0
  9. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes.egg-info/PKG-INFO +1 -1
  10. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes.egg-info/SOURCES.txt +3 -1
  11. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_memory_backend_io.py +10 -6
  12. agent_notes-2.15.0/tests/unit/services/test_wiki_backend.py +828 -0
  13. agent_notes-2.14.0/agent_notes/VERSION +0 -1
  14. {agent_notes-2.14.0 → agent_notes-2.15.0}/LICENSE +0 -0
  15. {agent_notes-2.14.0 → agent_notes-2.15.0}/README.md +0 -0
  16. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/__init__.py +0 -0
  17. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/__main__.py +0 -0
  18. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/__init__.py +0 -0
  19. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/_install_helpers.py +0 -0
  20. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/build.py +0 -0
  21. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/config.py +0 -0
  22. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/doctor.py +0 -0
  23. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/info.py +0 -0
  24. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/install.py +0 -0
  25. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/list.py +0 -0
  26. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/regenerate.py +0 -0
  27. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/set_role.py +0 -0
  28. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/uninstall.py +0 -0
  29. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/update.py +0 -0
  30. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/validate.py +0 -0
  31. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/commands/wizard.py +0 -0
  32. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/agents.yaml +0 -0
  33. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/analyst.md +0 -0
  34. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/api-reviewer.md +0 -0
  35. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/architect.md +0 -0
  36. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/coder.md +0 -0
  37. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/database-specialist.md +0 -0
  38. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/debugger.md +0 -0
  39. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/devil.md +0 -0
  40. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/devops.md +0 -0
  41. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/explorer.md +0 -0
  42. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/integrations.md +0 -0
  43. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/lead.md +0 -0
  44. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/performance-profiler.md +0 -0
  45. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/refactorer.md +0 -0
  46. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/reviewer.md +0 -0
  47. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/security-auditor.md +0 -0
  48. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/shared/cost_reporting.md +0 -0
  49. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/shared/phase0.md +0 -0
  50. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/system-auditor.md +0 -0
  51. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/tech-writer.md +0 -0
  52. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/test-runner.md +0 -0
  53. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/agents/test-writer.md +0 -0
  54. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/cli/claude.yaml +0 -0
  55. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/cli/copilot.yaml +0 -0
  56. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/cli/opencode.yaml +0 -0
  57. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/commands/brainstorm.md +0 -0
  58. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/commands/debug.md +0 -0
  59. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/commands/review.md +0 -0
  60. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/global-claude.md +0 -0
  61. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/global-copilot.md +0 -0
  62. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/global-opencode.md +0 -0
  63. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/hooks/session-context.md.tpl +0 -0
  64. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-haiku-4-5.yaml +0 -0
  65. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-opus-4-1.yaml +0 -0
  66. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-opus-4-5.yaml +0 -0
  67. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-opus-4-6.yaml +0 -0
  68. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-opus-4-7.yaml +0 -0
  69. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-sonnet-4-5.yaml +0 -0
  70. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-sonnet-4-6.yaml +0 -0
  71. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/models/claude-sonnet-4.yaml +0 -0
  72. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/plugin/claude.yaml +0 -0
  73. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/plugin/opencode-index.js.template +0 -0
  74. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/plugin/opencode.yaml +0 -0
  75. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/pricing.yaml +0 -0
  76. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/roles/orchestrator.yaml +0 -0
  77. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/roles/reasoner.yaml +0 -0
  78. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/roles/scout.yaml +0 -0
  79. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/roles/worker.yaml +0 -0
  80. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/rules/code-quality.md +0 -0
  81. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/rules/safety.md +0 -0
  82. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/brainstorming/SKILL.md +0 -0
  83. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/caveman/SKILL.md +0 -0
  84. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/code-review/SKILL.md +0 -0
  85. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/debugging-protocol/SKILL.md +0 -0
  86. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/docker-compose/SKILL.md +0 -0
  87. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/docker-compose-advanced/SKILL.md +0 -0
  88. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/docker-dockerfile/SKILL.md +0 -0
  89. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/docker-dockerfile-languages/SKILL.md +0 -0
  90. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/git/SKILL.md +0 -0
  91. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/grill-me/SKILL.md +0 -0
  92. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/grill-with-docs/SKILL.md +0 -0
  93. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/improve-codebase-architecture/SKILL.md +0 -0
  94. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/obsidian-memory/SKILL.md +0 -0
  95. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-active-storage/SKILL.md +0 -0
  96. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-broadcasting/SKILL.md +0 -0
  97. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-concerns/SKILL.md +0 -0
  98. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-controllers/SKILL.md +0 -0
  99. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-controllers-advanced/SKILL.md +0 -0
  100. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-helpers/SKILL.md +0 -0
  101. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-initializers/SKILL.md +0 -0
  102. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-javascript/SKILL.md +0 -0
  103. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-jobs/SKILL.md +0 -0
  104. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-kamal/SKILL.md +0 -0
  105. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-lib/SKILL.md +0 -0
  106. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-mailers/SKILL.md +0 -0
  107. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-migrations/SKILL.md +0 -0
  108. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-models/SKILL.md +0 -0
  109. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-models-advanced/SKILL.md +0 -0
  110. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-routes/SKILL.md +0 -0
  111. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-style/SKILL.md +0 -0
  112. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-testing-controllers/SKILL.md +0 -0
  113. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-testing-models/SKILL.md +0 -0
  114. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-testing-system/SKILL.md +0 -0
  115. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-validations/SKILL.md +0 -0
  116. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-view-components/SKILL.md +0 -0
  117. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-view-components-advanced/SKILL.md +0 -0
  118. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-views/SKILL.md +0 -0
  119. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/rails-views-advanced/SKILL.md +0 -0
  120. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/refactoring-protocol/SKILL.md +0 -0
  121. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/setup-project-context/SKILL.md +0 -0
  122. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/tdd/SKILL.md +0 -0
  123. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/skills/zoom-out/SKILL.md +0 -0
  124. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/__init__.py +0 -0
  125. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/__pycache__/__init__.cpython-314.pyc +0 -0
  126. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/frontmatter/__init__.py +0 -0
  127. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/frontmatter/__pycache__/__init__.cpython-314.pyc +0 -0
  128. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/frontmatter/__pycache__/claude.cpython-314.pyc +0 -0
  129. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/frontmatter/__pycache__/opencode.cpython-314.pyc +0 -0
  130. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/frontmatter/claude.py +0 -0
  131. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/data/templates/frontmatter/opencode.py +0 -0
  132. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/doctor_checks.py +0 -0
  133. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/__init__.py +0 -0
  134. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/agent.py +0 -0
  135. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/cli_backend.py +0 -0
  136. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/diagnostics.py +0 -0
  137. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/diff.py +0 -0
  138. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/model.py +0 -0
  139. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/role.py +0 -0
  140. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/rule.py +0 -0
  141. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/domain/skill.py +0 -0
  142. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/install_state.py +0 -0
  143. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/__init__.py +0 -0
  144. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/_base.py +0 -0
  145. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/agent_registry.py +0 -0
  146. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/cli_registry.py +0 -0
  147. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/model_registry.py +0 -0
  148. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/role_registry.py +0 -0
  149. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/rule_registry.py +0 -0
  150. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/registries/skill_registry.py +0 -0
  151. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/scripts/__init__.py +0 -0
  152. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/scripts/_claude_backend.py +0 -0
  153. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/scripts/_formatting.py +0 -0
  154. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/scripts/_opencode_backend.py +0 -0
  155. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/scripts/_pricing.py +0 -0
  156. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/scripts/cost_report.py +0 -0
  157. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/__init__.py +0 -0
  158. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/credentials.py +0 -0
  159. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/diagnostics/__init__.py +0 -0
  160. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/diagnostics/_checks.py +0 -0
  161. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/diagnostics/_display.py +0 -0
  162. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/diagnostics/_fix.py +0 -0
  163. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/diff.py +0 -0
  164. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/fs.py +0 -0
  165. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/install_state_builder.py +0 -0
  166. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/installer.py +0 -0
  167. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/rendering.py +0 -0
  168. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/session_context.py +0 -0
  169. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/settings_writer.py +0 -0
  170. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/state_store.py +0 -0
  171. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/ui.py +0 -0
  172. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/user_config.py +0 -0
  173. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/services/validation.py +0 -0
  174. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes/state.py +0 -0
  175. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes.egg-info/dependency_links.txt +0 -0
  176. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes.egg-info/entry_points.txt +0 -0
  177. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes.egg-info/requires.txt +0 -0
  178. {agent_notes-2.14.0 → agent_notes-2.15.0}/agent_notes.egg-info/top_level.txt +0 -0
  179. {agent_notes-2.14.0 → agent_notes-2.15.0}/pyproject.toml +0 -0
  180. {agent_notes-2.14.0 → agent_notes-2.15.0}/setup.cfg +0 -0
  181. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/conftest.py +0 -0
  182. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/__init__.py +0 -0
  183. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/__init__.py +0 -0
  184. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_config_command.py +0 -0
  185. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_doctor_command.py +0 -0
  186. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_info_command.py +0 -0
  187. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_install_command.py +0 -0
  188. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_list_command.py +0 -0
  189. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_regenerate_command.py +0 -0
  190. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_uninstall_command.py +0 -0
  191. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_update_command.py +0 -0
  192. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/commands/test_validate_command.py +0 -0
  193. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/memory/__init__.py +0 -0
  194. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/memory/test_memory_command.py +0 -0
  195. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/scripts/__init__.py +0 -0
  196. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/functional/scripts/test_release_script.py +0 -0
  197. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/__init__.py +0 -0
  198. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/build_output/__init__.py +0 -0
  199. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/build_output/test_build_output.py +0 -0
  200. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/install/__init__.py +0 -0
  201. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/install/test_install_methods.py +0 -0
  202. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/plugin_builders/__init__.py +0 -0
  203. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/integration/plugin_builders/test_plugin_builders.py +0 -0
  204. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/plugins/__init__.py +0 -0
  205. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/plugins/claude/__init__.py +0 -0
  206. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/plugins/claude/test_agents.py +0 -0
  207. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/plugins/test_skills.py +0 -0
  208. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/__init__.py +0 -0
  209. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/commands/__init__.py +0 -0
  210. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/commands/test_cost_report_subcommand.py +0 -0
  211. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/commands/test_count_agents.py +0 -0
  212. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/commands/test_memory_migrate.py +0 -0
  213. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/commands/test_wizard_orchestrator_skip.py +0 -0
  214. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/commands/test_wizard_preflight.py +0 -0
  215. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/registries/__init__.py +0 -0
  216. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/registries/test_registries.py +0 -0
  217. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/scripts/__init__.py +0 -0
  218. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/scripts/test_cost_report.py +0 -0
  219. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/scripts/test_cost_report_scoping.py +0 -0
  220. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/scripts/test_formatting_tty.py +0 -0
  221. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/scripts/test_time_aggregation.py +0 -0
  222. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/__init__.py +0 -0
  223. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_build_functions.py +0 -0
  224. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_credentials.py +0 -0
  225. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_fs.py +0 -0
  226. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_installer_plan.py +0 -0
  227. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_memory_backend.py +0 -0
  228. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_rendering_includes.py +0 -0
  229. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/services/test_settings_writer.py +0 -0
  230. {agent_notes-2.14.0 → agent_notes-2.15.0}/tests/unit/test_memory_dir_for_backend.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-notes
3
- Version: 2.14.0
3
+ Version: 2.15.0
4
4
  Summary: AI agent configuration manager for Claude Code, OpenCode, and Copilot
5
5
  Author-email: Eugene Naumov <min.verkligheten@gmail.com>
6
6
  License-Expression: MIT
@@ -0,0 +1 @@
1
+ 2.15.0
@@ -282,7 +282,7 @@ def main():
282
282
  # memory
283
283
  p_memory = subparsers.add_parser("memory", help="Manage agent memory")
284
284
  p_memory.add_argument("action", nargs="?", default="list",
285
- choices=["init", "list", "vault", "index", "add", "size", "show", "reset", "export", "import"],
285
+ choices=["init", "list", "vault", "index", "add", "size", "show", "reset", "export", "import", "ingest", "query", "lint"],
286
286
  help="Memory action")
287
287
  p_memory.add_argument("name", nargs="?", help="Agent name / note title (for show/reset/add)")
288
288
  p_memory.add_argument("extra", nargs="*", help="Additional args (for add: body [type] [agent] [project])")
@@ -43,6 +43,13 @@ def do_init() -> None:
43
43
  if path is None:
44
44
  print("Memory path not configured.")
45
45
  return
46
+ if backend == "wiki":
47
+ from ..services.wiki_backend import wiki_init, WIKI_PAGE_TYPES
48
+ wiki_init(path)
49
+ print(f"{Color.GREEN}Wiki initialised at {path}{Color.NC}")
50
+ print(f" Folders: raw/, wiki/{{{', '.join(WIKI_PAGE_TYPES)}}}")
51
+ print(f" Index: {path / 'wiki' / 'index.md'}")
52
+ return
46
53
  if backend == "obsidian":
47
54
  from ..services.memory_backend import obsidian_init, OBSIDIAN_CATEGORIES
48
55
  obsidian_init(path)
@@ -65,7 +72,11 @@ def do_index() -> None:
65
72
  if path is None:
66
73
  print("Memory path not configured.")
67
74
  return
68
- if backend == "obsidian":
75
+ if backend == "wiki":
76
+ from ..services.wiki_backend import wiki_regenerate_index
77
+ wiki_regenerate_index(path)
78
+ print(f"{Color.GREEN}index.md regenerated at {path / 'wiki' / 'index.md'}{Color.NC}")
79
+ elif backend == "obsidian":
69
80
  from ..services.memory_backend import obsidian_regenerate_index
70
81
  obsidian_regenerate_index(path)
71
82
  print(f"{Color.GREEN}Index.md regenerated at {path / 'Index.md'}{Color.NC}")
@@ -75,8 +86,21 @@ def do_index() -> None:
75
86
  print(f"{Color.GREEN}Index.md regenerated at {path / 'Index.md'}{Color.NC}")
76
87
 
77
88
 
89
+ _WIKI_TYPE_MAP = {
90
+ "pattern": "concepts",
91
+ "decision": "concepts",
92
+ "mistake": "concepts",
93
+ "context": "concepts",
94
+ "concept": "concepts",
95
+ "entity": "entities",
96
+ "synthesis": "synthesis",
97
+ "session": "sessions",
98
+ "source": "sources",
99
+ }
100
+
101
+
78
102
  def do_add(title: str, body: str, note_type: str = "context", agent: str = "", project: str = "", tags: Optional[list] = None) -> None:
79
- """Add a note to memory (obsidian backend only for structured notes)."""
103
+ """Add a note to memory (obsidian or wiki backend)."""
80
104
  backend, path = _load_memory_config()
81
105
  if backend == "none":
82
106
  print("Memory is disabled. Run `agent-notes memory vault` to check configuration.")
@@ -84,7 +108,21 @@ def do_add(title: str, body: str, note_type: str = "context", agent: str = "", p
84
108
  if path is None:
85
109
  print("Memory path not configured.")
86
110
  return
87
- if backend == "obsidian":
111
+ if backend == "wiki":
112
+ from ..services.wiki_backend import wiki_write_page
113
+ page_type = _WIKI_TYPE_MAP.get(note_type, "concepts")
114
+ extra_tags = [note_type] if note_type not in ("concept", "entity", "synthesis", "session", "source") else []
115
+ page_path = wiki_write_page(
116
+ path,
117
+ title=title,
118
+ body=body,
119
+ page_type=page_type,
120
+ agent=agent,
121
+ project=project,
122
+ tags=(tags or []) + extra_tags,
123
+ )
124
+ print(f"{Color.GREEN}Wiki page saved: {page_path}{Color.NC}")
125
+ elif backend == "obsidian":
88
126
  from ..services.memory_backend import obsidian_init, obsidian_write_note
89
127
  obsidian_init(path)
90
128
  note_path = obsidian_write_note(
@@ -98,7 +136,7 @@ def do_add(title: str, body: str, note_type: str = "context", agent: str = "", p
98
136
  )
99
137
  print(f"{Color.GREEN}Note saved: {note_path}{Color.NC}")
100
138
  else:
101
- print("The `add` subcommand is for the obsidian backend.")
139
+ print("The `add` subcommand is for the obsidian or wiki backend.")
102
140
  print("For local backend, write files directly to the agent subdirectory.")
103
141
 
104
142
 
@@ -110,6 +148,26 @@ def do_list() -> None:
110
148
  print("Memory is disabled. Run `agent-notes memory backend` to enable it.")
111
149
  return
112
150
 
151
+ if backend == "wiki":
152
+ if path is None or not path.exists():
153
+ print(f"Wiki not found at {path}")
154
+ return
155
+ from ..services.wiki_backend import wiki_list_pages
156
+ pages = wiki_list_pages(path)
157
+ if not pages:
158
+ print(f"No pages found in wiki {path}")
159
+ return
160
+ print(f"Wiki ({path}):")
161
+ print("")
162
+ current_type = None
163
+ for page in pages:
164
+ if page["type"] != current_type:
165
+ current_type = page["type"]
166
+ print(f" {Color.CYAN}{current_type}{Color.NC}")
167
+ tags_str = f" [{', '.join(page['tags'])}]" if page["tags"] else ""
168
+ print(f" {page['file']}{tags_str}")
169
+ return
170
+
113
171
  if backend == "obsidian":
114
172
  if path is None or not path.exists():
115
173
  print(f"Obsidian vault not found at {path}")
@@ -361,6 +419,96 @@ def format_size(size_bytes: int) -> str:
361
419
  return f"{original_size:.1f}P"
362
420
 
363
421
 
422
+ def do_ingest(title: str, body: str, concepts: Optional[list] = None, entities: Optional[list] = None, tags: Optional[list] = None) -> None:
423
+ """Ingest a source into the wiki backend."""
424
+ backend, path = _load_memory_config()
425
+ if backend != "wiki":
426
+ print("The `ingest` subcommand is only available for the wiki backend.")
427
+ return
428
+ if path is None:
429
+ print("Memory path not configured.")
430
+ return
431
+ from ..services.wiki_backend import wiki_ingest
432
+ result = wiki_ingest(
433
+ path,
434
+ title=title,
435
+ body=body,
436
+ concepts=concepts or [],
437
+ entities=entities or [],
438
+ tags=tags or [],
439
+ )
440
+ source_paths = result.get("source", [])
441
+ concept_paths = result.get("concepts", [])
442
+ entity_paths = result.get("entities", [])
443
+ print(f"{Color.GREEN}Ingested: {title}{Color.NC}")
444
+ for p in source_paths:
445
+ print(f" source: {p}")
446
+ for p in concept_paths:
447
+ print(f" concept: {p}")
448
+ for p in entity_paths:
449
+ print(f" entity: {p}")
450
+
451
+
452
+ def do_query(keyword: str) -> None:
453
+ """Search wiki pages by keyword."""
454
+ backend, path = _load_memory_config()
455
+ if backend != "wiki":
456
+ print("The `query` subcommand is only available for the wiki backend.")
457
+ return
458
+ if path is None:
459
+ print("Memory path not configured.")
460
+ return
461
+ from ..services.wiki_backend import wiki_query
462
+ results = wiki_query(path, keyword)
463
+ if not results:
464
+ print(f"No results found for: {keyword}")
465
+ return
466
+ print(f"Results for '{keyword}' ({len(results)} found):")
467
+ print("")
468
+ for r in results:
469
+ print(f" {Color.CYAN}[{r['type']}]{Color.NC} {r['title']}")
470
+ print(f" {r['path']}")
471
+ if r["snippet"]:
472
+ print(f" ...{r['snippet']}...")
473
+ print("")
474
+
475
+
476
+ def do_lint() -> None:
477
+ """Check wiki health."""
478
+ backend, path = _load_memory_config()
479
+ if backend != "wiki":
480
+ print("The `lint` subcommand is only available for the wiki backend.")
481
+ return
482
+ if path is None:
483
+ print("Memory path not configured.")
484
+ return
485
+ from ..services.wiki_backend import wiki_lint
486
+ issues = wiki_lint(path)
487
+ orphans = issues.get("orphans", [])
488
+ broken = issues.get("broken_links", [])
489
+ stale = issues.get("stale_index", [])
490
+
491
+ if not orphans and not broken and not stale:
492
+ print(f"{Color.GREEN}Wiki is healthy — no issues found.{Color.NC}")
493
+ return
494
+
495
+ if orphans:
496
+ print(f"{Color.YELLOW}Orphans ({len(orphans)} pages not linked from anywhere):{Color.NC}")
497
+ for p in orphans:
498
+ print(f" {p}")
499
+ print("")
500
+ if broken:
501
+ print(f"{Color.YELLOW}Broken links ({len(broken)}):{Color.NC}")
502
+ for b in broken:
503
+ print(f" {b}")
504
+ print("")
505
+ if stale:
506
+ print(f"{Color.YELLOW}Stale index ({len(stale)} pages newer than index.md):{Color.NC}")
507
+ for s in stale:
508
+ print(f" {s}")
509
+ print(f" Run: agent-notes memory index")
510
+
511
+
364
512
  def do_migrate() -> None:
365
513
  """Migrate vault from per-project layout to flat shared layout with new filenames."""
366
514
  import re
@@ -574,6 +722,25 @@ def memory(action: str = "list", name: Optional[str] = None, extra: Optional[lis
574
722
  do_import()
575
723
  elif action == "migrate":
576
724
  do_migrate()
725
+ elif action == "ingest":
726
+ if not name:
727
+ print("Error: ingest requires a title.")
728
+ exit(1)
729
+ body = extra[0] if extra else ""
730
+ concepts_csv = extra[1] if extra and len(extra) > 1 else ""
731
+ entities_csv = extra[2] if extra and len(extra) > 2 else ""
732
+ tags_csv = extra[3] if extra and len(extra) > 3 else ""
733
+ concepts = [c.strip() for c in concepts_csv.split(",") if c.strip()] if concepts_csv else None
734
+ entities = [e.strip() for e in entities_csv.split(",") if e.strip()] if entities_csv else None
735
+ tags = [t.strip() for t in tags_csv.split(",") if t.strip()] if tags_csv else None
736
+ do_ingest(name, body, concepts=concepts, entities=entities, tags=tags)
737
+ elif action == "query":
738
+ if not name:
739
+ print("Error: query requires a keyword.")
740
+ exit(1)
741
+ do_query(name)
742
+ elif action == "lint":
743
+ do_lint()
577
744
  else:
578
745
  print(f"Unknown command: {action}")
579
746
  show_help()
@@ -46,6 +46,8 @@ def memory_dir_for_backend(backend: str, custom_path: str = "") -> Optional[Path
46
46
  return Path(custom_path).expanduser()
47
47
  if backend == "obsidian":
48
48
  return Path.home() / "Documents" / "Obsidian Vault" / "agent-notes"
49
+ if backend == "wiki":
50
+ return Path.home() / "Documents" / "Obsidian Vault" / "agent-wiki"
49
51
  return MEMORY_DIR # local default: ~/.claude/agent-memory
50
52
 
51
53
  def get_version() -> str:
@@ -7,7 +7,7 @@ from typing import Optional
7
7
 
8
8
  @dataclass
9
9
  class MemoryConfig:
10
- backend: str = "local" # "obsidian" | "local" | "none"
10
+ backend: str = "local" # "obsidian" | "local" | "wiki" | "none"
11
11
  path: str = "" # vault root (obsidian) or memory dir (local). empty = use default
12
12
 
13
13
 
@@ -315,7 +315,7 @@ def obsidian_regenerate_index(vault: Path) -> None:
315
315
  display_dt = f"{dt_str[:10]} {dt_str[11:16]}"
316
316
  else:
317
317
  display_dt = dt_str[:16] if len(dt_str) >= 16 else dt_str
318
- project = meta.get("project", "")
318
+ project = meta.get("project", "") or _current_project_name()
319
319
  lines.append(f"- [[{stem}|{display_dt}]] - {project}({meta['type']})")
320
320
 
321
321
  (vault / "Index.md").write_text("\n".join(lines) + "\n")