basic-memory 0.12.2__tar.gz → 0.13.0b1__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 (337) hide show
  1. basic_memory-0.13.0b1/.env.oauth.example +55 -0
  2. basic_memory-0.13.0b1/.github/workflows/claude.yml +81 -0
  3. basic_memory-0.13.0b1/.github/workflows/dev-release.yml +53 -0
  4. basic_memory-0.13.0b1/.github/workflows/release.yml +60 -0
  5. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.gitignore +2 -1
  6. basic_memory-0.13.0b1/.mcp.json +14 -0
  7. basic_memory-0.13.0b1/AUTH.md +42 -0
  8. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/CHANGELOG.md +91 -0
  9. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/CLAUDE.md +50 -1
  10. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/CONTRIBUTING.md +34 -0
  11. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/Makefile +7 -15
  12. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/PKG-INFO +25 -3
  13. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/README.md +20 -2
  14. basic_memory-0.13.0b1/RELEASE_NOTES_v0.13.0.md +237 -0
  15. basic_memory-0.13.0b1/TESTING.md +337 -0
  16. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/AI Assistant Guide.md +154 -144
  17. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/CLI Reference.md +101 -19
  18. basic_memory-0.13.0b1/docs/Claude.ai Integration.md +335 -0
  19. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/Getting Started with Basic Memory.md +90 -28
  20. basic_memory-0.13.0b1/docs/OAuth Authentication Guide.md +259 -0
  21. basic_memory-0.13.0b1/docs/Supabase OAuth Setup.md +311 -0
  22. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/User Guide.md +127 -26
  23. basic_memory-0.13.0b1/examples/testing/Test Note Creation - Basic Functionality.md +69 -0
  24. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/pyproject.toml +40 -17
  25. basic_memory-0.13.0b1/src/basic_memory/__init__.py +9 -0
  26. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/env.py +1 -1
  27. basic_memory-0.13.0b1/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +108 -0
  28. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -5
  29. basic_memory-0.13.0b1/src/basic_memory/api/app.py +89 -0
  30. basic_memory-0.13.0b1/src/basic_memory/api/routers/__init__.py +11 -0
  31. basic_memory-0.13.0b1/src/basic_memory/api/routers/directory_router.py +63 -0
  32. basic_memory-0.13.0b1/src/basic_memory/api/routers/importer_router.py +152 -0
  33. basic_memory-0.13.0b1/src/basic_memory/api/routers/knowledge_router.py +277 -0
  34. basic_memory-0.13.0b1/src/basic_memory/api/routers/management_router.py +78 -0
  35. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/api/routers/memory_router.py +4 -59
  36. basic_memory-0.13.0b1/src/basic_memory/api/routers/project_router.py +230 -0
  37. basic_memory-0.13.0b1/src/basic_memory/api/routers/prompt_router.py +260 -0
  38. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/api/routers/search_router.py +3 -21
  39. basic_memory-0.13.0b1/src/basic_memory/api/routers/utils.py +130 -0
  40. basic_memory-0.13.0b1/src/basic_memory/api/template_loader.py +292 -0
  41. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/app.py +20 -21
  42. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/__init__.py +2 -1
  43. basic_memory-0.13.0b1/src/basic_memory/cli/commands/auth.py +136 -0
  44. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/db.py +3 -3
  45. basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_chatgpt.py +82 -0
  46. basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_claude_conversations.py +84 -0
  47. basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_claude_projects.py +83 -0
  48. basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_memory_json.py +87 -0
  49. basic_memory-0.13.0b1/src/basic_memory/cli/commands/mcp.py +88 -0
  50. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/project.py +99 -67
  51. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/status.py +19 -9
  52. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/sync.py +44 -58
  53. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/main.py +1 -5
  54. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/config.py +145 -88
  55. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/db.py +6 -4
  56. basic_memory-0.13.0b1/src/basic_memory/deps.py +389 -0
  57. basic_memory-0.13.0b1/src/basic_memory/importers/__init__.py +27 -0
  58. basic_memory-0.13.0b1/src/basic_memory/importers/base.py +79 -0
  59. basic_memory-0.13.0b1/src/basic_memory/importers/chatgpt_importer.py +222 -0
  60. basic_memory-0.13.0b1/src/basic_memory/importers/claude_conversations_importer.py +172 -0
  61. basic_memory-0.13.0b1/src/basic_memory/importers/claude_projects_importer.py +148 -0
  62. basic_memory-0.13.0b1/src/basic_memory/importers/memory_json_importer.py +93 -0
  63. basic_memory-0.13.0b1/src/basic_memory/importers/utils.py +58 -0
  64. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/markdown/entity_parser.py +5 -2
  65. basic_memory-0.13.0b1/src/basic_memory/mcp/auth_provider.py +270 -0
  66. basic_memory-0.13.0b1/src/basic_memory/mcp/external_auth_provider.py +321 -0
  67. basic_memory-0.13.0b1/src/basic_memory/mcp/project_session.py +103 -0
  68. basic_memory-0.13.0b1/src/basic_memory/mcp/prompts/continue_conversation.py +61 -0
  69. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/recent_activity.py +19 -3
  70. basic_memory-0.13.0b1/src/basic_memory/mcp/prompts/search.py +56 -0
  71. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/utils.py +3 -3
  72. {basic_memory-0.12.2/src/basic_memory/mcp/tools → basic_memory-0.13.0b1/src/basic_memory/mcp/resources}/project_info.py +6 -2
  73. basic_memory-0.13.0b1/src/basic_memory/mcp/server.py +111 -0
  74. basic_memory-0.13.0b1/src/basic_memory/mcp/supabase_auth_provider.py +463 -0
  75. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/__init__.py +20 -0
  76. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/build_context.py +11 -1
  77. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/canvas.py +15 -2
  78. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/delete_note.py +12 -4
  79. basic_memory-0.13.0b1/src/basic_memory/mcp/tools/edit_note.py +297 -0
  80. basic_memory-0.13.0b1/src/basic_memory/mcp/tools/list_directory.py +154 -0
  81. basic_memory-0.13.0b1/src/basic_memory/mcp/tools/move_note.py +87 -0
  82. basic_memory-0.13.0b1/src/basic_memory/mcp/tools/project_management.py +300 -0
  83. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/read_content.py +15 -6
  84. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/read_note.py +19 -7
  85. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/recent_activity.py +47 -16
  86. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/search.py +10 -1
  87. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/utils.py +137 -12
  88. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/write_note.py +11 -15
  89. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/models/__init__.py +3 -2
  90. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/models/knowledge.py +16 -4
  91. basic_memory-0.13.0b1/src/basic_memory/models/project.py +80 -0
  92. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/models/search.py +8 -5
  93. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/__init__.py +2 -0
  94. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/entity_repository.py +8 -3
  95. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/observation_repository.py +35 -3
  96. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/project_info_repository.py +3 -2
  97. basic_memory-0.13.0b1/src/basic_memory/repository/project_repository.py +85 -0
  98. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/relation_repository.py +8 -2
  99. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/repository.py +107 -15
  100. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/repository/search_repository.py +87 -27
  101. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/schemas/__init__.py +6 -0
  102. basic_memory-0.13.0b1/src/basic_memory/schemas/directory.py +30 -0
  103. basic_memory-0.13.0b1/src/basic_memory/schemas/importer.py +34 -0
  104. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/schemas/memory.py +26 -12
  105. basic_memory-0.13.0b1/src/basic_memory/schemas/project_info.py +206 -0
  106. basic_memory-0.13.0b1/src/basic_memory/schemas/prompt.py +90 -0
  107. basic_memory-0.13.0b1/src/basic_memory/schemas/request.py +112 -0
  108. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/schemas/search.py +1 -1
  109. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/services/__init__.py +2 -1
  110. basic_memory-0.13.0b1/src/basic_memory/services/context_service.py +401 -0
  111. basic_memory-0.13.0b1/src/basic_memory/services/directory_service.py +167 -0
  112. basic_memory-0.13.0b1/src/basic_memory/services/entity_service.py +702 -0
  113. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/services/exceptions.py +6 -0
  114. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/services/file_service.py +14 -15
  115. basic_memory-0.13.0b1/src/basic_memory/services/initialization.py +220 -0
  116. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/services/link_resolver.py +16 -8
  117. basic_memory-0.13.0b1/src/basic_memory/services/project_service.py +548 -0
  118. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/services/search_service.py +77 -2
  119. basic_memory-0.13.0b1/src/basic_memory/sync/background_sync.py +25 -0
  120. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/sync/sync_service.py +10 -9
  121. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/sync/watch_service.py +63 -39
  122. basic_memory-0.13.0b1/src/basic_memory/templates/prompts/continue_conversation.hbs +110 -0
  123. basic_memory-0.13.0b1/src/basic_memory/templates/prompts/search.hbs +101 -0
  124. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/utils.py +67 -17
  125. basic_memory-0.13.0b1/test-int/conftest.py +231 -0
  126. basic_memory-0.13.0b1/test-int/mcp/.coverage.Pauls-MacBook-Pro-2.local.66900.XDhpuELx +0 -0
  127. basic_memory-0.13.0b1/test-int/mcp/test_delete_note_integration.py +422 -0
  128. basic_memory-0.13.0b1/test-int/mcp/test_edit_note_integration.py +608 -0
  129. basic_memory-0.13.0b1/test-int/mcp/test_list_directory_integration.py +467 -0
  130. basic_memory-0.13.0b1/test-int/mcp/test_move_note_integration.py +515 -0
  131. basic_memory-0.13.0b1/test-int/mcp/test_project_management_integration.py +637 -0
  132. basic_memory-0.13.0b1/test-int/mcp/test_read_content_integration.py +367 -0
  133. basic_memory-0.13.0b1/test-int/mcp/test_read_note_integration.py +46 -0
  134. basic_memory-0.13.0b1/test-int/mcp/test_search_integration.py +468 -0
  135. basic_memory-0.13.0b1/test-int/mcp/test_write_note_integration.py +284 -0
  136. basic_memory-0.13.0b1/tests/.coverage.Pauls-MacBook-Pro-2.local.28077.XqMfGOxx +0 -0
  137. basic_memory-0.13.0b1/tests/api/.coverage.Pauls-MacBook-Pro-2.local.60974.XPpBfqqx +0 -0
  138. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/api/conftest.py +17 -3
  139. basic_memory-0.13.0b1/tests/api/test_continue_conversation_template.py +142 -0
  140. basic_memory-0.13.0b1/tests/api/test_directory_router.py +279 -0
  141. basic_memory-0.13.0b1/tests/api/test_importer_router.py +465 -0
  142. basic_memory-0.13.0b1/tests/api/test_knowledge_router.py +1240 -0
  143. basic_memory-0.13.0b1/tests/api/test_management_router.py +211 -0
  144. basic_memory-0.13.0b1/tests/api/test_memory_router.py +146 -0
  145. basic_memory-0.13.0b1/tests/api/test_project_router.py +198 -0
  146. basic_memory-0.13.0b1/tests/api/test_project_router_operations.py +55 -0
  147. basic_memory-0.13.0b1/tests/api/test_prompt_router.py +155 -0
  148. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/api/test_resource_router.py +47 -35
  149. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/api/test_search_router.py +25 -21
  150. basic_memory-0.13.0b1/tests/api/test_search_template.py +158 -0
  151. basic_memory-0.13.0b1/tests/api/test_template_loader.py +219 -0
  152. basic_memory-0.13.0b1/tests/api/test_template_loader_helpers.py +203 -0
  153. basic_memory-0.13.0b1/tests/cli/.coverage.Pauls-MacBook-Pro-2.local.63666.XDIUQNrx +0 -0
  154. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/conftest.py +8 -6
  155. basic_memory-0.13.0b1/tests/cli/test_auth_commands.py +352 -0
  156. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_cli_tools.py +28 -26
  157. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_import_chatgpt.py +2 -81
  158. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_import_claude_conversations.py +3 -29
  159. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_import_claude_projects.py +2 -37
  160. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_import_memory_json.py +2 -22
  161. basic_memory-0.13.0b1/tests/cli/test_project_commands.py +146 -0
  162. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_project_info.py +7 -5
  163. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_status.py +7 -5
  164. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_sync.py +8 -20
  165. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/conftest.py +193 -44
  166. basic_memory-0.13.0b1/tests/importers/test_importer_base.py +130 -0
  167. basic_memory-0.13.0b1/tests/importers/test_importer_utils.py +57 -0
  168. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_entity_parser.py +10 -10
  169. basic_memory-0.13.0b1/tests/mcp/.coverage.Pauls-MacBook-Pro-2.local.63904.XiAZuuhx +0 -0
  170. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/conftest.py +8 -6
  171. basic_memory-0.13.0b1/tests/mcp/test_auth_provider.py +313 -0
  172. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_prompts.py +5 -53
  173. basic_memory-0.12.2/tests/mcp/test_tool_project_info.py → basic_memory-0.13.0b1/tests/mcp/test_resource_project_info.py +22 -5
  174. basic_memory-0.13.0b1/tests/mcp/test_server.py +144 -0
  175. basic_memory-0.12.2/tests/mcp/test_tool_memory.py → basic_memory-0.13.0b1/tests/mcp/test_tool_build_context.py +24 -59
  176. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_tool_canvas.py +11 -11
  177. basic_memory-0.13.0b1/tests/mcp/test_tool_edit_note.py +359 -0
  178. basic_memory-0.13.0b1/tests/mcp/test_tool_list_directory.py +212 -0
  179. basic_memory-0.13.0b1/tests/mcp/test_tool_move_note.py +439 -0
  180. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_tool_read_note.py +1 -1
  181. basic_memory-0.13.0b1/tests/mcp/test_tool_recent_activity.py +118 -0
  182. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_tool_utils.py +12 -3
  183. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_tool_write_note.py +113 -77
  184. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/repository/test_entity_repository.py +15 -3
  185. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/repository/test_observation_repository.py +21 -7
  186. basic_memory-0.13.0b1/tests/repository/test_project_info_repository.py +36 -0
  187. basic_memory-0.13.0b1/tests/repository/test_project_repository.py +269 -0
  188. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/repository/test_relation_repository.py +5 -3
  189. basic_memory-0.13.0b1/tests/repository/test_search_repository.py +303 -0
  190. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/schemas/test_schemas.py +76 -1
  191. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/services/test_context_service.py +98 -25
  192. basic_memory-0.13.0b1/tests/services/test_directory_service.py +188 -0
  193. basic_memory-0.13.0b1/tests/services/test_entity_service.py +1660 -0
  194. basic_memory-0.13.0b1/tests/services/test_initialization.py +355 -0
  195. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/services/test_link_resolver.py +49 -0
  196. basic_memory-0.13.0b1/tests/services/test_project_service.py +301 -0
  197. basic_memory-0.13.0b1/tests/services/test_project_service_operations.py +134 -0
  198. basic_memory-0.13.0b1/tests/services/test_search_service.py +743 -0
  199. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/sync/test_sync_service.py +123 -112
  200. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/sync/test_sync_wikilink_issue.py +6 -6
  201. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/sync/test_tmp_files.py +24 -46
  202. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/sync/test_watch_service.py +77 -59
  203. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/sync/test_watch_service_edge_cases.py +10 -17
  204. basic_memory-0.13.0b1/tests/utils/test_permalink_formatting.py +120 -0
  205. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/utils/test_utf8_handling.py +4 -4
  206. basic_memory-0.13.0b1/uv.lock +1586 -0
  207. basic_memory-0.12.2/.github/workflows/claude-code-actions.yml +0 -16
  208. basic_memory-0.12.2/.github/workflows/release.yml +0 -96
  209. basic_memory-0.12.2/installer/Basic.icns +0 -0
  210. basic_memory-0.12.2/installer/README.md +0 -26
  211. basic_memory-0.12.2/installer/icon.svg +0 -64
  212. basic_memory-0.12.2/installer/installer.py +0 -93
  213. basic_memory-0.12.2/installer/make_icons.sh +0 -27
  214. basic_memory-0.12.2/installer/setup.py +0 -40
  215. basic_memory-0.12.2/src/basic_memory/__init__.py +0 -3
  216. basic_memory-0.12.2/src/basic_memory/api/app.py +0 -59
  217. basic_memory-0.12.2/src/basic_memory/api/routers/__init__.py +0 -9
  218. basic_memory-0.12.2/src/basic_memory/api/routers/knowledge_router.py +0 -188
  219. basic_memory-0.12.2/src/basic_memory/api/routers/project_info_router.py +0 -274
  220. basic_memory-0.12.2/src/basic_memory/cli/commands/import_chatgpt.py +0 -258
  221. basic_memory-0.12.2/src/basic_memory/cli/commands/import_claude_conversations.py +0 -210
  222. basic_memory-0.12.2/src/basic_memory/cli/commands/import_claude_projects.py +0 -193
  223. basic_memory-0.12.2/src/basic_memory/cli/commands/import_memory_json.py +0 -144
  224. basic_memory-0.12.2/src/basic_memory/cli/commands/mcp.py +0 -35
  225. basic_memory-0.12.2/src/basic_memory/deps.py +0 -192
  226. basic_memory-0.12.2/src/basic_memory/mcp/main.py +0 -24
  227. basic_memory-0.12.2/src/basic_memory/mcp/prompts/continue_conversation.py +0 -111
  228. basic_memory-0.12.2/src/basic_memory/mcp/prompts/search.py +0 -182
  229. basic_memory-0.12.2/src/basic_memory/mcp/server.py +0 -37
  230. basic_memory-0.12.2/src/basic_memory/schemas/project_info.py +0 -96
  231. basic_memory-0.12.2/src/basic_memory/schemas/request.py +0 -58
  232. basic_memory-0.12.2/src/basic_memory/services/context_service.py +0 -288
  233. basic_memory-0.12.2/src/basic_memory/services/entity_service.py +0 -322
  234. basic_memory-0.12.2/src/basic_memory/services/initialization.py +0 -143
  235. basic_memory-0.12.2/tests/api/test_knowledge_router.py +0 -482
  236. basic_memory-0.12.2/tests/api/test_memory_router.py +0 -136
  237. basic_memory-0.12.2/tests/api/test_project_info_router.py +0 -110
  238. basic_memory-0.12.2/tests/cli/test_project_commands.py +0 -208
  239. basic_memory-0.12.2/tests/edit_file_test.py +0 -19
  240. basic_memory-0.12.2/tests/services/test_entity_service.py +0 -591
  241. basic_memory-0.12.2/tests/services/test_initialization.py +0 -49
  242. basic_memory-0.12.2/tests/services/test_search_service.py +0 -345
  243. basic_memory-0.12.2/tests/test_basic_memory.py +0 -47
  244. basic_memory-0.12.2/tests/test_config.py +0 -156
  245. basic_memory-0.12.2/tests/utils/test_permalink_formatting.py +0 -68
  246. basic_memory-0.12.2/uv.lock +0 -1481
  247. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  248. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  249. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  250. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  251. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/dependabot.yml +0 -0
  252. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/workflows/pr-title.yml +0 -0
  253. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.github/workflows/test.yml +0 -0
  254. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/.python-version +0 -0
  255. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/CITATION.cff +0 -0
  256. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/CLA.md +0 -0
  257. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/CODE_OF_CONDUCT.md +0 -0
  258. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/Dockerfile +0 -0
  259. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/LICENSE +0 -0
  260. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/SECURITY.md +0 -0
  261. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/basic-memory.md +0 -0
  262. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/Canvas.md +0 -0
  263. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/Knowledge Format.md +0 -0
  264. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/Obsidian Integration.md +0 -0
  265. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/Technical Information.md +0 -0
  266. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/Welcome to Basic memory.md +0 -0
  267. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/Canvas.png +0 -0
  268. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/Claude-Obsidian-Demo.mp4 +0 -0
  269. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/Prompt.png +0 -0
  270. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/disk-ai-logo-400x400.png +0 -0
  271. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/disk-ai-logo.png +0 -0
  272. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/prompt 1.png +0 -0
  273. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/prompt2.png +0 -0
  274. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/prompt3.png +0 -0
  275. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/attachments/prompt4.png +0 -0
  276. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/docs/publish.js +0 -0
  277. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Brewing Equipment.md +0 -0
  278. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Bean Origins.md +0 -0
  279. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Brewing Methods.md +0 -0
  280. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Flavor Map.md +0 -0
  281. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Knowledge Base.md +0 -0
  282. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Flavor Extraction.md +0 -0
  283. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Perfect Pour Over Coffee Method.canvas +0 -0
  284. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/examples/Coffee Notes/Tasting Notes.md +0 -0
  285. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/llms-install.md +0 -0
  286. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/memory.json +0 -0
  287. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/scripts/install.sh +0 -0
  288. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/smithery.yaml +0 -0
  289. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/alembic.ini +0 -0
  290. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/migrations.py +0 -0
  291. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/script.py.mako +0 -0
  292. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  293. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  294. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  295. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/api/__init__.py +0 -0
  296. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/api/routers/resource_router.py +0 -0
  297. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/__init__.py +0 -0
  298. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/tool.py +0 -0
  299. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/file_utils.py +0 -0
  300. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/markdown/__init__.py +0 -0
  301. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/markdown/markdown_processor.py +0 -0
  302. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/markdown/plugins.py +0 -0
  303. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/markdown/schemas.py +0 -0
  304. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/markdown/utils.py +0 -0
  305. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/__init__.py +0 -0
  306. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/async_client.py +0 -0
  307. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  308. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  309. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  310. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/models/base.py +0 -0
  311. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/schemas/base.py +0 -0
  312. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/schemas/delete.py +0 -0
  313. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/schemas/response.py +0 -0
  314. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/services/service.py +0 -0
  315. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/src/basic_memory/sync/__init__.py +0 -0
  316. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/static/ai_assistant_guide.md +0 -0
  317. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/static/json_canvas_spec_1_0.md +0 -0
  318. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/Non-MarkdownFileSupport.pdf +0 -0
  319. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/Screenshot.png +0 -0
  320. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/__init__.py +0 -0
  321. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/cli/test_version.py +0 -0
  322. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/__init__.py +0 -0
  323. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_markdown_plugins.py +0 -0
  324. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_markdown_processor.py +0 -0
  325. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_observation_edge_cases.py +0 -0
  326. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_parser_edge_cases.py +0 -0
  327. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_relation_edge_cases.py +0 -0
  328. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/markdown/test_task_detection.py +0 -0
  329. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_resources.py +0 -0
  330. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_tool_resource.py +0 -0
  331. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/mcp/test_tool_search.py +0 -0
  332. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/repository/test_repository.py +0 -0
  333. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/schemas/test_memory_url.py +0 -0
  334. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/schemas/test_search.py +0 -0
  335. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/services/test_file_service.py +0 -0
  336. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/utils/test_file_utils.py +0 -0
  337. {basic_memory-0.12.2 → basic_memory-0.13.0b1}/tests/utils/test_parse_tags.py +0 -0
@@ -0,0 +1,55 @@
1
+ # OAuth Configuration for Basic Memory MCP Server
2
+ # Copy this file to .env and update the values
3
+
4
+ # Enable OAuth authentication
5
+ FASTMCP_AUTH_ENABLED=true
6
+
7
+ # OAuth provider type: basic, github, google, or supabase
8
+ # - basic: Built-in OAuth provider with in-memory storage
9
+ # - github: Integrate with GitHub OAuth
10
+ # - google: Integrate with Google OAuth
11
+ # - supabase: Integrate with Supabase Auth (recommended for production)
12
+ FASTMCP_AUTH_PROVIDER=basic
13
+
14
+ # OAuth issuer URL (your MCP server URL)
15
+ FASTMCP_AUTH_ISSUER_URL=http://localhost:8000
16
+
17
+ # Documentation URL for OAuth endpoints
18
+ FASTMCP_AUTH_DOCS_URL=http://localhost:8000/docs/oauth
19
+
20
+ # Required scopes (comma-separated)
21
+ # Examples: read,write,admin
22
+ FASTMCP_AUTH_REQUIRED_SCOPES=read,write
23
+
24
+ # Secret key for JWT tokens (auto-generated if not set)
25
+ # FASTMCP_AUTH_SECRET_KEY=your-secret-key-here
26
+
27
+ # Enable client registration endpoint
28
+ FASTMCP_AUTH_CLIENT_REGISTRATION_ENABLED=true
29
+
30
+ # Enable token revocation endpoint
31
+ FASTMCP_AUTH_REVOCATION_ENABLED=true
32
+
33
+ # Default scopes for new clients
34
+ FASTMCP_AUTH_DEFAULT_SCOPES=read
35
+
36
+ # Valid scopes that can be requested
37
+ FASTMCP_AUTH_VALID_SCOPES=read,write,admin
38
+
39
+ # Client secret expiry in seconds (optional)
40
+ # FASTMCP_AUTH_CLIENT_SECRET_EXPIRY=86400
41
+
42
+ # GitHub OAuth settings (if using github provider)
43
+ # GITHUB_CLIENT_ID=your-github-client-id
44
+ # GITHUB_CLIENT_SECRET=your-github-client-secret
45
+
46
+ # Google OAuth settings (if using google provider)
47
+ # GOOGLE_CLIENT_ID=your-google-client-id
48
+ # GOOGLE_CLIENT_SECRET=your-google-client-secret
49
+
50
+ # Supabase settings (if using supabase provider)
51
+ # SUPABASE_URL=https://your-project.supabase.co
52
+ # SUPABASE_ANON_KEY=your-anon-key
53
+ # SUPABASE_SERVICE_KEY=your-service-key # Optional, for admin operations
54
+ # SUPABASE_JWT_SECRET=your-jwt-secret # Optional, for token validation
55
+ # SUPABASE_ALLOWED_CLIENTS=client1,client2 # Comma-separated list of allowed client IDs
@@ -0,0 +1,81 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: read
24
+ pull-requests: read
25
+ issues: read
26
+ id-token: write
27
+ steps:
28
+ - name: Check organization membership
29
+ id: check_membership
30
+ uses: actions/github-script@v7
31
+ with:
32
+ script: |
33
+ let actor;
34
+ if (context.eventName === 'issue_comment') {
35
+ actor = context.payload.comment.user.login;
36
+ } else if (context.eventName === 'pull_request_review_comment') {
37
+ actor = context.payload.comment.user.login;
38
+ } else if (context.eventName === 'pull_request_review') {
39
+ actor = context.payload.review.user.login;
40
+ } else if (context.eventName === 'issues') {
41
+ actor = context.payload.issue.user.login;
42
+ }
43
+
44
+ console.log(`Checking membership for user: ${actor}`);
45
+
46
+ try {
47
+ const membership = await github.rest.orgs.getMembershipForUser({
48
+ org: 'basicmachines-co',
49
+ username: actor
50
+ });
51
+
52
+ console.log(`Membership status: ${membership.data.state}`);
53
+
54
+ // Allow if user is a member (public or private) or admin
55
+ const allowed = membership.data.state === 'active' &&
56
+ (membership.data.role === 'member' || membership.data.role === 'admin');
57
+
58
+ core.setOutput('is_member', allowed);
59
+
60
+ if (!allowed) {
61
+ core.notice(`User ${actor} is not a member of basicmachines-co organization`);
62
+ }
63
+ } catch (error) {
64
+ console.log(`Error checking membership: ${error.message}`);
65
+ core.setOutput('is_member', false);
66
+ core.notice(`User ${actor} is not a member of basicmachines-co organization`);
67
+ }
68
+
69
+ - name: Checkout repository
70
+ if: steps.check_membership.outputs.is_member == 'true'
71
+ uses: actions/checkout@v4
72
+ with:
73
+ fetch-depth: 1
74
+
75
+ - name: Run Claude Code
76
+ if: steps.check_membership.outputs.is_member == 'true'
77
+ id: claude
78
+ uses: anthropics/claude-code-action@beta
79
+ with:
80
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
81
+ allowed_tools: Bash(uv run pytest),Bash(uv run ruff check . --fix),Bash(uv run ruff format .),Bash(uv run pyright),Bash(make test),Bash(make lint),Bash(make format),Bash(make type-check),Bash(make check),Read,Write,Edit,MultiEdit,Glob,Grep,LS
@@ -0,0 +1,53 @@
1
+ name: Dev Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch: # Allow manual triggering
7
+
8
+ jobs:
9
+ dev-release:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ id-token: write
13
+ contents: write
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Install uv
26
+ run: |
27
+ pip install uv
28
+
29
+ - name: Install dependencies and build
30
+ run: |
31
+ uv venv
32
+ uv sync
33
+ uv build
34
+
35
+ - name: Check if this is a dev version
36
+ id: check_version
37
+ run: |
38
+ VERSION=$(uv run python -c "import basic_memory; print(basic_memory.__version__)")
39
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
40
+ if [[ "$VERSION" == *"dev"* ]]; then
41
+ echo "is_dev=true" >> $GITHUB_OUTPUT
42
+ echo "Dev version detected: $VERSION"
43
+ else
44
+ echo "is_dev=false" >> $GITHUB_OUTPUT
45
+ echo "Release version detected: $VERSION, skipping dev release"
46
+ fi
47
+
48
+ - name: Publish dev version to PyPI
49
+ if: steps.check_version.outputs.is_dev == 'true'
50
+ uses: pypa/gh-action-pypi-publish@release/v1
51
+ with:
52
+ password: ${{ secrets.PYPI_TOKEN }}
53
+ skip-existing: true # Don't fail if version already exists
@@ -0,0 +1,60 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*' # Trigger on version tags like v1.0.0, v0.13.0, etc.
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ id-token: write
13
+ contents: write
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+
25
+ - name: Install uv
26
+ run: |
27
+ pip install uv
28
+
29
+ - name: Install dependencies and build
30
+ run: |
31
+ uv venv
32
+ uv sync
33
+ uv build
34
+
35
+ - name: Verify version matches tag
36
+ run: |
37
+ # Get version from built package
38
+ PACKAGE_VERSION=$(uv run python -c "import basic_memory; print(basic_memory.__version__)")
39
+ TAG_VERSION=${GITHUB_REF_NAME#v} # Remove 'v' prefix from tag
40
+ echo "Package version: $PACKAGE_VERSION"
41
+ echo "Tag version: $TAG_VERSION"
42
+ if [ "$PACKAGE_VERSION" != "$TAG_VERSION" ]; then
43
+ echo "Version mismatch! Package: $PACKAGE_VERSION, Tag: $TAG_VERSION"
44
+ exit 1
45
+ fi
46
+
47
+ - name: Create GitHub Release
48
+ uses: softprops/action-gh-release@v2
49
+ with:
50
+ files: |
51
+ dist/*.whl
52
+ dist/*.tar.gz
53
+ generate_release_notes: true
54
+ tag_name: ${{ github.ref_name }}
55
+ token: ${{ secrets.GITHUB_TOKEN }}
56
+
57
+ - name: Publish to PyPI
58
+ uses: pypa/gh-action-pypi-publish@release/v1
59
+ with:
60
+ password: ${{ secrets.PYPI_TOKEN }}
@@ -51,4 +51,5 @@ ENV/
51
51
 
52
52
 
53
53
  # claude action
54
- claude-output
54
+ claude-output
55
+ **/.claude/settings.local.json
@@ -0,0 +1,14 @@
1
+ {
2
+ "mcpServers": {
3
+ "basic-memory": {
4
+ "command": "uv",
5
+ "args": [
6
+ "--directory",
7
+ "/Users/phernandez/dev/basicmachines/basic-memory",
8
+ "run",
9
+ "src/basic_memory/cli/main.py",
10
+ "mcp"
11
+ ]
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,42 @@
1
+ # OAuth Quick Start
2
+
3
+ Basic Memory supports OAuth authentication for secure access control. For detailed documentation, see [OAuth Authentication Guide](docs/OAuth%20Authentication%20Guide.md).
4
+
5
+ ## Quick Test with MCP Inspector
6
+
7
+ ```bash
8
+ # 1. Set a consistent secret key
9
+ export FASTMCP_AUTH_SECRET_KEY="test-secret-key"
10
+
11
+ # 2. Start server with OAuth
12
+ FASTMCP_AUTH_ENABLED=true basic-memory mcp --transport streamable-http
13
+
14
+ # 3. In another terminal, get a test token
15
+ export FASTMCP_AUTH_SECRET_KEY="test-secret-key" # Same key!
16
+ basic-memory auth test-auth
17
+
18
+ # 4. Copy the access token and use in MCP Inspector:
19
+ # - Server URL: http://localhost:8000/mcp
20
+ # - Transport: streamable-http
21
+ # - Custom Headers:
22
+ # Authorization: Bearer YOUR_ACCESS_TOKEN
23
+ # Accept: application/json, text/event-stream
24
+ ```
25
+
26
+ ## OAuth Endpoints
27
+
28
+ - `GET /authorize` - Authorization endpoint
29
+ - `POST /token` - Token exchange endpoint
30
+ - `GET /.well-known/oauth-authorization-server` - OAuth metadata
31
+
32
+ ## Common Issues
33
+
34
+ 1. **401 Unauthorized**: Make sure you're using the same secret key for both server and client
35
+ 2. **404 Not Found**: Use `/authorize` not `/auth/authorize`
36
+ 3. **Token Invalid**: Tokens don't persist across server restarts with basic provider
37
+
38
+ ## Documentation
39
+
40
+ - [OAuth Authentication Guide](docs/OAuth%20Authentication%20Guide.md) - Complete setup guide
41
+ - [Supabase OAuth Setup](docs/Supabase%20OAuth%20Setup.md) - Production deployment
42
+ - [External OAuth Providers](docs/External%20OAuth%20Providers.md) - GitHub, Google integration
@@ -1,6 +1,97 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v0.13.0 (2025-06-03)
5
+
6
+ ### Features
7
+
8
+ - **Multi-Project Management System** - Switch between projects instantly during conversations
9
+ ([`993e88a`](https://github.com/basicmachines-co/basic-memory/commit/993e88a))
10
+ - Instant project switching with session context
11
+ - Project-specific operations and isolation
12
+ - Project discovery and management tools
13
+
14
+ - **Advanced Note Editing** - Incremental editing with append, prepend, find/replace, and section operations
15
+ ([`6fc3904`](https://github.com/basicmachines-co/basic-memory/commit/6fc3904))
16
+ - `edit_note` tool with multiple operation types
17
+ - Smart frontmatter-aware editing
18
+ - Validation and error handling
19
+
20
+ - **Smart File Management** - Move notes with database consistency and search reindexing
21
+ ([`9fb931c`](https://github.com/basicmachines-co/basic-memory/commit/9fb931c))
22
+ - `move_note` tool with rollback protection
23
+ - Automatic folder creation and permalink updates
24
+ - Full database consistency maintenance
25
+
26
+ - **Enhanced Search Capabilities** - Frontmatter tags now searchable, improved content discovery
27
+ ([`3f5368e`](https://github.com/basicmachines-co/basic-memory/commit/3f5368e))
28
+ - YAML frontmatter tag indexing
29
+ - Improved FTS5 search functionality
30
+ - Project-scoped search operations
31
+
32
+ - **Production Features** - OAuth authentication, development builds, comprehensive testing
33
+ ([`5f8d945`](https://github.com/basicmachines-co/basic-memory/commit/5f8d945))
34
+ - Development build automation
35
+ - MCP integration testing framework
36
+ - Enhanced CI/CD pipeline
37
+
38
+ ### Bug Fixes
39
+
40
+ - **#118**: Fix YAML tag formatting to follow standard specification
41
+ ([`2dc7e27`](https://github.com/basicmachines-co/basic-memory/commit/2dc7e27))
42
+
43
+ - **#110**: Make --project flag work consistently across CLI commands
44
+ ([`02dd91a`](https://github.com/basicmachines-co/basic-memory/commit/02dd91a))
45
+
46
+ - **#93**: Respect custom permalinks in frontmatter for write_note
47
+ ([`6b6fd76`](https://github.com/basicmachines-co/basic-memory/commit/6b6fd76))
48
+
49
+ - Fix list_directory path display to not include leading slash
50
+ ([`6057126`](https://github.com/basicmachines-co/basic-memory/commit/6057126))
51
+
52
+ ### Technical Improvements
53
+
54
+ - **Unified Database Architecture** - Single app-level database for better performance
55
+ - Migration from per-project databases to unified structure
56
+ - Project isolation with foreign key relationships
57
+ - Optimized queries and reduced file I/O
58
+
59
+ - **Comprehensive Testing** - 100% test coverage with integration testing
60
+ ([`468a22f`](https://github.com/basicmachines-co/basic-memory/commit/468a22f))
61
+ - MCP integration test suite
62
+ - End-to-end testing framework
63
+ - Performance and edge case validation
64
+
65
+ ### Documentation
66
+
67
+ - Add comprehensive testing documentation (TESTING.md)
68
+ - Update project management guides (PROJECT_MANAGEMENT.md)
69
+ - Enhanced note editing documentation (EDIT_NOTE.md)
70
+ - Updated release workflow documentation
71
+
72
+ ### Breaking Changes
73
+
74
+ - **Database Migration**: Automatic migration from per-project to unified database.
75
+ Data will be re-index from the filesystem, resulting in no data loss.
76
+ - **Configuration Changes**: Projects now synced between config.json and database
77
+ - **Full Backward Compatibility**: All existing setups continue to work seamlessly
78
+
79
+
80
+ ## v0.12.3 (2025-04-17)
81
+
82
+ ### Bug Fixes
83
+
84
+ - Add extra logic for permalink generation with mixed Latin unicode and Chinese characters
85
+ ([`73ea91f`](https://github.com/basicmachines-co/basic-memory/commit/73ea91fe0d1f7ab89b99a1b691d59fe608b7fcbb))
86
+
87
+ Signed-off-by: phernandez <paul@basicmachines.co>
88
+
89
+ - Modify recent_activity args to be strings instead of enums
90
+ ([`3c1cc34`](https://github.com/basicmachines-co/basic-memory/commit/3c1cc346df519e703fae6412d43a92c7232c6226))
91
+
92
+ Signed-off-by: phernandez <paul@basicmachines.co>
93
+
94
+
4
95
  ## v0.12.2 (2025-04-08)
5
96
 
6
97
  ### Bug Fixes
@@ -65,6 +65,7 @@ See the [README.md](README.md) file for a project overview.
65
65
  - Test database uses in-memory SQLite
66
66
  - Avoid creating mocks in tests in most circumstances.
67
67
  - Each test runs in a standalone environment with in memory SQLite and tmp_file directory
68
+ - Do not use mocks in tests if possible. Tests run with an in memory sqlite db, so they are not needed. See fixtures in conftest.py
68
69
 
69
70
  ## BASIC MEMORY PRODUCT USAGE
70
71
 
@@ -172,4 +173,52 @@ With GitHub integration, the development workflow includes:
172
173
  4. **Documentation maintenance** - Claude can keep documentation updated as the code evolves
173
174
 
174
175
  With this integration, the AI assistant is a full-fledged team member rather than just a tool for generating code
175
- snippets.
176
+ snippets.
177
+
178
+
179
+ ### Basic Memory Pro
180
+
181
+ Basic Memory Pro is a desktop GUI application that wraps the basic-memory CLI/MCP tools:
182
+
183
+ - Built with Tauri (Rust), React (TypeScript), and a Python FastAPI sidecar
184
+ - Provides visual knowledge graph exploration and project management
185
+ - Uses the same core codebase but adds a desktop-friendly interface
186
+ - Project configuration is shared between CLI and Pro versions
187
+ - Multiple project support with visual switching interface
188
+
189
+ local repo: /Users/phernandez/dev/basicmachines/basic-memory-pro
190
+ github: https://github.com/basicmachines-co/basic-memory-pro
191
+
192
+ ## Release and Version Management
193
+
194
+ Basic Memory uses `uv-dynamic-versioning` for automatic version management based on git tags:
195
+
196
+ ### Version Types
197
+ - **Development versions**: Automatically generated from commits (e.g., `0.12.4.dev26+468a22f`)
198
+ - **Beta releases**: Created by tagging with beta suffixes (e.g., `v0.13.0b1`, `v0.13.0rc1`)
199
+ - **Stable releases**: Created by tagging with version numbers (e.g., `v0.13.0`)
200
+
201
+ ### Release Workflows
202
+
203
+ #### Development Builds (Automatic)
204
+ - Triggered on every push to `main` branch
205
+ - Publishes dev versions like `0.12.4.dev26+468a22f` to PyPI
206
+ - Allows continuous testing of latest changes
207
+ - Users install with: `pip install basic-memory --pre --force-reinstall`
208
+
209
+ #### Beta/RC Releases (Manual)
210
+ - Create beta tag: `git tag v0.13.0b1 && git push origin v0.13.0b1`
211
+ - Automatically builds and publishes to PyPI as pre-release
212
+ - Users install with: `pip install basic-memory --pre`
213
+ - Use for milestone testing before stable release
214
+
215
+ #### Stable Releases (Manual)
216
+ - Create version tag: `git tag v0.13.0 && git push origin v0.13.0`
217
+ - Automatically builds, creates GitHub release, and publishes to PyPI
218
+ - Users install with: `pip install basic-memory`
219
+
220
+ ### For Development
221
+ - No manual version bumping required
222
+ - Versions automatically derived from git tags
223
+ - `pyproject.toml` uses `dynamic = ["version"]`
224
+ - `__init__.py` dynamically reads version from package metadata
@@ -144,6 +144,40 @@ agreement to the DCO.
144
144
  - **Database Testing**: Use in-memory SQLite for testing database operations
145
145
  - **Fixtures**: Use async pytest fixtures for setup and teardown
146
146
 
147
+ ## Release Process
148
+
149
+ Basic Memory uses automatic versioning based on git tags with `uv-dynamic-versioning`. Here's how releases work:
150
+
151
+ ### Version Management
152
+ - **Development versions**: Automatically generated from git commits (e.g., `0.12.4.dev26+468a22f`)
153
+ - **Beta releases**: Created by tagging with beta suffixes (e.g., `git tag v0.13.0b1`)
154
+ - **Stable releases**: Created by tagging with version numbers (e.g., `git tag v0.13.0`)
155
+
156
+ ### Release Workflows
157
+
158
+ #### Development Builds
159
+ - Automatically published to PyPI on every commit to `main`
160
+ - Version format: `0.12.4.dev26+468a22f` (base version + dev + commit count + hash)
161
+ - Users install with: `pip install basic-memory --pre --force-reinstall`
162
+
163
+ #### Beta Releases
164
+ 1. Create and push a beta tag: `git tag v0.13.0b1 && git push origin v0.13.0b1`
165
+ 2. GitHub Actions automatically builds and publishes to PyPI
166
+ 3. Users install with: `pip install basic-memory --pre`
167
+
168
+ #### Stable Releases
169
+ 1. Create and push a version tag: `git tag v0.13.0 && git push origin v0.13.0`
170
+ 2. GitHub Actions automatically:
171
+ - Builds the package with version `0.13.0`
172
+ - Creates GitHub release with auto-generated notes
173
+ - Publishes to PyPI
174
+ 3. Users install with: `pip install basic-memory`
175
+
176
+ ### For Contributors
177
+ - No manual version bumping required
178
+ - Versions are automatically derived from git tags
179
+ - Focus on code changes, not version management
180
+
147
181
  ## Creating Issues
148
182
 
149
183
  If you're planning to work on something, please create an issue first to discuss the approach. Include:
@@ -1,23 +1,15 @@
1
- .PHONY: install test test-module lint clean format type-check installer-mac installer-win check
1
+ .PHONY: install test test-module lint clean format type-check installer-mac installer-win check test-int
2
2
 
3
3
  install:
4
4
  pip install -e ".[dev]"
5
5
 
6
- test:
6
+ test-unit:
7
7
  uv run pytest -p pytest_mock -v
8
8
 
9
- # Run tests for a specific module
10
- # Usage: make test-module m=path/to/module.py [cov=module_path]
11
- test-module:
12
- @if [ -z "$(m)" ]; then \
13
- echo "Usage: make test-module m=path/to/module.py [cov=module_path]"; \
14
- exit 1; \
15
- fi; \
16
- if [ -z "$(cov)" ]; then \
17
- uv run pytest $(m) -v; \
18
- else \
19
- uv run pytest $(m) -v --cov=$(cov); \
20
- fi
9
+ test-int:
10
+ uv run pytest -p pytest_mock -v --no-cov test-int
11
+
12
+ test: test-unit test-int
21
13
 
22
14
  lint:
23
15
  ruff check . --fix
@@ -41,7 +33,7 @@ format:
41
33
 
42
34
  # run inspector tool
43
35
  run-inspector:
44
- uv run mcp dev src/basic_memory/mcp/main.py
36
+ npx @modelcontextprotocol/inspector
45
37
 
46
38
  # Build app installer
47
39
  installer-mac:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.12.2
3
+ Version: 0.13.0b1
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,15 +13,19 @@ 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
17
  Requires-Dist: greenlet>=3.1.1
17
18
  Requires-Dist: icecream>=2.1.3
18
19
  Requires-Dist: loguru>=0.7.3
19
20
  Requires-Dist: markdown-it-py>=3.0.0
20
21
  Requires-Dist: mcp>=1.2.0
21
22
  Requires-Dist: pillow>=11.1.0
23
+ Requires-Dist: pybars3>=0.9.7
22
24
  Requires-Dist: pydantic-settings>=2.6.1
23
25
  Requires-Dist: pydantic[email,timezone]>=2.10.3
26
+ Requires-Dist: pyjwt>=2.10.1
24
27
  Requires-Dist: pyright>=1.1.390
28
+ Requires-Dist: python-dotenv>=1.1.0
25
29
  Requires-Dist: python-frontmatter>=1.1.0
26
30
  Requires-Dist: pyyaml>=6.0.1
27
31
  Requires-Dist: qasync>=0.27.1
@@ -367,9 +371,9 @@ config:
367
371
  "command": "uvx",
368
372
  "args": [
369
373
  "basic-memory",
370
- "mcp",
371
374
  "--project",
372
- "your-project-name"
375
+ "your-project-name",
376
+ "mcp"
373
377
  ]
374
378
  }
375
379
  }
@@ -410,6 +414,24 @@ See the [Documentation](https://memory.basicmachines.co/) for more info, includi
410
414
  - [Managing multiple Projects](https://memory.basicmachines.co/docs/cli-reference#project)
411
415
  - [Importing data from OpenAI/Claude Projects](https://memory.basicmachines.co/docs/cli-reference#import)
412
416
 
417
+ ## Installation Options
418
+
419
+ ### Stable Release
420
+ ```bash
421
+ pip install basic-memory
422
+ ```
423
+
424
+ ### Beta/Pre-releases
425
+ ```bash
426
+ pip install basic-memory --pre
427
+ ```
428
+
429
+ ### Development Builds
430
+ Development versions are automatically published on every commit to main with versions like `0.12.4.dev26+468a22f`:
431
+ ```bash
432
+ pip install basic-memory --pre --force-reinstall
433
+ ```
434
+
413
435
  ## License
414
436
 
415
437
  AGPL-3.0
@@ -333,9 +333,9 @@ config:
333
333
  "command": "uvx",
334
334
  "args": [
335
335
  "basic-memory",
336
- "mcp",
337
336
  "--project",
338
- "your-project-name"
337
+ "your-project-name",
338
+ "mcp"
339
339
  ]
340
340
  }
341
341
  }
@@ -376,6 +376,24 @@ See the [Documentation](https://memory.basicmachines.co/) for more info, includi
376
376
  - [Managing multiple Projects](https://memory.basicmachines.co/docs/cli-reference#project)
377
377
  - [Importing data from OpenAI/Claude Projects](https://memory.basicmachines.co/docs/cli-reference#import)
378
378
 
379
+ ## Installation Options
380
+
381
+ ### Stable Release
382
+ ```bash
383
+ pip install basic-memory
384
+ ```
385
+
386
+ ### Beta/Pre-releases
387
+ ```bash
388
+ pip install basic-memory --pre
389
+ ```
390
+
391
+ ### Development Builds
392
+ Development versions are automatically published on every commit to main with versions like `0.12.4.dev26+468a22f`:
393
+ ```bash
394
+ pip install basic-memory --pre --force-reinstall
395
+ ```
396
+
379
397
  ## License
380
398
 
381
399
  AGPL-3.0