basic-memory 0.17.8__tar.gz → 0.17.9__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 (409) hide show
  1. {basic_memory-0.17.8 → basic_memory-0.17.9}/CHANGELOG.md +9 -0
  2. {basic_memory-0.17.8 → basic_memory-0.17.9}/PKG-INFO +1 -1
  3. {basic_memory-0.17.8 → basic_memory-0.17.9}/server.json +2 -2
  4. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/__init__.py +1 -1
  5. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/project_service.py +7 -2
  6. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_project_service.py +181 -0
  7. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/commands/release/beta.md +0 -0
  8. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/commands/release/changelog.md +0 -0
  9. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/commands/release/release-check.md +0 -0
  10. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/commands/release/release.md +0 -0
  11. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/commands/spec.md +0 -0
  12. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/commands/test-live.md +0 -0
  13. {basic_memory-0.17.8 → basic_memory-0.17.9}/.claude/settings.json +0 -0
  14. {basic_memory-0.17.8 → basic_memory-0.17.9}/.dockerignore +0 -0
  15. {basic_memory-0.17.8 → basic_memory-0.17.9}/.env.example +0 -0
  16. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  18. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  19. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  20. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/dependabot.yml +0 -0
  21. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/claude-code-review.yml +0 -0
  22. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/claude-issue-triage.yml +0 -0
  23. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/claude.yml +0 -0
  24. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/dev-release.yml +0 -0
  25. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/docker.yml +0 -0
  26. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/pr-title.yml +0 -0
  27. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/release.yml +0 -0
  28. {basic_memory-0.17.8 → basic_memory-0.17.9}/.github/workflows/test.yml +0 -0
  29. {basic_memory-0.17.8 → basic_memory-0.17.9}/.gitignore +0 -0
  30. {basic_memory-0.17.8 → basic_memory-0.17.9}/.python-version +0 -0
  31. {basic_memory-0.17.8 → basic_memory-0.17.9}/CITATION.cff +0 -0
  32. {basic_memory-0.17.8 → basic_memory-0.17.9}/CLA.md +0 -0
  33. {basic_memory-0.17.8 → basic_memory-0.17.9}/CLAUDE.md +0 -0
  34. {basic_memory-0.17.8 → basic_memory-0.17.9}/CODE_OF_CONDUCT.md +0 -0
  35. {basic_memory-0.17.8 → basic_memory-0.17.9}/CONTRIBUTING.md +0 -0
  36. {basic_memory-0.17.8 → basic_memory-0.17.9}/Dockerfile +0 -0
  37. {basic_memory-0.17.8 → basic_memory-0.17.9}/LICENSE +0 -0
  38. {basic_memory-0.17.8 → basic_memory-0.17.9}/README.md +0 -0
  39. {basic_memory-0.17.8 → basic_memory-0.17.9}/SECURITY.md +0 -0
  40. {basic_memory-0.17.8 → basic_memory-0.17.9}/docker-compose-postgres.yml +0 -0
  41. {basic_memory-0.17.8 → basic_memory-0.17.9}/docker-compose.yml +0 -0
  42. {basic_memory-0.17.8 → basic_memory-0.17.9}/docs/ARCHITECTURE.md +0 -0
  43. {basic_memory-0.17.8 → basic_memory-0.17.9}/docs/Docker.md +0 -0
  44. {basic_memory-0.17.8 → basic_memory-0.17.9}/docs/ai-assistant-guide-extended.md +0 -0
  45. {basic_memory-0.17.8 → basic_memory-0.17.9}/docs/character-handling.md +0 -0
  46. {basic_memory-0.17.8 → basic_memory-0.17.9}/docs/cloud-cli.md +0 -0
  47. {basic_memory-0.17.8 → basic_memory-0.17.9}/docs/testing-coverage.md +0 -0
  48. {basic_memory-0.17.8 → basic_memory-0.17.9}/justfile +0 -0
  49. {basic_memory-0.17.8 → basic_memory-0.17.9}/llms-install.md +0 -0
  50. {basic_memory-0.17.8 → basic_memory-0.17.9}/pyproject.toml +0 -0
  51. {basic_memory-0.17.8 → basic_memory-0.17.9}/smithery.yaml +0 -0
  52. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/alembic.ini +0 -0
  53. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/env.py +0 -0
  54. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/migrations.py +0 -0
  55. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/script.py.mako +0 -0
  56. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
  57. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  58. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  59. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
  60. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
  61. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +0 -0
  62. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  63. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  64. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
  65. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  66. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  67. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  68. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
  69. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +0 -0
  70. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/__init__.py +0 -0
  71. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/app.py +0 -0
  72. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/container.py +0 -0
  73. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/__init__.py +0 -0
  74. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/directory_router.py +0 -0
  75. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/importer_router.py +0 -0
  76. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/knowledge_router.py +0 -0
  77. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/management_router.py +0 -0
  78. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/memory_router.py +0 -0
  79. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/project_router.py +0 -0
  80. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/prompt_router.py +0 -0
  81. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/resource_router.py +0 -0
  82. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/search_router.py +0 -0
  83. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/routers/utils.py +0 -0
  84. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/template_loader.py +0 -0
  85. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/__init__.py +0 -0
  86. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/__init__.py +0 -0
  87. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
  88. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/importer_router.py +0 -0
  89. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/knowledge_router.py +0 -0
  90. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/memory_router.py +0 -0
  91. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/project_router.py +0 -0
  92. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/prompt_router.py +0 -0
  93. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
  94. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/api/v2/routers/search_router.py +0 -0
  95. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/__init__.py +0 -0
  96. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/app.py +0 -0
  97. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/auth.py +0 -0
  98. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/__init__.py +0 -0
  99. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  100. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  101. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  102. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
  103. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  104. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/rclone_commands.py +0 -0
  105. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  106. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
  107. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/restore.py +0 -0
  108. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/schemas.py +0 -0
  109. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/snapshot.py +0 -0
  110. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  111. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  112. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/command_utils.py +0 -0
  113. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/db.py +0 -0
  114. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/format.py +0 -0
  115. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  116. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  117. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  118. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  119. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/mcp.py +0 -0
  120. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/project.py +0 -0
  121. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/status.py +0 -0
  122. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/commands/tool.py +0 -0
  123. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/container.py +0 -0
  124. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/cli/main.py +0 -0
  125. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/config.py +0 -0
  126. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/db.py +0 -0
  127. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/__init__.py +0 -0
  128. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/config.py +0 -0
  129. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/db.py +0 -0
  130. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/importers.py +0 -0
  131. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/projects.py +0 -0
  132. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/repositories.py +0 -0
  133. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps/services.py +0 -0
  134. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/deps.py +0 -0
  135. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/file_utils.py +0 -0
  136. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/ignore_utils.py +0 -0
  137. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/__init__.py +0 -0
  138. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/base.py +0 -0
  139. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  140. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
  141. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  142. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/memory_json_importer.py +0 -0
  143. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/importers/utils.py +0 -0
  144. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/markdown/__init__.py +0 -0
  145. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/markdown/entity_parser.py +0 -0
  146. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/markdown/markdown_processor.py +0 -0
  147. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/markdown/plugins.py +0 -0
  148. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/markdown/schemas.py +0 -0
  149. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/markdown/utils.py +0 -0
  150. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/__init__.py +0 -0
  151. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/async_client.py +0 -0
  152. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/__init__.py +0 -0
  153. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/directory.py +0 -0
  154. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/knowledge.py +0 -0
  155. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/memory.py +0 -0
  156. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/project.py +0 -0
  157. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/resource.py +0 -0
  158. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/clients/search.py +0 -0
  159. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/container.py +0 -0
  160. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/project_context.py +0 -0
  161. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  162. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  163. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  164. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  165. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/prompts/search.py +0 -0
  166. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/prompts/utils.py +0 -0
  167. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  168. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/resources/project_info.py +0 -0
  169. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/server.py +0 -0
  170. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/__init__.py +0 -0
  171. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/build_context.py +0 -0
  172. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/canvas.py +0 -0
  173. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
  174. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/delete_note.py +0 -0
  175. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/edit_note.py +0 -0
  176. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/list_directory.py +0 -0
  177. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/move_note.py +0 -0
  178. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/project_management.py +0 -0
  179. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/read_content.py +0 -0
  180. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/read_note.py +0 -0
  181. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
  182. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/search.py +0 -0
  183. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/utils.py +0 -0
  184. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/view_note.py +0 -0
  185. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/mcp/tools/write_note.py +0 -0
  186. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/models/__init__.py +0 -0
  187. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/models/base.py +0 -0
  188. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/models/knowledge.py +0 -0
  189. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/models/project.py +0 -0
  190. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/models/search.py +0 -0
  191. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/project_resolver.py +0 -0
  192. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/__init__.py +0 -0
  193. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/entity_repository.py +0 -0
  194. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/observation_repository.py +0 -0
  195. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/postgres_search_repository.py +0 -0
  196. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/project_info_repository.py +0 -0
  197. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/project_repository.py +0 -0
  198. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/relation_repository.py +0 -0
  199. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/repository.py +0 -0
  200. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/search_index_row.py +0 -0
  201. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/search_repository.py +0 -0
  202. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/search_repository_base.py +0 -0
  203. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/repository/sqlite_search_repository.py +0 -0
  204. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/runtime.py +0 -0
  205. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/__init__.py +0 -0
  206. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/base.py +0 -0
  207. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/cloud.py +0 -0
  208. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/delete.py +0 -0
  209. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/directory.py +0 -0
  210. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/importer.py +0 -0
  211. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/memory.py +0 -0
  212. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/project_info.py +0 -0
  213. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/prompt.py +0 -0
  214. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/request.py +0 -0
  215. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/response.py +0 -0
  216. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/search.py +0 -0
  217. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/sync_report.py +0 -0
  218. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/v2/__init__.py +0 -0
  219. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/v2/entity.py +0 -0
  220. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/schemas/v2/resource.py +0 -0
  221. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/__init__.py +0 -0
  222. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/context_service.py +0 -0
  223. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/directory_service.py +0 -0
  224. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/entity_service.py +0 -0
  225. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/exceptions.py +0 -0
  226. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/file_service.py +0 -0
  227. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/initialization.py +0 -0
  228. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/link_resolver.py +0 -0
  229. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/search_service.py +0 -0
  230. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/services/service.py +0 -0
  231. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/sync/__init__.py +0 -0
  232. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/sync/background_sync.py +0 -0
  233. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/sync/coordinator.py +0 -0
  234. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/sync/sync_service.py +0 -0
  235. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/sync/watch_service.py +0 -0
  236. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  237. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/templates/prompts/search.hbs +0 -0
  238. {basic_memory-0.17.8 → basic_memory-0.17.9}/src/basic_memory/utils.py +0 -0
  239. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/BENCHMARKS.md +0 -0
  240. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/cli/test_project_commands_integration.py +0 -0
  241. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/cli/test_version_integration.py +0 -0
  242. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/conftest.py +0 -0
  243. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_build_context_underscore.py +0 -0
  244. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_build_context_validation.py +0 -0
  245. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  246. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  247. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_delete_note_integration.py +0 -0
  248. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_edit_note_integration.py +0 -0
  249. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
  250. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_list_directory_integration.py +0 -0
  251. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_move_note_integration.py +0 -0
  252. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_project_management_integration.py +0 -0
  253. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_project_state_sync_integration.py +0 -0
  254. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_read_content_integration.py +0 -0
  255. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_read_note_integration.py +0 -0
  256. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_search_integration.py +0 -0
  257. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  258. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/mcp/test_write_note_integration.py +0 -0
  259. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/test_db_wal_mode.py +0 -0
  260. {basic_memory-0.17.8 → basic_memory-0.17.9}/test-int/test_disable_permalinks_integration.py +0 -0
  261. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/Non-MarkdownFileSupport.pdf +0 -0
  262. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/README.md +0 -0
  263. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/Screenshot.png +0 -0
  264. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/__init__.py +0 -0
  265. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/conftest.py +0 -0
  266. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_api_container.py +0 -0
  267. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_async_client.py +0 -0
  268. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_continue_conversation_template.py +0 -0
  269. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_directory_router.py +0 -0
  270. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_importer_router.py +0 -0
  271. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_knowledge_router.py +0 -0
  272. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_management_router.py +0 -0
  273. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_memory_router.py +0 -0
  274. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_project_router.py +0 -0
  275. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_project_router_operations.py +0 -0
  276. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_prompt_router.py +0 -0
  277. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_relation_background_resolution.py +0 -0
  278. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_resource_router.py +0 -0
  279. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_search_router.py +0 -0
  280. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_search_template.py +0 -0
  281. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_template_loader.py +0 -0
  282. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/test_template_loader_helpers.py +0 -0
  283. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/__init__.py +0 -0
  284. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/conftest.py +0 -0
  285. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_directory_router.py +0 -0
  286. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_importer_router.py +0 -0
  287. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_knowledge_router.py +0 -0
  288. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_memory_router.py +0 -0
  289. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_project_router.py +0 -0
  290. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_prompt_router.py +0 -0
  291. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_resource_router.py +0 -0
  292. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/api/v2/test_search_router.py +0 -0
  293. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/cloud/test_cloud_api_client_and_utils.py +0 -0
  294. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +0 -0
  295. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/cloud/test_upload_path.py +0 -0
  296. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/conftest.py +0 -0
  297. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_auth_cli_auth.py +0 -0
  298. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_cli_container.py +0 -0
  299. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_cli_exit.py +0 -0
  300. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_cli_tool_exit.py +0 -0
  301. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_cli_tools.py +0 -0
  302. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_cloud_authentication.py +0 -0
  303. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_ignore_utils.py +0 -0
  304. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_import_chatgpt.py +0 -0
  305. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_import_claude_conversations.py +0 -0
  306. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_import_claude_projects.py +0 -0
  307. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_import_memory_json.py +0 -0
  308. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_project_add_with_local_path.py +0 -0
  309. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_restore_commands.py +0 -0
  310. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_snapshot_commands.py +0 -0
  311. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/cli/test_upload.py +0 -0
  312. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/conftest.py +0 -0
  313. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  314. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/importers/test_conversation_indexing.py +0 -0
  315. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/importers/test_importer_base.py +0 -0
  316. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/importers/test_importer_utils.py +0 -0
  317. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/__init__.py +0 -0
  318. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  319. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_entity_parser.py +0 -0
  320. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  321. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_markdown_plugins.py +0 -0
  322. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_markdown_processor.py +0 -0
  323. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_markdown_utils.py +0 -0
  324. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_observation_edge_cases.py +0 -0
  325. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_parser_edge_cases.py +0 -0
  326. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_relation_edge_cases.py +0 -0
  327. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/markdown/test_task_detection.py +0 -0
  328. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/clients/__init__.py +0 -0
  329. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/clients/test_clients.py +0 -0
  330. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/conftest.py +0 -0
  331. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_async_client_modes.py +0 -0
  332. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_mcp_container.py +0 -0
  333. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  334. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  335. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_project_context.py +0 -0
  336. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_prompts.py +0 -0
  337. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_recent_activity_prompt_modes.py +0 -0
  338. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_resources.py +0 -0
  339. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_server_lifespan_branches.py +0 -0
  340. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_build_context.py +0 -0
  341. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_canvas.py +0 -0
  342. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_delete_note.py +0 -0
  343. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_edit_note.py +0 -0
  344. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_list_directory.py +0 -0
  345. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_move_note.py +0 -0
  346. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_project_management.py +0 -0
  347. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_read_content.py +0 -0
  348. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_read_note.py +0 -0
  349. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_recent_activity.py +0 -0
  350. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_resource.py +0 -0
  351. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_search.py +0 -0
  352. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_utils.py +0 -0
  353. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_view_note.py +0 -0
  354. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_write_note.py +0 -0
  355. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/test_tool_write_note_kebab_filenames.py +0 -0
  356. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
  357. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_entity_repository.py +0 -0
  358. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_entity_repository_upsert.py +0 -0
  359. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_entity_upsert_issue_187.py +0 -0
  360. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_observation_repository.py +0 -0
  361. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_postgres_search_repository.py +0 -0
  362. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_project_info_repository.py +0 -0
  363. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_project_repository.py +0 -0
  364. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_relation_repository.py +0 -0
  365. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_repository.py +0 -0
  366. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_search_repository.py +0 -0
  367. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
  368. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  369. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_memory_serialization.py +0 -0
  370. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_memory_url.py +0 -0
  371. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_memory_url_validation.py +0 -0
  372. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_relation_response_reference_resolution.py +0 -0
  373. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_schemas.py +0 -0
  374. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/schemas/test_search.py +0 -0
  375. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_context_service.py +0 -0
  376. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_directory_service.py +0 -0
  377. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_entity_service.py +0 -0
  378. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  379. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_file_service.py +0 -0
  380. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_initialization.py +0 -0
  381. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_initialization_cloud_mode_branches.py +0 -0
  382. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_link_resolver.py +0 -0
  383. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_project_removal_bug.py +0 -0
  384. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_project_service_operations.py +0 -0
  385. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/services/test_search_service.py +0 -0
  386. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_character_conflicts.py +0 -0
  387. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_coordinator.py +0 -0
  388. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_sync_service.py +0 -0
  389. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_sync_service_incremental.py +0 -0
  390. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_sync_wikilink_issue.py +0 -0
  391. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_tmp_files.py +0 -0
  392. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_watch_service.py +0 -0
  393. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_watch_service_atomic_adds.py +0 -0
  394. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_watch_service_edge_cases.py +0 -0
  395. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/sync/test_watch_service_reload.py +0 -0
  396. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/test_config.py +0 -0
  397. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/test_deps.py +0 -0
  398. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/test_production_cascade_delete.py +0 -0
  399. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/test_project_resolver.py +0 -0
  400. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/test_rclone_commands.py +0 -0
  401. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/test_runtime.py +0 -0
  402. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_file_utils.py +0 -0
  403. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  404. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_parse_tags.py +0 -0
  405. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_permalink_formatting.py +0 -0
  406. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_timezone_utils.py +0 -0
  407. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_utf8_handling.py +0 -0
  408. {basic_memory-0.17.8 → basic_memory-0.17.9}/tests/utils/test_validate_project_path.py +0 -0
  409. {basic_memory-0.17.8 → basic_memory-0.17.9}/uv.lock +0 -0
@@ -1,5 +1,14 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.17.9 (2026-01-24)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **#523**: Fix `remove_project()` checking stale config in cloud mode
8
+ ([`17c0e0a`](https://github.com/basicmachines-co/basic-memory/commit/17c0e0a))
9
+ - In cloud mode, only check database `is_default` field (source of truth)
10
+ - Config file can become stale when users set default project via v2 API
11
+
3
12
  ## v0.17.8 (2026-01-24)
4
13
 
5
14
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.17.8
3
+ Version: 0.17.9
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
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/basicmachines-co/basic-memory.git",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.17.8",
9
+ "version": "0.17.9",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "pypi",
13
13
  "identifier": "basic-memory",
14
- "version": "0.17.8",
14
+ "version": "0.17.9",
15
15
  "runtimeHint": "uvx",
16
16
  "runtimeArguments": [
17
17
  {"type": "positional", "value": "basic-memory"},
@@ -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.8"
4
+ __version__ = "0.17.9"
5
5
 
6
6
  # API version for FastAPI - independent of package version
7
7
  __api_version__ = "v0"
@@ -241,8 +241,13 @@ class ProjectService:
241
241
 
242
242
  project_path = project.path
243
243
 
244
- # Check if project is default (in cloud mode, check database; in local mode, check config)
245
- if project.is_default or name == self.config_manager.config.default_project:
244
+ # Check if project is default
245
+ # In cloud mode: database is source of truth
246
+ # In local mode: also check config file
247
+ is_default = project.is_default
248
+ if not self.config_manager.config.cloud_mode:
249
+ is_default = is_default or name == self.config_manager.config.default_project
250
+ if is_default:
246
251
  raise ValueError(f"Cannot remove the default project '{name}'") # pragma: no cover
247
252
 
248
253
  # Remove from config if it exists there (may not exist in cloud mode)
@@ -1348,3 +1348,184 @@ async def test_remove_project_delete_notes_missing_directory(project_service: Pr
1348
1348
  project_service.config_manager.remove_project(test_project_name)
1349
1349
  except Exception:
1350
1350
  pass
1351
+
1352
+
1353
+ @pytest.mark.asyncio
1354
+ async def test_remove_project_cloud_mode_uses_database_not_config(project_service: ProjectService):
1355
+ """Test that in cloud mode, remove_project only checks database for default status.
1356
+
1357
+ Regression test for bug where cloud mode checked config file (stale) instead of
1358
+ database (source of truth) when determining if a project is the default.
1359
+ """
1360
+ test_project_name = f"test-cloud-default-{os.urandom(4).hex()}"
1361
+ test_project_path = f"/tmp/test-cloud-{os.urandom(8).hex()}"
1362
+
1363
+ # Save original cloud_mode setting
1364
+ config = project_service.config_manager.config
1365
+ original_cloud_mode = config.cloud_mode
1366
+ original_default = config.default_project
1367
+
1368
+ try:
1369
+ # Add a test project (not default)
1370
+ await project_service.add_project(test_project_name, test_project_path, set_default=False)
1371
+
1372
+ # Verify project exists and is NOT default in database
1373
+ db_project = await project_service.repository.get_by_name(test_project_name)
1374
+ assert db_project is not None
1375
+ assert db_project.is_default is not True # Should be None or False
1376
+
1377
+ # Simulate stale config: manually set this project as default in config only
1378
+ # (This simulates what happens when config isn't updated after API calls)
1379
+ config.default_project = test_project_name
1380
+
1381
+ # Enable cloud mode
1382
+ config.cloud_mode = True
1383
+ project_service.config_manager.save_config(config)
1384
+
1385
+ # In cloud mode, should be able to remove the project because database says it's not default
1386
+ # (even though stale config says it is) - this should NOT raise ValueError
1387
+ await project_service.remove_project(test_project_name, delete_notes=False)
1388
+
1389
+ # Verify project was removed from database
1390
+ db_project = await project_service.repository.get_by_name(test_project_name)
1391
+ assert db_project is None
1392
+
1393
+ finally:
1394
+ # Restore original settings
1395
+ config = project_service.config_manager.config
1396
+ config.cloud_mode = original_cloud_mode
1397
+ config.default_project = original_default
1398
+ project_service.config_manager.save_config(config)
1399
+
1400
+ # Cleanup from config if test failed partway
1401
+ try:
1402
+ project_service.config_manager.remove_project(test_project_name)
1403
+ except (ValueError, KeyError):
1404
+ pass # Project may not be in config
1405
+
1406
+
1407
+ @pytest.mark.asyncio
1408
+ async def test_remove_project_local_mode_checks_both_config_and_database(
1409
+ project_service: ProjectService,
1410
+ ):
1411
+ """Test that in local mode, remove_project checks both config AND database for default status.
1412
+
1413
+ In local mode, we check both sources to be safe - if either says the project is default,
1414
+ we prevent deletion.
1415
+ """
1416
+ test_project_name = f"test-local-default-{os.urandom(4).hex()}"
1417
+ test_project_path = f"/tmp/test-local-{os.urandom(8).hex()}"
1418
+
1419
+ # Save original settings
1420
+ config = project_service.config_manager.config
1421
+ original_cloud_mode = config.cloud_mode
1422
+ original_default = config.default_project
1423
+
1424
+ try:
1425
+ # Ensure we're in local mode before adding project
1426
+ config.cloud_mode = False
1427
+ project_service.config_manager.save_config(config)
1428
+
1429
+ # Add a test project (not default) - this will add to both DB and config in local mode
1430
+ await project_service.add_project(test_project_name, test_project_path, set_default=False)
1431
+
1432
+ # Verify project exists and is NOT default in database
1433
+ db_project = await project_service.repository.get_by_name(test_project_name)
1434
+ assert db_project is not None
1435
+ assert db_project.is_default is not True
1436
+
1437
+ # Re-read config to get the updated version (after add_project added the project)
1438
+ config = project_service.config_manager.config
1439
+
1440
+ # Set this project as default in config only (not in DB)
1441
+ config.default_project = test_project_name
1442
+ project_service.config_manager.save_config(config)
1443
+
1444
+ # In local mode, should NOT be able to remove because config says it's default
1445
+ with pytest.raises(ValueError, match="Cannot remove the default project"):
1446
+ await project_service.remove_project(test_project_name, delete_notes=False)
1447
+
1448
+ # Verify project still exists in database
1449
+ db_project = await project_service.repository.get_by_name(test_project_name)
1450
+ assert db_project is not None
1451
+
1452
+ finally:
1453
+ # Restore original settings
1454
+ config = project_service.config_manager.config
1455
+ config.cloud_mode = original_cloud_mode
1456
+ config.default_project = original_default
1457
+ project_service.config_manager.save_config(config)
1458
+
1459
+ # Cleanup
1460
+ try:
1461
+ project_service.config_manager.remove_project(test_project_name)
1462
+ except (ValueError, KeyError):
1463
+ pass
1464
+
1465
+
1466
+ @pytest.mark.asyncio
1467
+ async def test_remove_project_rejects_database_default_in_both_modes(
1468
+ project_service: ProjectService,
1469
+ ):
1470
+ """Test that remove_project rejects deletion when project is default in database.
1471
+
1472
+ This should be blocked in BOTH cloud mode and local mode.
1473
+ """
1474
+ test_project_name = f"test-db-default-{os.urandom(4).hex()}"
1475
+ test_project_path = f"/tmp/test-db-default-{os.urandom(8).hex()}"
1476
+
1477
+ # Save original settings
1478
+ original_cloud_mode = project_service.config_manager.config.cloud_mode
1479
+ original_default = project_service.config_manager.config.default_project
1480
+
1481
+ try:
1482
+ # Add a test project and set it as default
1483
+ await project_service.add_project(test_project_name, test_project_path, set_default=True)
1484
+
1485
+ # Verify project is default in database
1486
+ db_project = await project_service.repository.get_by_name(test_project_name)
1487
+ assert db_project is not None
1488
+ assert db_project.is_default is True
1489
+
1490
+ # Test in cloud mode - should reject
1491
+ config = project_service.config_manager.config
1492
+ config.cloud_mode = True
1493
+ project_service.config_manager.save_config(config)
1494
+
1495
+ with pytest.raises(ValueError, match="Cannot remove the default project"):
1496
+ await project_service.remove_project(test_project_name, delete_notes=False)
1497
+
1498
+ # Test in local mode - should also reject
1499
+ config.cloud_mode = False
1500
+ project_service.config_manager.save_config(config)
1501
+
1502
+ with pytest.raises(ValueError, match="Cannot remove the default project"):
1503
+ await project_service.remove_project(test_project_name, delete_notes=False)
1504
+
1505
+ # Verify project still exists in both cases
1506
+ assert test_project_name in project_service.projects
1507
+
1508
+ finally:
1509
+ # Restore original settings
1510
+ config = project_service.config_manager.config
1511
+ config.cloud_mode = original_cloud_mode
1512
+ config.default_project = original_default
1513
+ project_service.config_manager.save_config(config)
1514
+
1515
+ # Set original default back in database so we can clean up
1516
+ if original_default:
1517
+ original_project = await project_service.repository.get_by_name(original_default)
1518
+ if original_project:
1519
+ await project_service.repository.set_as_default(original_project.id)
1520
+
1521
+ # Cleanup test project
1522
+ if test_project_name in project_service.projects:
1523
+ try:
1524
+ # Clear default in DB first
1525
+ db_project = await project_service.repository.get_by_name(test_project_name)
1526
+ if db_project and db_project.is_default:
1527
+ # Find another project to make default
1528
+ pass # Let the config_manager handle it
1529
+ project_service.config_manager.remove_project(test_project_name)
1530
+ except Exception:
1531
+ pass
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes