basic-memory 0.21.0__tar.gz → 0.21.2__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 (703) hide show
  1. basic_memory-0.21.2/.github/workflows/release.yml +125 -0
  2. {basic_memory-0.21.0 → basic_memory-0.21.2}/AGENTS.md +9 -0
  3. {basic_memory-0.21.0 → basic_memory-0.21.2}/CHANGELOG.md +14 -0
  4. {basic_memory-0.21.0 → basic_memory-0.21.2}/PKG-INFO +1 -1
  5. {basic_memory-0.21.0 → basic_memory-0.21.2}/docker-compose-postgres.yml +5 -2
  6. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/semantic-search.md +1 -0
  7. {basic_memory-0.21.0 → basic_memory-0.21.2}/server.json +2 -2
  8. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/__init__.py +1 -1
  9. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/config.py +8 -5
  10. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/project_context.py +101 -7
  11. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/edit_note.py +4 -3
  12. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/link_resolver.py +17 -5
  13. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/README.md +12 -6
  14. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/conftest.py +25 -0
  15. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_project_context.py +464 -72
  16. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_project_context_telemetry.py +3 -16
  17. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_edit_note.py +85 -8
  18. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_read_content.py +107 -0
  19. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_read_note.py +127 -0
  20. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_search.py +105 -0
  21. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_workspace_management.py +7 -19
  22. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_link_resolver.py +104 -6
  23. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_config.py +19 -1
  24. basic_memory-0.21.0/.github/workflows/release.yml +0 -87
  25. {basic_memory-0.21.0 → basic_memory-0.21.2}/.agents/skills/instrumentation/SKILL.md +0 -0
  26. {basic_memory-0.21.0 → basic_memory-0.21.2}/.agents/skills/instrumentation/references/javascript/frameworks.md +0 -0
  27. {basic_memory-0.21.0 → basic_memory-0.21.2}/.agents/skills/instrumentation/references/javascript/patterns.md +0 -0
  28. {basic_memory-0.21.0 → basic_memory-0.21.2}/.agents/skills/instrumentation/references/python/integrations.md +0 -0
  29. {basic_memory-0.21.0 → basic_memory-0.21.2}/.agents/skills/instrumentation/references/python/logging-patterns.md +0 -0
  30. {basic_memory-0.21.0 → basic_memory-0.21.2}/.agents/skills/instrumentation/references/rust/patterns.md +0 -0
  31. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/commands/release/beta.md +0 -0
  32. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/commands/release/changelog.md +0 -0
  33. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/commands/release/release-check.md +0 -0
  34. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/commands/release/release.md +0 -0
  35. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/commands/spec.md +0 -0
  36. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/commands/test-live.md +0 -0
  37. {basic_memory-0.21.0 → basic_memory-0.21.2}/.claude/settings.json +0 -0
  38. {basic_memory-0.21.0 → basic_memory-0.21.2}/.dockerignore +0 -0
  39. {basic_memory-0.21.0 → basic_memory-0.21.2}/.env.example +0 -0
  40. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  41. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  42. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  43. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  44. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/dependabot.yml +0 -0
  45. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/claude-code-review.yml +0 -0
  46. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/claude-issue-triage.yml +0 -0
  47. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/claude.yml +0 -0
  48. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/dev-release.yml +0 -0
  49. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/docker.yml +0 -0
  50. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/pr-title.yml +0 -0
  51. {basic_memory-0.21.0 → basic_memory-0.21.2}/.github/workflows/test.yml +0 -0
  52. {basic_memory-0.21.0 → basic_memory-0.21.2}/.gitignore +0 -0
  53. {basic_memory-0.21.0 → basic_memory-0.21.2}/.python-version +0 -0
  54. {basic_memory-0.21.0 → basic_memory-0.21.2}/CITATION.cff +0 -0
  55. {basic_memory-0.21.0 → basic_memory-0.21.2}/CLA.md +0 -0
  56. {basic_memory-0.21.0 → basic_memory-0.21.2}/CLAUDE.md +0 -0
  57. {basic_memory-0.21.0 → basic_memory-0.21.2}/CODE_OF_CONDUCT.md +0 -0
  58. {basic_memory-0.21.0 → basic_memory-0.21.2}/CONTRIBUTING.md +0 -0
  59. {basic_memory-0.21.0 → basic_memory-0.21.2}/Dockerfile +0 -0
  60. {basic_memory-0.21.0 → basic_memory-0.21.2}/LICENSE +0 -0
  61. {basic_memory-0.21.0 → basic_memory-0.21.2}/NOTE-FORMAT.md +0 -0
  62. {basic_memory-0.21.0 → basic_memory-0.21.2}/README.md +0 -0
  63. {basic_memory-0.21.0 → basic_memory-0.21.2}/SECURITY.md +0 -0
  64. {basic_memory-0.21.0 → basic_memory-0.21.2}/docker-compose.yml +0 -0
  65. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/ARCHITECTURE.md +0 -0
  66. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/Docker.md +0 -0
  67. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/NOTE-FORMAT.md +0 -0
  68. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/SPEC-PER-PROJECT-ROUTING.md +0 -0
  69. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/ai-assistant-guide-extended.md +0 -0
  70. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/character-handling.md +0 -0
  71. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/cloud-cli.md +0 -0
  72. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/cloud-semantic-search-value.md +0 -0
  73. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/logfire-instrumentation-strategy.md +0 -0
  74. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/mcp-ui-bakeoff-instructions.md +0 -0
  75. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/metadata-search.md +0 -0
  76. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/post-v0.18.0-test-plan.md +0 -0
  77. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/releases/v0.19.0.md +0 -0
  78. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/semantic-search-test-log.md +0 -0
  79. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/specs/SPEC-LOCAL-PLUS-PUBLISH.md +0 -0
  80. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/specs/SPEC-SCHEMA-IMPL.md +0 -0
  81. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/specs/SPEC-SCHEMA.md +0 -0
  82. {basic_memory-0.21.0 → basic_memory-0.21.2}/docs/testing-coverage.md +0 -0
  83. {basic_memory-0.21.0 → basic_memory-0.21.2}/justfile +0 -0
  84. {basic_memory-0.21.0 → basic_memory-0.21.2}/llms-install.md +0 -0
  85. {basic_memory-0.21.0 → basic_memory-0.21.2}/pyproject.toml +0 -0
  86. {basic_memory-0.21.0 → basic_memory-0.21.2}/skills-lock.json +0 -0
  87. {basic_memory-0.21.0 → basic_memory-0.21.2}/smithery.yaml +0 -0
  88. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/alembic.ini +0 -0
  89. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/env.py +0 -0
  90. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/migrations.py +0 -0
  91. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/script.py.mako +0 -0
  92. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
  93. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  94. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  95. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
  96. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
  97. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +0 -0
  98. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  99. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  100. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
  101. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  102. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  103. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/d7e8f9a0b1c2_add_structured_metadata_indexes.py +0 -0
  104. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  105. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
  106. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +0 -0
  107. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/h1b2c3d4e5f6_add_postgres_vector_search_tables.py +0 -0
  108. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/i2c3d4e5f6g7_auto_backfill_semantic_embeddings.py +0 -0
  109. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/j3d4e5f6g7h8_rename_entity_type_to_note_type.py +0 -0
  110. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/k4e5f6g7h8i9_add_created_by_and_last_updated_by_to_entity.py +0 -0
  111. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/l5g6h7i8j9k0_add_note_content_table.py +0 -0
  112. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/m6h7i8j9k0l1_add_vector_sync_fingerprints.py +0 -0
  113. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/alembic/versions/n7i8j9k0l1m2_cleanup_sqlite_search_orphans.py +0 -0
  114. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/__init__.py +0 -0
  115. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/app.py +0 -0
  116. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/container.py +0 -0
  117. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/template_loader.py +0 -0
  118. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/__init__.py +0 -0
  119. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/__init__.py +0 -0
  120. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
  121. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/importer_router.py +0 -0
  122. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/knowledge_router.py +0 -0
  123. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/memory_router.py +0 -0
  124. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/project_router.py +0 -0
  125. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/prompt_router.py +0 -0
  126. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
  127. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/schema_router.py +0 -0
  128. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/routers/search_router.py +0 -0
  129. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/api/v2/utils.py +0 -0
  130. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/__init__.py +0 -0
  131. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/analytics.py +0 -0
  132. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/app.py +0 -0
  133. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/auth.py +0 -0
  134. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/auto_update.py +0 -0
  135. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/__init__.py +0 -0
  136. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  137. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  138. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  139. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
  140. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  141. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/project_sync.py +0 -0
  142. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/rclone_commands.py +0 -0
  143. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  144. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
  145. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/restore.py +0 -0
  146. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/schemas.py +0 -0
  147. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/snapshot.py +0 -0
  148. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  149. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  150. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/cloud/workspace.py +0 -0
  151. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/command_utils.py +0 -0
  152. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/db.py +0 -0
  153. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/doctor.py +0 -0
  154. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/format.py +0 -0
  155. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  156. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  157. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  158. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  159. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/mcp.py +0 -0
  160. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/orphans.py +0 -0
  161. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/project.py +0 -0
  162. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/routing.py +0 -0
  163. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/schema.py +0 -0
  164. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/status.py +0 -0
  165. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/tool.py +0 -0
  166. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/commands/update.py +0 -0
  167. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/container.py +0 -0
  168. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/main.py +0 -0
  169. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/cli/promo.py +0 -0
  170. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/db.py +0 -0
  171. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/__init__.py +0 -0
  172. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/config.py +0 -0
  173. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/db.py +0 -0
  174. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/importers.py +0 -0
  175. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/projects.py +0 -0
  176. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/repositories.py +0 -0
  177. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps/services.py +0 -0
  178. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/deps.py +0 -0
  179. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/file_utils.py +0 -0
  180. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/ignore_utils.py +0 -0
  181. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/__init__.py +0 -0
  182. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/base.py +0 -0
  183. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  184. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
  185. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  186. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/memory_json_importer.py +0 -0
  187. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/importers/utils.py +0 -0
  188. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/indexing/__init__.py +0 -0
  189. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/indexing/batch_indexer.py +0 -0
  190. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/indexing/batching.py +0 -0
  191. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/indexing/models.py +0 -0
  192. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/markdown/__init__.py +0 -0
  193. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/markdown/entity_parser.py +0 -0
  194. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/markdown/markdown_processor.py +0 -0
  195. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/markdown/plugins.py +0 -0
  196. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/markdown/schemas.py +0 -0
  197. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/markdown/utils.py +0 -0
  198. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/__init__.py +0 -0
  199. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/async_client.py +0 -0
  200. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/__init__.py +0 -0
  201. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/directory.py +0 -0
  202. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/knowledge.py +0 -0
  203. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/memory.py +0 -0
  204. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/project.py +0 -0
  205. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/resource.py +0 -0
  206. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/schema.py +0 -0
  207. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/clients/search.py +0 -0
  208. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/container.py +0 -0
  209. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/formatting.py +0 -0
  210. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  211. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  212. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  213. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  214. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/prompts/search.py +0 -0
  215. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/prompts/utils.py +0 -0
  216. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/resources/__init__.py +0 -0
  217. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  218. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/resources/cloud_info.md +0 -0
  219. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/resources/project_info.py +0 -0
  220. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/resources/release_notes.md +0 -0
  221. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/resources/ui.py +0 -0
  222. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/server.py +0 -0
  223. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/__init__.py +0 -0
  224. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/build_context.py +0 -0
  225. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/canvas.py +0 -0
  226. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
  227. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/cloud_info.py +0 -0
  228. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/delete_note.py +0 -0
  229. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/list_directory.py +0 -0
  230. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/move_note.py +0 -0
  231. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/project_management.py +0 -0
  232. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/read_content.py +0 -0
  233. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/read_note.py +0 -0
  234. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
  235. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/release_notes.py +0 -0
  236. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/schema.py +0 -0
  237. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/search.py +0 -0
  238. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/ui_sdk.py +0 -0
  239. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/utils.py +0 -0
  240. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/view_note.py +0 -0
  241. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/workspaces.py +0 -0
  242. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/tools/write_note.py +0 -0
  243. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/__init__.py +0 -0
  244. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/html/note-preview-mcp-ui.html +0 -0
  245. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/html/note-preview-tool-ui.html +0 -0
  246. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/html/note-preview-vanilla.html +0 -0
  247. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/html/search-results-mcp-ui.html +0 -0
  248. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/html/search-results-tool-ui.html +0 -0
  249. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/html/search-results-vanilla.html +0 -0
  250. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/sdk.py +0 -0
  251. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/mcp/ui/templates.py +0 -0
  252. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/models/__init__.py +0 -0
  253. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/models/base.py +0 -0
  254. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/models/knowledge.py +0 -0
  255. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/models/project.py +0 -0
  256. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/models/search.py +0 -0
  257. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/project_resolver.py +0 -0
  258. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/__init__.py +0 -0
  259. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/embedding_provider.py +0 -0
  260. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/embedding_provider_factory.py +0 -0
  261. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/entity_repository.py +0 -0
  262. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/fastembed_provider.py +0 -0
  263. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/metadata_filters.py +0 -0
  264. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/note_content_repository.py +0 -0
  265. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/observation_repository.py +0 -0
  266. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/openai_provider.py +0 -0
  267. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/postgres_search_repository.py +0 -0
  268. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/project_info_repository.py +0 -0
  269. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/project_repository.py +0 -0
  270. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/relation_repository.py +0 -0
  271. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/repository.py +0 -0
  272. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/search_index_row.py +0 -0
  273. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/search_repository.py +0 -0
  274. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/search_repository_base.py +0 -0
  275. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/semantic_errors.py +0 -0
  276. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/repository/sqlite_search_repository.py +0 -0
  277. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/runtime.py +0 -0
  278. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schema/__init__.py +0 -0
  279. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schema/diff.py +0 -0
  280. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schema/inference.py +0 -0
  281. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schema/parser.py +0 -0
  282. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schema/resolver.py +0 -0
  283. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schema/validator.py +0 -0
  284. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/__init__.py +0 -0
  285. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/base.py +0 -0
  286. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/cloud.py +0 -0
  287. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/delete.py +0 -0
  288. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/directory.py +0 -0
  289. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/importer.py +0 -0
  290. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/memory.py +0 -0
  291. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/project_info.py +0 -0
  292. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/prompt.py +0 -0
  293. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/request.py +0 -0
  294. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/response.py +0 -0
  295. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/schema.py +0 -0
  296. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/search.py +0 -0
  297. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/sync_report.py +0 -0
  298. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/v2/__init__.py +0 -0
  299. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/v2/entity.py +0 -0
  300. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/v2/graph.py +0 -0
  301. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/schemas/v2/resource.py +0 -0
  302. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/__init__.py +0 -0
  303. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/context_service.py +0 -0
  304. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/directory_service.py +0 -0
  305. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/entity_service.py +0 -0
  306. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/exceptions.py +0 -0
  307. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/file_service.py +0 -0
  308. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/initialization.py +0 -0
  309. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/project_service.py +0 -0
  310. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/search_service.py +0 -0
  311. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/services/service.py +0 -0
  312. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/sync/__init__.py +0 -0
  313. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/sync/background_sync.py +0 -0
  314. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/sync/coordinator.py +0 -0
  315. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/sync/sync_service.py +0 -0
  316. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/sync/watch_service.py +0 -0
  317. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/telemetry.py +0 -0
  318. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  319. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/templates/prompts/search.hbs +0 -0
  320. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/utils.py +0 -0
  321. {basic_memory-0.21.0 → basic_memory-0.21.2}/src/basic_memory/workspace_context.py +0 -0
  322. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/BENCHMARKS.md +0 -0
  323. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_cli_tool_edit_note_integration.py +0 -0
  324. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_cli_tool_json_failure_integration.py +0 -0
  325. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_cli_tool_json_integration.py +0 -0
  326. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_project_commands_integration.py +0 -0
  327. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_routing_integration.py +0 -0
  328. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_search_notes_meta_integration.py +0 -0
  329. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/cli/test_version_integration.py +0 -0
  330. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/compare_search_benchmarks.py +0 -0
  331. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/conftest.py +0 -0
  332. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-01.md +0 -0
  333. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-02.md +0 -0
  334. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-03.md +0 -0
  335. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-04.md +0 -0
  336. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-05.md +0 -0
  337. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-06.md +0 -0
  338. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-07.md +0 -0
  339. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-08.md +0 -0
  340. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-09.md +0 -0
  341. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-10.md +0 -0
  342. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-11.md +0 -0
  343. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-12.md +0 -0
  344. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-13.md +0 -0
  345. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-14.md +0 -0
  346. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-15.md +0 -0
  347. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-16.md +0 -0
  348. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-17.md +0 -0
  349. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-18.md +0 -0
  350. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-19.md +0 -0
  351. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/people/drift-person-20.md +0 -0
  352. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/drift/schema/Person.md +0 -0
  353. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/array-single.md +0 -0
  354. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/empty-note.md +0 -0
  355. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/explicit-overrides-type.md +0 -0
  356. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/inline-and-type.md +0 -0
  357. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/no-frontmatter.md +0 -0
  358. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/relation-only.md +0 -0
  359. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/type-no-schema.md +0 -0
  360. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/edge-cases/unicode-fields.md +0 -0
  361. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/ada-lovelace.md +0 -0
  362. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/alan-turing.md +0 -0
  363. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/anders-hejlsberg.md +0 -0
  364. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/andrej-karpathy.md +0 -0
  365. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/barbara-liskov.md +0 -0
  366. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/bjarne-stroustrup.md +0 -0
  367. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/brendan-eich.md +0 -0
  368. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/claude-shannon.md +0 -0
  369. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/dennis-ritchie.md +0 -0
  370. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/dijkstra.md +0 -0
  371. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/donald-knuth.md +0 -0
  372. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/fei-fei-li.md +0 -0
  373. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/geoffrey-hinton.md +0 -0
  374. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/grace-hopper.md +0 -0
  375. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/guido-van-rossum.md +0 -0
  376. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/james-gosling.md +0 -0
  377. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/john-carmack.md +0 -0
  378. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/ken-thompson.md +0 -0
  379. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/larry-page.md +0 -0
  380. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/leslie-lamport.md +0 -0
  381. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/linus-torvalds.md +0 -0
  382. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/margaret-hamilton.md +0 -0
  383. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/rasmus-lerdorf.md +0 -0
  384. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/richard-stallman.md +0 -0
  385. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/rob-pike.md +0 -0
  386. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/satoshi-nakamoto.md +0 -0
  387. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/tim-berners-lee.md +0 -0
  388. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/vint-cerf.md +0 -0
  389. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/yann-lecun.md +0 -0
  390. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/inference/people/yukihiro-matsumoto.md +0 -0
  391. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/schemas/Book.md +0 -0
  392. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/schemas/Meeting.md +0 -0
  393. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/schemas/Person.md +0 -0
  394. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/schemas/SoftwareProject.md +0 -0
  395. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/schemas/StrictSchema.md +0 -0
  396. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/valid/basic-memory.md +0 -0
  397. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/valid/explicit-ref-note.md +0 -0
  398. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/valid/no-schema-note.md +0 -0
  399. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/valid/paul-graham.md +0 -0
  400. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/valid/rich-hickey.md +0 -0
  401. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/valid/standup-2024-01-15.md +0 -0
  402. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/warnings/extra-observations.md +0 -0
  403. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/warnings/missing-multiple.md +0 -0
  404. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/warnings/missing-required.md +0 -0
  405. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/fixtures/schema/warnings/wrong-enum-value.md +0 -0
  406. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_build_context_underscore.py +0 -0
  407. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_build_context_validation.py +0 -0
  408. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  409. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  410. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_delete_directory_integration.py +0 -0
  411. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_delete_note_integration.py +0 -0
  412. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_edit_note_integration.py +0 -0
  413. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
  414. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_list_directory_integration.py +0 -0
  415. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_long_relation_type_integration.py +0 -0
  416. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_move_directory_integration.py +0 -0
  417. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_move_note_integration.py +0 -0
  418. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_output_format_json_integration.py +0 -0
  419. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_pagination_integration.py +0 -0
  420. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_param_aliases_integration.py +0 -0
  421. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_permalink_collision_integration.py +0 -0
  422. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_project_management_integration.py +0 -0
  423. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_project_state_sync_integration.py +0 -0
  424. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_read_content_integration.py +0 -0
  425. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_read_note_integration.py +0 -0
  426. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_search_integration.py +0 -0
  427. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  428. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_smoke_integration.py +0 -0
  429. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_string_params_integration.py +0 -0
  430. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_ui_sdk_integration.py +0 -0
  431. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_workspace_permalink_integration.py +0 -0
  432. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/mcp/test_write_note_integration.py +0 -0
  433. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/__init__.py +0 -0
  434. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/conftest.py +0 -0
  435. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/corpus.py +0 -0
  436. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/metrics.py +0 -0
  437. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/report.py +0 -0
  438. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/test_multiterm_semantic_queries.py +0 -0
  439. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/test_search_diagnostics.py +0 -0
  440. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/test_semantic_coverage.py +0 -0
  441. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/semantic/test_semantic_quality.py +0 -0
  442. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_db_wal_mode.py +0 -0
  443. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_disable_permalinks_integration.py +0 -0
  444. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/__init__.py +0 -0
  445. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/conftest.py +0 -0
  446. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/helpers.py +0 -0
  447. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/test_diff_integration.py +0 -0
  448. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/test_inference_integration.py +0 -0
  449. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/test_parser_integration.py +0 -0
  450. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_schema/test_validator_integration.py +0 -0
  451. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_search_performance_benchmark.py +0 -0
  452. {basic_memory-0.21.0 → basic_memory-0.21.2}/test-int/test_sync_batching_integration.py +0 -0
  453. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/Non-MarkdownFileSupport.pdf +0 -0
  454. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/Screenshot.png +0 -0
  455. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/__init__.py +0 -0
  456. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/__init__.py +0 -0
  457. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/conftest.py +0 -0
  458. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_directory_router.py +0 -0
  459. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_importer_router.py +0 -0
  460. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_knowledge_router.py +0 -0
  461. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_knowledge_router_telemetry.py +0 -0
  462. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_memory_hydration.py +0 -0
  463. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_memory_router.py +0 -0
  464. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_orphan_router.py +0 -0
  465. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_project_router.py +0 -0
  466. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_prompt_router.py +0 -0
  467. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_resource_router.py +0 -0
  468. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_schema_router.py +0 -0
  469. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_search_hydration.py +0 -0
  470. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_search_router.py +0 -0
  471. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_search_router_telemetry.py +0 -0
  472. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_utils_telemetry.py +0 -0
  473. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/api/v2/test_workspace_permalink_headers.py +0 -0
  474. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/cloud/test_cloud_api_client_and_utils.py +0 -0
  475. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/cloud/test_project_sync_command.py +0 -0
  476. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +0 -0
  477. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/cloud/test_rclone_installer.py +0 -0
  478. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/cloud/test_upload_command_routing.py +0 -0
  479. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/cloud/test_upload_path.py +0 -0
  480. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/conftest.py +0 -0
  481. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_analytics.py +0 -0
  482. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_auth_cli_auth.py +0 -0
  483. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_auto_update.py +0 -0
  484. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_container.py +0 -0
  485. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_exit.py +0 -0
  486. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_schema.py +0 -0
  487. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_telemetry.py +0 -0
  488. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_tool_exit.py +0 -0
  489. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_tool_json_output.py +0 -0
  490. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cli_tools.py +0 -0
  491. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cloud_authentication.py +0 -0
  492. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cloud_promo.py +0 -0
  493. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_cloud_status.py +0 -0
  494. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_db_reindex.py +0 -0
  495. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_db_reset_exit.py +0 -0
  496. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_db_reset_zombie_check.py +0 -0
  497. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_ignore_utils.py +0 -0
  498. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_import_chatgpt.py +0 -0
  499. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_import_claude_conversations.py +0 -0
  500. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_import_claude_projects.py +0 -0
  501. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_import_memory_json.py +0 -0
  502. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_json_output.py +0 -0
  503. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_orphans_command.py +0 -0
  504. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_project_add_with_local_path.py +0 -0
  505. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_project_info_cloud_status.py +0 -0
  506. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_project_info_errors.py +0 -0
  507. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_project_list_and_ls.py +0 -0
  508. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_project_set_cloud_local.py +0 -0
  509. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_restore_commands.py +0 -0
  510. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_routing.py +0 -0
  511. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_snapshot_commands.py +0 -0
  512. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_update_command.py +0 -0
  513. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_upload.py +0 -0
  514. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/cli/test_workspace_commands.py +0 -0
  515. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/conftest.py +0 -0
  516. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  517. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/importers/test_conversation_indexing.py +0 -0
  518. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/importers/test_importer_base.py +0 -0
  519. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/importers/test_importer_utils.py +0 -0
  520. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/indexing/test_batch_indexer.py +0 -0
  521. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/indexing/test_batching.py +0 -0
  522. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/__init__.py +0 -0
  523. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  524. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_entity_parser.py +0 -0
  525. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  526. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_markdown_plugins.py +0 -0
  527. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_markdown_processor.py +0 -0
  528. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_markdown_utils.py +0 -0
  529. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_observation_edge_cases.py +0 -0
  530. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_parser_edge_cases.py +0 -0
  531. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_relation_edge_cases.py +0 -0
  532. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/markdown/test_task_detection.py +0 -0
  533. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/clients/__init__.py +0 -0
  534. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/clients/test_clients.py +0 -0
  535. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_async_client_force_local.py +0 -0
  536. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_async_client_modes.py +0 -0
  537. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_async_client_telemetry.py +0 -0
  538. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_client_schema.py +0 -0
  539. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_client_telemetry.py +0 -0
  540. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_mcp_container.py +0 -0
  541. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  542. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  543. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_prompt_tool_delegation.py +0 -0
  544. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_prompts.py +0 -0
  545. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_recent_activity_prompt_modes.py +0 -0
  546. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_resources.py +0 -0
  547. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_server_lifespan_branches.py +0 -0
  548. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_server_telemetry.py +0 -0
  549. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_build_context.py +0 -0
  550. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_canvas.py +0 -0
  551. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_cloud_discovery.py +0 -0
  552. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_contracts.py +0 -0
  553. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_delete_note.py +0 -0
  554. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_json_output_modes.py +0 -0
  555. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_list_directory.py +0 -0
  556. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_move_note.py +0 -0
  557. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_project_management.py +0 -0
  558. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_recent_activity.py +0 -0
  559. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_resource.py +0 -0
  560. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_schema.py +0 -0
  561. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_telemetry.py +0 -0
  562. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_utils.py +0 -0
  563. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_utils_cloud_auth.py +0 -0
  564. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_view_note.py +0 -0
  565. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_write_note.py +0 -0
  566. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_write_note_kebab_filenames.py +0 -0
  567. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_tool_write_note_metadata.py +0 -0
  568. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_ui_resources.py +0 -0
  569. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_ui_sdk.py +0 -0
  570. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_ui_templates.py +0 -0
  571. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/test_workspace_permalink_resolution.py +0 -0
  572. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
  573. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/mcp/tools/test_search_notes_multi_project.py +0 -0
  574. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_distance_to_similarity.py +0 -0
  575. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_entity_repository.py +0 -0
  576. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_entity_repository_upsert.py +0 -0
  577. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_entity_upsert_issue_187.py +0 -0
  578. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_fastembed_provider.py +0 -0
  579. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_hybrid_fusion.py +0 -0
  580. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_metadata_filters.py +0 -0
  581. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_metadata_filters_edge_cases.py +0 -0
  582. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_note_content_repository.py +0 -0
  583. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_observation_repository.py +0 -0
  584. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_openai_provider.py +0 -0
  585. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_postgres_search_repository.py +0 -0
  586. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_postgres_search_repository_unit.py +0 -0
  587. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_project_info_repository.py +0 -0
  588. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_project_repository.py +0 -0
  589. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_relation_repository.py +0 -0
  590. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_repository.py +0 -0
  591. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_search_index_row.py +0 -0
  592. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_search_repository.py +0 -0
  593. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
  594. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_search_text_with_metadata_filters.py +0 -0
  595. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_semantic_search_base.py +0 -0
  596. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_sqlite_vector_search_repository.py +0 -0
  597. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_vector_pagination.py +0 -0
  598. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/repository/test_vector_threshold.py +0 -0
  599. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schema/__init__.py +0 -0
  600. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schema/test_diff.py +0 -0
  601. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schema/test_inference.py +0 -0
  602. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schema/test_parser.py +0 -0
  603. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schema/test_resolver.py +0 -0
  604. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schema/test_validator.py +0 -0
  605. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  606. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_memory_serialization.py +0 -0
  607. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_memory_url.py +0 -0
  608. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_memory_url_validation.py +0 -0
  609. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_relation_response_reference_resolution.py +0 -0
  610. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_schemas.py +0 -0
  611. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/schemas/test_search.py +0 -0
  612. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_context_service.py +0 -0
  613. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_directory_service.py +0 -0
  614. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_entity_service.py +0 -0
  615. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  616. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_entity_service_prepare.py +0 -0
  617. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_entity_service_telemetry.py +0 -0
  618. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_entity_service_write_result.py +0 -0
  619. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_file_service.py +0 -0
  620. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_initialization.py +0 -0
  621. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_initialization_cloud_mode_branches.py +0 -0
  622. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_project_removal_bug.py +0 -0
  623. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_project_service.py +0 -0
  624. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_project_service_cloud_info.py +0 -0
  625. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_project_service_embedding_status.py +0 -0
  626. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_project_service_operations.py +0 -0
  627. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_search_service.py +0 -0
  628. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_search_service_telemetry.py +0 -0
  629. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_semantic_search.py +0 -0
  630. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_task_scheduler_semantic.py +0 -0
  631. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/services/test_upsert_entity_optimization.py +0 -0
  632. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_character_conflicts.py +0 -0
  633. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_coordinator.py +0 -0
  634. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_one_markdown_file.py +0 -0
  635. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_service.py +0 -0
  636. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_service_batching.py +0 -0
  637. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_service_incremental.py +0 -0
  638. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_service_subprocess.py +0 -0
  639. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_service_telemetry.py +0 -0
  640. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_sync_wikilink_issue.py +0 -0
  641. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_tmp_files.py +0 -0
  642. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_watch_service.py +0 -0
  643. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_watch_service_atomic_adds.py +0 -0
  644. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_watch_service_edge_cases.py +0 -0
  645. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_watch_service_reload.py +0 -0
  646. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/sync/test_watch_service_stress.py +0 -0
  647. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_alembic_env.py +0 -0
  648. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_coerce.py +0 -0
  649. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_deps.py +0 -0
  650. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_note_content_migration.py +0 -0
  651. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_permalink_utils.py +0 -0
  652. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_production_cascade_delete.py +0 -0
  653. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_project_resolver.py +0 -0
  654. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_rclone_commands.py +0 -0
  655. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_runtime.py +0 -0
  656. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/test_telemetry.py +0 -0
  657. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_file_utils.py +0 -0
  658. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  659. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_parse_tags.py +0 -0
  660. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_permalink_formatting.py +0 -0
  661. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_setup_logging.py +0 -0
  662. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_timezone_utils.py +0 -0
  663. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_utf8_handling.py +0 -0
  664. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_validate_project_path.py +0 -0
  665. {basic_memory-0.21.0 → basic_memory-0.21.2}/tests/utils/test_workspace_context.py +0 -0
  666. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/.gitignore +0 -0
  667. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/build.mjs +0 -0
  668. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/package-lock.json +0 -0
  669. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/package.json +0 -0
  670. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/_adapter.tsx +0 -0
  671. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/data-table.tsx +0 -0
  672. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/error-boundary.tsx +0 -0
  673. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/formatters.tsx +0 -0
  674. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/index.tsx +0 -0
  675. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/schema.ts +0 -0
  676. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/types.ts +0 -0
  677. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/data-table/utilities.ts +0 -0
  678. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/_adapter.tsx +0 -0
  679. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/action-buttons.tsx +0 -0
  680. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/actions-config.ts +0 -0
  681. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/error-boundary.tsx +0 -0
  682. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/index.ts +0 -0
  683. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/media/aspect-ratio.ts +0 -0
  684. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/media/format-utils.ts +0 -0
  685. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/media/index.ts +0 -0
  686. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/media/overlay-gradient.ts +0 -0
  687. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/media/sanitize-href.ts +0 -0
  688. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/parse.ts +0 -0
  689. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/schema.ts +0 -0
  690. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/use-action-buttons.tsx +0 -0
  691. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/use-copy-to-clipboard.ts +0 -0
  692. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/tool-ui/shared/utils.ts +0 -0
  693. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/ui/accordion.tsx +0 -0
  694. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/ui/badge.tsx +0 -0
  695. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/ui/button.tsx +0 -0
  696. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/ui/dropdown-menu.tsx +0 -0
  697. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/ui/table.tsx +0 -0
  698. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/components/ui/tooltip.tsx +0 -0
  699. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/note-preview.tsx +0 -0
  700. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/search-results.tsx +0 -0
  701. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/src/styles.css +0 -0
  702. {basic_memory-0.21.0 → basic_memory-0.21.2}/ui/tool-ui-react/tailwind.config.js +0 -0
  703. {basic_memory-0.21.0 → basic_memory-0.21.2}/uv.lock +0 -0
@@ -0,0 +1,125 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*' # Trigger on version tags like v1.0.0, v0.13.0, etc.
7
+
8
+ env:
9
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
10
+
11
+ jobs:
12
+ release:
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ id-token: write
16
+ contents: write
17
+
18
+ steps:
19
+ - uses: actions/checkout@v6
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v6
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Install uv
29
+ run: |
30
+ pip install uv
31
+
32
+ - name: Install dependencies and build
33
+ run: |
34
+ uv venv
35
+ uv sync
36
+ uv build
37
+
38
+ - name: Verify build succeeded
39
+ run: |
40
+ # Verify that build artifacts exist
41
+ ls -la dist/
42
+ echo "Build completed successfully"
43
+
44
+ - name: Create GitHub Release
45
+ uses: softprops/action-gh-release@v3
46
+ with:
47
+ files: |
48
+ dist/*.whl
49
+ dist/*.tar.gz
50
+ generate_release_notes: true
51
+ tag_name: ${{ github.ref_name }}
52
+ token: ${{ secrets.GITHUB_TOKEN }}
53
+
54
+ - name: Publish to PyPI
55
+ uses: pypa/gh-action-pypi-publish@release/v1
56
+ with:
57
+ password: ${{ secrets.PYPI_TOKEN }}
58
+
59
+ homebrew:
60
+ name: Update Homebrew Formula
61
+ needs: release
62
+ runs-on: ubuntu-latest
63
+ # Only run for stable releases (not dev, beta, or rc versions)
64
+ if: ${{ !contains(github.ref_name, 'dev') && !contains(github.ref_name, 'b') && !contains(github.ref_name, 'rc') }}
65
+ permissions:
66
+ contents: read
67
+ steps:
68
+ # Inline bump replaces mislav/bump-homebrew-formula-action@v4.x.
69
+ # The action does a HEAD request to api.github.com /repos/.../tarball/<ref>
70
+ # with the bearer token and expects a 302 redirect. GitHub now returns
71
+ # 303 on that endpoint when authenticated, which the action treats as a
72
+ # fatal error. Re-implementing the bump as plain git+sed keeps the same
73
+ # contract (update url + sha256, commit, push) with no third-party action.
74
+ - name: Update Homebrew formula
75
+ env:
76
+ HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
77
+ REF: ${{ github.ref_name }}
78
+ REPO: ${{ github.repository }}
79
+ RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
80
+ run: |
81
+ set -euo pipefail
82
+
83
+ VERSION="${REF#v}"
84
+ ARCHIVE_URL="https://github.com/${REPO}/archive/refs/tags/${REF}.tar.gz"
85
+
86
+ echo "::group::Compute tarball sha256"
87
+ SHA256="$(curl --fail --silent --location "$ARCHIVE_URL" | sha256sum | awk '{print $1}')"
88
+ test -n "$SHA256"
89
+ echo "sha256: $SHA256"
90
+ echo "::endgroup::"
91
+
92
+ echo "::group::Clone tap"
93
+ git clone \
94
+ --depth 1 \
95
+ "https://x-access-token:${HOMEBREW_TOKEN}@github.com/basicmachines-co/homebrew-basic-memory.git" \
96
+ tap
97
+ cd tap
98
+ git config user.name "github-actions[bot]"
99
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
100
+ echo "::endgroup::"
101
+
102
+ echo "::group::Patch Formula/basic-memory.rb"
103
+ # Pipe-delimited sed because the URL contains slashes. The Formula
104
+ # only has one `url` and one `sha256` directive, so a first-match
105
+ # replacement is unambiguous. POSIX character classes ([[:space:]])
106
+ # keep this portable across BSD and GNU sed.
107
+ sed -i -E \
108
+ -e "s|^([[:space:]]*url[[:space:]]+)\"[^\"]+\"|\1\"${ARCHIVE_URL}\"|" \
109
+ -e "s|^([[:space:]]*sha256[[:space:]]+)\"[^\"]+\"|\1\"${SHA256}\"|" \
110
+ Formula/basic-memory.rb
111
+ git --no-pager diff Formula/basic-memory.rb
112
+ echo "::endgroup::"
113
+
114
+ if git diff --quiet Formula/basic-memory.rb; then
115
+ echo "Formula already at ${REF}; nothing to do."
116
+ exit 0
117
+ fi
118
+
119
+ echo "::group::Commit & push"
120
+ git add Formula/basic-memory.rb
121
+ git commit -m "basic-memory ${VERSION}
122
+
123
+ Created by ${RUN_URL}"
124
+ git push origin HEAD:main
125
+ echo "::endgroup::"
@@ -56,6 +56,15 @@ Run `just test-smoke` when you specifically need the MCP smoke flow.
56
56
 
57
57
  If testmon is “cold,” the first run may be long. Subsequent runs get much faster.
58
58
 
59
+ ### PR CI Gate
60
+
61
+ Before opening or updating a PR, run the checks that mirror the common required CI failures:
62
+
63
+ - Run `just typecheck` in addition to targeted `ruff` and `pytest` commands when tests were added or changed.
64
+ - Sign commits with `git commit -s` so DCO passes. If a PR branch already has unsigned commits, rewrite the branch with signed-off commits before asking for review.
65
+ - Use a semantic PR title accepted by `.github/workflows/pr-title.yml`: `type(scope): summary`.
66
+ - Use one of the allowed scopes: `core`, `cli`, `api`, `mcp`, `sync`, `ui`, `deps`, `installer`.
67
+
59
68
  ### Test Structure
60
69
 
61
70
  - `tests/` - Unit tests for individual components (mocked, fast)
@@ -1,5 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.21.1 (2026-05-16)
4
+
5
+ CI-only release. No user-facing changes.
6
+
7
+ ### Maintenance
8
+
9
+ - **#833**: Replace `mislav/bump-homebrew-formula-action` with an inline
10
+ bash bump step. The action's `resolveRedirect` HEAD-requests
11
+ `api.github.com /repos/.../tarball/<ref>` expecting HTTP 302; GitHub now
12
+ returns 303 for authenticated requests on that endpoint, which broke
13
+ the v0.21.0 Homebrew job and required a manual tap bump. The inline
14
+ step does the same work (curl + sha256sum, clone tap, sed-bump
15
+ `url`/`sha256`, commit, push) without any third-party dependency.
16
+
3
17
  ## v0.21.0 (2026-05-16)
4
18
 
5
19
  Workspace-aware everywhere: every MCP tool and CLI command now routes through the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.21.0
3
+ Version: 0.21.2
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
@@ -1,5 +1,8 @@
1
1
  # Docker Compose configuration for Basic Memory with PostgreSQL
2
- # Use this for local development and testing with Postgres backend
2
+ # Use this for local development and testing with Postgres backend.
3
+ #
4
+ # The Postgres backend requires the pgvector extension (semantic search).
5
+ # This image bundles pgvector; plain postgres:17 will not work for vector search.
3
6
  #
4
7
  # Usage:
5
8
  # docker-compose -f docker-compose-postgres.yml up -d
@@ -7,7 +10,7 @@
7
10
 
8
11
  services:
9
12
  postgres:
10
- image: postgres:17
13
+ image: pgvector/pgvector:pg17
11
14
  container_name: basic-memory-postgres
12
15
  environment:
13
16
  # Local development/test credentials - NOT for production
@@ -263,6 +263,7 @@ The sqlite-vec extension is loaded per-connection. Vector tables are created laz
263
263
  ### Postgres (cloud)
264
264
 
265
265
  - **Vector storage**: [pgvector](https://github.com/pgvector/pgvector) with HNSW indexing
266
+ - **Local Docker**: use `docker-compose-postgres.yml` (`pgvector/pgvector:pg17`). Plain `postgres:17` lacks the extension; run `CREATE EXTENSION IF NOT EXISTS vector;` on any external instance before first migration.
266
267
  - **Chunk metadata table**: Created via Alembic migration (`search_vector_chunks` with `BIGSERIAL` primary key)
267
268
  - **Embedding table**: `search_vector_embeddings` created at runtime (dimension-dependent, same pattern as SQLite)
268
269
  - **Index**: HNSW index on the embedding column for fast approximate nearest-neighbour queries
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/basicmachines-co/basic-memory.git",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.21.0",
9
+ "version": "0.21.1",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "pypi",
13
13
  "identifier": "basic-memory",
14
- "version": "0.21.0",
14
+ "version": "0.21.1",
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.21.0"
4
+ __version__ = "0.21.1"
5
5
 
6
6
  # API version for FastAPI - independent of package version
7
7
  __api_version__ = "v0"
@@ -21,7 +21,7 @@ from basic_memory.utils import setup_logging, generate_permalink
21
21
 
22
22
  DATABASE_NAME = "memory.db"
23
23
  APP_DATABASE_NAME = "memory.db" # Using the same name but in the app directory
24
- DATA_DIR_NAME = ".basic-memory"
24
+ DATA_DIR_NAME = "basic-memory"
25
25
  CONFIG_FILE_NAME = "config.json"
26
26
  WATCH_STATUS_JSON = "watch-status.json"
27
27
  CONFIG_DIR_MODE = 0o700
@@ -69,15 +69,18 @@ def resolve_data_dir() -> Path:
69
69
 
70
70
  Single source of truth for the per-user state directory. Honors
71
71
  ``BASIC_MEMORY_CONFIG_DIR`` so each process/worktree can isolate config
72
- and database state; otherwise falls back to ``<user home>/.basic-memory``.
72
+ and database state; otherwise falls back to ``<user home>/.basic-memory``,
73
+ and then to ``XDG_CONFIG_HOME``.
73
74
 
74
75
  Cross-platform: ``Path.home()`` reads ``$HOME`` on POSIX and
75
76
  ``%USERPROFILE%`` on Windows, so there's no need to check ``$HOME``
76
77
  explicitly here.
77
78
  """
78
- if config_dir := os.getenv("BASIC_MEMORY_CONFIG_DIR"):
79
- return Path(config_dir)
80
- return Path.home() / DATA_DIR_NAME
79
+ if basic_memory_dir := os.getenv("BASIC_MEMORY_CONFIG_DIR"):
80
+ return Path(basic_memory_dir)
81
+ if xdg_config := os.getenv("XDG_CONFIG_HOME"):
82
+ return Path(xdg_config) / DATA_DIR_NAME
83
+ return Path.home() / ("." + DATA_DIR_NAME)
81
84
 
82
85
 
83
86
  def default_fastembed_cache_dir() -> str:
@@ -142,6 +142,15 @@ async def _set_cached_active_project(
142
142
  await context.set_state("default_project_name", active_project.name)
143
143
 
144
144
 
145
+ async def _clear_cached_active_project(context: Optional[Context]) -> None:
146
+ """Clear cached project metadata that may no longer match the active route."""
147
+ if not context:
148
+ return
149
+
150
+ await context.set_state("active_project", None)
151
+ await context.set_state("default_project_name", None)
152
+
153
+
145
154
  async def _get_cached_active_workspace(context: Optional[Context]) -> Optional[WorkspaceInfo]:
146
155
  """Return the cached active workspace from context when available."""
147
156
  if not context:
@@ -167,8 +176,7 @@ async def _set_cached_active_workspace(
167
176
  # Why: project names are only unique inside one workspace, so a cached
168
177
  # ProjectItem from the previous tenant can point at the wrong project
169
178
  # Outcome: force the next validation call to resolve within the new tenant
170
- await context.set_state("active_project", None)
171
- await context.set_state("default_project_name", None)
179
+ await _clear_cached_active_project(context)
172
180
 
173
181
  await context.set_state("active_workspace", active_workspace.model_dump())
174
182
 
@@ -525,6 +533,28 @@ def _cloud_workspace_discovery_available(config: BasicMemoryConfig) -> bool:
525
533
  )
526
534
 
527
535
 
536
+ def _workspace_identifier_discovery_available(
537
+ identifier: str,
538
+ config: BasicMemoryConfig,
539
+ ) -> bool:
540
+ """Return True when an identifier is allowed to consult workspace discovery."""
541
+ if _cloud_workspace_discovery_available(config):
542
+ return True
543
+
544
+ from basic_memory.mcp.async_client import (
545
+ _explicit_routing,
546
+ _force_local_mode,
547
+ )
548
+
549
+ if _explicit_routing() and _force_local_mode():
550
+ return False
551
+
552
+ return (
553
+ has_cloud_credentials(config)
554
+ and _split_workspace_identifier_segments(identifier) is not None
555
+ )
556
+
557
+
528
558
  async def resolve_workspace_qualified_memory_url(
529
559
  identifier: str,
530
560
  context: Optional[Context] = None,
@@ -1326,11 +1356,23 @@ async def detect_project_from_identifier_prefix(
1326
1356
  # Outcome: keep unqualified search/title input on the active/default project route.
1327
1357
  return None
1328
1358
 
1329
- if _cloud_workspace_discovery_available(config):
1330
- workspace_resolution = await resolve_workspace_qualified_identifier(
1331
- identifier,
1332
- context=context,
1359
+ if _workspace_identifier_discovery_available(identifier, config):
1360
+ workspace_discovery_fallback_errors = (
1361
+ "not found",
1362
+ "no accessible workspaces",
1363
+ "unable to discover",
1333
1364
  )
1365
+ try:
1366
+ workspace_resolution = await resolve_workspace_qualified_identifier(
1367
+ identifier,
1368
+ context=context,
1369
+ )
1370
+ except ValueError as exc:
1371
+ message = str(exc).lower()
1372
+ if any(error in message for error in workspace_discovery_fallback_errors):
1373
+ return None
1374
+ raise
1375
+
1334
1376
  if workspace_resolution is not None:
1335
1377
  return workspace_resolution.project_identifier
1336
1378
 
@@ -1345,7 +1387,7 @@ async def detect_project_from_identifier_prefix(
1345
1387
  )
1346
1388
  except ValueError as exc:
1347
1389
  message = str(exc).lower()
1348
- if "not found" in message or "no accessible workspaces" in message:
1390
+ if any(error in message for error in workspace_discovery_fallback_errors):
1349
1391
  return None
1350
1392
  raise
1351
1393
 
@@ -1462,9 +1504,54 @@ async def get_project_client(
1462
1504
  if project_id and not cloud_available:
1463
1505
  project_mode = ProjectMode.LOCAL
1464
1506
 
1507
+ # Trigger: project_id is a local external_id in a mixed local+cloud setup.
1508
+ # Why: UUIDs are not local config keys, so get_project_mode() treats them as
1509
+ # cloud projects. A local-first probe avoids making local UUIDs depend on
1510
+ # healthy cloud workspace discovery.
1511
+ # Outcome: resolve the effective UUID against local ASGI first; if it is not
1512
+ # local, preserve the existing cloud workspace lookup path.
1513
+ if (
1514
+ project_id
1515
+ and config.projects
1516
+ and not factory_mode
1517
+ and not explicit_cloud_routing
1518
+ and project_mode == ProjectMode.CLOUD
1519
+ ):
1520
+ try:
1521
+ canonical_project_id = str(UUID(resolved_project))
1522
+ except ValueError:
1523
+ pass
1524
+ else:
1525
+ with logfire.span(
1526
+ "routing.local_project_id_probe",
1527
+ project_id=canonical_project_id,
1528
+ ):
1529
+ async with get_client() as client:
1530
+ try:
1531
+ active_project = await get_active_project(
1532
+ client,
1533
+ canonical_project_id,
1534
+ context,
1535
+ )
1536
+ except ToolError as exc:
1537
+ if "not found" not in str(exc).lower():
1538
+ raise
1539
+ else:
1540
+ route_mode = "local_asgi"
1541
+ await _clear_cached_active_workspace_for_local_route(context)
1542
+ with logfire.span(
1543
+ "routing.client_session",
1544
+ project_name=active_project.name,
1545
+ route_mode=route_mode,
1546
+ ):
1547
+ logger.debug("Using local ASGI routing for project_id")
1548
+ yield client, active_project
1549
+ return
1550
+
1465
1551
  if factory_mode or project_mode == ProjectMode.CLOUD or explicit_cloud_routing:
1466
1552
  route_mode = "factory" if factory_mode else "cloud_proxy"
1467
1553
  active_ws: WorkspaceInfo | None = None
1554
+ resolved_entry: WorkspaceProjectEntry | None = None
1468
1555
  workspace_id: str
1469
1556
  project_for_api = _unqualified_project_identifier(resolved_project)
1470
1557
 
@@ -1487,6 +1574,13 @@ async def get_project_client(
1487
1574
 
1488
1575
  if active_ws is not None:
1489
1576
  await _set_cached_active_workspace(context, active_ws)
1577
+ if resolved_entry is not None:
1578
+ cached_project = await _get_cached_active_project(context)
1579
+ if (
1580
+ cached_project is not None
1581
+ and cached_project.external_id != resolved_entry.project.external_id
1582
+ ):
1583
+ await _clear_cached_active_project(context)
1490
1584
  with logfire.span(
1491
1585
  "routing.client_session",
1492
1586
  project_name=project_for_api,
@@ -9,7 +9,7 @@ from pydantic import AliasChoices, Field
9
9
 
10
10
  from basic_memory.config import ConfigManager
11
11
  from basic_memory.mcp.project_context import (
12
- _cloud_workspace_discovery_available,
12
+ _workspace_identifier_discovery_available,
13
13
  detect_project_from_memory_url_prefix,
14
14
  get_project_client,
15
15
  add_project_metadata,
@@ -368,8 +368,9 @@ async def edit_note(
368
368
  config,
369
369
  context=context,
370
370
  )
371
- elif _cloud_workspace_discovery_available(
372
- config
371
+ elif _workspace_identifier_discovery_available(
372
+ identifier,
373
+ config,
373
374
  ) and is_workspace_qualified_plain_identifier(identifier):
374
375
  detected = await detect_project_from_workspace_identifier_prefix(
375
376
  identifier,
@@ -40,17 +40,29 @@ async def detect_project_from_workspace_identifier_prefix(
40
40
  return None
41
41
 
42
42
  from basic_memory.mcp.project_context import (
43
- _cloud_workspace_discovery_available,
43
+ _workspace_identifier_discovery_available,
44
44
  resolve_workspace_qualified_identifier,
45
45
  )
46
46
 
47
- if not _cloud_workspace_discovery_available(config):
47
+ if not _workspace_identifier_discovery_available(identifier, config):
48
48
  return None
49
49
 
50
- workspace_resolution = await resolve_workspace_qualified_identifier(
51
- identifier,
52
- context=context,
50
+ workspace_discovery_fallback_errors = (
51
+ "not found",
52
+ "no accessible workspaces",
53
+ "unable to discover",
53
54
  )
55
+ try:
56
+ workspace_resolution = await resolve_workspace_qualified_identifier(
57
+ identifier,
58
+ context=context,
59
+ )
60
+ except ValueError as exc:
61
+ message = str(exc).lower()
62
+ if any(error in message for error in workspace_discovery_fallback_errors):
63
+ return None
64
+ raise
65
+
54
66
  if workspace_resolution is None:
55
67
  return None
56
68
  return workspace_resolution.project_identifier
@@ -10,6 +10,8 @@ pytest
10
10
 
11
11
  # Run tests against Postgres only (requires docker-compose)
12
12
  docker-compose -f docker-compose-postgres.yml up -d
13
+ BASIC_MEMORY_TEST_POSTGRES=1 \
14
+ POSTGRES_TEST_URL=postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory \
13
15
  pytest -m postgres
14
16
 
15
17
  # Run tests against BOTH backends
@@ -54,7 +56,7 @@ database_url = None # Uses default SQLite path
54
56
 
55
57
  # Postgres config
56
58
  database_backend = DatabaseBackend.POSTGRES
57
- database_url = "postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory_test"
59
+ database_url = "postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory"
58
60
  ```
59
61
 
60
62
  ## Running Postgres Tests
@@ -66,18 +68,22 @@ docker-compose -f docker-compose-postgres.yml up -d
66
68
  ```
67
69
 
68
70
  This starts:
69
- - Postgres 17 on port **5433** (not 5432 to avoid conflicts)
70
- - Test database: `basic_memory_test`
71
+ - Postgres 17 with **pgvector** (`pgvector/pgvector:pg17`) on port **5433** (not 5432 to avoid conflicts)
72
+ - Database: `basic_memory`
71
73
  - Credentials: `basic_memory_user` / `dev_password`
72
74
 
73
75
  ### 2. Run Postgres Tests
74
76
 
75
77
  ```bash
76
78
  # Run only Postgres tests
79
+ BASIC_MEMORY_TEST_POSTGRES=1 \
80
+ POSTGRES_TEST_URL=postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory \
77
81
  pytest -m postgres
78
82
 
79
83
  # Run specific test with Postgres
80
- pytest tests/test_entity_repository.py::test_create -m postgres
84
+ BASIC_MEMORY_TEST_POSTGRES=1 \
85
+ POSTGRES_TEST_URL=postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory \
86
+ pytest tests/repository/test_entity_repository.py::test_create -m postgres
81
87
 
82
88
  # Skip Postgres tests (default behavior)
83
89
  pytest -m "not postgres"
@@ -121,7 +127,7 @@ jobs:
121
127
  # Postgres service container
122
128
  services:
123
129
  postgres:
124
- image: postgres:17
130
+ image: pgvector/pgvector:pg17
125
131
  env:
126
132
  POSTGRES_DB: basic_memory_test
127
133
  POSTGRES_USER: basic_memory_user
@@ -169,4 +175,4 @@ docker-compose -f docker-compose-postgres.yml exec postgres pg_isready -U basic_
169
175
 
170
176
  - [ ] Add `--run-all-backends` CLI flag to run both backends in sequence
171
177
  - [ ] Implement test fixtures for backend-specific features (e.g., Postgres full-text search vs SQLite FTS5)
172
- - [ ] Add performance comparison benchmarks between backends
178
+ - [ ] Add performance comparison benchmarks between backends
@@ -20,6 +20,31 @@ def mcp() -> FastMCP:
20
20
  return cast(Any, mcp_server)
21
21
 
22
22
 
23
+ class ContextState:
24
+ """Minimal FastMCP context-state stub for MCP tests."""
25
+
26
+ def __init__(self):
27
+ self._state: dict[str, object] = {}
28
+
29
+ async def get_state(self, key: str):
30
+ return self._state.get(key)
31
+
32
+ async def set_state(self, key: str, value: object, **kwargs) -> None:
33
+ self._state[key] = value
34
+
35
+ async def info(self, message: str) -> None:
36
+ self._state["info_message"] = message
37
+
38
+
39
+ def ctx(context: ContextState) -> Any:
40
+ return cast(Any, context)
41
+
42
+
43
+ @pytest.fixture
44
+ def context_state() -> ContextState:
45
+ return ContextState()
46
+
47
+
23
48
  @pytest.fixture(scope="function")
24
49
  def app(
25
50
  app_config, project_config, engine_factory, config_manager