basic-memory 0.17.9__tar.gz → 0.18.1__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 (432) hide show
  1. {basic_memory-0.17.9 → basic_memory-0.18.1}/.gitignore +2 -0
  2. basic_memory-0.17.9/CLAUDE.md → basic_memory-0.18.1/AGENTS.md +44 -5
  3. {basic_memory-0.17.9 → basic_memory-0.18.1}/CHANGELOG.md +76 -0
  4. basic_memory-0.18.1/CLAUDE.md +1 -0
  5. {basic_memory-0.17.9 → basic_memory-0.18.1}/PKG-INFO +34 -1
  6. {basic_memory-0.17.9 → basic_memory-0.18.1}/README.md +33 -0
  7. {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/ARCHITECTURE.md +15 -2
  8. basic_memory-0.18.1/docs/NOTE-FORMAT.md +494 -0
  9. {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/ai-assistant-guide-extended.md +49 -1
  10. {basic_memory-0.17.9 → basic_memory-0.18.1}/justfile +28 -0
  11. {basic_memory-0.17.9 → basic_memory-0.18.1}/pyproject.toml +2 -0
  12. {basic_memory-0.17.9 → basic_memory-0.18.1}/server.json +2 -2
  13. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/__init__.py +1 -1
  14. basic_memory-0.18.1/src/basic_memory/alembic/versions/d7e8f9a0b1c2_add_structured_metadata_indexes.py +152 -0
  15. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/app.py +43 -25
  16. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/importer_router.py +15 -15
  17. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/knowledge_router.py +213 -54
  18. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/memory_router.py +1 -1
  19. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/project_router.py +193 -0
  20. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/prompt_router.py +1 -1
  21. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/search_router.py +12 -9
  22. {basic_memory-0.17.9/src/basic_memory/api/routers → basic_memory-0.18.1/src/basic_memory/api/v2}/utils.py +29 -8
  23. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/app.py +1 -1
  24. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/__init__.py +2 -1
  25. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/cloud_utils.py +2 -2
  26. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/rclone_commands.py +12 -1
  27. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/command_utils.py +2 -2
  28. basic_memory-0.18.1/src/basic_memory/cli/commands/doctor.py +153 -0
  29. basic_memory-0.18.1/src/basic_memory/cli/commands/mcp.py +80 -0
  30. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/project.py +161 -61
  31. basic_memory-0.18.1/src/basic_memory/cli/commands/routing.py +73 -0
  32. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/status.py +17 -3
  33. basic_memory-0.18.1/src/basic_memory/cli/commands/tool.py +644 -0
  34. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/main.py +1 -0
  35. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/__init__.py +4 -0
  36. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/services.py +83 -2
  37. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/file_utils.py +4 -4
  38. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/entity_parser.py +3 -1
  39. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/utils.py +4 -3
  40. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/async_client.py +32 -2
  41. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/knowledge.py +73 -4
  42. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/project.py +2 -2
  43. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/project_context.py +17 -6
  44. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/continue_conversation.py +7 -6
  45. basic_memory-0.18.1/src/basic_memory/mcp/prompts/recent_activity.py +98 -0
  46. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/search.py +9 -6
  47. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/utils.py +1 -2
  48. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/resources/project_info.py +1 -2
  49. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/__init__.py +2 -1
  50. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/canvas.py +11 -11
  51. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/delete_note.py +94 -14
  52. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/edit_note.py +1 -1
  53. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/move_note.py +94 -11
  54. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/recent_activity.py +1 -1
  55. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/search.py +114 -2
  56. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/write_note.py +22 -20
  57. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/entity_repository.py +12 -3
  58. basic_memory-0.18.1/src/basic_memory/repository/metadata_filters.py +139 -0
  59. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/postgres_search_repository.py +109 -28
  60. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/search_repository.py +1 -0
  61. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/search_repository_base.py +2 -0
  62. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/sqlite_search_repository.py +127 -27
  63. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/base.py +7 -5
  64. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/cloud.py +1 -1
  65. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/memory.py +4 -0
  66. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/request.py +24 -0
  67. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/response.py +68 -0
  68. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/search.py +22 -6
  69. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/v2/__init__.py +4 -0
  70. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/v2/entity.py +48 -0
  71. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/entity_service.py +393 -44
  72. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/exceptions.py +6 -0
  73. basic_memory-0.18.1/src/basic_memory/services/link_resolver.py +251 -0
  74. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/search_service.py +22 -1
  75. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/sync_service.py +5 -13
  76. basic_memory-0.18.1/test-int/cli/test_cli_tool_json_integration.py +126 -0
  77. basic_memory-0.18.1/test-int/cli/test_routing_integration.py +181 -0
  78. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_build_context_underscore.py +5 -5
  79. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_build_context_validation.py +2 -2
  80. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_chatgpt_tools_integration.py +10 -10
  81. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_default_project_mode_integration.py +9 -9
  82. basic_memory-0.18.1/test-int/mcp/test_delete_directory_integration.py +268 -0
  83. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_delete_note_integration.py +8 -8
  84. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_edit_note_integration.py +11 -11
  85. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_list_directory_integration.py +23 -23
  86. basic_memory-0.18.1/test-int/mcp/test_move_directory_integration.py +343 -0
  87. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_move_note_integration.py +14 -14
  88. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_project_management_integration.py +5 -5
  89. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_project_state_sync_integration.py +1 -1
  90. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_read_content_integration.py +8 -8
  91. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_read_note_integration.py +2 -2
  92. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_search_integration.py +20 -20
  93. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_single_project_mcp_integration.py +6 -6
  94. basic_memory-0.18.1/test-int/mcp/test_smoke_integration.py +55 -0
  95. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_write_note_integration.py +13 -13
  96. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/test_disable_permalinks_integration.py +1 -1
  97. basic_memory-0.18.1/tests/api/v2/conftest.py +59 -0
  98. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_importer_router.py +18 -16
  99. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_knowledge_router.py +390 -13
  100. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_project_router.py +26 -0
  101. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/cloud/test_cloud_api_client_and_utils.py +2 -2
  102. basic_memory-0.18.1/tests/cli/test_cli_tool_json_output.py +333 -0
  103. basic_memory-0.18.1/tests/cli/test_routing.py +102 -0
  104. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/conftest.py +6 -6
  105. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_entity_parser_error_handling.py +94 -0
  106. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/clients/test_clients.py +1 -1
  107. basic_memory-0.18.1/tests/mcp/test_async_client_force_local.py +79 -0
  108. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_obsidian_yaml_formatting.py +8 -8
  109. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_permalink_collision_file_overwrite.py +5 -5
  110. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_prompts.py +9 -6
  111. basic_memory-0.18.1/tests/mcp/test_recent_activity_prompt_modes.py +108 -0
  112. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_canvas.py +8 -6
  113. basic_memory-0.18.1/tests/mcp/test_tool_contracts.py +88 -0
  114. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_edit_note.py +16 -16
  115. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_list_directory.py +3 -3
  116. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_move_note.py +28 -28
  117. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_read_content.py +1 -1
  118. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_read_note.py +11 -8
  119. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_recent_activity.py +6 -2
  120. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_resource.py +3 -3
  121. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_search.py +8 -8
  122. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_view_note.py +12 -12
  123. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_write_note.py +39 -39
  124. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_write_note_kebab_filenames.py +20 -20
  125. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/tools/test_chatgpt_tools.py +3 -3
  126. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_entity_repository.py +60 -0
  127. basic_memory-0.18.1/tests/repository/test_metadata_filters.py +82 -0
  128. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_project_repository.py +23 -17
  129. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_search_repository.py +106 -0
  130. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_memory_serialization.py +7 -0
  131. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_schemas.py +8 -8
  132. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_entity_service.py +117 -53
  133. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_entity_service_disable_permalinks.py +4 -4
  134. basic_memory-0.18.1/tests/services/test_link_resolver.py +811 -0
  135. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_search_service.py +66 -0
  136. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_sync_service.py +6 -6
  137. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_rclone_commands.py +18 -0
  138. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_file_utils.py +19 -19
  139. {basic_memory-0.17.9 → basic_memory-0.18.1}/uv.lock +15 -0
  140. basic_memory-0.17.9/src/basic_memory/api/routers/__init__.py +0 -11
  141. basic_memory-0.17.9/src/basic_memory/api/routers/directory_router.py +0 -84
  142. basic_memory-0.17.9/src/basic_memory/api/routers/importer_router.py +0 -152
  143. basic_memory-0.17.9/src/basic_memory/api/routers/knowledge_router.py +0 -319
  144. basic_memory-0.17.9/src/basic_memory/api/routers/management_router.py +0 -80
  145. basic_memory-0.17.9/src/basic_memory/api/routers/memory_router.py +0 -90
  146. basic_memory-0.17.9/src/basic_memory/api/routers/project_router.py +0 -472
  147. basic_memory-0.17.9/src/basic_memory/api/routers/prompt_router.py +0 -260
  148. basic_memory-0.17.9/src/basic_memory/api/routers/resource_router.py +0 -252
  149. basic_memory-0.17.9/src/basic_memory/api/routers/search_router.py +0 -36
  150. basic_memory-0.17.9/src/basic_memory/cli/commands/mcp.py +0 -76
  151. basic_memory-0.17.9/src/basic_memory/cli/commands/tool.py +0 -341
  152. basic_memory-0.17.9/src/basic_memory/mcp/prompts/recent_activity.py +0 -188
  153. basic_memory-0.17.9/src/basic_memory/services/link_resolver.py +0 -121
  154. basic_memory-0.17.9/tests/api/conftest.py +0 -40
  155. basic_memory-0.17.9/tests/api/test_api_container.py +0 -62
  156. basic_memory-0.17.9/tests/api/test_async_client.py +0 -53
  157. basic_memory-0.17.9/tests/api/test_continue_conversation_template.py +0 -145
  158. basic_memory-0.17.9/tests/api/test_directory_router.py +0 -212
  159. basic_memory-0.17.9/tests/api/test_importer_router.py +0 -465
  160. basic_memory-0.17.9/tests/api/test_knowledge_router.py +0 -1289
  161. basic_memory-0.17.9/tests/api/test_management_router.py +0 -121
  162. basic_memory-0.17.9/tests/api/test_memory_router.py +0 -146
  163. basic_memory-0.17.9/tests/api/test_project_router.py +0 -843
  164. basic_memory-0.17.9/tests/api/test_project_router_operations.py +0 -55
  165. basic_memory-0.17.9/tests/api/test_prompt_router.py +0 -155
  166. basic_memory-0.17.9/tests/api/test_relation_background_resolution.py +0 -52
  167. basic_memory-0.17.9/tests/api/test_resource_router.py +0 -454
  168. basic_memory-0.17.9/tests/api/test_search_router.py +0 -179
  169. basic_memory-0.17.9/tests/api/test_search_template.py +0 -158
  170. basic_memory-0.17.9/tests/api/test_template_loader.py +0 -219
  171. basic_memory-0.17.9/tests/api/test_template_loader_helpers.py +0 -203
  172. basic_memory-0.17.9/tests/api/v2/conftest.py +0 -21
  173. basic_memory-0.17.9/tests/mcp/test_recent_activity_prompt_modes.py +0 -111
  174. basic_memory-0.17.9/tests/services/test_link_resolver.py +0 -359
  175. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/beta.md +0 -0
  176. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/changelog.md +0 -0
  177. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/release-check.md +0 -0
  178. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/release.md +0 -0
  179. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/spec.md +0 -0
  180. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/test-live.md +0 -0
  181. {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/settings.json +0 -0
  182. {basic_memory-0.17.9 → basic_memory-0.18.1}/.dockerignore +0 -0
  183. {basic_memory-0.17.9 → basic_memory-0.18.1}/.env.example +0 -0
  184. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  185. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  186. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  187. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  188. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/dependabot.yml +0 -0
  189. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/claude-code-review.yml +0 -0
  190. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/claude-issue-triage.yml +0 -0
  191. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/claude.yml +0 -0
  192. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/dev-release.yml +0 -0
  193. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/docker.yml +0 -0
  194. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/pr-title.yml +0 -0
  195. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/release.yml +0 -0
  196. {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/test.yml +0 -0
  197. {basic_memory-0.17.9 → basic_memory-0.18.1}/.python-version +0 -0
  198. {basic_memory-0.17.9 → basic_memory-0.18.1}/CITATION.cff +0 -0
  199. {basic_memory-0.17.9 → basic_memory-0.18.1}/CLA.md +0 -0
  200. {basic_memory-0.17.9 → basic_memory-0.18.1}/CODE_OF_CONDUCT.md +0 -0
  201. {basic_memory-0.17.9 → basic_memory-0.18.1}/CONTRIBUTING.md +0 -0
  202. {basic_memory-0.17.9 → basic_memory-0.18.1}/Dockerfile +0 -0
  203. {basic_memory-0.17.9 → basic_memory-0.18.1}/LICENSE +0 -0
  204. {basic_memory-0.17.9 → basic_memory-0.18.1}/SECURITY.md +0 -0
  205. {basic_memory-0.17.9 → basic_memory-0.18.1}/docker-compose-postgres.yml +0 -0
  206. {basic_memory-0.17.9 → basic_memory-0.18.1}/docker-compose.yml +0 -0
  207. {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/Docker.md +0 -0
  208. {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/character-handling.md +0 -0
  209. {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/cloud-cli.md +0 -0
  210. {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/testing-coverage.md +0 -0
  211. {basic_memory-0.17.9 → basic_memory-0.18.1}/llms-install.md +0 -0
  212. {basic_memory-0.17.9 → basic_memory-0.18.1}/smithery.yaml +0 -0
  213. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/alembic.ini +0 -0
  214. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/env.py +0 -0
  215. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/migrations.py +0 -0
  216. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/script.py.mako +0 -0
  217. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
  218. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  219. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  220. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
  221. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
  222. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +0 -0
  223. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  224. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  225. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
  226. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  227. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  228. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  229. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
  230. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +0 -0
  231. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/__init__.py +0 -0
  232. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/container.py +0 -0
  233. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/template_loader.py +0 -0
  234. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/__init__.py +0 -0
  235. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/__init__.py +0 -0
  236. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
  237. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
  238. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/__init__.py +0 -0
  239. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/auth.py +0 -0
  240. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  241. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  242. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  243. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  244. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  245. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
  246. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/restore.py +0 -0
  247. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/schemas.py +0 -0
  248. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/snapshot.py +0 -0
  249. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  250. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  251. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/db.py +0 -0
  252. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/format.py +0 -0
  253. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  254. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  255. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  256. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  257. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/container.py +0 -0
  258. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/config.py +0 -0
  259. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/db.py +0 -0
  260. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/config.py +0 -0
  261. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/db.py +0 -0
  262. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/importers.py +0 -0
  263. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/projects.py +0 -0
  264. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/repositories.py +0 -0
  265. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps.py +0 -0
  266. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/ignore_utils.py +0 -0
  267. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/__init__.py +0 -0
  268. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/base.py +0 -0
  269. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  270. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
  271. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  272. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/memory_json_importer.py +0 -0
  273. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/utils.py +0 -0
  274. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/__init__.py +0 -0
  275. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/markdown_processor.py +0 -0
  276. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/plugins.py +0 -0
  277. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/schemas.py +0 -0
  278. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/__init__.py +0 -0
  279. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/__init__.py +0 -0
  280. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/directory.py +0 -0
  281. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/memory.py +0 -0
  282. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/resource.py +0 -0
  283. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/search.py +0 -0
  284. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/container.py +0 -0
  285. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  286. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  287. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  288. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/server.py +0 -0
  289. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/build_context.py +0 -0
  290. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
  291. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/list_directory.py +0 -0
  292. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/project_management.py +0 -0
  293. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/read_content.py +0 -0
  294. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/read_note.py +0 -0
  295. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/utils.py +0 -0
  296. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/view_note.py +0 -0
  297. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/__init__.py +0 -0
  298. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/base.py +0 -0
  299. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/knowledge.py +0 -0
  300. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/project.py +0 -0
  301. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/search.py +0 -0
  302. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/project_resolver.py +0 -0
  303. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/__init__.py +0 -0
  304. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/observation_repository.py +0 -0
  305. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/project_info_repository.py +0 -0
  306. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/project_repository.py +0 -0
  307. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/relation_repository.py +0 -0
  308. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/repository.py +0 -0
  309. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/search_index_row.py +0 -0
  310. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/runtime.py +0 -0
  311. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/__init__.py +0 -0
  312. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/delete.py +0 -0
  313. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/directory.py +0 -0
  314. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/importer.py +0 -0
  315. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/project_info.py +0 -0
  316. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/prompt.py +0 -0
  317. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/sync_report.py +0 -0
  318. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/v2/resource.py +0 -0
  319. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/__init__.py +0 -0
  320. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/context_service.py +0 -0
  321. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/directory_service.py +0 -0
  322. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/file_service.py +0 -0
  323. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/initialization.py +0 -0
  324. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/project_service.py +0 -0
  325. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/service.py +0 -0
  326. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/__init__.py +0 -0
  327. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/background_sync.py +0 -0
  328. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/coordinator.py +0 -0
  329. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/watch_service.py +0 -0
  330. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  331. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/templates/prompts/search.hbs +0 -0
  332. {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/utils.py +0 -0
  333. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/BENCHMARKS.md +0 -0
  334. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/cli/test_project_commands_integration.py +0 -0
  335. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/cli/test_version_integration.py +0 -0
  336. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/conftest.py +0 -0
  337. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
  338. {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/test_db_wal_mode.py +0 -0
  339. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/Non-MarkdownFileSupport.pdf +0 -0
  340. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/README.md +0 -0
  341. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/Screenshot.png +0 -0
  342. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/__init__.py +0 -0
  343. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/__init__.py +0 -0
  344. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_directory_router.py +0 -0
  345. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_memory_router.py +0 -0
  346. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_prompt_router.py +0 -0
  347. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_resource_router.py +0 -0
  348. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_search_router.py +0 -0
  349. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +0 -0
  350. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/cloud/test_upload_path.py +0 -0
  351. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/conftest.py +0 -0
  352. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_auth_cli_auth.py +0 -0
  353. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_container.py +0 -0
  354. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_exit.py +0 -0
  355. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_tool_exit.py +0 -0
  356. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_tools.py +0 -0
  357. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cloud_authentication.py +0 -0
  358. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_ignore_utils.py +0 -0
  359. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_chatgpt.py +0 -0
  360. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_claude_conversations.py +0 -0
  361. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_claude_projects.py +0 -0
  362. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_memory_json.py +0 -0
  363. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_project_add_with_local_path.py +0 -0
  364. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_restore_commands.py +0 -0
  365. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_snapshot_commands.py +0 -0
  366. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_upload.py +0 -0
  367. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  368. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/importers/test_conversation_indexing.py +0 -0
  369. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/importers/test_importer_base.py +0 -0
  370. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/importers/test_importer_utils.py +0 -0
  371. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/__init__.py +0 -0
  372. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  373. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_entity_parser.py +0 -0
  374. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_markdown_plugins.py +0 -0
  375. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_markdown_processor.py +0 -0
  376. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_markdown_utils.py +0 -0
  377. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_observation_edge_cases.py +0 -0
  378. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_parser_edge_cases.py +0 -0
  379. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_relation_edge_cases.py +0 -0
  380. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_task_detection.py +0 -0
  381. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/clients/__init__.py +0 -0
  382. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/conftest.py +0 -0
  383. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_async_client_modes.py +0 -0
  384. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_mcp_container.py +0 -0
  385. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_project_context.py +0 -0
  386. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_resources.py +0 -0
  387. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_server_lifespan_branches.py +0 -0
  388. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_build_context.py +0 -0
  389. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_delete_note.py +0 -0
  390. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_project_management.py +0 -0
  391. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_utils.py +0 -0
  392. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_entity_repository_upsert.py +0 -0
  393. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_entity_upsert_issue_187.py +0 -0
  394. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_observation_repository.py +0 -0
  395. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_postgres_search_repository.py +0 -0
  396. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_project_info_repository.py +0 -0
  397. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_relation_repository.py +0 -0
  398. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_repository.py +0 -0
  399. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
  400. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  401. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_memory_url.py +0 -0
  402. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_memory_url_validation.py +0 -0
  403. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_relation_response_reference_resolution.py +0 -0
  404. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_search.py +0 -0
  405. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_context_service.py +0 -0
  406. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_directory_service.py +0 -0
  407. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_file_service.py +0 -0
  408. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_initialization.py +0 -0
  409. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_initialization_cloud_mode_branches.py +0 -0
  410. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_project_removal_bug.py +0 -0
  411. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_project_service.py +0 -0
  412. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_project_service_operations.py +0 -0
  413. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_character_conflicts.py +0 -0
  414. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_coordinator.py +0 -0
  415. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_sync_service_incremental.py +0 -0
  416. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_sync_wikilink_issue.py +0 -0
  417. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_tmp_files.py +0 -0
  418. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service.py +0 -0
  419. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service_atomic_adds.py +0 -0
  420. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service_edge_cases.py +0 -0
  421. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service_reload.py +0 -0
  422. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_config.py +0 -0
  423. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_deps.py +0 -0
  424. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_production_cascade_delete.py +0 -0
  425. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_project_resolver.py +0 -0
  426. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_runtime.py +0 -0
  427. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  428. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_parse_tags.py +0 -0
  429. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_permalink_formatting.py +0 -0
  430. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_timezone_utils.py +0 -0
  431. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_utf8_handling.py +0 -0
  432. {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_validate_project_path.py +0 -0
@@ -1,6 +1,7 @@
1
1
  *.py[cod]
2
2
  __pycache__/
3
3
  .pytest_cache/
4
+ .testmondata*
4
5
  .coverage
5
6
  htmlcov/
6
7
 
@@ -55,3 +56,4 @@ claude-output
55
56
  **/.claude/settings.local.json
56
57
  .mcp.json
57
58
  .mcpregistry_*
59
+ /.testmondata
@@ -1,4 +1,4 @@
1
- # CLAUDE.md - Basic Memory Project Guide
1
+ # AGENTS.md - Basic Memory Project Guide
2
2
 
3
3
  ## Project Overview
4
4
 
@@ -22,6 +22,10 @@ See the [README.md](README.md) file for a project overview.
22
22
  - Run unit tests (Postgres): `just test-unit-postgres`
23
23
  - Run integration tests (SQLite): `just test-int-sqlite`
24
24
  - Run integration tests (Postgres): `just test-int-postgres`
25
+ - Run impacted tests: `just testmon` (pytest-testmon)
26
+ - Run MCP smoke test: `just test-smoke`
27
+ - Fast local loop: `just fast-check`
28
+ - Local consistency check: `just doctor`
25
29
  - Generate HTML coverage: `just coverage`
26
30
  - Single test: `pytest tests/path/to/test_file.py::test_function_name`
27
31
  - Run benchmarks: `pytest test-int/test_sync_performance_benchmark.py -v -m "benchmark and not slow"`
@@ -36,6 +40,19 @@ See the [README.md](README.md) file for a project overview.
36
40
 
37
41
  **Postgres Testing:** Uses [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
38
42
 
43
+ **Doctor Note:** `just doctor` runs with a temporary HOME/config so it won't touch your local Basic Memory settings. It leaves temp dirs in `/tmp` (safe to ignore or remove).
44
+
45
+ **Testmon Note:** When no files have changed, `just testmon` may collect 0 tests. That's expected and means no impacted tests were detected.
46
+
47
+ ### Code/Test/Verify Loop (fast path)
48
+
49
+ 1) **Code:** make changes.
50
+ 2) **Test:** `just fast-check` (lint/format/typecheck + impacted tests + MCP smoke).
51
+ 3) **Verify:** `just doctor` (end-to-end file ↔ DB loop in a temp project).
52
+ 4) **Full gate (when needed):** `just test` or `just check` for SQLite + Postgres.
53
+
54
+ If testmon is “cold,” the first run may be long. Subsequent runs get much faster.
55
+
39
56
  ### Test Structure
40
57
 
41
58
  - `tests/` - Unit tests for individual components (mocked, fast)
@@ -43,6 +60,7 @@ See the [README.md](README.md) file for a project overview.
43
60
  - Both directories are covered by unified coverage reporting
44
61
  - Benchmark tests in `test-int/` are marked with `@pytest.mark.benchmark`
45
62
  - Slow tests are marked with `@pytest.mark.slow`
63
+ - Smoke tests are marked with `@pytest.mark.smoke`
46
64
 
47
65
  ### Code Style Guidelines
48
66
 
@@ -221,6 +239,7 @@ See SPEC-16 for full context manager refactor details.
221
239
 
222
240
  **Local Commands:**
223
241
  - Check sync status: `basic-memory status`
242
+ - Doctor check (file <-> DB loop): `basic-memory doctor`
224
243
  - Import from Claude: `basic-memory import claude conversations`
225
244
  - Import from ChatGPT: `basic-memory import chatgpt`
226
245
  - Import from Memory JSON: `basic-memory import memory-json`
@@ -248,13 +267,13 @@ See SPEC-16 for full context manager refactor details.
248
267
  - Basic Memory exposes these MCP tools to LLMs:
249
268
 
250
269
  **Content Management:**
251
- - `write_note(title, content, folder, tags)` - Create/update markdown notes with semantic observations and relations
270
+ - `write_note(title, content, directory, tags)` - Create/update markdown notes with semantic observations and relations
252
271
  - `read_note(identifier, page, page_size)` - Read notes by title, permalink, or memory:// URL with knowledge graph awareness
253
272
  - `read_content(path)` - Read raw file content (text, images, binaries) without knowledge graph processing
254
273
  - `view_note(identifier, page, page_size)` - View notes as formatted artifacts for better readability
255
274
  - `edit_note(identifier, operation, content)` - Edit notes incrementally (append, prepend, find/replace, replace_section)
256
- - `move_note(identifier, destination_path)` - Move notes to new locations, updating database and maintaining links
257
- - `delete_note(identifier)` - Delete notes from the knowledge base
275
+ - `move_note(identifier, destination_path, is_directory)` - Move notes or directories to new locations, updating database and maintaining links
276
+ - `delete_note(identifier, is_directory)` - Delete notes or directories from the knowledge base
258
277
 
259
278
  **Knowledge Graph Navigation:**
260
279
  - `build_context(url, depth, timeframe)` - Navigate the knowledge graph via memory:// URLs for conversation continuity
@@ -270,7 +289,7 @@ See SPEC-16 for full context manager refactor details.
270
289
  - `delete_project(project_name)` - Delete a project from configuration
271
290
 
272
291
  **Visualization:**
273
- - `canvas(nodes, edges, title, folder)` - Generate Obsidian canvas files for knowledge graph visualization
292
+ - `canvas(nodes, edges, title, directory)` - Generate Obsidian canvas files for knowledge graph visualization
274
293
 
275
294
  **ChatGPT-Compatible Tools:**
276
295
  - `search(query)` - Search across knowledge base (OpenAI actions compatible)
@@ -310,6 +329,26 @@ Basic Memory now supports cloud synchronization and storage (requires active sub
310
329
  - Background relation resolution (non-blocking startup)
311
330
  - API performance optimizations (SPEC-11)
312
331
 
332
+ **CLI Routing Flags:**
333
+
334
+ When cloud mode is enabled, CLI commands route to the cloud API by default. Use `--local` and `--cloud` flags to override:
335
+
336
+ ```bash
337
+ # Force local routing (ignore cloud mode)
338
+ basic-memory status --local
339
+ basic-memory project list --local
340
+
341
+ # Force cloud routing (when cloud mode is disabled)
342
+ basic-memory status --cloud
343
+ basic-memory project info my-project --cloud
344
+ ```
345
+
346
+ Key behaviors:
347
+ - The local MCP server (`basic-memory mcp`) automatically uses local routing
348
+ - This allows simultaneous use of local Claude Desktop and cloud-based clients
349
+ - Some commands (like `project default`, `project sync-config`, `project move`) require `--local` in cloud mode since they modify local configuration
350
+ - Environment variable `BASIC_MEMORY_FORCE_LOCAL=true` forces local routing globally
351
+
313
352
  ## AI-Human Collaborative Development
314
353
 
315
354
  Basic Memory emerged from and enables a new kind of development process that combines human and AI capabilities. Instead
@@ -1,5 +1,81 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.18.1 (2026-02-11)
4
+
5
+ ### Features
6
+
7
+ - **#552**: Add `--format json` to CLI tool commands
8
+ ([`a47c9c0`](https://github.com/basicmachines-co/basic-memory/commit/a47c9c0))
9
+ - CLI tool commands now support `--format json` for machine-readable output
10
+
11
+ - **#535**: Support `tag:` query shorthand in search
12
+ ([`f1d50c2`](https://github.com/basicmachines-co/basic-memory/commit/f1d50c2))
13
+ - Use `tag:mytag` as a convenient shorthand in search queries
14
+
15
+ - **#532**: Fast edit entities, refactors for webui, enhanced search
16
+ ([`530cbac`](https://github.com/basicmachines-co/basic-memory/commit/530cbac))
17
+ - Performance improvements for entity editing and search operations
18
+
19
+ ### Bug Fixes
20
+
21
+ - **#558**: Add X-Tigris-Consistent headers to all rclone commands
22
+ ([`8489a3d`](https://github.com/basicmachines-co/basic-memory/commit/8489a3d))
23
+ - Ensures consistent reads from Tigris object storage during sync
24
+
25
+ - **#541**: Handle EntityCreationError as conflict
26
+ ([`343a6e1`](https://github.com/basicmachines-co/basic-memory/commit/343a6e1))
27
+
28
+ - **#536**: Stabilize metadata filters on Postgres
29
+ ([`009e849`](https://github.com/basicmachines-co/basic-memory/commit/009e849))
30
+
31
+ - **#533**: Fix recent_activity prompt defaults
32
+ ([`24ca5f6`](https://github.com/basicmachines-co/basic-memory/commit/24ca5f6))
33
+
34
+ - **#530**: Prevent spurious `metadata: {}` in frontmatter output
35
+ ([`e3ced49`](https://github.com/basicmachines-co/basic-memory/commit/e3ced49))
36
+
37
+ - Add POST legacy compat routes for v0.18.0 CLI
38
+ ([`c46d7a6`](https://github.com/basicmachines-co/basic-memory/commit/c46d7a6))
39
+
40
+ - Restore legacy `/projects/projects` endpoint for older CLI versions
41
+ ([`a0e754b`](https://github.com/basicmachines-co/basic-memory/commit/a0e754b))
42
+
43
+ ### Internal
44
+
45
+ - **#538**: Add fast feedback loop tooling (`just fast-check`, `just doctor`, `just testmon`)
46
+ ([`8072449`](https://github.com/basicmachines-co/basic-memory/commit/8072449))
47
+
48
+ ## v0.18.0 (2026-01-28)
49
+
50
+ ### Features
51
+
52
+ - **#527**: Add context-aware wiki link resolution with source_path support
53
+ ([`0023e73`](https://github.com/basicmachines-co/basic-memory/commit/0023e73))
54
+ - Add `source_path` parameter to `resolve_link()` for context-aware resolution
55
+ - Relative path resolution: `[[nested/note]]` from `folder/file.md` → `folder/nested/note.md`
56
+ - Proximity-based resolution for duplicate titles (prefers notes in same folder)
57
+ - Strict mode to disable fuzzy search fallback for wiki links
58
+
59
+ - **#518**: Add directory support to move_note and delete_note tools
60
+ ([`0b20801`](https://github.com/basicmachines-co/basic-memory/commit/0b20801))
61
+ - Add `is_directory` parameter to `move_note` and `delete_note` MCP tools
62
+ - New `POST /move-directory` and delete directory API endpoints
63
+ - Rename `folder` → `directory` parameter across codebase for consistency
64
+
65
+ - **#522**: Local MCP cloud mode routing
66
+ ([`8730067`](https://github.com/basicmachines-co/basic-memory/commit/8730067))
67
+ - Add `--local` and `--cloud` CLI routing flags
68
+ - Local MCP server (`basic-memory mcp`) automatically uses local routing
69
+ - Enables simultaneous use of local Claude Desktop and cloud-based clients
70
+ - Environment variable `BASIC_MEMORY_FORCE_LOCAL=true` for global override
71
+
72
+ ### Bug Fixes
73
+
74
+ - **#524**: Fix MCP prompt rendering errors
75
+ ([`e14ba92`](https://github.com/basicmachines-co/basic-memory/commit/e14ba92))
76
+ - Fix "Error rendering prompt recent_activity" error
77
+ - Change `TimeFrame` to `str` in prompt type annotations for FastMCP compatibility
78
+
3
79
  ## v0.17.9 (2026-01-24)
4
80
 
5
81
  ### Bug Fixes
@@ -0,0 +1 @@
1
+ AGENTS.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.17.9
3
+ Version: 0.18.1
4
4
  Summary: Local-first knowledge management combining Zettelkasten with knowledge graphs
5
5
  Project-URL: Homepage, https://github.com/basicmachines-co/basic-memory
6
6
  Project-URL: Repository, https://github.com/basicmachines-co/basic-memory
@@ -405,6 +405,22 @@ basic-memory cloud check
405
405
  basic-memory cloud mount
406
406
  ```
407
407
 
408
+ **Routing Flags** (for users with cloud subscriptions):
409
+
410
+ When cloud mode is enabled, CLI commands communicate with the cloud API by default. Use routing flags to override this:
411
+
412
+ ```bash
413
+ # Force local routing (useful for local MCP server while cloud mode is enabled)
414
+ basic-memory status --local
415
+ basic-memory project list --local
416
+
417
+ # Force cloud routing (when cloud mode is disabled but you want cloud access)
418
+ basic-memory status --cloud
419
+ basic-memory project info my-project --cloud
420
+ ```
421
+
422
+ The local MCP server (`basic-memory mcp`) automatically uses local routing, so you can use both local Claude Desktop and cloud-based clients simultaneously.
423
+
408
424
  4. In Claude Desktop, the LLM can now use these tools:
409
425
 
410
426
  **Content Management:**
@@ -428,6 +444,8 @@ list_directory(dir_name, depth) - Browse directory contents with filtering
428
444
  **Search & Discovery:**
429
445
  ```
430
446
  search(query, page, page_size) - Search across your knowledge base
447
+ search_notes(query, page, page_size, search_type, types, entity_types, after_date, metadata_filters, tags, status, project) - Search with filters
448
+ search_by_metadata(filters, limit, offset, project) - Structured frontmatter search
431
449
  ```
432
450
 
433
451
  **Project Management:**
@@ -481,6 +499,7 @@ Basic Memory uses [Loguru](https://github.com/Delgan/loguru) for logging. The lo
481
499
  |----------|---------|-------------|
482
500
  | `BASIC_MEMORY_LOG_LEVEL` | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |
483
501
  | `BASIC_MEMORY_CLOUD_MODE` | `false` | When `true`, API logs to stdout with structured context |
502
+ | `BASIC_MEMORY_FORCE_LOCAL` | `false` | When `true`, forces local API routing (ignores cloud mode) |
484
503
  | `BASIC_MEMORY_ENV` | `dev` | Set to `test` for test mode (stderr only) |
485
504
 
486
505
  ### Examples
@@ -525,16 +544,23 @@ just test
525
544
  - `just test-int-postgres` - Run integration tests against Postgres
526
545
  - `just test-windows` - Run Windows-specific tests (auto-skips on other platforms)
527
546
  - `just test-benchmark` - Run performance benchmark tests
547
+ - `just testmon` - Run tests impacted by recent changes (pytest-testmon)
548
+ - `just test-smoke` - Run fast MCP end-to-end smoke test
549
+ - `just fast-check` - Run fix/format/typecheck + impacted tests + smoke test
550
+ - `just doctor` - Run local file <-> DB consistency checks with temp config
528
551
 
529
552
  **Postgres Testing:**
530
553
 
531
554
  Postgres tests use [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
532
555
 
556
+ **Testmon Note:** When no files have changed, `just testmon` may collect 0 tests. That's expected and means no impacted tests were detected.
557
+
533
558
  **Test Markers:**
534
559
 
535
560
  Tests use pytest markers for selective execution:
536
561
  - `windows` - Windows-specific database optimizations
537
562
  - `benchmark` - Performance tests (excluded from default runs)
563
+ - `smoke` - Fast MCP end-to-end smoke tests
538
564
 
539
565
  **Other Development Commands:**
540
566
  ```bash
@@ -542,10 +568,17 @@ just install # Install with dev dependencies
542
568
  just lint # Run linting checks
543
569
  just typecheck # Run type checking
544
570
  just format # Format code with ruff
571
+ just fast-check # Fast local loop (fix/format/typecheck + testmon + smoke)
572
+ just doctor # Local consistency check (temp config)
545
573
  just check # Run all quality checks
546
574
  just migration "msg" # Create database migration
547
575
  ```
548
576
 
577
+ **Local Consistency Check:**
578
+ ```bash
579
+ basic-memory doctor # Verifies file <-> database sync in a temp project
580
+ ```
581
+
549
582
  See the [justfile](justfile) for the complete list of development commands.
550
583
 
551
584
  ## License
@@ -357,6 +357,22 @@ basic-memory cloud check
357
357
  basic-memory cloud mount
358
358
  ```
359
359
 
360
+ **Routing Flags** (for users with cloud subscriptions):
361
+
362
+ When cloud mode is enabled, CLI commands communicate with the cloud API by default. Use routing flags to override this:
363
+
364
+ ```bash
365
+ # Force local routing (useful for local MCP server while cloud mode is enabled)
366
+ basic-memory status --local
367
+ basic-memory project list --local
368
+
369
+ # Force cloud routing (when cloud mode is disabled but you want cloud access)
370
+ basic-memory status --cloud
371
+ basic-memory project info my-project --cloud
372
+ ```
373
+
374
+ The local MCP server (`basic-memory mcp`) automatically uses local routing, so you can use both local Claude Desktop and cloud-based clients simultaneously.
375
+
360
376
  4. In Claude Desktop, the LLM can now use these tools:
361
377
 
362
378
  **Content Management:**
@@ -380,6 +396,8 @@ list_directory(dir_name, depth) - Browse directory contents with filtering
380
396
  **Search & Discovery:**
381
397
  ```
382
398
  search(query, page, page_size) - Search across your knowledge base
399
+ search_notes(query, page, page_size, search_type, types, entity_types, after_date, metadata_filters, tags, status, project) - Search with filters
400
+ search_by_metadata(filters, limit, offset, project) - Structured frontmatter search
383
401
  ```
384
402
 
385
403
  **Project Management:**
@@ -433,6 +451,7 @@ Basic Memory uses [Loguru](https://github.com/Delgan/loguru) for logging. The lo
433
451
  |----------|---------|-------------|
434
452
  | `BASIC_MEMORY_LOG_LEVEL` | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |
435
453
  | `BASIC_MEMORY_CLOUD_MODE` | `false` | When `true`, API logs to stdout with structured context |
454
+ | `BASIC_MEMORY_FORCE_LOCAL` | `false` | When `true`, forces local API routing (ignores cloud mode) |
436
455
  | `BASIC_MEMORY_ENV` | `dev` | Set to `test` for test mode (stderr only) |
437
456
 
438
457
  ### Examples
@@ -477,16 +496,23 @@ just test
477
496
  - `just test-int-postgres` - Run integration tests against Postgres
478
497
  - `just test-windows` - Run Windows-specific tests (auto-skips on other platforms)
479
498
  - `just test-benchmark` - Run performance benchmark tests
499
+ - `just testmon` - Run tests impacted by recent changes (pytest-testmon)
500
+ - `just test-smoke` - Run fast MCP end-to-end smoke test
501
+ - `just fast-check` - Run fix/format/typecheck + impacted tests + smoke test
502
+ - `just doctor` - Run local file <-> DB consistency checks with temp config
480
503
 
481
504
  **Postgres Testing:**
482
505
 
483
506
  Postgres tests use [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
484
507
 
508
+ **Testmon Note:** When no files have changed, `just testmon` may collect 0 tests. That's expected and means no impacted tests were detected.
509
+
485
510
  **Test Markers:**
486
511
 
487
512
  Tests use pytest markers for selective execution:
488
513
  - `windows` - Windows-specific database optimizations
489
514
  - `benchmark` - Performance tests (excluded from default runs)
515
+ - `smoke` - Fast MCP end-to-end smoke tests
490
516
 
491
517
  **Other Development Commands:**
492
518
  ```bash
@@ -494,10 +520,17 @@ just install # Install with dev dependencies
494
520
  just lint # Run linting checks
495
521
  just typecheck # Run type checking
496
522
  just format # Format code with ruff
523
+ just fast-check # Fast local loop (fix/format/typecheck + testmon + smoke)
524
+ just doctor # Local consistency check (temp config)
497
525
  just check # Run all quality checks
498
526
  just migration "msg" # Create database migration
499
527
  ```
500
528
 
529
+ **Local Consistency Check:**
530
+ ```bash
531
+ basic-memory doctor # Verifies file <-> database sync in a temp project
532
+ ```
533
+
501
534
  See the [justfile](justfile) for the complete list of development commands.
502
535
 
503
536
  ## License
@@ -214,15 +214,28 @@ Example tool using typed client:
214
214
 
215
215
  ```python
216
216
  @mcp.tool()
217
- async def search_notes(query: str, project: str | None = None) -> SearchResponse:
217
+ async def search_notes(
218
+ query: str,
219
+ project: str | None = None,
220
+ metadata_filters: dict | None = None,
221
+ tags: list[str] | None = None,
222
+ status: str | None = None,
223
+ ) -> SearchResponse:
218
224
  async with get_client() as client:
219
225
  active_project = await get_active_project(client, project)
220
226
 
221
227
  # Import client inside function to avoid circular imports
222
228
  from basic_memory.mcp.clients import SearchClient
229
+ from basic_memory.schemas.search import SearchQuery
223
230
 
231
+ search_query = SearchQuery(
232
+ text=query,
233
+ metadata_filters=metadata_filters,
234
+ tags=tags,
235
+ status=status,
236
+ )
224
237
  search_client = SearchClient(client, active_project.external_id)
225
- return await search_client.search(query)
238
+ return await search_client.search(search_query.model_dump())
226
239
  ```
227
240
 
228
241
  ## Sync Coordination