basic-memory 0.14.0b1__tar.gz → 0.14.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.

Potentially problematic release.


This version of basic-memory might be problematic. Click here for more details.

Files changed (279) hide show
  1. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/CHANGELOG.md +167 -39
  2. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/PKG-INFO +14 -3
  3. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/README.md +12 -1
  4. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/justfile +1 -1
  5. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/pyproject.toml +2 -2
  6. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/__init__.py +1 -1
  7. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/markdown/utils.py +3 -1
  8. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/auth_provider.py +8 -8
  9. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/supabase_auth_provider.py +5 -5
  10. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/__init__.py +4 -4
  11. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/project_management.py +13 -8
  12. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/search.py +115 -38
  13. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/response.py +1 -1
  14. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/utils.py +2 -0
  15. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_auth_provider.py +4 -4
  16. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_server.py +1 -1
  17. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_edit_note.py +39 -0
  18. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_search.py +63 -22
  19. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_search_repository.py +11 -9
  20. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/schemas/test_schemas.py +30 -0
  21. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/uv.lock +1 -1
  22. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.claude/commands/release/beta.md +0 -0
  23. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.claude/commands/release/changelog.md +0 -0
  24. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.claude/commands/release/release-check.md +0 -0
  25. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.claude/commands/release/release.md +0 -0
  26. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.claude/commands/test-live.md +0 -0
  27. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.dockerignore +0 -0
  28. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  29. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  30. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  31. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  32. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/dependabot.yml +0 -0
  33. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/workflows/claude.yml +0 -0
  34. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/workflows/dev-release.yml +0 -0
  35. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/workflows/docker.yml +0 -0
  36. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/workflows/pr-title.yml +0 -0
  37. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/workflows/release.yml +0 -0
  38. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.github/workflows/test.yml +0 -0
  39. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.gitignore +0 -0
  40. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/.python-version +0 -0
  41. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/CITATION.cff +0 -0
  42. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/CLA.md +0 -0
  43. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/CLAUDE.md +0 -0
  44. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/CODE_OF_CONDUCT.md +0 -0
  45. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/CONTRIBUTING.md +0 -0
  46. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/Dockerfile +0 -0
  47. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/LICENSE +0 -0
  48. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/SECURITY.md +0 -0
  49. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/docker-compose.yml +0 -0
  50. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/docs/AI Assistant Guide.md +0 -0
  51. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/docs/Docker.md +0 -0
  52. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/llms-install.md +0 -0
  53. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/memory.json +0 -0
  54. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/smithery.yaml +0 -0
  55. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/alembic.ini +0 -0
  56. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/env.py +0 -0
  57. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/migrations.py +0 -0
  58. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/script.py.mako +0 -0
  59. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  60. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  61. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
  62. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
  63. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  64. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
  65. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/__init__.py +0 -0
  66. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/app.py +0 -0
  67. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/__init__.py +0 -0
  68. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/directory_router.py +0 -0
  69. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/importer_router.py +0 -0
  70. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/knowledge_router.py +0 -0
  71. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/management_router.py +0 -0
  72. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/memory_router.py +0 -0
  73. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/project_router.py +0 -0
  74. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/prompt_router.py +0 -0
  75. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/resource_router.py +0 -0
  76. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/search_router.py +0 -0
  77. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/routers/utils.py +0 -0
  78. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/api/template_loader.py +0 -0
  79. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/__init__.py +0 -0
  80. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/app.py +0 -0
  81. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/__init__.py +0 -0
  82. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/auth.py +0 -0
  83. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/db.py +0 -0
  84. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  85. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  86. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  87. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  88. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/mcp.py +0 -0
  89. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/project.py +0 -0
  90. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/status.py +0 -0
  91. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/sync.py +0 -0
  92. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/commands/tool.py +0 -0
  93. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/cli/main.py +0 -0
  94. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/config.py +0 -0
  95. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/db.py +0 -0
  96. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/deps.py +0 -0
  97. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/file_utils.py +0 -0
  98. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/__init__.py +0 -0
  99. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/base.py +0 -0
  100. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  101. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
  102. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  103. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/memory_json_importer.py +0 -0
  104. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/importers/utils.py +0 -0
  105. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/markdown/__init__.py +0 -0
  106. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/markdown/entity_parser.py +0 -0
  107. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/markdown/markdown_processor.py +0 -0
  108. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/markdown/plugins.py +0 -0
  109. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/markdown/schemas.py +0 -0
  110. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/__init__.py +0 -0
  111. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/async_client.py +0 -0
  112. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/external_auth_provider.py +0 -0
  113. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/project_session.py +0 -0
  114. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  115. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  116. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  117. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  118. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/search.py +0 -0
  119. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/sync_status.py +0 -0
  120. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/prompts/utils.py +0 -0
  121. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  122. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/resources/project_info.py +0 -0
  123. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/server.py +0 -0
  124. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/build_context.py +0 -0
  125. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/canvas.py +0 -0
  126. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/delete_note.py +0 -0
  127. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/edit_note.py +0 -0
  128. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/list_directory.py +0 -0
  129. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/move_note.py +0 -0
  130. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/read_content.py +0 -0
  131. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/read_note.py +0 -0
  132. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
  133. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/sync_status.py +0 -0
  134. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/utils.py +0 -0
  135. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/view_note.py +0 -0
  136. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/mcp/tools/write_note.py +0 -0
  137. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/models/__init__.py +0 -0
  138. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/models/base.py +0 -0
  139. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/models/knowledge.py +0 -0
  140. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/models/project.py +0 -0
  141. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/models/search.py +0 -0
  142. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/__init__.py +0 -0
  143. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/entity_repository.py +0 -0
  144. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/observation_repository.py +0 -0
  145. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/project_info_repository.py +0 -0
  146. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/project_repository.py +0 -0
  147. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/relation_repository.py +0 -0
  148. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/repository.py +0 -0
  149. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/repository/search_repository.py +0 -0
  150. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/__init__.py +0 -0
  151. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/base.py +0 -0
  152. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/delete.py +0 -0
  153. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/directory.py +0 -0
  154. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/importer.py +0 -0
  155. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/memory.py +0 -0
  156. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/project_info.py +0 -0
  157. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/prompt.py +0 -0
  158. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/request.py +0 -0
  159. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/schemas/search.py +0 -0
  160. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/__init__.py +0 -0
  161. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/context_service.py +0 -0
  162. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/directory_service.py +0 -0
  163. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/entity_service.py +0 -0
  164. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/exceptions.py +0 -0
  165. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/file_service.py +0 -0
  166. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/initialization.py +0 -0
  167. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/link_resolver.py +0 -0
  168. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/migration_service.py +0 -0
  169. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/project_service.py +0 -0
  170. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/search_service.py +0 -0
  171. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/service.py +0 -0
  172. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/services/sync_status_service.py +0 -0
  173. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/sync/__init__.py +0 -0
  174. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/sync/background_sync.py +0 -0
  175. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/sync/sync_service.py +0 -0
  176. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/sync/watch_service.py +0 -0
  177. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  178. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/src/basic_memory/templates/prompts/search.hbs +0 -0
  179. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/cli/test_reset_integration.py +0 -0
  180. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/conftest.py +0 -0
  181. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_build_context_validation.py +0 -0
  182. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_delete_note_integration.py +0 -0
  183. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_edit_note_integration.py +0 -0
  184. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_list_directory_integration.py +0 -0
  185. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_move_note_integration.py +0 -0
  186. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_project_management_integration.py +0 -0
  187. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_project_state_sync_integration.py +0 -0
  188. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_read_content_integration.py +0 -0
  189. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_read_note_integration.py +0 -0
  190. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_search_integration.py +0 -0
  191. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/test-int/mcp/test_write_note_integration.py +0 -0
  192. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/Non-MarkdownFileSupport.pdf +0 -0
  193. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/Screenshot.png +0 -0
  194. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/__init__.py +0 -0
  195. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/conftest.py +0 -0
  196. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_continue_conversation_template.py +0 -0
  197. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_directory_router.py +0 -0
  198. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_importer_router.py +0 -0
  199. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_knowledge_router.py +0 -0
  200. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_management_router.py +0 -0
  201. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_memory_router.py +0 -0
  202. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_project_router.py +0 -0
  203. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_project_router_operations.py +0 -0
  204. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_prompt_router.py +0 -0
  205. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_resource_router.py +0 -0
  206. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_search_router.py +0 -0
  207. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_search_template.py +0 -0
  208. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_template_loader.py +0 -0
  209. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/api/test_template_loader_helpers.py +0 -0
  210. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/conftest.py +0 -0
  211. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_auth_commands.py +0 -0
  212. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_cli_tools.py +0 -0
  213. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_import_chatgpt.py +0 -0
  214. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_import_claude_conversations.py +0 -0
  215. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_import_claude_projects.py +0 -0
  216. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_import_memory_json.py +0 -0
  217. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_project_commands.py +0 -0
  218. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_project_info.py +0 -0
  219. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_status.py +0 -0
  220. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_sync.py +0 -0
  221. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/cli/test_version.py +0 -0
  222. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/conftest.py +0 -0
  223. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/importers/test_importer_base.py +0 -0
  224. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/importers/test_importer_utils.py +0 -0
  225. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/__init__.py +0 -0
  226. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_entity_parser.py +0 -0
  227. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_markdown_plugins.py +0 -0
  228. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_markdown_processor.py +0 -0
  229. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_observation_edge_cases.py +0 -0
  230. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_parser_edge_cases.py +0 -0
  231. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_relation_edge_cases.py +0 -0
  232. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/markdown/test_task_detection.py +0 -0
  233. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/conftest.py +0 -0
  234. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_prompts.py +0 -0
  235. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_resource_project_info.py +0 -0
  236. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_resources.py +0 -0
  237. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_build_context.py +0 -0
  238. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_canvas.py +0 -0
  239. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_delete_note.py +0 -0
  240. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_list_directory.py +0 -0
  241. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_move_note.py +0 -0
  242. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_read_note.py +0 -0
  243. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_recent_activity.py +0 -0
  244. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_resource.py +0 -0
  245. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_sync_status.py +0 -0
  246. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_utils.py +0 -0
  247. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_view_note.py +0 -0
  248. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/mcp/test_tool_write_note.py +0 -0
  249. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_entity_repository.py +0 -0
  250. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_entity_repository_upsert.py +0 -0
  251. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_observation_repository.py +0 -0
  252. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_project_info_repository.py +0 -0
  253. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_project_repository.py +0 -0
  254. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_relation_repository.py +0 -0
  255. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/repository/test_repository.py +0 -0
  256. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/schemas/test_memory_url.py +0 -0
  257. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/schemas/test_memory_url_validation.py +0 -0
  258. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/schemas/test_search.py +0 -0
  259. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_context_service.py +0 -0
  260. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_directory_service.py +0 -0
  261. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_entity_service.py +0 -0
  262. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_file_service.py +0 -0
  263. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_initialization.py +0 -0
  264. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_link_resolver.py +0 -0
  265. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_project_service.py +0 -0
  266. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_project_service_operations.py +0 -0
  267. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_search_service.py +0 -0
  268. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/services/test_sync_status_service.py +0 -0
  269. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/sync/test_sync_service.py +0 -0
  270. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/sync/test_sync_wikilink_issue.py +0 -0
  271. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/sync/test_tmp_files.py +0 -0
  272. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/sync/test_watch_service.py +0 -0
  273. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/sync/test_watch_service_edge_cases.py +0 -0
  274. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/test_config.py +0 -0
  275. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/test_db_migration_deduplication.py +0 -0
  276. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/utils/test_file_utils.py +0 -0
  277. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/utils/test_parse_tags.py +0 -0
  278. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/utils/test_permalink_formatting.py +0 -0
  279. {basic_memory-0.14.0b1 → basic_memory-0.14.2}/tests/utils/test_utf8_handling.py +0 -0
@@ -1,56 +1,184 @@
1
1
  # CHANGELOG
2
2
 
3
- ## v0.13.8 (2025-06-20)
3
+ ## v0.14.2 (2025-07-03)
4
+
5
+ ### Bug Fixes
6
+
7
+ - **#204**: Fix MCP Error with MCP-Hub integration
8
+ ([`3621bb7`](https://github.com/basicmachines-co/basic-memory/commit/3621bb7b4d6ac12d892b18e36bb8f7c9101c7b10))
9
+ - Resolve compatibility issues with MCP-Hub
10
+ - Improve error handling in project management tools
11
+ - Ensure stable MCP tool integration across different environments
12
+
13
+ - **Modernize datetime handling and suppress SQLAlchemy warnings**
14
+ ([`f80ac0e`](https://github.com/basicmachines-co/basic-memory/commit/f80ac0e3e74b7a737a7fc7b956b5c1d61b0c67b8))
15
+ - Replace deprecated `datetime.utcnow()` with timezone-aware alternatives
16
+ - Suppress SQLAlchemy deprecation warnings for cleaner output
17
+ - Improve future compatibility with Python datetime best practices
18
+
19
+ ## v0.14.1 (2025-07-03)
20
+
21
+ ### Bug Fixes
22
+
23
+ - **#203**: Constrain fastmcp version to prevent breaking changes
24
+ ([`827f7cf`](https://github.com/basicmachines-co/basic-memory/commit/827f7cf86e7b84c56e7a43bb83f2e5d84a1ad8b8))
25
+ - Pin fastmcp to compatible version range to avoid API breaking changes
26
+ - Ensure stable MCP server functionality across updates
27
+ - Improve dependency management for production deployments
28
+
29
+ - **#190**: Fix Problems with MCP integration
30
+ ([`bd4f551`](https://github.com/basicmachines-co/basic-memory/commit/bd4f551a5bb0b7b4d3a5b04de70e08987c6ab2f9))
31
+ - Resolve MCP server initialization and communication issues
32
+ - Improve error handling and recovery in MCP operations
33
+ - Enhance stability for AI assistant integrations
4
34
 
5
35
  ### Features
6
36
 
7
- - **Docker Container Support** - Complete Docker integration with volume mounting for Obsidian directories
8
- ([`3269a2f`](https://github.com/basicmachines-co/basic-memory/commit/3269a2f33a7595f6d9e5207924062e2542f46759))
9
- - Docker Compose configuration for easy deployment
10
- - Volume mounting for persistent data and Obsidian integration
11
- - Comprehensive Docker documentation and setup guides
12
- - Streamlined container-based workflow
37
+ - **Add Cursor IDE integration button** - One-click setup for Cursor IDE users
38
+ ([`5360005`](https://github.com/basicmachines-co/basic-memory/commit/536000512294d66090bf87abc8014f4dfc284310))
39
+ - Direct installation button for Cursor IDE in README
40
+ - Streamlined setup process for Cursor users
41
+ - Enhanced developer experience for AI-powered coding
42
+
43
+ - **Add Homebrew installation instructions** - Official Homebrew tap support
44
+ ([`39f811f`](https://github.com/basicmachines-co/basic-memory/commit/39f811f8b57dd998445ae43537cd492c680b2e11))
45
+ - Official Homebrew formula in basicmachines-co/basic-memory tap
46
+ - Simplified installation process for macOS users
47
+ - Package manager integration for easier dependency management
48
+
49
+ ## v0.14.0 (2025-06-26)
50
+
51
+ ### Features
52
+
53
+ - **Docker Container Registry Migration** - Switch from Docker Hub to GitHub Container Registry for better security and integration
54
+ ([`616c1f0`](https://github.com/basicmachines-co/basic-memory/commit/616c1f0710da59c7098a5f4843d4f017877ff7b2))
55
+ - Automated Docker image publishing via GitHub Actions CI/CD pipeline
56
+ - Enhanced container security with GitHub's integrated vulnerability scanning
57
+ - Streamlined container deployment workflow for production environments
58
+
59
+ - **Enhanced Search Documentation** - Comprehensive search syntax examples for improved user experience
60
+ ([`a589f8b`](https://github.com/basicmachines-co/basic-memory/commit/a589f8b894e78cce01eb25656856cfea8785fbbf))
61
+ - Detailed examples for Boolean search operators (AND, OR, NOT)
62
+ - Advanced search patterns including phrase matching and field-specific queries
63
+ - User-friendly documentation for complex search scenarios
64
+
65
+ - **Cross-Project File Management** - Intelligent move operations with project boundary detection
66
+ ([`db5ef7d`](https://github.com/basicmachines-co/basic-memory/commit/db5ef7d35cc0894309c7a57b5741c9dd978526d4))
67
+ - Automatic detection of cross-project move attempts with helpful guidance
68
+ - Clear error messages when attempting unsupported cross-project operations
13
69
 
14
70
  ### Bug Fixes
15
71
 
16
- - **#151**: Fix reset command project configuration persistence issue
17
- ([`af44941`](https://github.com/basicmachines-co/basic-memory/commit/af44941d5aa57b5ad7fcc6af4ed700f49bdb6d4d))
18
- - Reset command now properly clears project configuration from `~/.basic-memory/config.json`
19
- - Eliminates issue where projects would be recreated after database reset
20
- - Ensures clean slate when resetting Basic Memory installation
21
-
22
- - **#148**: Resolve project state inconsistency between MCP and CLI
23
- ([`35e4f73`](https://github.com/basicmachines-co/basic-memory/commit/35e4f73ae8a65501da4d48258ed702f957184c92))
24
- - Fix "Project not found" errors when switching default projects
25
- - MCP session now automatically refreshes when project configuration changes
26
- - Eliminates need to restart MCP server after project operations
27
- - Ensures consistent project state across CLI and MCP interfaces
28
-
29
- - **FastMCP Compatibility** - Resolve deprecation warnings for FastMCP integration
30
- ([`7be001c`](https://github.com/basicmachines-co/basic-memory/commit/7be001ca6834b3344bb6160cbe537b36bcbaa579))
31
- - Update FastMCP usage patterns to eliminate deprecation warnings
32
- - Improve future compatibility with FastMCP library updates
33
- - Clean up entity repository and service layer code
72
+ - **#184**: Preserve permalinks when editing notes without frontmatter permalinks
73
+ ([`c2f4b63`](https://github.com/basicmachines-co/basic-memory/commit/c2f4b632cf04921b1a3c2f0d43831b80c519cb31))
74
+ - Fix permalink preservation during note editing operations
75
+ - Ensure consistent permalink handling across different note formats
76
+ - Maintain note identity and searchability during incremental edits
77
+
78
+ - **#183**: Implement project-specific sync status checks for MCP tools
79
+ ([`12b5152`](https://github.com/basicmachines-co/basic-memory/commit/12b51522bc953fca117fc5bc01fcb29c6ca7e13c))
80
+ - Fix sync status reporting to correctly reflect current project state
81
+ - Resolve inconsistencies where sync status showed global instead of project-specific information
82
+ - Improve project isolation for sync operations and status reporting
83
+
84
+ - **#180**: Handle Boolean search syntax with hyphenated terms
85
+ ([`546e3cd`](https://github.com/basicmachines-co/basic-memory/commit/546e3cd8db98b74f746749d41887f8a213cd0b11))
86
+ - Fix search parsing issues with hyphenated terms in Boolean queries
87
+ - Improve search query tokenization for complex term structures
88
+ - Enhanced search reliability for technical documentation and multi-word concepts
89
+
90
+ - **#174**: Respect BASIC_MEMORY_HOME environment variable in Docker containers
91
+ ([`9f1db23`](https://github.com/basicmachines-co/basic-memory/commit/9f1db23c78d4648e2c242ad1ee27eed85e3f3b5d))
92
+ - Fix Docker container configuration to properly honor custom home directory settings
93
+ - Improve containerized deployment flexibility with environment variable support
94
+ - Ensure consistent behavior between local and containerized installations
95
+
96
+ - **#168**: Scope entity queries by project_id in upsert_entity method
97
+ ([`2a3adc1`](https://github.com/basicmachines-co/basic-memory/commit/2a3adc109a3e4d7ccd65cae4abf63d9bb2338326))
98
+ - Fix entity isolation issues in multi-project setups
99
+ - Prevent cross-project entity conflicts during database operations
100
+ - Strengthen project boundary enforcement at the database level
101
+
102
+ - **#166**: Handle None from_entity in Context API RelationSummary
103
+ ([`8a065c3`](https://github.com/basicmachines-co/basic-memory/commit/8a065c32f4e41613207d29aafc952a56e3a52241))
104
+ - Fix null pointer exceptions in relation processing
105
+ - Improve error handling for incomplete relation data
106
+ - Enhanced stability for knowledge graph traversal operations
107
+
108
+ - **#164**: Remove log level configuration from mcp_server.run()
109
+ ([`224e4bf`](https://github.com/basicmachines-co/basic-memory/commit/224e4bf9e4438c44a82ffc21bd1a282fe9087690))
110
+ - Simplify MCP server startup by removing redundant log level settings
111
+ - Fix potential logging configuration conflicts
112
+ - Streamline server initialization process
113
+
114
+ - **#162**: Ensure permalinks are generated for entities with null permalinks during move operations
115
+ ([`f506507`](https://github.com/basicmachines-co/basic-memory/commit/f50650763dbd4322c132e4bdc959ce4bf074374b))
116
+ - Fix move operations for entities without existing permalinks
117
+ - Automatic permalink generation during file move operations
118
+ - Maintain database consistency during file reorganization
34
119
 
35
120
  ### Technical Improvements
36
121
 
37
- - **Comprehensive Integration Testing** - New test suites for critical user workflows
38
- - Full integration tests for database reset functionality
39
- - End-to-end project state synchronization testing
40
- - Real MCP client-server communication validation
41
- - Direct config file validation without complex mocking
122
+ - **Comprehensive Test Coverage** - Extensive test suites for new features and edge cases
123
+ - Enhanced test coverage for project-specific sync status functionality
124
+ - Additional test scenarios for search syntax validation and edge cases
125
+ - Integration tests for Docker CI workflow and container publishing
126
+ - Comprehensive move operations testing with project boundary validation
127
+
128
+ - **Docker CI/CD Pipeline** - Production-ready automated container publishing
129
+ ([`74847cc`](https://github.com/basicmachines-co/basic-memory/commit/74847cc3807b0c6ed511e0d83e0d560e9f07ec44))
130
+ - Automated Docker image building and publishing on release
131
+ - Multi-architecture container support for AMD64 and ARM64 platforms
132
+ - Integrated security scanning and vulnerability assessments
133
+ - Streamlined deployment pipeline for production environments
134
+
135
+ - **Release Process Improvements** - Enhanced automation and quality gates
136
+ ([`a52ce1c`](https://github.com/basicmachines-co/basic-memory/commit/a52ce1c8605ec2cd450d1f909154172cbc30faa2))
137
+ - Homebrew formula updates limited to stable releases only
138
+ - Improved release automation with better quality control
139
+ - Enhanced CI/CD pipeline reliability and error handling
140
+
141
+ - **Code Quality Enhancements** - Improved error handling and validation
142
+ - Better null safety in entity and relation processing
143
+ - Enhanced project isolation validation throughout the codebase
144
+ - Improved error messages and user guidance for edge cases
145
+ - Strengthened database consistency guarantees across operations
146
+
147
+ ### Infrastructure
148
+
149
+ - **GitHub Container Registry Integration** - Modern container infrastructure
150
+ - Migration from Docker Hub to GitHub Container Registry (ghcr.io)
151
+ - Improved security with integrated vulnerability scanning
152
+ - Better integration with GitHub-based development workflow
153
+ - Enhanced container versioning and artifact management
154
+
155
+ - **Enhanced CI/CD Workflows** - Robust automated testing and deployment
156
+ - Automated Docker image publishing on releases
157
+ - Comprehensive test coverage validation before deployment
158
+ - Multi-platform container building and publishing
159
+ - Integration with GitHub's security and monitoring tools
42
160
 
43
- - **Code Quality** - Enhanced error handling and validation
44
- - Improved project state management across system components
45
- - Better session refresh patterns for configuration changes
46
- - Streamlined Docker setup with reduced image size
161
+ ### Migration Guide
47
162
 
48
- ### Documentation
163
+ This release includes several behind-the-scenes improvements and fixes. All changes are backward compatible:
164
+
165
+ - **Docker Users**: Container images now served from `ghcr.io/basicmachines-co/basic-memory` instead of Docker Hub
166
+ - **Search Users**: Enhanced search syntax handling - existing queries continue to work unchanged
167
+ - **Multi-Project Users**: Improved project isolation - all existing projects remain fully functional
168
+ - **All Users**: Enhanced stability and error handling - no breaking changes to existing workflows
169
+
170
+ ### Installation
49
171
 
50
- - **Docker Integration Guide** - Complete documentation for container deployment
51
- - Step-by-step Docker Compose setup instructions
52
- - Volume mounting configuration for Obsidian workflows
53
- - Container-based development environment setup
172
+ ```bash
173
+ # Latest stable release
174
+ uv tool install basic-memory
175
+
176
+ # Update existing installation
177
+ uv tool upgrade basic-memory
178
+
179
+ # Docker (new registry)
180
+ docker pull ghcr.io/basicmachines-co/basic-memory:latest
181
+ ```
54
182
 
55
183
  ## v0.13.7 (2025-06-19)
56
184
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.14.0b1
3
+ Version: 0.14.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
@@ -13,7 +13,7 @@ Requires-Dist: aiosqlite>=0.20.0
13
13
  Requires-Dist: alembic>=1.14.1
14
14
  Requires-Dist: dateparser>=1.2.0
15
15
  Requires-Dist: fastapi[standard]>=0.115.8
16
- Requires-Dist: fastmcp>=2.3.4
16
+ Requires-Dist: fastmcp<2.10.0,>=2.3.4
17
17
  Requires-Dist: greenlet>=3.1.1
18
18
  Requires-Dist: icecream>=2.1.3
19
19
  Requires-Dist: loguru>=0.7.3
@@ -71,6 +71,10 @@ https://github.com/user-attachments/assets/a55d8238-8dd0-454a-be4c-8860dbbd0ddc
71
71
  # Install with uv (recommended)
72
72
  uv tool install basic-memory
73
73
 
74
+ # or with Homebrew
75
+ brew tap basicmachines-co/basic-memory
76
+ brew install basic-memory
77
+
74
78
  # Configure Claude Desktop (edit ~/Library/Application Support/Claude/claude_desktop_config.json)
75
79
  # Add this to your config:
76
80
  {
@@ -104,6 +108,13 @@ npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
104
108
 
105
109
  This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. Note: The Smithery installation uses their hosted MCP server, while your data remains stored locally as Markdown files.
106
110
 
111
+ ### Add to Cursor
112
+
113
+ Once you have installed Basic Memory revisit this page for the 1-click installer for Cursor:
114
+
115
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=basic-memory&config=eyJjb21tYW5kIjoiL1VzZXJzL2RyZXcvLmxvY2FsL2Jpbi91dnggYmFzaWMtbWVtb3J5IG1jcCJ9)
116
+
117
+
107
118
  ### Glama.ai
108
119
 
109
120
  <a href="https://glama.ai/mcp/servers/o90kttu9ym">
@@ -252,7 +263,7 @@ title: <Entity title>
252
263
  type: <The type of Entity> (e.g. note)
253
264
  permalink: <a uri slug>
254
265
 
255
- - <optional metadata> (such as tags)
266
+ - <optional metadata> (such as tags)
256
267
  ```
257
268
 
258
269
  ### Observations
@@ -33,6 +33,10 @@ https://github.com/user-attachments/assets/a55d8238-8dd0-454a-be4c-8860dbbd0ddc
33
33
  # Install with uv (recommended)
34
34
  uv tool install basic-memory
35
35
 
36
+ # or with Homebrew
37
+ brew tap basicmachines-co/basic-memory
38
+ brew install basic-memory
39
+
36
40
  # Configure Claude Desktop (edit ~/Library/Application Support/Claude/claude_desktop_config.json)
37
41
  # Add this to your config:
38
42
  {
@@ -66,6 +70,13 @@ npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
66
70
 
67
71
  This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. Note: The Smithery installation uses their hosted MCP server, while your data remains stored locally as Markdown files.
68
72
 
73
+ ### Add to Cursor
74
+
75
+ Once you have installed Basic Memory revisit this page for the 1-click installer for Cursor:
76
+
77
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=basic-memory&config=eyJjb21tYW5kIjoiL1VzZXJzL2RyZXcvLmxvY2FsL2Jpbi91dnggYmFzaWMtbWVtb3J5IG1jcCJ9)
78
+
79
+
69
80
  ### Glama.ai
70
81
 
71
82
  <a href="https://glama.ai/mcp/servers/o90kttu9ym">
@@ -214,7 +225,7 @@ title: <Entity title>
214
225
  type: <The type of Entity> (e.g. note)
215
226
  permalink: <a uri slug>
216
227
 
217
- - <optional metadata> (such as tags)
228
+ - <optional metadata> (such as tags)
218
229
  ```
219
230
 
220
231
  ### Observations
@@ -17,7 +17,7 @@ test: test-unit test-int
17
17
 
18
18
  # Lint and fix code
19
19
  lint:
20
- ruff check . --fix
20
+ uv run ruff check . --fix
21
21
 
22
22
  # Type check code
23
23
  type-check:
@@ -30,7 +30,7 @@ dependencies = [
30
30
  "alembic>=1.14.1",
31
31
  "pillow>=11.1.0",
32
32
  "pybars3>=0.9.7",
33
- "fastmcp>=2.3.4",
33
+ "fastmcp>=2.3.4,<2.10.0",
34
34
  "pyjwt>=2.10.1",
35
35
  "python-dotenv>=1.1.0",
36
36
  "pytest-aio>=1.9.0",
@@ -123,4 +123,4 @@ omit = [
123
123
  ]
124
124
 
125
125
  [tool.logfire]
126
- ignore_no_config = true
126
+ ignore_no_config = true
@@ -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.14.0b1"
4
+ __version__ = "0.14.2"
5
5
 
6
6
  # API version for FastAPI - independent of package version
7
7
  __api_version__ = "v0"
@@ -38,7 +38,9 @@ def entity_model_from_markdown(
38
38
  # Update basic fields
39
39
  model.title = markdown.frontmatter.title
40
40
  model.entity_type = markdown.frontmatter.type
41
- model.permalink = markdown.frontmatter.permalink
41
+ # Only update permalink if it exists in frontmatter, otherwise preserve existing
42
+ if markdown.frontmatter.permalink is not None:
43
+ model.permalink = markdown.frontmatter.permalink
42
44
  model.file_path = str(file_path)
43
45
  model.content_type = "text/markdown"
44
46
  model.created_at = markdown.created
@@ -1,7 +1,7 @@
1
1
  """OAuth authentication provider for Basic Memory MCP server."""
2
2
 
3
3
  import secrets
4
- from datetime import datetime, timedelta
4
+ from datetime import datetime, timedelta, timezone
5
5
  from typing import Dict, Optional
6
6
 
7
7
  import jwt
@@ -92,7 +92,7 @@ class BasicMemoryOAuthProvider(
92
92
  self.authorization_codes[auth_code] = BasicMemoryAuthorizationCode(
93
93
  code=auth_code,
94
94
  scopes=params.scopes or [],
95
- expires_at=(datetime.utcnow() + timedelta(minutes=10)).timestamp(),
95
+ expires_at=(datetime.now(timezone.utc) + timedelta(minutes=10)).timestamp(),
96
96
  client_id=client.client_id,
97
97
  code_challenge=params.code_challenge,
98
98
  redirect_uri=params.redirect_uri,
@@ -119,7 +119,7 @@ class BasicMemoryOAuthProvider(
119
119
 
120
120
  if code and code.client_id == client.client_id:
121
121
  # Check if expired
122
- if datetime.utcnow().timestamp() > code.expires_at:
122
+ if datetime.now(timezone.utc).timestamp() > code.expires_at:
123
123
  del self.authorization_codes[authorization_code]
124
124
  return None
125
125
  return code
@@ -135,7 +135,7 @@ class BasicMemoryOAuthProvider(
135
135
  refresh_token = secrets.token_urlsafe(32)
136
136
 
137
137
  # Store tokens
138
- expires_at = (datetime.utcnow() + timedelta(hours=1)).timestamp()
138
+ expires_at = (datetime.now(timezone.utc) + timedelta(hours=1)).timestamp()
139
139
 
140
140
  self.access_tokens[access_token] = BasicMemoryAccessToken(
141
141
  token=access_token,
@@ -187,7 +187,7 @@ class BasicMemoryOAuthProvider(
187
187
  new_refresh_token = secrets.token_urlsafe(32)
188
188
 
189
189
  # Store new tokens
190
- expires_at = (datetime.utcnow() + timedelta(hours=1)).timestamp()
190
+ expires_at = (datetime.now(timezone.utc) + timedelta(hours=1)).timestamp()
191
191
 
192
192
  self.access_tokens[new_access_token] = BasicMemoryAccessToken(
193
193
  token=new_access_token,
@@ -220,7 +220,7 @@ class BasicMemoryOAuthProvider(
220
220
 
221
221
  if access_token:
222
222
  # Check if expired
223
- if access_token.expires_at and datetime.utcnow().timestamp() > access_token.expires_at:
223
+ if access_token.expires_at and datetime.now(timezone.utc).timestamp() > access_token.expires_at:
224
224
  logger.debug("Token found in memory but expired, removing")
225
225
  del self.access_tokens[token]
226
226
  return None
@@ -262,8 +262,8 @@ class BasicMemoryOAuthProvider(
262
262
  "iss": self.issuer_url,
263
263
  "sub": client_id,
264
264
  "aud": "basic-memory",
265
- "exp": datetime.utcnow() + timedelta(hours=1),
266
- "iat": datetime.utcnow(),
265
+ "exp": datetime.now(timezone.utc) + timedelta(hours=1),
266
+ "iat": datetime.now(timezone.utc),
267
267
  "scopes": scopes,
268
268
  }
269
269
 
@@ -3,7 +3,7 @@
3
3
  import os
4
4
  import secrets
5
5
  from dataclasses import dataclass
6
- from datetime import datetime, timedelta
6
+ from datetime import datetime, timedelta, timezone
7
7
  from typing import Optional, Dict, Any
8
8
 
9
9
  import httpx
@@ -123,7 +123,7 @@ class SupabaseOAuthProvider(
123
123
  self.pending_auth_codes[state] = SupabaseAuthorizationCode(
124
124
  code=state,
125
125
  scopes=params.scopes or [],
126
- expires_at=(datetime.utcnow() + timedelta(minutes=10)).timestamp(),
126
+ expires_at=(datetime.now(timezone.utc) + timedelta(minutes=10)).timestamp(),
127
127
  client_id=client.client_id,
128
128
  code_challenge=params.code_challenge,
129
129
  redirect_uri=params.redirect_uri,
@@ -218,7 +218,7 @@ class SupabaseOAuthProvider(
218
218
 
219
219
  if code and code.client_id == client.client_id:
220
220
  # Check expiration
221
- if datetime.utcnow().timestamp() > code.expires_at:
221
+ if datetime.now(timezone.utc).timestamp() > code.expires_at:
222
222
  del self.pending_auth_codes[authorization_code]
223
223
  return None
224
224
  return code
@@ -453,8 +453,8 @@ class SupabaseOAuthProvider(
453
453
  "email": email,
454
454
  "scopes": scopes,
455
455
  "supabase_token": supabase_access_token[:10] + "...", # Reference only
456
- "exp": datetime.utcnow() + timedelta(hours=1),
457
- "iat": datetime.utcnow(),
456
+ "exp": datetime.now(timezone.utc) + timedelta(hours=1),
457
+ "iat": datetime.now(timezone.utc),
458
458
  }
459
459
 
460
460
  # Use Supabase JWT secret if available
@@ -20,24 +20,24 @@ from basic_memory.mcp.tools.edit_note import edit_note
20
20
  from basic_memory.mcp.tools.move_note import move_note
21
21
  from basic_memory.mcp.tools.sync_status import sync_status
22
22
  from basic_memory.mcp.tools.project_management import (
23
- list_projects,
23
+ list_memory_projects,
24
24
  switch_project,
25
25
  get_current_project,
26
26
  set_default_project,
27
- create_project,
27
+ create_memory_project,
28
28
  delete_project,
29
29
  )
30
30
 
31
31
  __all__ = [
32
32
  "build_context",
33
33
  "canvas",
34
- "create_project",
34
+ "create_memory_project",
35
35
  "delete_note",
36
36
  "delete_project",
37
37
  "edit_note",
38
38
  "get_current_project",
39
39
  "list_directory",
40
- "list_projects",
40
+ "list_memory_projects",
41
41
  "move_note",
42
42
  "read_content",
43
43
  "read_note",
@@ -5,6 +5,7 @@ and manage project context during conversations.
5
5
  """
6
6
 
7
7
  from textwrap import dedent
8
+ from typing import Optional
8
9
 
9
10
  from fastmcp import Context
10
11
  from loguru import logger
@@ -19,7 +20,9 @@ from basic_memory.utils import generate_permalink
19
20
 
20
21
 
21
22
  @mcp.tool("list_memory_projects")
22
- async def list_projects(ctx: Context | None = None) -> str:
23
+ async def list_memory_projects(
24
+ ctx: Context | None = None, _compatibility: Optional[str] = None
25
+ ) -> str:
23
26
  """List all available projects with their status.
24
27
 
25
28
  Shows all Basic Memory projects that are available, indicating which one
@@ -29,7 +32,7 @@ async def list_projects(ctx: Context | None = None) -> str:
29
32
  Formatted list of projects with status indicators
30
33
 
31
34
  Example:
32
- list_projects()
35
+ list_memory_projects()
33
36
  """
34
37
  if ctx: # pragma: no cover
35
38
  await ctx.info("Listing all available projects")
@@ -144,13 +147,13 @@ async def switch_project(project_name: str, ctx: Context | None = None) -> str:
144
147
  Your session remains on the previous project.
145
148
 
146
149
  ## Troubleshooting:
147
- 1. **Check available projects**: Use `list_projects()` to see valid project names
150
+ 1. **Check available projects**: Use `list_memory_projects()` to see valid project names
148
151
  2. **Verify spelling**: Ensure the project name is spelled correctly
149
152
  3. **Check permissions**: Verify you have access to the requested project
150
153
  4. **Try again**: The error might be temporary
151
154
 
152
155
  ## Available options:
153
- - See all projects: `list_projects()`
156
+ - See all projects: `list_memory_projects()`
154
157
  - Stay on current project: `get_current_project()`
155
158
  - Try different project: `switch_project("correct-project-name")`
156
159
 
@@ -159,7 +162,9 @@ async def switch_project(project_name: str, ctx: Context | None = None) -> str:
159
162
 
160
163
 
161
164
  @mcp.tool()
162
- async def get_current_project(ctx: Context | None = None) -> str:
165
+ async def get_current_project(
166
+ ctx: Context | None = None, _compatibility: Optional[str] = None
167
+ ) -> str:
163
168
  """Show the currently active project and basic stats.
164
169
 
165
170
  Displays which project is currently active and provides basic information
@@ -231,7 +236,7 @@ async def set_default_project(project_name: str, ctx: Context | None = None) ->
231
236
 
232
237
 
233
238
  @mcp.tool("create_memory_project")
234
- async def create_project(
239
+ async def create_memory_project(
235
240
  project_name: str, project_path: str, set_default: bool = False, ctx: Context | None = None
236
241
  ) -> str:
237
242
  """Create a new Basic Memory project.
@@ -248,8 +253,8 @@ async def create_project(
248
253
  Confirmation message with project details
249
254
 
250
255
  Example:
251
- create_project("my-research", "~/Documents/research")
252
- create_project("work-notes", "/home/user/work", set_default=True)
256
+ create_memory_project("my-research", "~/Documents/research")
257
+ create_memory_project("work-notes", "/home/user/work", set_default=True)
253
258
  """
254
259
  if ctx: # pragma: no cover
255
260
  await ctx.info(f"Creating project: {project_name} at {project_path}")