basic-memory 0.17.6__tar.gz → 0.17.8__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 (412) hide show
  1. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/commands/release/release.md +31 -1
  2. {basic_memory-0.17.6 → basic_memory-0.17.8}/.gitignore +1 -0
  3. {basic_memory-0.17.6 → basic_memory-0.17.8}/CHANGELOG.md +37 -0
  4. {basic_memory-0.17.6 → basic_memory-0.17.8}/CLAUDE.md +2 -0
  5. {basic_memory-0.17.6 → basic_memory-0.17.8}/PKG-INFO +6 -58
  6. {basic_memory-0.17.6 → basic_memory-0.17.8}/README.md +5 -56
  7. {basic_memory-0.17.6 → basic_memory-0.17.8}/docs/testing-coverage.md +1 -3
  8. {basic_memory-0.17.6 → basic_memory-0.17.8}/justfile +16 -5
  9. {basic_memory-0.17.6 → basic_memory-0.17.8}/pyproject.toml +0 -2
  10. basic_memory-0.17.8/server.json +25 -0
  11. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/__init__.py +1 -1
  12. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/project_router.py +15 -3
  13. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/resource_router.py +3 -0
  14. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/resource_router.py +3 -0
  15. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/app.py +0 -8
  16. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/__init__.py +1 -2
  17. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/__init__.py +10 -0
  18. basic_memory-0.17.8/src/basic_memory/cli/commands/cloud/restore.py +159 -0
  19. basic_memory-0.17.8/src/basic_memory/cli/commands/cloud/schemas.py +55 -0
  20. basic_memory-0.17.8/src/basic_memory/cli/commands/cloud/snapshot.py +370 -0
  21. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/command_utils.py +2 -6
  22. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/main.py +0 -1
  23. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/config.py +1 -12
  24. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/markdown/utils.py +7 -0
  25. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/server.py +0 -6
  26. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/build_context.py +0 -2
  27. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/canvas.py +0 -2
  28. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -3
  29. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/delete_note.py +0 -2
  30. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/edit_note.py +0 -2
  31. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/list_directory.py +0 -2
  32. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/move_note.py +0 -2
  33. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/project_management.py +0 -4
  34. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/read_content.py +0 -2
  35. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/read_note.py +0 -2
  36. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/recent_activity.py +0 -2
  37. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/search.py +0 -2
  38. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/view_note.py +0 -2
  39. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/write_note.py +0 -2
  40. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/project_repository.py +1 -1
  41. basic_memory-0.17.8/tests/cli/test_restore_commands.py +409 -0
  42. basic_memory-0.17.8/tests/cli/test_snapshot_commands.py +529 -0
  43. basic_memory-0.17.8/tests/markdown/test_markdown_utils.py +163 -0
  44. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_project_repository.py +33 -0
  45. {basic_memory-0.17.6 → basic_memory-0.17.8}/uv.lock +0 -14
  46. basic_memory-0.17.6/src/basic_memory/cli/commands/telemetry.py +0 -81
  47. basic_memory-0.17.6/src/basic_memory/telemetry.py +0 -320
  48. basic_memory-0.17.6/tests/test_telemetry.py +0 -290
  49. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/commands/release/beta.md +0 -0
  50. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/commands/release/changelog.md +0 -0
  51. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/commands/release/release-check.md +0 -0
  52. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/commands/spec.md +0 -0
  53. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/commands/test-live.md +0 -0
  54. {basic_memory-0.17.6 → basic_memory-0.17.8}/.claude/settings.json +0 -0
  55. {basic_memory-0.17.6 → basic_memory-0.17.8}/.dockerignore +0 -0
  56. {basic_memory-0.17.6 → basic_memory-0.17.8}/.env.example +0 -0
  57. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  58. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  59. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  60. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  61. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/dependabot.yml +0 -0
  62. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/claude-code-review.yml +0 -0
  63. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/claude-issue-triage.yml +0 -0
  64. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/claude.yml +0 -0
  65. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/dev-release.yml +0 -0
  66. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/docker.yml +0 -0
  67. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/pr-title.yml +0 -0
  68. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/release.yml +0 -0
  69. {basic_memory-0.17.6 → basic_memory-0.17.8}/.github/workflows/test.yml +0 -0
  70. {basic_memory-0.17.6 → basic_memory-0.17.8}/.python-version +0 -0
  71. {basic_memory-0.17.6 → basic_memory-0.17.8}/CITATION.cff +0 -0
  72. {basic_memory-0.17.6 → basic_memory-0.17.8}/CLA.md +0 -0
  73. {basic_memory-0.17.6 → basic_memory-0.17.8}/CODE_OF_CONDUCT.md +0 -0
  74. {basic_memory-0.17.6 → basic_memory-0.17.8}/CONTRIBUTING.md +0 -0
  75. {basic_memory-0.17.6 → basic_memory-0.17.8}/Dockerfile +0 -0
  76. {basic_memory-0.17.6 → basic_memory-0.17.8}/LICENSE +0 -0
  77. {basic_memory-0.17.6 → basic_memory-0.17.8}/SECURITY.md +0 -0
  78. {basic_memory-0.17.6 → basic_memory-0.17.8}/docker-compose-postgres.yml +0 -0
  79. {basic_memory-0.17.6 → basic_memory-0.17.8}/docker-compose.yml +0 -0
  80. {basic_memory-0.17.6 → basic_memory-0.17.8}/docs/ARCHITECTURE.md +0 -0
  81. {basic_memory-0.17.6 → basic_memory-0.17.8}/docs/Docker.md +0 -0
  82. {basic_memory-0.17.6 → basic_memory-0.17.8}/docs/ai-assistant-guide-extended.md +0 -0
  83. {basic_memory-0.17.6 → basic_memory-0.17.8}/docs/character-handling.md +0 -0
  84. {basic_memory-0.17.6 → basic_memory-0.17.8}/docs/cloud-cli.md +0 -0
  85. {basic_memory-0.17.6 → basic_memory-0.17.8}/llms-install.md +0 -0
  86. {basic_memory-0.17.6 → basic_memory-0.17.8}/smithery.yaml +0 -0
  87. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/alembic.ini +0 -0
  88. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/env.py +0 -0
  89. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/migrations.py +0 -0
  90. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/script.py.mako +0 -0
  91. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
  92. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  93. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  94. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
  95. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
  96. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +0 -0
  97. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  98. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  99. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
  100. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  101. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  102. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  103. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
  104. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +0 -0
  105. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/__init__.py +0 -0
  106. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/app.py +0 -0
  107. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/container.py +0 -0
  108. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/__init__.py +0 -0
  109. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/directory_router.py +0 -0
  110. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/importer_router.py +0 -0
  111. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/knowledge_router.py +0 -0
  112. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/management_router.py +0 -0
  113. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/memory_router.py +0 -0
  114. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/prompt_router.py +0 -0
  115. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/search_router.py +0 -0
  116. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/routers/utils.py +0 -0
  117. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/template_loader.py +0 -0
  118. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/__init__.py +0 -0
  119. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/__init__.py +0 -0
  120. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
  121. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/importer_router.py +0 -0
  122. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/knowledge_router.py +0 -0
  123. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/memory_router.py +0 -0
  124. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/project_router.py +0 -0
  125. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/prompt_router.py +0 -0
  126. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/api/v2/routers/search_router.py +0 -0
  127. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/__init__.py +0 -0
  128. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/auth.py +0 -0
  129. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  130. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  131. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
  132. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  133. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/rclone_commands.py +0 -0
  134. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  135. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
  136. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  137. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  138. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/db.py +0 -0
  139. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/format.py +0 -0
  140. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  141. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  142. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  143. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  144. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/mcp.py +0 -0
  145. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/project.py +0 -0
  146. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/status.py +0 -0
  147. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/commands/tool.py +0 -0
  148. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/cli/container.py +0 -0
  149. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/db.py +0 -0
  150. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/__init__.py +0 -0
  151. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/config.py +0 -0
  152. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/db.py +0 -0
  153. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/importers.py +0 -0
  154. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/projects.py +0 -0
  155. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/repositories.py +0 -0
  156. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps/services.py +0 -0
  157. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/deps.py +0 -0
  158. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/file_utils.py +0 -0
  159. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/ignore_utils.py +0 -0
  160. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/__init__.py +0 -0
  161. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/base.py +0 -0
  162. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  163. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
  164. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  165. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/memory_json_importer.py +0 -0
  166. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/importers/utils.py +0 -0
  167. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/markdown/__init__.py +0 -0
  168. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/markdown/entity_parser.py +0 -0
  169. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/markdown/markdown_processor.py +0 -0
  170. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/markdown/plugins.py +0 -0
  171. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/markdown/schemas.py +0 -0
  172. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/__init__.py +0 -0
  173. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/async_client.py +0 -0
  174. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/__init__.py +0 -0
  175. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/directory.py +0 -0
  176. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/knowledge.py +0 -0
  177. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/memory.py +0 -0
  178. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/project.py +0 -0
  179. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/resource.py +0 -0
  180. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/clients/search.py +0 -0
  181. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/container.py +0 -0
  182. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/project_context.py +0 -0
  183. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  184. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  185. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  186. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  187. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/prompts/search.py +0 -0
  188. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/prompts/utils.py +0 -0
  189. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  190. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/resources/project_info.py +0 -0
  191. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/__init__.py +0 -0
  192. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/mcp/tools/utils.py +0 -0
  193. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/models/__init__.py +0 -0
  194. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/models/base.py +0 -0
  195. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/models/knowledge.py +0 -0
  196. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/models/project.py +0 -0
  197. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/models/search.py +0 -0
  198. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/project_resolver.py +0 -0
  199. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/__init__.py +0 -0
  200. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/entity_repository.py +0 -0
  201. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/observation_repository.py +0 -0
  202. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/postgres_search_repository.py +0 -0
  203. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/project_info_repository.py +0 -0
  204. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/relation_repository.py +0 -0
  205. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/repository.py +0 -0
  206. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/search_index_row.py +0 -0
  207. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/search_repository.py +0 -0
  208. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/search_repository_base.py +0 -0
  209. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/repository/sqlite_search_repository.py +0 -0
  210. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/runtime.py +0 -0
  211. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/__init__.py +0 -0
  212. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/base.py +0 -0
  213. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/cloud.py +0 -0
  214. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/delete.py +0 -0
  215. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/directory.py +0 -0
  216. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/importer.py +0 -0
  217. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/memory.py +0 -0
  218. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/project_info.py +0 -0
  219. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/prompt.py +0 -0
  220. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/request.py +0 -0
  221. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/response.py +0 -0
  222. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/search.py +0 -0
  223. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/sync_report.py +0 -0
  224. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/v2/__init__.py +0 -0
  225. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/v2/entity.py +0 -0
  226. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/schemas/v2/resource.py +0 -0
  227. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/__init__.py +0 -0
  228. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/context_service.py +0 -0
  229. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/directory_service.py +0 -0
  230. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/entity_service.py +0 -0
  231. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/exceptions.py +0 -0
  232. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/file_service.py +0 -0
  233. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/initialization.py +0 -0
  234. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/link_resolver.py +0 -0
  235. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/project_service.py +0 -0
  236. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/search_service.py +0 -0
  237. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/services/service.py +0 -0
  238. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/sync/__init__.py +0 -0
  239. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/sync/background_sync.py +0 -0
  240. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/sync/coordinator.py +0 -0
  241. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/sync/sync_service.py +0 -0
  242. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/sync/watch_service.py +0 -0
  243. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  244. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/templates/prompts/search.hbs +0 -0
  245. {basic_memory-0.17.6 → basic_memory-0.17.8}/src/basic_memory/utils.py +0 -0
  246. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/BENCHMARKS.md +0 -0
  247. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/cli/test_project_commands_integration.py +0 -0
  248. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/cli/test_version_integration.py +0 -0
  249. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/conftest.py +0 -0
  250. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_build_context_underscore.py +0 -0
  251. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_build_context_validation.py +0 -0
  252. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  253. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  254. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_delete_note_integration.py +0 -0
  255. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_edit_note_integration.py +0 -0
  256. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
  257. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_list_directory_integration.py +0 -0
  258. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_move_note_integration.py +0 -0
  259. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_project_management_integration.py +0 -0
  260. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_project_state_sync_integration.py +0 -0
  261. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_read_content_integration.py +0 -0
  262. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_read_note_integration.py +0 -0
  263. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_search_integration.py +0 -0
  264. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  265. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/mcp/test_write_note_integration.py +0 -0
  266. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/test_db_wal_mode.py +0 -0
  267. {basic_memory-0.17.6 → basic_memory-0.17.8}/test-int/test_disable_permalinks_integration.py +0 -0
  268. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/Non-MarkdownFileSupport.pdf +0 -0
  269. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/README.md +0 -0
  270. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/Screenshot.png +0 -0
  271. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/__init__.py +0 -0
  272. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/conftest.py +0 -0
  273. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_api_container.py +0 -0
  274. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_async_client.py +0 -0
  275. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_continue_conversation_template.py +0 -0
  276. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_directory_router.py +0 -0
  277. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_importer_router.py +0 -0
  278. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_knowledge_router.py +0 -0
  279. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_management_router.py +0 -0
  280. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_memory_router.py +0 -0
  281. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_project_router.py +0 -0
  282. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_project_router_operations.py +0 -0
  283. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_prompt_router.py +0 -0
  284. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_relation_background_resolution.py +0 -0
  285. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_resource_router.py +0 -0
  286. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_search_router.py +0 -0
  287. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_search_template.py +0 -0
  288. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_template_loader.py +0 -0
  289. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/test_template_loader_helpers.py +0 -0
  290. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/__init__.py +0 -0
  291. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/conftest.py +0 -0
  292. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_directory_router.py +0 -0
  293. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_importer_router.py +0 -0
  294. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_knowledge_router.py +0 -0
  295. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_memory_router.py +0 -0
  296. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_project_router.py +0 -0
  297. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_prompt_router.py +0 -0
  298. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_resource_router.py +0 -0
  299. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/api/v2/test_search_router.py +0 -0
  300. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/cloud/test_cloud_api_client_and_utils.py +0 -0
  301. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +0 -0
  302. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/cloud/test_upload_path.py +0 -0
  303. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/conftest.py +0 -0
  304. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_auth_cli_auth.py +0 -0
  305. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_cli_container.py +0 -0
  306. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_cli_exit.py +0 -0
  307. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_cli_tool_exit.py +0 -0
  308. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_cli_tools.py +0 -0
  309. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_cloud_authentication.py +0 -0
  310. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_ignore_utils.py +0 -0
  311. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_import_chatgpt.py +0 -0
  312. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_import_claude_conversations.py +0 -0
  313. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_import_claude_projects.py +0 -0
  314. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_import_memory_json.py +0 -0
  315. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_project_add_with_local_path.py +0 -0
  316. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/cli/test_upload.py +0 -0
  317. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/conftest.py +0 -0
  318. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  319. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/importers/test_conversation_indexing.py +0 -0
  320. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/importers/test_importer_base.py +0 -0
  321. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/importers/test_importer_utils.py +0 -0
  322. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/__init__.py +0 -0
  323. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  324. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_entity_parser.py +0 -0
  325. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  326. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_markdown_plugins.py +0 -0
  327. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_markdown_processor.py +0 -0
  328. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_observation_edge_cases.py +0 -0
  329. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_parser_edge_cases.py +0 -0
  330. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_relation_edge_cases.py +0 -0
  331. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/markdown/test_task_detection.py +0 -0
  332. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/clients/__init__.py +0 -0
  333. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/clients/test_clients.py +0 -0
  334. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/conftest.py +0 -0
  335. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_async_client_modes.py +0 -0
  336. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_mcp_container.py +0 -0
  337. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  338. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  339. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_project_context.py +0 -0
  340. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_prompts.py +0 -0
  341. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_recent_activity_prompt_modes.py +0 -0
  342. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_resources.py +0 -0
  343. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_server_lifespan_branches.py +0 -0
  344. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_build_context.py +0 -0
  345. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_canvas.py +0 -0
  346. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_delete_note.py +0 -0
  347. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_edit_note.py +0 -0
  348. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_list_directory.py +0 -0
  349. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_move_note.py +0 -0
  350. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_project_management.py +0 -0
  351. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_read_content.py +0 -0
  352. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_read_note.py +0 -0
  353. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_recent_activity.py +0 -0
  354. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_resource.py +0 -0
  355. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_search.py +0 -0
  356. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_utils.py +0 -0
  357. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_view_note.py +0 -0
  358. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_write_note.py +0 -0
  359. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/test_tool_write_note_kebab_filenames.py +0 -0
  360. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
  361. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_entity_repository.py +0 -0
  362. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_entity_repository_upsert.py +0 -0
  363. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_entity_upsert_issue_187.py +0 -0
  364. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_observation_repository.py +0 -0
  365. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_postgres_search_repository.py +0 -0
  366. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_project_info_repository.py +0 -0
  367. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_relation_repository.py +0 -0
  368. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_repository.py +0 -0
  369. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_search_repository.py +0 -0
  370. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
  371. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  372. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_memory_serialization.py +0 -0
  373. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_memory_url.py +0 -0
  374. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_memory_url_validation.py +0 -0
  375. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_relation_response_reference_resolution.py +0 -0
  376. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_schemas.py +0 -0
  377. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/schemas/test_search.py +0 -0
  378. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_context_service.py +0 -0
  379. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_directory_service.py +0 -0
  380. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_entity_service.py +0 -0
  381. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  382. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_file_service.py +0 -0
  383. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_initialization.py +0 -0
  384. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_initialization_cloud_mode_branches.py +0 -0
  385. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_link_resolver.py +0 -0
  386. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_project_removal_bug.py +0 -0
  387. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_project_service.py +0 -0
  388. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_project_service_operations.py +0 -0
  389. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/services/test_search_service.py +0 -0
  390. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_character_conflicts.py +0 -0
  391. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_coordinator.py +0 -0
  392. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_sync_service.py +0 -0
  393. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_sync_service_incremental.py +0 -0
  394. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_sync_wikilink_issue.py +0 -0
  395. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_tmp_files.py +0 -0
  396. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_watch_service.py +0 -0
  397. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_watch_service_atomic_adds.py +0 -0
  398. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_watch_service_edge_cases.py +0 -0
  399. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/sync/test_watch_service_reload.py +0 -0
  400. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/test_config.py +0 -0
  401. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/test_deps.py +0 -0
  402. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/test_production_cascade_delete.py +0 -0
  403. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/test_project_resolver.py +0 -0
  404. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/test_rclone_commands.py +0 -0
  405. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/test_runtime.py +0 -0
  406. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_file_utils.py +0 -0
  407. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  408. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_parse_tags.py +0 -0
  409. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_permalink_formatting.py +0 -0
  410. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_timezone_utils.py +0 -0
  411. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_utf8_handling.py +0 -0
  412. {basic_memory-0.17.6 → basic_memory-0.17.8}/tests/utils/test_validate_project_path.py +0 -0
@@ -78,6 +78,34 @@ The GitHub Actions workflow (`.github/workflows/release.yml`) then:
78
78
  2. Verify formula version matches release
79
79
  3. Test Homebrew installation: `brew install basicmachines-co/basic-memory/basic-memory`
80
80
 
81
+ #### MCP Registry Publication
82
+
83
+ After PyPI release is published, update the MCP registry:
84
+
85
+ 1. **Verify PyPI Release**
86
+ - Confirm package is live: https://pypi.org/project/basic-memory/<version>/
87
+ - The `server.json` version was auto-updated by `just release`
88
+
89
+ 2. **Publish to MCP Registry**
90
+ ```bash
91
+ cd /Users/drew/code/basic-memory
92
+ mcp-publisher publish
93
+ ```
94
+
95
+ If not authenticated:
96
+ ```bash
97
+ mcp-publisher login github
98
+ # Follow device authentication flow
99
+ mcp-publisher publish
100
+ ```
101
+
102
+ 3. **Verify Publication**
103
+ ```bash
104
+ curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=basic-memory"
105
+ ```
106
+
107
+ **Note:** The `mcp-publisher` CLI can be installed via Homebrew (`brew install mcp-publisher`) or from GitHub releases.
108
+
81
109
  #### Website Updates
82
110
 
83
111
  **1. basicmachines.co** (`/Users/drew/code/basicmachines.co`)
@@ -145,6 +173,7 @@ Before starting, verify:
145
173
  📋 GitHub Release: https://github.com/basicmachines-co/basic-memory/releases/tag/v0.13.2
146
174
  📦 PyPI: https://pypi.org/project/basic-memory/0.13.2/
147
175
  🍺 Homebrew: https://github.com/basicmachines-co/homebrew-basic-memory
176
+ 🔌 MCP Registry: https://registry.modelcontextprotocol.io
148
177
  🚀 GitHub Actions: Completed
149
178
 
150
179
  Install with pip/uv:
@@ -162,8 +191,9 @@ Users can now upgrade:
162
191
  - This creates production releases used by end users
163
192
  - Must pass all quality gates before proceeding
164
193
  - Uses the automated justfile target for consistency
165
- - Version is automatically updated in `__init__.py`
194
+ - Version is automatically updated in `__init__.py` and `server.json`
166
195
  - Triggers automated GitHub release with changelog
167
196
  - Package is published to PyPI for `pip` and `uv` users
168
197
  - Homebrew formula is automatically updated for stable releases
198
+ - MCP Registry is updated manually via `mcp-publisher publish`
169
199
  - Supports multiple installation methods (uv, pip, Homebrew)
@@ -54,3 +54,4 @@ ENV/
54
54
  claude-output
55
55
  **/.claude/settings.local.json
56
56
  .mcp.json
57
+ .mcpregistry_*
@@ -1,5 +1,42 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.17.8 (2026-01-24)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **#521**: Fix `get_default_project()` returning multiple results
8
+ ([`6888eff`](https://github.com/basicmachines-co/basic-memory/commit/6888eff))
9
+ - Query incorrectly matched any project with non-NULL `is_default` (both True and False)
10
+ - Now correctly checks for `is_default=True` only
11
+
12
+ ## v0.17.7 (2026-01-24)
13
+
14
+ ### Features
15
+
16
+ - **#476**: Add SPEC-29 Phase 3 bucket snapshot CLI commands
17
+ ([`369ad37`](https://github.com/basicmachines-co/basic-memory/commit/369ad37))
18
+ - New `basic-memory cloud snapshot` commands for managing cloud snapshots
19
+ - Commands: `create`, `list`, `delete`, `show`, `browse`
20
+
21
+ - **#515**: Add MCP registry publication files
22
+ ([`7a502e6`](https://github.com/basicmachines-co/basic-memory/commit/7a502e6))
23
+
24
+ ### Bug Fixes
25
+
26
+ - **#520**: Read default project from database in cloud mode
27
+ ([`38616c3`](https://github.com/basicmachines-co/basic-memory/commit/38616c3))
28
+
29
+ - **#513**: Ensure external_id is set on entity creation
30
+ ([`c7835a9`](https://github.com/basicmachines-co/basic-memory/commit/c7835a9))
31
+
32
+ ### Internal
33
+
34
+ - **#514**: Remove OpenPanel telemetry
35
+ ([`85835ae`](https://github.com/basicmachines-co/basic-memory/commit/85835ae))
36
+
37
+ - Update README links to point to basicmemory.com
38
+ ([`2aaee73`](https://github.com/basicmachines-co/basic-memory/commit/2aaee73))
39
+
3
40
  ## v0.17.6 (2026-01-17)
4
41
 
5
42
  ### Bug Fixes
@@ -240,6 +240,8 @@ See SPEC-16 for full context manager refactor details.
240
240
  - Logout: `basic-memory cloud logout`
241
241
  - Check cloud status: `basic-memory cloud status`
242
242
  - Setup cloud sync: `basic-memory cloud setup`
243
+ - Manage snapshots: `basic-memory cloud snapshot [create|list|delete|show|browse]`
244
+ - Restore from snapshot: `basic-memory cloud restore <path> --snapshot <id>`
243
245
 
244
246
  ### MCP Capabilities
245
247
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.17.6
3
+ Version: 0.17.8
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
@@ -26,7 +26,6 @@ Requires-Dist: mdformat-frontmatter>=2.0.8
26
26
  Requires-Dist: mdformat-gfm>=0.3.7
27
27
  Requires-Dist: mdformat>=0.7.22
28
28
  Requires-Dist: nest-asyncio>=1.6.0
29
- Requires-Dist: openpanel>=0.0.1
30
29
  Requires-Dist: pillow>=11.1.0
31
30
  Requires-Dist: psycopg==3.3.1
32
31
  Requires-Dist: pybars3>=0.9.7
@@ -47,6 +46,7 @@ Requires-Dist: unidecode>=1.3.8
47
46
  Requires-Dist: watchfiles>=1.0.4
48
47
  Description-Content-Type: text/markdown
49
48
 
49
+ <!-- mcp-name: io.github.basicmachines-co/basic-memory -->
50
50
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
51
51
  [![PyPI version](https://badge.fury.io/py/basic-memory.svg)](https://badge.fury.io/py/basic-memory)
52
52
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
@@ -54,7 +54,6 @@ Description-Content-Type: text/markdown
54
54
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
55
55
  ![](https://badge.mcpx.dev?type=server 'MCP Server')
56
56
  ![](https://badge.mcpx.dev?type=dev 'MCP Dev')
57
- [![smithery badge](https://smithery.ai/badge/@basicmachines-co/basic-memory)](https://smithery.ai/server/@basicmachines-co/basic-memory)
58
57
 
59
58
  ## 🚀 Basic Memory Cloud is Live!
60
59
 
@@ -62,7 +61,7 @@ Description-Content-Type: text/markdown
62
61
  - **Early Supporter Pricing:** Early users get 25% off forever.
63
62
  The open source project continues as always. Cloud just makes it work everywhere.
64
63
 
65
- [Sign up now →](https://basicmemory.com/beta)
64
+ [Sign up now →](https://basicmemory.com)
66
65
 
67
66
  with a 7 day free trial
68
67
 
@@ -72,8 +71,8 @@ Basic Memory lets you build persistent knowledge through natural conversations w
72
71
  Claude, while keeping everything in simple Markdown files on your computer. It uses the Model Context Protocol (MCP) to
73
72
  enable any compatible LLM to read and write to your local knowledge base.
74
73
 
75
- - Website: https://basicmachines.co
76
- - Documentation: https://memory.basicmachines.co
74
+ - Website: https://basicmemory.com
75
+ - Documentation: https://docs.basicmemory.com
77
76
 
78
77
  ## Pick up your conversation right where you left off
79
78
 
@@ -111,24 +110,6 @@ uv tool install basic-memory
111
110
 
112
111
  You can view shared context via files in `~/basic-memory` (default directory location).
113
112
 
114
- ### Alternative Installation via Smithery
115
-
116
- You can use [Smithery](https://smithery.ai/server/@basicmachines-co/basic-memory) to automatically configure Basic
117
- Memory for Claude Desktop:
118
-
119
- ```bash
120
- npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
121
- ```
122
-
123
- This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. The
124
- Smithery server hosts the MCP server component, while your data remains stored locally as Markdown files.
125
-
126
- ### Glama.ai
127
-
128
- <a href="https://glama.ai/mcp/servers/o90kttu9ym">
129
- <img width="380" height="200" src="https://glama.ai/mcp/servers/o90kttu9ym/badge" alt="basic-memory MCP server" />
130
- </a>
131
-
132
113
  ## Why Basic Memory?
133
114
 
134
115
  Most LLM interactions are ephemeral - you ask a question, get an answer, and everything is forgotten. Each conversation
@@ -474,7 +455,7 @@ canvas(nodes, edges, title, folder) - Generate knowledge visualizations
474
455
 
475
456
  ## Futher info
476
457
 
477
- See the [Documentation](https://memory.basicmachines.co/) for more info, including:
458
+ See the [Documentation](https://docs.basicmemory.com) for more info, including:
478
459
 
479
460
  - [Complete User Guide](https://docs.basicmemory.com/user-guide/)
480
461
  - [CLI tools](https://docs.basicmemory.com/guides/cli-reference/)
@@ -515,39 +496,6 @@ tail -f ~/.basic-memory/basic-memory.log
515
496
  BASIC_MEMORY_CLOUD_MODE=true uvicorn basic_memory.api.app:app
516
497
  ```
517
498
 
518
- ## Telemetry
519
-
520
- Basic Memory collects anonymous usage statistics to help improve the software. This follows the [Homebrew model](https://docs.brew.sh/Analytics) - telemetry is on by default with easy opt-out.
521
-
522
- **What we collect:**
523
- - App version, Python version, OS, architecture
524
- - Feature usage (which MCP tools and CLI commands are used)
525
- - Error types (sanitized - no file paths or personal data)
526
-
527
- **What we NEVER collect:**
528
- - Note content, file names, or paths
529
- - Personal information
530
- - IP addresses
531
-
532
- **Opting out:**
533
- ```bash
534
- # Disable telemetry
535
- basic-memory telemetry disable
536
-
537
- # Check status
538
- basic-memory telemetry status
539
-
540
- # Re-enable
541
- basic-memory telemetry enable
542
- ```
543
-
544
- Or set the environment variable:
545
- ```bash
546
- export BASIC_MEMORY_TELEMETRY_ENABLED=false
547
- ```
548
-
549
- For more details, see the [Telemetry documentation](https://basicmemory.com/telemetry).
550
-
551
499
  ## Development
552
500
 
553
501
  ### Running Tests
@@ -1,3 +1,4 @@
1
+ <!-- mcp-name: io.github.basicmachines-co/basic-memory -->
1
2
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
2
3
  [![PyPI version](https://badge.fury.io/py/basic-memory.svg)](https://badge.fury.io/py/basic-memory)
3
4
  [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
@@ -5,7 +6,6 @@
5
6
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
6
7
  ![](https://badge.mcpx.dev?type=server 'MCP Server')
7
8
  ![](https://badge.mcpx.dev?type=dev 'MCP Dev')
8
- [![smithery badge](https://smithery.ai/badge/@basicmachines-co/basic-memory)](https://smithery.ai/server/@basicmachines-co/basic-memory)
9
9
 
10
10
  ## 🚀 Basic Memory Cloud is Live!
11
11
 
@@ -13,7 +13,7 @@
13
13
  - **Early Supporter Pricing:** Early users get 25% off forever.
14
14
  The open source project continues as always. Cloud just makes it work everywhere.
15
15
 
16
- [Sign up now →](https://basicmemory.com/beta)
16
+ [Sign up now →](https://basicmemory.com)
17
17
 
18
18
  with a 7 day free trial
19
19
 
@@ -23,8 +23,8 @@ Basic Memory lets you build persistent knowledge through natural conversations w
23
23
  Claude, while keeping everything in simple Markdown files on your computer. It uses the Model Context Protocol (MCP) to
24
24
  enable any compatible LLM to read and write to your local knowledge base.
25
25
 
26
- - Website: https://basicmachines.co
27
- - Documentation: https://memory.basicmachines.co
26
+ - Website: https://basicmemory.com
27
+ - Documentation: https://docs.basicmemory.com
28
28
 
29
29
  ## Pick up your conversation right where you left off
30
30
 
@@ -62,24 +62,6 @@ uv tool install basic-memory
62
62
 
63
63
  You can view shared context via files in `~/basic-memory` (default directory location).
64
64
 
65
- ### Alternative Installation via Smithery
66
-
67
- You can use [Smithery](https://smithery.ai/server/@basicmachines-co/basic-memory) to automatically configure Basic
68
- Memory for Claude Desktop:
69
-
70
- ```bash
71
- npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
72
- ```
73
-
74
- This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. The
75
- Smithery server hosts the MCP server component, while your data remains stored locally as Markdown files.
76
-
77
- ### Glama.ai
78
-
79
- <a href="https://glama.ai/mcp/servers/o90kttu9ym">
80
- <img width="380" height="200" src="https://glama.ai/mcp/servers/o90kttu9ym/badge" alt="basic-memory MCP server" />
81
- </a>
82
-
83
65
  ## Why Basic Memory?
84
66
 
85
67
  Most LLM interactions are ephemeral - you ask a question, get an answer, and everything is forgotten. Each conversation
@@ -425,7 +407,7 @@ canvas(nodes, edges, title, folder) - Generate knowledge visualizations
425
407
 
426
408
  ## Futher info
427
409
 
428
- See the [Documentation](https://memory.basicmachines.co/) for more info, including:
410
+ See the [Documentation](https://docs.basicmemory.com) for more info, including:
429
411
 
430
412
  - [Complete User Guide](https://docs.basicmemory.com/user-guide/)
431
413
  - [CLI tools](https://docs.basicmemory.com/guides/cli-reference/)
@@ -466,39 +448,6 @@ tail -f ~/.basic-memory/basic-memory.log
466
448
  BASIC_MEMORY_CLOUD_MODE=true uvicorn basic_memory.api.app:app
467
449
  ```
468
450
 
469
- ## Telemetry
470
-
471
- Basic Memory collects anonymous usage statistics to help improve the software. This follows the [Homebrew model](https://docs.brew.sh/Analytics) - telemetry is on by default with easy opt-out.
472
-
473
- **What we collect:**
474
- - App version, Python version, OS, architecture
475
- - Feature usage (which MCP tools and CLI commands are used)
476
- - Error types (sanitized - no file paths or personal data)
477
-
478
- **What we NEVER collect:**
479
- - Note content, file names, or paths
480
- - Personal information
481
- - IP addresses
482
-
483
- **Opting out:**
484
- ```bash
485
- # Disable telemetry
486
- basic-memory telemetry disable
487
-
488
- # Check status
489
- basic-memory telemetry status
490
-
491
- # Re-enable
492
- basic-memory telemetry enable
493
- ```
494
-
495
- Or set the environment variable:
496
- ```bash
497
- export BASIC_MEMORY_TELEMETRY_ENABLED=false
498
- ```
499
-
500
- For more details, see the [Telemetry documentation](https://basicmemory.com/telemetry).
501
-
502
451
  ## Development
503
452
 
504
453
  ### Running Tests
@@ -8,9 +8,8 @@ To keep the default CI signal **stable and meaningful**, the default `pytest` co
8
8
  - highly environment-dependent (OS/DB tuning)
9
9
  - inherently interactive (CLI)
10
10
  - background-task orchestration (watchers/sync runners)
11
- - external analytics
12
11
 
13
- ### Whats excluded (and why)
12
+ ### What's excluded (and why)
14
13
 
15
14
  Coverage excludes are configured in `pyproject.toml` under `[tool.coverage.report].omit`.
16
15
 
@@ -19,7 +18,6 @@ Current exclusions include:
19
18
  - `src/basic_memory/db.py`: platform/backend tuning paths (SQLite/Postgres/Windows), covered by integration tests and targeted runs.
20
19
  - `src/basic_memory/services/initialization.py`: startup orchestration/background tasks; covered indirectly by app/MCP entrypoints.
21
20
  - `src/basic_memory/sync/sync_service.py`: heavy filesystem↔DB integration; validated in integration suite (not enforced in unit coverage).
22
- - `src/basic_memory/telemetry.py`: external analytics; exercised lightly but excluded from strict coverage gate.
23
21
 
24
22
  ### Recommended additional runs
25
23
 
@@ -204,9 +204,14 @@ release version:
204
204
  echo "📝 Updating version in __init__.py..."
205
205
  sed -i.bak "s/__version__ = \".*\"/__version__ = \"$VERSION_NUM\"/" src/basic_memory/__init__.py
206
206
  rm -f src/basic_memory/__init__.py.bak
207
-
207
+
208
+ # Update version in server.json (MCP registry metadata)
209
+ echo "📝 Updating version in server.json..."
210
+ sed -i.bak "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION_NUM\"/g" server.json
211
+ rm -f server.json.bak
212
+
208
213
  # Commit version update
209
- git add src/basic_memory/__init__.py
214
+ git add src/basic_memory/__init__.py server.json
210
215
  git commit -m "chore: update version to $VERSION_NUM for {{version}} release"
211
216
 
212
217
  # Create and push tag
@@ -221,9 +226,10 @@ release version:
221
226
  echo "📦 GitHub Actions will build and publish to PyPI"
222
227
  echo "🔗 Monitor at: https://github.com/basicmachines-co/basic-memory/actions"
223
228
  echo ""
224
- echo "📝 REMINDER: Update documentation sites after release is published:"
229
+ echo "📝 REMINDER: Post-release tasks:"
225
230
  echo " 1. docs.basicmemory.com - Add release notes to src/pages/latest-releases.mdx"
226
231
  echo " 2. basicmachines.co - Update version in src/components/sections/hero.tsx"
232
+ echo " 3. MCP Registry - Run: mcp-publisher publish"
227
233
  echo " See: .claude/commands/release/release.md for detailed instructions"
228
234
 
229
235
  # Create a beta release (e.g., just beta v0.13.2b1)
@@ -269,9 +275,14 @@ beta version:
269
275
  echo "📝 Updating version in __init__.py..."
270
276
  sed -i.bak "s/__version__ = \".*\"/__version__ = \"$VERSION_NUM\"/" src/basic_memory/__init__.py
271
277
  rm -f src/basic_memory/__init__.py.bak
272
-
278
+
279
+ # Update version in server.json (MCP registry metadata)
280
+ echo "📝 Updating version in server.json..."
281
+ sed -i.bak "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION_NUM\"/g" server.json
282
+ rm -f server.json.bak
283
+
273
284
  # Commit version update
274
- git add src/basic_memory/__init__.py
285
+ git add src/basic_memory/__init__.py server.json
275
286
  git commit -m "chore: update version to $VERSION_NUM for {{version}} beta release"
276
287
 
277
288
  # Create and push tag
@@ -41,7 +41,6 @@ dependencies = [
41
41
  "mdformat>=0.7.22",
42
42
  "mdformat-gfm>=0.3.7",
43
43
  "mdformat-frontmatter>=2.0.8",
44
- "openpanel>=0.0.1", # Anonymous usage telemetry (Homebrew-style opt-out)
45
44
  "sniffio>=1.3.1",
46
45
  "anyio>=4.10.0",
47
46
  "httpx>=0.28.0",
@@ -143,6 +142,5 @@ omit = [
143
142
  "*/db.py", # Backend/runtime-dependent (sqlite/postgres/windows tuning); validated via integration tests
144
143
  "*/services/initialization.py", # Startup orchestration + background tasks (watchers); exercised indirectly in entrypoints
145
144
  "*/sync/sync_service.py", # Heavy filesystem/db integration; covered by integration suite, not enforced in unit coverage
146
- "*/telemetry.py", # External analytics; tested lightly, excluded from strict coverage target
147
145
  "*/services/migration_service.py", # Complex migration scenarios
148
146
  ]
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.basicmachines-co/basic-memory",
4
+ "description": "Local-first knowledge management with bi-directional LLM sync via Markdown files.",
5
+ "repository": {
6
+ "url": "https://github.com/basicmachines-co/basic-memory.git",
7
+ "source": "github"
8
+ },
9
+ "version": "0.17.8",
10
+ "packages": [
11
+ {
12
+ "registryType": "pypi",
13
+ "identifier": "basic-memory",
14
+ "version": "0.17.8",
15
+ "runtimeHint": "uvx",
16
+ "runtimeArguments": [
17
+ {"type": "positional", "value": "basic-memory"},
18
+ {"type": "positional", "value": "mcp"}
19
+ ],
20
+ "transport": {
21
+ "type": "stdio"
22
+ }
23
+ }
24
+ ]
25
+ }
@@ -1,7 +1,7 @@
1
1
  """basic-memory - Local-first knowledge management combining Zettelkasten with knowledge graphs"""
2
2
 
3
3
  # Package version - updated by release automation
4
- __version__ = "0.17.6"
4
+ __version__ = "0.17.8"
5
5
 
6
6
  # API version for FastAPI - independent of package version
7
7
  __api_version__ = "v0"
@@ -322,7 +322,14 @@ async def remove_project(
322
322
  ) # pragma: no cover
323
323
 
324
324
  # Check if trying to delete the default project
325
- if name == project_service.default_project:
325
+ # In cloud mode, database is source of truth; in local mode, check config
326
+ config_default = project_service.default_project
327
+ db_default = await project_service.repository.get_default_project()
328
+
329
+ # Use database default if available, otherwise fall back to config default
330
+ default_project_name = db_default.name if db_default else config_default
331
+
332
+ if name == default_project_name:
326
333
  available_projects = await project_service.list_projects()
327
334
  other_projects = [p.name for p in available_projects if p.name != name]
328
335
  detail = f"Cannot delete default project '{name}'. "
@@ -418,8 +425,13 @@ async def get_default_project(
418
425
  Returns:
419
426
  Response with project default information
420
427
  """
421
- # Get the old default project
422
- default_name = project_service.default_project
428
+ # Get the default project
429
+ # In cloud mode, database is source of truth; in local mode, check config
430
+ config_default = project_service.default_project
431
+ db_default = await project_service.repository.get_default_project()
432
+
433
+ # Use database default if available, otherwise fall back to config default
434
+ default_name = db_default.name if db_default else config_default
423
435
  default_project = await project_service.get_project(default_name)
424
436
  if not default_project: # pragma: no cover
425
437
  raise HTTPException( # pragma: no cover
@@ -1,6 +1,7 @@
1
1
  """Routes for getting entity content."""
2
2
 
3
3
  import tempfile
4
+ import uuid
4
5
  from pathlib import Path
5
6
  from typing import Annotated, Union
6
7
 
@@ -218,7 +219,9 @@ async def write_resource(
218
219
  status_code = 200
219
220
  else:
220
221
  # Create a new entity model
222
+ # Explicitly set external_id to ensure NOT NULL constraint is satisfied (fixes #512)
221
223
  entity = EntityModel(
224
+ external_id=str(uuid.uuid4()),
222
225
  title=file_name,
223
226
  entity_type=entity_type,
224
227
  content_type=content_type,
@@ -9,6 +9,7 @@ Key differences from v1:
9
9
  - More RESTful: POST for create, PUT for update, GET for read
10
10
  """
11
11
 
12
+ import uuid
12
13
  from pathlib import Path as PathLib
13
14
 
14
15
  from fastapi import APIRouter, HTTPException, Response, Path
@@ -147,7 +148,9 @@ async def create_resource(
147
148
  entity_type = "canvas" if data.file_path.endswith(".canvas") else "file"
148
149
 
149
150
  # Create a new entity model
151
+ # Explicitly set external_id to ensure NOT NULL constraint is satisfied (fixes #512)
150
152
  entity = EntityModel(
153
+ external_id=str(uuid.uuid4()),
151
154
  title=file_name,
152
155
  entity_type=entity_type,
153
156
  content_type=content_type,
@@ -10,7 +10,6 @@ import typer # noqa: E402
10
10
 
11
11
  from basic_memory.cli.container import CliContainer, set_container # noqa: E402
12
12
  from basic_memory.config import init_cli_logging # noqa: E402
13
- from basic_memory.telemetry import show_notice_if_needed, track_app_started # noqa: E402
14
13
 
15
14
 
16
15
  def version_callback(value: bool) -> None:
@@ -47,13 +46,6 @@ def app_callback(
47
46
  container = CliContainer.create()
48
47
  set_container(container)
49
48
 
50
- # Show telemetry notice and track CLI startup
51
- # Skip for 'mcp' command - it handles its own telemetry in lifespan
52
- # Skip for 'telemetry' command - avoid issues when user is managing telemetry
53
- if ctx.invoked_subcommand not in {"mcp", "telemetry"}:
54
- show_notice_if_needed()
55
- track_app_started("cli")
56
-
57
49
  # Run initialization for commands that don't use the API
58
50
  # Skip for 'mcp' command - it has its own lifespan that handles initialization
59
51
  # Skip for API-using commands (status, sync, etc.) - they handle initialization via deps.py
@@ -1,7 +1,7 @@
1
1
  """CLI commands for basic-memory."""
2
2
 
3
3
  from . import status, db, import_memory_json, mcp, import_claude_conversations
4
- from . import import_claude_projects, import_chatgpt, tool, project, format, telemetry
4
+ from . import import_claude_projects, import_chatgpt, tool, project, format
5
5
 
6
6
  __all__ = [
7
7
  "status",
@@ -14,5 +14,4 @@ __all__ = [
14
14
  "tool",
15
15
  "project",
16
16
  "format",
17
- "telemetry",
18
17
  ]
@@ -1,6 +1,16 @@
1
1
  """Cloud commands package."""
2
2
 
3
+ from basic_memory.cli.app import cloud_app
4
+
3
5
  # Import all commands to register them with typer
4
6
  from basic_memory.cli.commands.cloud.core_commands import * # noqa: F401,F403
5
7
  from basic_memory.cli.commands.cloud.api_client import get_authenticated_headers, get_cloud_config # noqa: F401
6
8
  from basic_memory.cli.commands.cloud.upload_command import * # noqa: F401,F403
9
+
10
+ # Register snapshot sub-command group
11
+ from basic_memory.cli.commands.cloud.snapshot import snapshot_app
12
+
13
+ cloud_app.add_typer(snapshot_app, name="snapshot")
14
+
15
+ # Register restore command (directly on cloud_app via decorator)
16
+ from basic_memory.cli.commands.cloud.restore import restore # noqa: F401, E402