basic-memory 0.17.0__tar.gz → 0.17.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 (384) hide show
  1. {basic_memory-0.17.0 → basic_memory-0.17.2}/CHANGELOG.md +24 -0
  2. {basic_memory-0.17.0 → basic_memory-0.17.2}/PKG-INFO +1 -1
  3. {basic_memory-0.17.0 → basic_memory-0.17.2}/justfile +3 -2
  4. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/__init__.py +1 -1
  5. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/env.py +6 -2
  6. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/project_context.py +16 -4
  7. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/recent_activity.py +2 -1
  8. basic_memory-0.17.2/tests/mcp/test_project_context.py +144 -0
  9. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/beta.md +0 -0
  10. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/changelog.md +0 -0
  11. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/release-check.md +0 -0
  12. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/release.md +0 -0
  13. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/spec.md +0 -0
  14. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/test-live.md +0 -0
  15. {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/settings.json +0 -0
  16. {basic_memory-0.17.0 → basic_memory-0.17.2}/.dockerignore +0 -0
  17. {basic_memory-0.17.0 → basic_memory-0.17.2}/.env.example +0 -0
  18. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  21. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  22. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/dependabot.yml +0 -0
  23. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/claude-code-review.yml +0 -0
  24. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/claude-issue-triage.yml +0 -0
  25. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/claude.yml +0 -0
  26. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/dev-release.yml +0 -0
  27. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/docker.yml +0 -0
  28. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/pr-title.yml +0 -0
  29. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/release.yml +0 -0
  30. {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/test.yml +0 -0
  31. {basic_memory-0.17.0 → basic_memory-0.17.2}/.gitignore +0 -0
  32. {basic_memory-0.17.0 → basic_memory-0.17.2}/.python-version +0 -0
  33. {basic_memory-0.17.0 → basic_memory-0.17.2}/CITATION.cff +0 -0
  34. {basic_memory-0.17.0 → basic_memory-0.17.2}/CLA.md +0 -0
  35. {basic_memory-0.17.0 → basic_memory-0.17.2}/CLAUDE.md +0 -0
  36. {basic_memory-0.17.0 → basic_memory-0.17.2}/CODE_OF_CONDUCT.md +0 -0
  37. {basic_memory-0.17.0 → basic_memory-0.17.2}/CONTRIBUTING.md +0 -0
  38. {basic_memory-0.17.0 → basic_memory-0.17.2}/Dockerfile +0 -0
  39. {basic_memory-0.17.0 → basic_memory-0.17.2}/LICENSE +0 -0
  40. {basic_memory-0.17.0 → basic_memory-0.17.2}/README.md +0 -0
  41. {basic_memory-0.17.0 → basic_memory-0.17.2}/SECURITY.md +0 -0
  42. {basic_memory-0.17.0 → basic_memory-0.17.2}/docker-compose-postgres.yml +0 -0
  43. {basic_memory-0.17.0 → basic_memory-0.17.2}/docker-compose.yml +0 -0
  44. {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/Docker.md +0 -0
  45. {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/ai-assistant-guide-extended.md +0 -0
  46. {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/character-handling.md +0 -0
  47. {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/cloud-cli.md +0 -0
  48. {basic_memory-0.17.0 → basic_memory-0.17.2}/llms-install.md +0 -0
  49. {basic_memory-0.17.0 → basic_memory-0.17.2}/pyproject.toml +0 -0
  50. {basic_memory-0.17.0 → basic_memory-0.17.2}/smithery.yaml +0 -0
  51. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-1 Specification-Driven Development Process.md +0 -0
  52. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-10 Unified Deployment Workflow and Event Tracking.md +0 -0
  53. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-11 Basic Memory API Performance Optimization.md +0 -0
  54. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-12 OpenTelemetry Observability.md +0 -0
  55. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-13 CLI Authentication with Subscription Validation.md +0 -0
  56. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md +0 -0
  57. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md +0 -0
  58. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-15 Configuration Persistence via Tigris for Cloud Tenants.md +0 -0
  59. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-16 MCP Cloud Service Consolidation.md +0 -0
  60. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-17 Semantic Search with ChromaDB.md +0 -0
  61. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-18 AI Memory Management Tool.md +0 -0
  62. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-19 Sync Performance and Memory Optimization.md +0 -0
  63. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-2 Slash Commands Reference.md +0 -0
  64. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md +0 -0
  65. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-3 Agent Definitions.md +0 -0
  66. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-4 Notes Web UI Component Architecture.md +0 -0
  67. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-5 CLI Cloud Upload via WebDAV.md +0 -0
  68. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-6 Explicit Project Parameter Architecture.md +0 -0
  69. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-7 POC to spike Tigris Turso for local access to cloud data.md +0 -0
  70. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-8 TigrisFS Integration.md +0 -0
  71. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9 Multi-Project Bidirectional Sync Architecture.md +0 -0
  72. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9 Signed Header Tenant Information.md +0 -0
  73. {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9-1 Follow-Ups- Conflict, Sync, and Observability.md +0 -0
  74. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/alembic.ini +0 -0
  75. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/migrations.py +0 -0
  76. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/script.py.mako +0 -0
  77. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
  78. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  79. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  80. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
  81. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
  82. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  83. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  84. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
  85. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  86. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  87. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  88. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
  89. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/__init__.py +0 -0
  90. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/app.py +0 -0
  91. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/__init__.py +0 -0
  92. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/directory_router.py +0 -0
  93. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/importer_router.py +0 -0
  94. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/knowledge_router.py +0 -0
  95. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/management_router.py +0 -0
  96. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/memory_router.py +0 -0
  97. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/project_router.py +0 -0
  98. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/prompt_router.py +0 -0
  99. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/resource_router.py +0 -0
  100. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/search_router.py +0 -0
  101. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/utils.py +0 -0
  102. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/template_loader.py +0 -0
  103. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/__init__.py +0 -0
  104. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/__init__.py +0 -0
  105. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
  106. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/importer_router.py +0 -0
  107. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/knowledge_router.py +0 -0
  108. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/memory_router.py +0 -0
  109. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/project_router.py +0 -0
  110. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/prompt_router.py +0 -0
  111. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
  112. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/search_router.py +0 -0
  113. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/__init__.py +0 -0
  114. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/app.py +0 -0
  115. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/auth.py +0 -0
  116. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/__init__.py +0 -0
  117. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  118. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  119. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  120. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
  121. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  122. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_commands.py +0 -0
  123. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  124. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
  125. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  126. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  127. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/command_utils.py +0 -0
  128. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/db.py +0 -0
  129. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/format.py +0 -0
  130. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  131. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  132. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  133. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  134. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/mcp.py +0 -0
  135. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/project.py +0 -0
  136. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/status.py +0 -0
  137. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/telemetry.py +0 -0
  138. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/tool.py +0 -0
  139. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/main.py +0 -0
  140. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/config.py +0 -0
  141. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/db.py +0 -0
  142. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/deps.py +0 -0
  143. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/file_utils.py +0 -0
  144. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/ignore_utils.py +0 -0
  145. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/__init__.py +0 -0
  146. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/base.py +0 -0
  147. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  148. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
  149. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  150. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/memory_json_importer.py +0 -0
  151. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/utils.py +0 -0
  152. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/__init__.py +0 -0
  153. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/entity_parser.py +0 -0
  154. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/markdown_processor.py +0 -0
  155. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/plugins.py +0 -0
  156. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/schemas.py +0 -0
  157. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/utils.py +0 -0
  158. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/__init__.py +0 -0
  159. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/async_client.py +0 -0
  160. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  161. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  162. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  163. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  164. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/search.py +0 -0
  165. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/utils.py +0 -0
  166. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  167. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/resources/project_info.py +0 -0
  168. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/server.py +0 -0
  169. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/__init__.py +0 -0
  170. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/build_context.py +0 -0
  171. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/canvas.py +0 -0
  172. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
  173. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/delete_note.py +0 -0
  174. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/edit_note.py +0 -0
  175. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/list_directory.py +0 -0
  176. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/move_note.py +0 -0
  177. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/project_management.py +0 -0
  178. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/read_content.py +0 -0
  179. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/read_note.py +0 -0
  180. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/search.py +0 -0
  181. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/utils.py +0 -0
  182. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/view_note.py +0 -0
  183. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/write_note.py +0 -0
  184. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/__init__.py +0 -0
  185. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/base.py +0 -0
  186. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/knowledge.py +0 -0
  187. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/project.py +0 -0
  188. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/search.py +0 -0
  189. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/__init__.py +0 -0
  190. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/entity_repository.py +0 -0
  191. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/observation_repository.py +0 -0
  192. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/postgres_search_repository.py +0 -0
  193. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/project_info_repository.py +0 -0
  194. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/project_repository.py +0 -0
  195. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/relation_repository.py +0 -0
  196. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/repository.py +0 -0
  197. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/search_index_row.py +0 -0
  198. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/search_repository.py +0 -0
  199. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/search_repository_base.py +0 -0
  200. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/sqlite_search_repository.py +0 -0
  201. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/__init__.py +0 -0
  202. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/base.py +0 -0
  203. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/cloud.py +0 -0
  204. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/delete.py +0 -0
  205. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/directory.py +0 -0
  206. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/importer.py +0 -0
  207. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/memory.py +0 -0
  208. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/project_info.py +0 -0
  209. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/prompt.py +0 -0
  210. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/request.py +0 -0
  211. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/response.py +0 -0
  212. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/search.py +0 -0
  213. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/sync_report.py +0 -0
  214. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/v2/__init__.py +0 -0
  215. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/v2/entity.py +0 -0
  216. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/v2/resource.py +0 -0
  217. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/__init__.py +0 -0
  218. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/context_service.py +0 -0
  219. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/directory_service.py +0 -0
  220. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/entity_service.py +0 -0
  221. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/exceptions.py +0 -0
  222. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/file_service.py +0 -0
  223. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/initialization.py +0 -0
  224. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/link_resolver.py +0 -0
  225. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/project_service.py +0 -0
  226. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/search_service.py +0 -0
  227. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/service.py +0 -0
  228. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/__init__.py +0 -0
  229. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/background_sync.py +0 -0
  230. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/sync_service.py +0 -0
  231. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/watch_service.py +0 -0
  232. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/telemetry.py +0 -0
  233. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  234. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/templates/prompts/search.hbs +0 -0
  235. {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/utils.py +0 -0
  236. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/BENCHMARKS.md +0 -0
  237. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/cli/test_project_commands_integration.py +0 -0
  238. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/cli/test_version_integration.py +0 -0
  239. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/conftest.py +0 -0
  240. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_build_context_underscore.py +0 -0
  241. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_build_context_validation.py +0 -0
  242. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  243. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  244. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_delete_note_integration.py +0 -0
  245. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_edit_note_integration.py +0 -0
  246. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
  247. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_list_directory_integration.py +0 -0
  248. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_move_note_integration.py +0 -0
  249. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_project_management_integration.py +0 -0
  250. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_project_state_sync_integration.py +0 -0
  251. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_read_content_integration.py +0 -0
  252. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_read_note_integration.py +0 -0
  253. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_search_integration.py +0 -0
  254. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  255. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_write_note_integration.py +0 -0
  256. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/test_db_wal_mode.py +0 -0
  257. {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/test_disable_permalinks_integration.py +0 -0
  258. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/Non-MarkdownFileSupport.pdf +0 -0
  259. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/README.md +0 -0
  260. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/Screenshot.png +0 -0
  261. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/__init__.py +0 -0
  262. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/conftest.py +0 -0
  263. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_async_client.py +0 -0
  264. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_continue_conversation_template.py +0 -0
  265. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_directory_router.py +0 -0
  266. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_importer_router.py +0 -0
  267. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_knowledge_router.py +0 -0
  268. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_management_router.py +0 -0
  269. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_memory_router.py +0 -0
  270. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_project_router.py +0 -0
  271. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_project_router_operations.py +0 -0
  272. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_prompt_router.py +0 -0
  273. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_relation_background_resolution.py +0 -0
  274. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_resource_router.py +0 -0
  275. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_search_router.py +0 -0
  276. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_search_template.py +0 -0
  277. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_template_loader.py +0 -0
  278. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_template_loader_helpers.py +0 -0
  279. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/__init__.py +0 -0
  280. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/conftest.py +0 -0
  281. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_directory_router.py +0 -0
  282. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_importer_router.py +0 -0
  283. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_knowledge_router.py +0 -0
  284. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_memory_router.py +0 -0
  285. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_project_router.py +0 -0
  286. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_prompt_router.py +0 -0
  287. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_resource_router.py +0 -0
  288. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_search_router.py +0 -0
  289. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/conftest.py +0 -0
  290. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cli_exit.py +0 -0
  291. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cli_tool_exit.py +0 -0
  292. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cli_tools.py +0 -0
  293. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cloud_authentication.py +0 -0
  294. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_ignore_utils.py +0 -0
  295. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_chatgpt.py +0 -0
  296. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_claude_conversations.py +0 -0
  297. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_claude_projects.py +0 -0
  298. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_memory_json.py +0 -0
  299. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_project_add_with_local_path.py +0 -0
  300. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_upload.py +0 -0
  301. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/conftest.py +0 -0
  302. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  303. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/importers/test_conversation_indexing.py +0 -0
  304. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/importers/test_importer_base.py +0 -0
  305. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/importers/test_importer_utils.py +0 -0
  306. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/__init__.py +0 -0
  307. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  308. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_entity_parser.py +0 -0
  309. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  310. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_markdown_plugins.py +0 -0
  311. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_markdown_processor.py +0 -0
  312. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_observation_edge_cases.py +0 -0
  313. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_parser_edge_cases.py +0 -0
  314. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_relation_edge_cases.py +0 -0
  315. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_task_detection.py +0 -0
  316. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/conftest.py +0 -0
  317. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  318. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  319. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_prompts.py +0 -0
  320. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_resources.py +0 -0
  321. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_build_context.py +0 -0
  322. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_canvas.py +0 -0
  323. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_delete_note.py +0 -0
  324. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_edit_note.py +0 -0
  325. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_list_directory.py +0 -0
  326. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_move_note.py +0 -0
  327. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_read_content.py +0 -0
  328. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_read_note.py +0 -0
  329. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_recent_activity.py +0 -0
  330. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_resource.py +0 -0
  331. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_search.py +0 -0
  332. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_utils.py +0 -0
  333. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_view_note.py +0 -0
  334. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_write_note.py +0 -0
  335. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_write_note_kebab_filenames.py +0 -0
  336. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
  337. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_entity_repository.py +0 -0
  338. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_entity_repository_upsert.py +0 -0
  339. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_entity_upsert_issue_187.py +0 -0
  340. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_observation_repository.py +0 -0
  341. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_project_info_repository.py +0 -0
  342. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_project_repository.py +0 -0
  343. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_relation_repository.py +0 -0
  344. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_repository.py +0 -0
  345. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_search_repository.py +0 -0
  346. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
  347. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  348. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_memory_serialization.py +0 -0
  349. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_memory_url.py +0 -0
  350. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_memory_url_validation.py +0 -0
  351. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_schemas.py +0 -0
  352. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_search.py +0 -0
  353. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_context_service.py +0 -0
  354. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_directory_service.py +0 -0
  355. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_entity_service.py +0 -0
  356. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  357. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_file_service.py +0 -0
  358. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_initialization.py +0 -0
  359. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_link_resolver.py +0 -0
  360. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_project_removal_bug.py +0 -0
  361. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_project_service.py +0 -0
  362. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_project_service_operations.py +0 -0
  363. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_search_service.py +0 -0
  364. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_character_conflicts.py +0 -0
  365. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_sync_service.py +0 -0
  366. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_sync_service_incremental.py +0 -0
  367. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_sync_wikilink_issue.py +0 -0
  368. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_tmp_files.py +0 -0
  369. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_watch_service.py +0 -0
  370. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_watch_service_edge_cases.py +0 -0
  371. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_watch_service_reload.py +0 -0
  372. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_config.py +0 -0
  373. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_deps.py +0 -0
  374. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_production_cascade_delete.py +0 -0
  375. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_rclone_commands.py +0 -0
  376. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_telemetry.py +0 -0
  377. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_file_utils.py +0 -0
  378. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  379. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_parse_tags.py +0 -0
  380. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_permalink_formatting.py +0 -0
  381. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_timezone_utils.py +0 -0
  382. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_utf8_handling.py +0 -0
  383. {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_validate_project_path.py +0 -0
  384. {basic_memory-0.17.0 → basic_memory-0.17.2}/uv.lock +0 -0
@@ -1,5 +1,29 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.17.2 (2025-12-29)
4
+
5
+ ### Bug Fixes
6
+
7
+ - Allow recent_activity discovery mode in cloud mode
8
+ ([`0bcda4a`](https://github.com/basicmachines-co/basic-memory/commit/0bcda4a))
9
+ - Add `allow_discovery` parameter to `resolve_project_parameter()`
10
+ - Tools like `recent_activity` can now work across all projects in cloud mode
11
+ - Fix circular import in project_context module
12
+
13
+ ### Internal
14
+
15
+ - Optimize release workflow by running lint/typecheck only (skip full tests)
16
+ ([`0b5425f`](https://github.com/basicmachines-co/basic-memory/commit/0b5425f))
17
+
18
+ ## v0.17.1 (2025-12-29)
19
+
20
+ ### Bug Fixes
21
+
22
+ - **#482**: Only set BASIC_MEMORY_ENV=test during pytest runs
23
+ ([`98fbd60`](https://github.com/basicmachines-co/basic-memory/commit/98fbd60))
24
+ - Fixes environment variable pollution affecting alembic migrations
25
+ - Test environment detection now scoped to pytest execution only
26
+
3
27
  ## v0.17.0 (2025-12-28)
4
28
 
5
29
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.17.0
3
+ Version: 0.17.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
@@ -182,8 +182,9 @@ release version:
182
182
  fi
183
183
 
184
184
  # Run quality checks
185
- echo "🔍 Running quality checks..."
186
- just check
185
+ echo "🔍 Running lint checks..."
186
+ just lint
187
+ just typecheck
187
188
 
188
189
  # Update version in __init__.py
189
190
  echo "📝 Updating version in __init__.py..."
@@ -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.0"
4
+ __version__ = "0.17.2"
5
5
 
6
6
  # API version for FastAPI - independent of package version
7
7
  __api_version__ = "v0"
@@ -21,8 +21,12 @@ from alembic import context
21
21
 
22
22
  from basic_memory.config import ConfigManager
23
23
 
24
- # set config.env to "test" for pytest to prevent logging to file in utils.setup_logging()
25
- os.environ["BASIC_MEMORY_ENV"] = "test"
24
+ # Trigger: only set test env when actually running under pytest
25
+ # Why: alembic/env.py is imported during normal operations (MCP server startup, migrations)
26
+ # but we only want test behavior during actual test runs
27
+ # Outcome: prevents is_test_env from returning True in production, enabling watch service
28
+ if os.getenv("PYTEST_CURRENT_TEST") is not None:
29
+ os.environ["BASIC_MEMORY_ENV"] = "test"
26
30
 
27
31
  # Import after setting environment variable # noqa: E402
28
32
  from basic_memory.models import Base # noqa: E402
@@ -14,16 +14,17 @@ from loguru import logger
14
14
  from fastmcp import Context
15
15
 
16
16
  from basic_memory.config import ConfigManager
17
- from basic_memory.mcp.tools.utils import call_get
18
17
  from basic_memory.schemas.project_info import ProjectItem, ProjectList
19
18
  from basic_memory.utils import generate_permalink
20
19
 
21
20
 
22
- async def resolve_project_parameter(project: Optional[str] = None) -> Optional[str]:
21
+ async def resolve_project_parameter(
22
+ project: Optional[str] = None, allow_discovery: bool = False
23
+ ) -> Optional[str]:
23
24
  """Resolve project parameter using three-tier hierarchy.
24
25
 
25
26
  if config.cloud_mode:
26
- project is required
27
+ project is required (unless allow_discovery=True for tools that support discovery mode)
27
28
  else:
28
29
  Resolution order:
29
30
  1. Single Project Mode (--project cli arg, or BASIC_MEMORY_MCP_PROJECT env var) - highest priority
@@ -32,17 +33,22 @@ async def resolve_project_parameter(project: Optional[str] = None) -> Optional[s
32
33
 
33
34
  Args:
34
35
  project: Optional explicit project parameter
36
+ allow_discovery: If True, allows returning None in cloud mode for discovery mode
37
+ (used by tools like recent_activity that can operate across all projects)
35
38
 
36
39
  Returns:
37
40
  Resolved project name or None if no resolution possible
38
41
  """
39
42
 
40
43
  config = ConfigManager().config
41
- # if cloud_mode, project is required
44
+ # if cloud_mode, project is required (unless discovery mode is allowed)
42
45
  if config.cloud_mode:
43
46
  if project:
44
47
  logger.debug(f"project: {project}, cloud_mode: {config.cloud_mode}")
45
48
  return project
49
+ elif allow_discovery:
50
+ logger.debug("cloud_mode: discovery mode allowed, returning None")
51
+ return None
46
52
  else:
47
53
  raise ValueError("No project specified. Project is required for cloud mode.")
48
54
 
@@ -67,6 +73,9 @@ async def resolve_project_parameter(project: Optional[str] = None) -> Optional[s
67
73
 
68
74
 
69
75
  async def get_project_names(client: AsyncClient, headers: HeaderTypes | None = None) -> List[str]:
76
+ # Deferred import to avoid circular dependency with tools
77
+ from basic_memory.mcp.tools.utils import call_get
78
+
70
79
  response = await call_get(client, "/projects/projects", headers=headers)
71
80
  project_list = ProjectList.model_validate(response.json())
72
81
  return [project.name for project in project_list.projects]
@@ -92,6 +101,9 @@ async def get_active_project(
92
101
  ValueError: If no project can be resolved
93
102
  HTTPError: If project doesn't exist or is inaccessible
94
103
  """
104
+ # Deferred import to avoid circular dependency with tools
105
+ from basic_memory.mcp.tools.utils import call_get
106
+
95
107
  resolved_project = await resolve_project_parameter(project)
96
108
  if not resolved_project:
97
109
  project_names = await get_project_names(client, headers)
@@ -135,7 +135,8 @@ async def recent_activity(
135
135
  params["type"] = [t.value for t in validated_types] # pyright: ignore
136
136
 
137
137
  # Resolve project parameter using the three-tier hierarchy
138
- resolved_project = await resolve_project_parameter(project)
138
+ # allow_discovery=True enables Discovery Mode, so a project is not required
139
+ resolved_project = await resolve_project_parameter(project, allow_discovery=True)
139
140
 
140
141
  if resolved_project is None:
141
142
  # Discovery Mode: Get activity across all projects
@@ -0,0 +1,144 @@
1
+ """Tests for project context utilities."""
2
+
3
+ import os
4
+ from unittest.mock import patch, MagicMock
5
+
6
+ import pytest
7
+
8
+
9
+ class TestResolveProjectParameter:
10
+ """Tests for resolve_project_parameter function."""
11
+
12
+ @pytest.mark.asyncio
13
+ async def test_cloud_mode_requires_project_by_default(self):
14
+ """In cloud mode, project is required when allow_discovery=False."""
15
+ from basic_memory.mcp.project_context import resolve_project_parameter
16
+
17
+ mock_config = MagicMock()
18
+ mock_config.cloud_mode = True
19
+
20
+ with patch(
21
+ "basic_memory.mcp.project_context.ConfigManager"
22
+ ) as mock_config_manager:
23
+ mock_config_manager.return_value.config = mock_config
24
+
25
+ with pytest.raises(ValueError) as exc_info:
26
+ await resolve_project_parameter(project=None, allow_discovery=False)
27
+
28
+ assert "No project specified" in str(exc_info.value)
29
+ assert "Project is required for cloud mode" in str(exc_info.value)
30
+
31
+ @pytest.mark.asyncio
32
+ async def test_cloud_mode_allows_discovery_when_enabled(self):
33
+ """In cloud mode with allow_discovery=True, returns None instead of error."""
34
+ from basic_memory.mcp.project_context import resolve_project_parameter
35
+
36
+ mock_config = MagicMock()
37
+ mock_config.cloud_mode = True
38
+
39
+ with patch(
40
+ "basic_memory.mcp.project_context.ConfigManager"
41
+ ) as mock_config_manager:
42
+ mock_config_manager.return_value.config = mock_config
43
+
44
+ result = await resolve_project_parameter(project=None, allow_discovery=True)
45
+
46
+ assert result is None
47
+
48
+ @pytest.mark.asyncio
49
+ async def test_cloud_mode_returns_project_when_specified(self):
50
+ """In cloud mode, returns the specified project."""
51
+ from basic_memory.mcp.project_context import resolve_project_parameter
52
+
53
+ mock_config = MagicMock()
54
+ mock_config.cloud_mode = True
55
+
56
+ with patch(
57
+ "basic_memory.mcp.project_context.ConfigManager"
58
+ ) as mock_config_manager:
59
+ mock_config_manager.return_value.config = mock_config
60
+
61
+ result = await resolve_project_parameter(project="my-project")
62
+
63
+ assert result == "my-project"
64
+
65
+ @pytest.mark.asyncio
66
+ async def test_local_mode_uses_env_var_priority(self):
67
+ """In local mode, BASIC_MEMORY_MCP_PROJECT env var takes priority."""
68
+ from basic_memory.mcp.project_context import resolve_project_parameter
69
+
70
+ mock_config = MagicMock()
71
+ mock_config.cloud_mode = False
72
+
73
+ with patch(
74
+ "basic_memory.mcp.project_context.ConfigManager"
75
+ ) as mock_config_manager:
76
+ mock_config_manager.return_value.config = mock_config
77
+
78
+ with patch.dict(os.environ, {"BASIC_MEMORY_MCP_PROJECT": "env-project"}):
79
+ result = await resolve_project_parameter(project="explicit-project")
80
+
81
+ # Env var should take priority over explicit project
82
+ assert result == "env-project"
83
+
84
+ @pytest.mark.asyncio
85
+ async def test_local_mode_uses_explicit_project(self):
86
+ """In local mode without env var, uses explicit project parameter."""
87
+ from basic_memory.mcp.project_context import resolve_project_parameter
88
+
89
+ mock_config = MagicMock()
90
+ mock_config.cloud_mode = False
91
+ mock_config.default_project_mode = False
92
+
93
+ with patch(
94
+ "basic_memory.mcp.project_context.ConfigManager"
95
+ ) as mock_config_manager:
96
+ mock_config_manager.return_value.config = mock_config
97
+
98
+ with patch.dict(os.environ, {}, clear=True):
99
+ # Remove the env var if it exists
100
+ os.environ.pop("BASIC_MEMORY_MCP_PROJECT", None)
101
+ result = await resolve_project_parameter(project="explicit-project")
102
+
103
+ assert result == "explicit-project"
104
+
105
+ @pytest.mark.asyncio
106
+ async def test_local_mode_uses_default_project(self):
107
+ """In local mode with default_project_mode, uses default project."""
108
+ from basic_memory.mcp.project_context import resolve_project_parameter
109
+
110
+ mock_config = MagicMock()
111
+ mock_config.cloud_mode = False
112
+ mock_config.default_project_mode = True
113
+ mock_config.default_project = "default-project"
114
+
115
+ with patch(
116
+ "basic_memory.mcp.project_context.ConfigManager"
117
+ ) as mock_config_manager:
118
+ mock_config_manager.return_value.config = mock_config
119
+
120
+ with patch.dict(os.environ, {}, clear=True):
121
+ os.environ.pop("BASIC_MEMORY_MCP_PROJECT", None)
122
+ result = await resolve_project_parameter(project=None)
123
+
124
+ assert result == "default-project"
125
+
126
+ @pytest.mark.asyncio
127
+ async def test_local_mode_returns_none_when_no_resolution(self):
128
+ """In local mode without any project source, returns None."""
129
+ from basic_memory.mcp.project_context import resolve_project_parameter
130
+
131
+ mock_config = MagicMock()
132
+ mock_config.cloud_mode = False
133
+ mock_config.default_project_mode = False
134
+
135
+ with patch(
136
+ "basic_memory.mcp.project_context.ConfigManager"
137
+ ) as mock_config_manager:
138
+ mock_config_manager.return_value.config = mock_config
139
+
140
+ with patch.dict(os.environ, {}, clear=True):
141
+ os.environ.pop("BASIC_MEMORY_MCP_PROJECT", None)
142
+ result = await resolve_project_parameter(project=None)
143
+
144
+ assert result is None
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes