basic-memory 0.16.0__tar.gz → 0.17.7__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 (475) hide show
  1. basic_memory-0.17.7/.claude/commands/release/release.md +199 -0
  2. {basic_memory-0.16.0 → basic_memory-0.17.7}/.claude/commands/spec.md +17 -21
  3. basic_memory-0.17.7/.claude/settings.json +5 -0
  4. basic_memory-0.17.7/.env.example +28 -0
  5. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/claude-code-review.yml +1 -0
  6. basic_memory-0.17.7/.github/workflows/test.yml +167 -0
  7. {basic_memory-0.16.0 → basic_memory-0.17.7}/.gitignore +2 -1
  8. basic_memory-0.17.7/.python-version +1 -0
  9. {basic_memory-0.16.0 → basic_memory-0.17.7}/CHANGELOG.md +315 -0
  10. {basic_memory-0.16.0 → basic_memory-0.17.7}/CLAUDE.md +121 -22
  11. {basic_memory-0.16.0 → basic_memory-0.17.7}/Dockerfile +10 -4
  12. basic_memory-0.16.0/README.md → basic_memory-0.17.7/PKG-INFO +134 -0
  13. basic_memory-0.16.0/PKG-INFO → basic_memory-0.17.7/README.md +86 -40
  14. basic_memory-0.17.7/docker-compose-postgres.yml +42 -0
  15. basic_memory-0.17.7/docs/ARCHITECTURE.md +412 -0
  16. basic_memory-0.17.7/docs/testing-coverage.md +28 -0
  17. basic_memory-0.17.7/justfile +308 -0
  18. {basic_memory-0.16.0 → basic_memory-0.17.7}/pyproject.toml +25 -12
  19. basic_memory-0.17.7/server.json +22 -0
  20. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/__init__.py +1 -1
  21. basic_memory-0.17.7/src/basic_memory/alembic/env.py +189 -0
  22. basic_memory-0.17.7/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +131 -0
  23. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +15 -3
  24. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +44 -36
  25. basic_memory-0.17.7/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +24 -0
  26. basic_memory-0.17.7/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +56 -0
  27. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +13 -0
  28. basic_memory-0.17.7/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +239 -0
  29. basic_memory-0.17.7/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +173 -0
  30. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/app.py +45 -24
  31. basic_memory-0.17.7/src/basic_memory/api/container.py +133 -0
  32. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/knowledge_router.py +17 -5
  33. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/project_router.py +68 -14
  34. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/resource_router.py +40 -27
  35. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/utils.py +53 -14
  36. basic_memory-0.17.7/src/basic_memory/api/v2/__init__.py +35 -0
  37. basic_memory-0.17.7/src/basic_memory/api/v2/routers/__init__.py +21 -0
  38. basic_memory-0.17.7/src/basic_memory/api/v2/routers/directory_router.py +93 -0
  39. basic_memory-0.17.7/src/basic_memory/api/v2/routers/importer_router.py +181 -0
  40. basic_memory-0.17.7/src/basic_memory/api/v2/routers/knowledge_router.py +425 -0
  41. basic_memory-0.17.7/src/basic_memory/api/v2/routers/memory_router.py +130 -0
  42. basic_memory-0.17.7/src/basic_memory/api/v2/routers/project_router.py +357 -0
  43. basic_memory-0.17.7/src/basic_memory/api/v2/routers/prompt_router.py +269 -0
  44. basic_memory-0.17.7/src/basic_memory/api/v2/routers/resource_router.py +289 -0
  45. basic_memory-0.17.7/src/basic_memory/api/v2/routers/search_router.py +73 -0
  46. basic_memory-0.17.7/src/basic_memory/cli/app.py +76 -0
  47. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/auth.py +27 -4
  48. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/__init__.py +2 -1
  49. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/api_client.py +20 -5
  50. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/cloud_utils.py +13 -6
  51. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/core_commands.py +5 -7
  52. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/rclone_commands.py +113 -14
  53. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/rclone_installer.py +18 -4
  54. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/upload.py +10 -3
  55. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/upload_command.py +2 -2
  56. basic_memory-0.17.7/src/basic_memory/cli/commands/command_utils.py +99 -0
  57. basic_memory-0.17.7/src/basic_memory/cli/commands/db.py +105 -0
  58. basic_memory-0.17.7/src/basic_memory/cli/commands/format.py +198 -0
  59. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/import_chatgpt.py +14 -10
  60. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/import_claude_conversations.py +14 -10
  61. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/import_claude_projects.py +14 -10
  62. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/import_memory_json.py +14 -10
  63. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/mcp.py +8 -26
  64. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/project.py +41 -29
  65. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/status.py +3 -2
  66. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/tool.py +7 -7
  67. basic_memory-0.17.7/src/basic_memory/cli/container.py +84 -0
  68. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/main.py +6 -0
  69. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/config.py +166 -77
  70. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/db.py +183 -77
  71. basic_memory-0.17.7/src/basic_memory/deps/__init__.py +293 -0
  72. basic_memory-0.17.7/src/basic_memory/deps/config.py +26 -0
  73. basic_memory-0.17.7/src/basic_memory/deps/db.py +56 -0
  74. basic_memory-0.17.7/src/basic_memory/deps/importers.py +200 -0
  75. basic_memory-0.17.7/src/basic_memory/deps/projects.py +236 -0
  76. basic_memory-0.17.7/src/basic_memory/deps/repositories.py +183 -0
  77. basic_memory-0.17.7/src/basic_memory/deps/services.py +484 -0
  78. basic_memory-0.17.7/src/basic_memory/deps.py +16 -0
  79. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/file_utils.py +212 -3
  80. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/ignore_utils.py +5 -5
  81. basic_memory-0.17.7/src/basic_memory/importers/base.py +100 -0
  82. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/importers/chatgpt_importer.py +17 -4
  83. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/importers/claude_conversations_importer.py +27 -12
  84. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/importers/claude_projects_importer.py +50 -14
  85. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/importers/memory_json_importer.py +36 -16
  86. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/importers/utils.py +5 -2
  87. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/markdown/entity_parser.py +62 -23
  88. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/markdown/markdown_processor.py +67 -4
  89. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/markdown/plugins.py +4 -2
  90. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/markdown/utils.py +17 -1
  91. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/async_client.py +1 -0
  92. basic_memory-0.17.7/src/basic_memory/mcp/clients/__init__.py +28 -0
  93. basic_memory-0.17.7/src/basic_memory/mcp/clients/directory.py +70 -0
  94. basic_memory-0.17.7/src/basic_memory/mcp/clients/knowledge.py +176 -0
  95. basic_memory-0.17.7/src/basic_memory/mcp/clients/memory.py +120 -0
  96. basic_memory-0.17.7/src/basic_memory/mcp/clients/project.py +89 -0
  97. basic_memory-0.17.7/src/basic_memory/mcp/clients/resource.py +71 -0
  98. basic_memory-0.17.7/src/basic_memory/mcp/clients/search.py +65 -0
  99. basic_memory-0.17.7/src/basic_memory/mcp/container.py +108 -0
  100. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/project_context.py +47 -33
  101. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +2 -2
  102. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/prompts/recent_activity.py +2 -2
  103. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/prompts/utils.py +3 -3
  104. basic_memory-0.17.7/src/basic_memory/mcp/server.py +61 -0
  105. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/build_context.py +12 -14
  106. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/canvas.py +34 -12
  107. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/chatgpt_tools.py +1 -1
  108. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/delete_note.py +29 -7
  109. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/edit_note.py +12 -9
  110. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/list_directory.py +5 -17
  111. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/move_note.py +33 -31
  112. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/project_management.py +25 -25
  113. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/read_content.py +13 -3
  114. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/read_note.py +22 -14
  115. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/recent_activity.py +40 -38
  116. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/search.py +15 -10
  117. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/utils.py +32 -0
  118. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/view_note.py +0 -1
  119. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/write_note.py +37 -14
  120. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/models/knowledge.py +13 -2
  121. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/models/project.py +5 -1
  122. basic_memory-0.17.7/src/basic_memory/models/search.py +94 -0
  123. basic_memory-0.17.7/src/basic_memory/project_resolver.py +222 -0
  124. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/entity_repository.py +208 -3
  125. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/observation_repository.py +1 -0
  126. basic_memory-0.17.7/src/basic_memory/repository/postgres_search_repository.py +451 -0
  127. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/project_repository.py +38 -1
  128. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/relation_repository.py +59 -3
  129. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/repository.py +5 -3
  130. basic_memory-0.17.7/src/basic_memory/repository/search_index_row.py +95 -0
  131. basic_memory-0.17.7/src/basic_memory/repository/search_repository.py +101 -0
  132. basic_memory-0.17.7/src/basic_memory/repository/search_repository_base.py +241 -0
  133. basic_memory-0.16.0/src/basic_memory/repository/search_repository.py → basic_memory-0.17.7/src/basic_memory/repository/sqlite_search_repository.py +27 -229
  134. basic_memory-0.17.7/src/basic_memory/runtime.py +61 -0
  135. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/base.py +36 -6
  136. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/directory.py +2 -1
  137. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/memory.py +9 -2
  138. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/project_info.py +2 -0
  139. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/response.py +84 -27
  140. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/search.py +5 -0
  141. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/sync_report.py +1 -1
  142. basic_memory-0.17.7/src/basic_memory/schemas/v2/__init__.py +27 -0
  143. basic_memory-0.17.7/src/basic_memory/schemas/v2/entity.py +133 -0
  144. basic_memory-0.17.7/src/basic_memory/schemas/v2/resource.py +47 -0
  145. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/context_service.py +221 -43
  146. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/directory_service.py +26 -11
  147. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/entity_service.py +68 -33
  148. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/file_service.py +131 -16
  149. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/initialization.py +51 -26
  150. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/link_resolver.py +1 -0
  151. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/project_service.py +68 -43
  152. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/search_service.py +75 -16
  153. basic_memory-0.17.7/src/basic_memory/sync/__init__.py +7 -0
  154. basic_memory-0.17.7/src/basic_memory/sync/coordinator.py +160 -0
  155. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/sync/sync_service.py +137 -115
  156. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/sync/watch_service.py +32 -12
  157. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/utils.py +96 -75
  158. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/cli/test_project_commands_integration.py +59 -15
  159. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/conftest.py +158 -27
  160. basic_memory-0.17.7/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +81 -0
  161. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_project_management_integration.py +50 -23
  162. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_project_state_sync_integration.py +2 -2
  163. basic_memory-0.17.7/test-int/mcp/test_read_note_integration.py +102 -0
  164. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_write_note_integration.py +69 -86
  165. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/test_db_wal_mode.py +66 -43
  166. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/test_disable_permalinks_integration.py +31 -16
  167. basic_memory-0.17.7/tests/README.md +172 -0
  168. basic_memory-0.17.7/tests/api/test_api_container.py +62 -0
  169. basic_memory-0.17.7/tests/api/test_async_client.py +53 -0
  170. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_continue_conversation_template.py +3 -0
  171. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_directory_router.py +0 -200
  172. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_knowledge_router.py +0 -36
  173. basic_memory-0.17.7/tests/api/test_management_router.py +121 -0
  174. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_project_router.py +12 -10
  175. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_relation_background_resolution.py +21 -9
  176. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_resource_router.py +5 -1
  177. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_search_router.py +10 -2
  178. basic_memory-0.17.7/tests/api/v2/__init__.py +1 -0
  179. basic_memory-0.17.7/tests/api/v2/conftest.py +21 -0
  180. basic_memory-0.17.7/tests/api/v2/test_directory_router.py +129 -0
  181. basic_memory-0.17.7/tests/api/v2/test_importer_router.py +530 -0
  182. basic_memory-0.17.7/tests/api/v2/test_knowledge_router.py +411 -0
  183. basic_memory-0.17.7/tests/api/v2/test_memory_router.py +301 -0
  184. basic_memory-0.17.7/tests/api/v2/test_project_router.py +342 -0
  185. basic_memory-0.17.7/tests/api/v2/test_prompt_router.py +212 -0
  186. basic_memory-0.17.7/tests/api/v2/test_resource_router.py +273 -0
  187. basic_memory-0.17.7/tests/api/v2/test_search_router.py +289 -0
  188. basic_memory-0.17.7/tests/cli/cloud/test_cloud_api_client_and_utils.py +165 -0
  189. basic_memory-0.17.7/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +78 -0
  190. basic_memory-0.17.7/tests/cli/cloud/test_upload_path.py +73 -0
  191. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/conftest.py +29 -3
  192. basic_memory-0.17.7/tests/cli/test_auth_cli_auth.py +152 -0
  193. basic_memory-0.17.7/tests/cli/test_cli_container.py +96 -0
  194. basic_memory-0.17.7/tests/cli/test_cli_exit.py +48 -0
  195. basic_memory-0.17.7/tests/cli/test_cli_tool_exit.py +104 -0
  196. basic_memory-0.17.7/tests/cli/test_cli_tools.py +38 -0
  197. basic_memory-0.17.7/tests/cli/test_cloud_authentication.py +223 -0
  198. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_import_memory_json.py +5 -3
  199. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_project_add_with_local_path.py +40 -22
  200. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_upload.py +84 -182
  201. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/conftest.py +180 -28
  202. basic_memory-0.17.7/tests/importers/test_conversation_indexing.py +116 -0
  203. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/importers/test_importer_base.py +28 -43
  204. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/importers/test_importer_utils.py +3 -0
  205. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_entity_parser.py +9 -6
  206. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_markdown_plugins.py +40 -2
  207. basic_memory-0.17.7/tests/markdown/test_markdown_utils.py +163 -0
  208. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_parser_edge_cases.py +1 -1
  209. basic_memory-0.17.7/tests/mcp/clients/__init__.py +0 -0
  210. basic_memory-0.17.7/tests/mcp/clients/test_clients.py +311 -0
  211. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/conftest.py +2 -1
  212. basic_memory-0.17.7/tests/mcp/test_async_client_modes.py +80 -0
  213. basic_memory-0.17.7/tests/mcp/test_mcp_container.py +93 -0
  214. basic_memory-0.17.7/tests/mcp/test_project_context.py +103 -0
  215. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_prompts.py +1 -0
  216. basic_memory-0.17.7/tests/mcp/test_recent_activity_prompt_modes.py +111 -0
  217. basic_memory-0.17.7/tests/mcp/test_server_lifespan_branches.py +33 -0
  218. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_move_note.py +28 -37
  219. basic_memory-0.17.7/tests/mcp/test_tool_project_management.py +49 -0
  220. basic_memory-0.17.7/tests/mcp/test_tool_read_content.py +168 -0
  221. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_read_note.py +100 -62
  222. basic_memory-0.17.7/tests/mcp/test_tool_recent_activity.py +411 -0
  223. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_search.py +56 -20
  224. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_utils.py +54 -31
  225. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_view_note.py +9 -47
  226. basic_memory-0.17.7/tests/mcp/test_tool_write_note_kebab_filenames.py +392 -0
  227. basic_memory-0.17.7/tests/mcp/tools/test_chatgpt_tools.py +215 -0
  228. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_entity_repository.py +242 -0
  229. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_entity_upsert_issue_187.py +3 -0
  230. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_observation_repository.py +111 -1
  231. basic_memory-0.17.7/tests/repository/test_postgres_search_repository.py +199 -0
  232. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_project_repository.py +1 -1
  233. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_relation_repository.py +157 -2
  234. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_repository.py +8 -4
  235. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_search_repository.py +275 -37
  236. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_search_repository_edit_bug_fix.py +8 -7
  237. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/schemas/test_memory_serialization.py +20 -1
  238. basic_memory-0.17.7/tests/schemas/test_relation_response_reference_resolution.py +39 -0
  239. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/schemas/test_schemas.py +85 -0
  240. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_context_service.py +26 -11
  241. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_entity_service.py +13 -13
  242. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_file_service.py +110 -18
  243. basic_memory-0.17.7/tests/services/test_initialization.py +126 -0
  244. basic_memory-0.17.7/tests/services/test_initialization_cloud_mode_branches.py +25 -0
  245. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_link_resolver.py +1 -0
  246. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_project_service.py +41 -48
  247. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_project_service_operations.py +4 -44
  248. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_search_service.py +191 -30
  249. basic_memory-0.17.7/tests/sync/test_coordinator.py +135 -0
  250. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_sync_service.py +184 -467
  251. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_watch_service.py +12 -13
  252. basic_memory-0.17.7/tests/sync/test_watch_service_atomic_adds.py +51 -0
  253. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_watch_service_edge_cases.py +5 -15
  254. basic_memory-0.17.7/tests/sync/test_watch_service_reload.py +257 -0
  255. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/test_config.py +250 -21
  256. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/test_deps.py +26 -0
  257. basic_memory-0.17.7/tests/test_project_resolver.py +209 -0
  258. basic_memory-0.17.7/tests/test_rclone_commands.py +497 -0
  259. basic_memory-0.17.7/tests/test_runtime.py +52 -0
  260. basic_memory-0.17.7/tests/utils/test_file_utils.py +550 -0
  261. basic_memory-0.17.7/tests/utils/test_timezone_utils.py +92 -0
  262. basic_memory-0.17.7/uv.lock +2690 -0
  263. basic_memory-0.16.0/.claude/agents/python-developer.md +0 -154
  264. basic_memory-0.16.0/.claude/agents/system-architect.md +0 -126
  265. basic_memory-0.16.0/.claude/commands/release/release.md +0 -92
  266. basic_memory-0.16.0/.github/workflows/test.yml +0 -70
  267. basic_memory-0.16.0/.python-version +0 -1
  268. basic_memory-0.16.0/justfile +0 -193
  269. basic_memory-0.16.0/specs/SPEC-1 Specification-Driven Development Process.md +0 -156
  270. basic_memory-0.16.0/specs/SPEC-10 Unified Deployment Workflow and Event Tracking.md +0 -569
  271. basic_memory-0.16.0/specs/SPEC-11 Basic Memory API Performance Optimization.md +0 -186
  272. basic_memory-0.16.0/specs/SPEC-12 OpenTelemetry Observability.md +0 -182
  273. basic_memory-0.16.0/specs/SPEC-13 CLI Authentication with Subscription Validation.md +0 -917
  274. basic_memory-0.16.0/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md +0 -210
  275. basic_memory-0.16.0/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md +0 -210
  276. basic_memory-0.16.0/specs/SPEC-15 Configuration Persistence via Tigris for Cloud Tenants.md +0 -273
  277. basic_memory-0.16.0/specs/SPEC-16 MCP Cloud Service Consolidation.md +0 -800
  278. basic_memory-0.16.0/specs/SPEC-17 Semantic Search with ChromaDB.md +0 -1439
  279. basic_memory-0.16.0/specs/SPEC-18 AI Memory Management Tool.md +0 -528
  280. basic_memory-0.16.0/specs/SPEC-19 Sync Performance and Memory Optimization.md +0 -1046
  281. basic_memory-0.16.0/specs/SPEC-2 Slash Commands Reference.md +0 -120
  282. basic_memory-0.16.0/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md +0 -1216
  283. basic_memory-0.16.0/specs/SPEC-3 Agent Definitions.md +0 -108
  284. basic_memory-0.16.0/specs/SPEC-4 Notes Web UI Component Architecture.md +0 -311
  285. basic_memory-0.16.0/specs/SPEC-5 CLI Cloud Upload via WebDAV.md +0 -201
  286. basic_memory-0.16.0/specs/SPEC-6 Explicit Project Parameter Architecture.md +0 -497
  287. basic_memory-0.16.0/specs/SPEC-7 POC to spike Tigris Turso for local access to cloud data.md +0 -324
  288. basic_memory-0.16.0/specs/SPEC-8 TigrisFS Integration.md +0 -886
  289. basic_memory-0.16.0/specs/SPEC-9 Multi-Project Bidirectional Sync Architecture.md +0 -1114
  290. basic_memory-0.16.0/specs/SPEC-9 Signed Header Tenant Information.md +0 -196
  291. basic_memory-0.16.0/specs/SPEC-9-1 Follow-Ups- Conflict, Sync, and Observability.md +0 -390
  292. basic_memory-0.16.0/src/basic_memory/alembic/env.py +0 -99
  293. basic_memory-0.16.0/src/basic_memory/cli/app.py +0 -54
  294. basic_memory-0.16.0/src/basic_memory/cli/commands/command_utils.py +0 -51
  295. basic_memory-0.16.0/src/basic_memory/cli/commands/db.py +0 -44
  296. basic_memory-0.16.0/src/basic_memory/deps.py +0 -411
  297. basic_memory-0.16.0/src/basic_memory/importers/base.py +0 -79
  298. basic_memory-0.16.0/src/basic_memory/mcp/server.py +0 -9
  299. basic_memory-0.16.0/src/basic_memory/models/search.py +0 -38
  300. basic_memory-0.16.0/src/basic_memory/sync/__init__.py +0 -6
  301. basic_memory-0.16.0/test-int/mcp/test_read_note_integration.py +0 -48
  302. basic_memory-0.16.0/test-int/test_sync_performance_benchmark.py +0 -369
  303. basic_memory-0.16.0/tests/api/test_async_client.py +0 -52
  304. basic_memory-0.16.0/tests/api/test_management_router.py +0 -211
  305. basic_memory-0.16.0/tests/cli/test_cli_tools.py +0 -492
  306. basic_memory-0.16.0/tests/cli/test_cloud_authentication.py +0 -239
  307. basic_memory-0.16.0/tests/mcp/test_tool_read_content.py +0 -464
  308. basic_memory-0.16.0/tests/mcp/test_tool_recent_activity.py +0 -135
  309. basic_memory-0.16.0/tests/mcp/tools/test_chatgpt_tools.py +0 -228
  310. basic_memory-0.16.0/tests/services/test_initialization.py +0 -180
  311. basic_memory-0.16.0/tests/sync/test_watch_service_reload.py +0 -252
  312. basic_memory-0.16.0/tests/test_db_migration_deduplication.py +0 -185
  313. basic_memory-0.16.0/tests/test_rclone_commands.py +0 -353
  314. basic_memory-0.16.0/tests/utils/test_file_utils.py +0 -216
  315. basic_memory-0.16.0/uv.lock +0 -2295
  316. basic_memory-0.16.0/v0.15.0-RELEASE-DOCS.md +0 -161
  317. basic_memory-0.16.0/v15-docs/README.md +0 -61
  318. basic_memory-0.16.0/v15-docs/api-performance.md +0 -585
  319. basic_memory-0.16.0/v15-docs/background-relations.md +0 -531
  320. basic_memory-0.16.0/v15-docs/basic-memory-home.md +0 -371
  321. basic_memory-0.16.0/v15-docs/bug-fixes.md +0 -395
  322. basic_memory-0.16.0/v15-docs/chatgpt-integration.md +0 -648
  323. basic_memory-0.16.0/v15-docs/cloud-authentication.md +0 -381
  324. basic_memory-0.16.0/v15-docs/cloud-bisync.md +0 -531
  325. basic_memory-0.16.0/v15-docs/cloud-mode-usage.md +0 -546
  326. basic_memory-0.16.0/v15-docs/cloud-mount.md +0 -501
  327. basic_memory-0.16.0/v15-docs/default-project-mode.md +0 -425
  328. basic_memory-0.16.0/v15-docs/env-file-removal.md +0 -434
  329. basic_memory-0.16.0/v15-docs/env-var-overrides.md +0 -449
  330. basic_memory-0.16.0/v15-docs/explicit-project-parameter.md +0 -198
  331. basic_memory-0.16.0/v15-docs/gitignore-integration.md +0 -621
  332. basic_memory-0.16.0/v15-docs/project-root-env-var.md +0 -424
  333. basic_memory-0.16.0/v15-docs/sqlite-performance.md +0 -512
  334. {basic_memory-0.16.0 → basic_memory-0.17.7}/.claude/commands/release/beta.md +0 -0
  335. {basic_memory-0.16.0 → basic_memory-0.17.7}/.claude/commands/release/changelog.md +0 -0
  336. {basic_memory-0.16.0 → basic_memory-0.17.7}/.claude/commands/release/release-check.md +0 -0
  337. {basic_memory-0.16.0 → basic_memory-0.17.7}/.claude/commands/test-live.md +0 -0
  338. {basic_memory-0.16.0 → basic_memory-0.17.7}/.dockerignore +0 -0
  339. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  340. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  341. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  342. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  343. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/dependabot.yml +0 -0
  344. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/claude-issue-triage.yml +0 -0
  345. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/claude.yml +0 -0
  346. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/dev-release.yml +0 -0
  347. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/docker.yml +0 -0
  348. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/pr-title.yml +0 -0
  349. {basic_memory-0.16.0 → basic_memory-0.17.7}/.github/workflows/release.yml +0 -0
  350. {basic_memory-0.16.0 → basic_memory-0.17.7}/CITATION.cff +0 -0
  351. {basic_memory-0.16.0 → basic_memory-0.17.7}/CLA.md +0 -0
  352. {basic_memory-0.16.0 → basic_memory-0.17.7}/CODE_OF_CONDUCT.md +0 -0
  353. {basic_memory-0.16.0 → basic_memory-0.17.7}/CONTRIBUTING.md +0 -0
  354. {basic_memory-0.16.0 → basic_memory-0.17.7}/LICENSE +0 -0
  355. {basic_memory-0.16.0 → basic_memory-0.17.7}/SECURITY.md +0 -0
  356. {basic_memory-0.16.0 → basic_memory-0.17.7}/docker-compose.yml +0 -0
  357. {basic_memory-0.16.0 → basic_memory-0.17.7}/docs/Docker.md +0 -0
  358. {basic_memory-0.16.0 → basic_memory-0.17.7}/docs/ai-assistant-guide-extended.md +0 -0
  359. {basic_memory-0.16.0 → basic_memory-0.17.7}/docs/character-handling.md +0 -0
  360. {basic_memory-0.16.0 → basic_memory-0.17.7}/docs/cloud-cli.md +0 -0
  361. {basic_memory-0.16.0 → basic_memory-0.17.7}/llms-install.md +0 -0
  362. {basic_memory-0.16.0 → basic_memory-0.17.7}/smithery.yaml +0 -0
  363. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/alembic.ini +0 -0
  364. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/migrations.py +0 -0
  365. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/script.py.mako +0 -0
  366. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  367. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  368. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  369. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  370. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  371. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  372. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/__init__.py +0 -0
  373. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/__init__.py +0 -0
  374. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/directory_router.py +0 -0
  375. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/importer_router.py +0 -0
  376. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/management_router.py +0 -0
  377. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/memory_router.py +0 -0
  378. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/prompt_router.py +0 -0
  379. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/routers/search_router.py +0 -0
  380. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/api/template_loader.py +0 -0
  381. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/__init__.py +0 -0
  382. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  383. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  384. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  385. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/importers/__init__.py +0 -0
  386. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/markdown/__init__.py +0 -0
  387. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/markdown/schemas.py +0 -0
  388. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/__init__.py +0 -0
  389. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  390. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  391. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/prompts/search.py +0 -0
  392. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  393. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/resources/project_info.py +0 -0
  394. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/mcp/tools/__init__.py +0 -0
  395. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/models/__init__.py +0 -0
  396. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/models/base.py +0 -0
  397. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/__init__.py +0 -0
  398. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/repository/project_info_repository.py +0 -0
  399. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/__init__.py +0 -0
  400. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/cloud.py +0 -0
  401. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/delete.py +0 -0
  402. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/importer.py +0 -0
  403. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/prompt.py +0 -0
  404. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/schemas/request.py +0 -0
  405. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/__init__.py +0 -0
  406. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/exceptions.py +0 -0
  407. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/services/service.py +0 -0
  408. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/sync/background_sync.py +0 -0
  409. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  410. {basic_memory-0.16.0 → basic_memory-0.17.7}/src/basic_memory/templates/prompts/search.hbs +0 -0
  411. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/BENCHMARKS.md +0 -0
  412. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/cli/test_version_integration.py +0 -0
  413. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_build_context_underscore.py +0 -0
  414. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_build_context_validation.py +0 -0
  415. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  416. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  417. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_delete_note_integration.py +0 -0
  418. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_edit_note_integration.py +0 -0
  419. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_list_directory_integration.py +0 -0
  420. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_move_note_integration.py +0 -0
  421. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_read_content_integration.py +0 -0
  422. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_search_integration.py +0 -0
  423. {basic_memory-0.16.0 → basic_memory-0.17.7}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  424. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/Non-MarkdownFileSupport.pdf +0 -0
  425. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/Screenshot.png +0 -0
  426. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/__init__.py +0 -0
  427. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/conftest.py +0 -0
  428. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_importer_router.py +0 -0
  429. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_memory_router.py +0 -0
  430. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_project_router_operations.py +0 -0
  431. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_prompt_router.py +0 -0
  432. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_search_template.py +0 -0
  433. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_template_loader.py +0 -0
  434. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/api/test_template_loader_helpers.py +0 -0
  435. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_ignore_utils.py +0 -0
  436. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_import_chatgpt.py +0 -0
  437. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_import_claude_conversations.py +0 -0
  438. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/cli/test_import_claude_projects.py +0 -0
  439. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  440. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/__init__.py +0 -0
  441. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  442. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  443. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_markdown_processor.py +0 -0
  444. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_observation_edge_cases.py +0 -0
  445. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_relation_edge_cases.py +0 -0
  446. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/markdown/test_task_detection.py +0 -0
  447. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  448. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  449. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_resources.py +0 -0
  450. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_build_context.py +0 -0
  451. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_canvas.py +0 -0
  452. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_delete_note.py +0 -0
  453. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_edit_note.py +0 -0
  454. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_list_directory.py +0 -0
  455. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_resource.py +0 -0
  456. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/mcp/test_tool_write_note.py +0 -0
  457. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_entity_repository_upsert.py +0 -0
  458. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/repository/test_project_info_repository.py +0 -0
  459. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  460. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/schemas/test_memory_url.py +0 -0
  461. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/schemas/test_memory_url_validation.py +0 -0
  462. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/schemas/test_search.py +0 -0
  463. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_directory_service.py +0 -0
  464. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  465. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/services/test_project_removal_bug.py +0 -0
  466. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_character_conflicts.py +0 -0
  467. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_sync_service_incremental.py +0 -0
  468. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_sync_wikilink_issue.py +0 -0
  469. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/sync/test_tmp_files.py +0 -0
  470. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/test_production_cascade_delete.py +0 -0
  471. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  472. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/utils/test_parse_tags.py +0 -0
  473. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/utils/test_permalink_formatting.py +0 -0
  474. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/utils/test_utf8_handling.py +0 -0
  475. {basic_memory-0.16.0 → basic_memory-0.17.7}/tests/utils/test_validate_project_path.py +0 -0
@@ -0,0 +1,199 @@
1
+ # /release - Create Stable Release
2
+
3
+ Create a stable release using the automated justfile target with comprehensive validation.
4
+
5
+ ## Usage
6
+ ```
7
+ /release <version>
8
+ ```
9
+
10
+ **Parameters:**
11
+ - `version` (required): Release version like `v0.13.2`
12
+
13
+ ## Implementation
14
+
15
+ You are an expert release manager for the Basic Memory project. When the user runs `/release`, execute the following steps:
16
+
17
+ ### Step 1: Pre-flight Validation
18
+
19
+ #### Version Check
20
+ 1. Check current version in `src/basic_memory/__init__.py`
21
+ 2. Verify new version format matches `v\d+\.\d+\.\d+` pattern
22
+ 3. Confirm version is higher than current version
23
+
24
+ #### Git Status
25
+ 1. Check current git status for uncommitted changes
26
+ 2. Verify we're on the `main` branch
27
+ 3. Confirm no existing tag with this version
28
+
29
+ #### Documentation Validation
30
+ 1. **Changelog Check**
31
+ - CHANGELOG.md contains entry for target version
32
+ - Entry includes all major features and fixes
33
+ - Breaking changes are documented
34
+
35
+ ### Step 2: Use Justfile Automation
36
+ Execute the automated release process:
37
+ ```bash
38
+ just release <version>
39
+ ```
40
+
41
+ The justfile target handles:
42
+ - ✅ Version format validation
43
+ - ✅ Git status and branch checks
44
+ - ✅ Quality checks (`just check` - lint, format, type-check, tests)
45
+ - ✅ Version update in `src/basic_memory/__init__.py`
46
+ - ✅ Automatic commit with proper message
47
+ - ✅ Tag creation and pushing to GitHub
48
+ - ✅ Release workflow trigger (automatic on tag push)
49
+
50
+ The GitHub Actions workflow (`.github/workflows/release.yml`) then:
51
+ - ✅ Builds the package using `uv build`
52
+ - ✅ Creates GitHub release with auto-generated notes
53
+ - ✅ Publishes to PyPI
54
+ - ✅ Updates Homebrew formula (stable releases only)
55
+
56
+ ### Step 3: Monitor Release Process
57
+ 1. Verify tag push triggered the workflow (should start automatically within seconds)
58
+ 2. Monitor workflow progress at: https://github.com/basicmachines-co/basic-memory/actions
59
+ 3. Watch for successful completion of both jobs:
60
+ - `release` - Builds package and publishes to PyPI
61
+ - `homebrew` - Updates Homebrew formula (stable releases only)
62
+ 4. Check for any workflow failures and investigate logs if needed
63
+
64
+ ### Step 4: Post-Release Validation
65
+
66
+ #### GitHub Release
67
+ 1. Verify GitHub release is created at: https://github.com/basicmachines-co/basic-memory/releases/tag/<version>
68
+ 2. Check that release notes are auto-generated from commits
69
+ 3. Validate release assets (`.whl` and `.tar.gz` files are attached)
70
+
71
+ #### PyPI Publication
72
+ 1. Verify package published at: https://pypi.org/project/basic-memory/<version>/
73
+ 2. Test installation: `uv tool install basic-memory`
74
+ 3. Verify installed version: `basic-memory --version`
75
+
76
+ #### Homebrew Formula (Stable Releases Only)
77
+ 1. Check formula update at: https://github.com/basicmachines-co/homebrew-basic-memory
78
+ 2. Verify formula version matches release
79
+ 3. Test Homebrew installation: `brew install basicmachines-co/basic-memory/basic-memory`
80
+
81
+ #### MCP Registry Publication
82
+
83
+ After PyPI release is published, update the MCP registry:
84
+
85
+ 1. **Verify PyPI Release**
86
+ - Confirm package is live: https://pypi.org/project/basic-memory/<version>/
87
+ - The `server.json` version was auto-updated by `just release`
88
+
89
+ 2. **Publish to MCP Registry**
90
+ ```bash
91
+ cd /Users/drew/code/basic-memory
92
+ mcp-publisher publish
93
+ ```
94
+
95
+ If not authenticated:
96
+ ```bash
97
+ mcp-publisher login github
98
+ # Follow device authentication flow
99
+ mcp-publisher publish
100
+ ```
101
+
102
+ 3. **Verify Publication**
103
+ ```bash
104
+ curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=basic-memory"
105
+ ```
106
+
107
+ **Note:** The `mcp-publisher` CLI can be installed via Homebrew (`brew install mcp-publisher`) or from GitHub releases.
108
+
109
+ #### Website Updates
110
+
111
+ **1. basicmachines.co** (`/Users/drew/code/basicmachines.co`)
112
+ - **Goal**: Update version number displayed on the homepage
113
+ - **Location**: Search for "Basic Memory v0." in the codebase to find version displays
114
+ - **What to update**:
115
+ - Hero section heading that shows "Basic Memory v{VERSION}"
116
+ - "What's New in v{VERSION}" section heading
117
+ - Feature highlights array (look for array of features with title/description)
118
+ - **Process**:
119
+ 1. Pull latest from GitHub: `git pull origin main`
120
+ 2. Create release branch: `git checkout -b release/v{VERSION}`
121
+ 3. Search codebase for current version number (e.g., "v0.16.1")
122
+ 4. Update version numbers to new release version
123
+ 5. Update feature highlights with 3-5 key features from this release (extract from CHANGELOG.md)
124
+ 6. Commit changes: `git commit -m "chore: update to v{VERSION}"`
125
+ 7. Push branch: `git push origin release/v{VERSION}`
126
+ - **Deploy**: Follow deployment process for basicmachines.co
127
+
128
+ **2. docs.basicmemory.com** (`/Users/drew/code/docs.basicmemory.com`)
129
+ - **Goal**: Add new release notes section to the latest-releases page
130
+ - **File**: `src/pages/latest-releases.mdx`
131
+ - **What to do**:
132
+ 1. Pull latest from GitHub: `git pull origin main`
133
+ 2. Create release branch: `git checkout -b release/v{VERSION}`
134
+ 3. Read the existing file to understand the format and structure
135
+ 4. Read `/Users/drew/code/basic-memory/CHANGELOG.md` to get release content
136
+ 5. Add new release section **at the top** (after MDX imports, before other releases)
137
+ 6. Follow the existing pattern:
138
+ - Heading: `## [v{VERSION}](github-link) — YYYY-MM-DD`
139
+ - Focus statement if applicable
140
+ - `<Info>` block with highlights (3-5 key items)
141
+ - Sections for Features, Bug Fixes, Breaking Changes, etc.
142
+ - Link to full changelog at the end
143
+ - Separator `---` between releases
144
+ 7. Commit changes: `git commit -m "docs: add v{VERSION} release notes"`
145
+ 8. Push branch: `git push origin release/v{VERSION}`
146
+ - **Source content**: Extract and format sections from CHANGELOG.md for this version
147
+ - **Deploy**: Follow deployment process for docs.basicmemory.com
148
+
149
+ **4. Announce Release**
150
+ - Post to Discord community if significant changes
151
+ - Update social media if major release
152
+ - Notify users via appropriate channels
153
+
154
+ ## Pre-conditions Check
155
+ Before starting, verify:
156
+ - [ ] All beta testing is complete
157
+ - [ ] Critical bugs are fixed
158
+ - [ ] Breaking changes are documented
159
+ - [ ] CHANGELOG.md is updated (if needed)
160
+ - [ ] Version number follows semantic versioning
161
+
162
+ ## Error Handling
163
+ - If `just release` fails, examine the error output for specific issues
164
+ - If quality checks fail, fix issues and retry
165
+ - If changelog entry missing, update CHANGELOG.md and commit before retrying
166
+ - If GitHub Actions fail, check workflow logs for debugging
167
+
168
+ ## Success Output
169
+ ```
170
+ 🎉 Stable Release v0.13.2 Created Successfully!
171
+
172
+ 🏷️ Tag: v0.13.2
173
+ 📋 GitHub Release: https://github.com/basicmachines-co/basic-memory/releases/tag/v0.13.2
174
+ 📦 PyPI: https://pypi.org/project/basic-memory/0.13.2/
175
+ 🍺 Homebrew: https://github.com/basicmachines-co/homebrew-basic-memory
176
+ 🔌 MCP Registry: https://registry.modelcontextprotocol.io
177
+ 🚀 GitHub Actions: Completed
178
+
179
+ Install with pip/uv:
180
+ uv tool install basic-memory
181
+
182
+ Install with Homebrew:
183
+ brew install basicmachines-co/basic-memory/basic-memory
184
+
185
+ Users can now upgrade:
186
+ uv tool upgrade basic-memory
187
+ brew upgrade basic-memory
188
+ ```
189
+
190
+ ## Context
191
+ - This creates production releases used by end users
192
+ - Must pass all quality gates before proceeding
193
+ - Uses the automated justfile target for consistency
194
+ - Version is automatically updated in `__init__.py` and `server.json`
195
+ - Triggers automated GitHub release with changelog
196
+ - Package is published to PyPI for `pip` and `uv` users
197
+ - Homebrew formula is automatically updated for stable releases
198
+ - MCP Registry is updated manually via `mcp-publisher publish`
199
+ - Supports multiple installation methods (uv, pip, Homebrew)
@@ -1,17 +1,19 @@
1
1
  ---
2
- allowed-tools: mcp__basic-memory__write_note, mcp__basic-memory__read_note, mcp__basic-memory__search_notes, mcp__basic-memory__edit_note, Task
3
- argument-hint: [create|status|implement|review] [spec-name]
2
+ allowed-tools: mcp__basic-memory__write_note, mcp__basic-memory__read_note, mcp__basic-memory__search_notes, mcp__basic-memory__edit_note
3
+ argument-hint: [create|status|show|review] [spec-name]
4
4
  description: Manage specifications in our development process
5
5
  ---
6
6
 
7
7
  ## Context
8
8
 
9
- You are managing specifications using our specification-driven development process defined in @docs/specs/SPEC-001.md.
9
+ Specifications are managed in the Basic Memory "specs" project. All specs live in a centralized location accessible across all repositories via MCP tools.
10
+
11
+ See SPEC-1 and SPEC-2 in the "specs" project for the full specification-driven development process.
10
12
 
11
13
  Available commands:
12
14
  - `create [name]` - Create new specification
13
15
  - `status` - Show all spec statuses
14
- - `implement [spec-name]` - Hand spec to appropriate agent
16
+ - `show [spec-name]` - Read a specific spec
15
17
  - `review [spec-name]` - Review implementation against spec
16
18
 
17
19
  ## Your task
@@ -19,23 +21,19 @@ Available commands:
19
21
  Execute the spec command: `/spec $ARGUMENTS`
20
22
 
21
23
  ### If command is "create":
22
- 1. Get next SPEC number by searching existing specs
23
- 2. Create new spec using template from @docs/specs/Slash\ Commands\ Reference.md
24
- 3. Place in `/specs` folder with title "SPEC-XXX: [name]"
24
+ 1. Get next SPEC number by searching existing specs in "specs" project
25
+ 2. Create new spec using template from SPEC-2
26
+ 3. Use mcp__basic-memory__write_note with project="specs"
25
27
  4. Include standard sections: Why, What, How, How to Evaluate
26
28
 
27
29
  ### If command is "status":
28
- 1. Search all notes in `/specs` folder
29
- 2. Display table with spec number, title, and status
30
- 3. Show any dependencies or assigned agents
31
-
32
- ### If command is "implement":
33
- 1. Read the specified spec
34
- 2. Determine appropriate agent based on content:
35
- - Frontend/UI → vue-developer
36
- - Architecture/system → system-architect
37
- - Backend/API → python-developer
38
- 3. Launch Task tool with appropriate agent and spec context
30
+ 1. Use mcp__basic-memory__search_notes with project="specs"
31
+ 2. Display table with spec number, title, and progress
32
+ 3. Show completion status from checkboxes in content
33
+
34
+ ### If command is "show":
35
+ 1. Use mcp__basic-memory__read_note with project="specs"
36
+ 2. Display the full spec content
39
37
 
40
38
  ### If command is "review":
41
39
  1. Read the specified spec and its "How to Evaluate" section
@@ -49,7 +47,5 @@ Execute the spec command: `/spec $ARGUMENTS`
49
47
  - **Architecture compliance** - Component isolation, state management patterns
50
48
  - **Documentation completeness** - Implementation matches specification
51
49
  3. Provide honest, accurate assessment - do not overstate completeness
52
- 4. Document findings and update spec with review results
50
+ 4. Document findings and update spec with review results using mcp__basic-memory__edit_note
53
51
  5. If gaps found, clearly identify what still needs to be implemented/tested
54
-
55
- Use the agent definitions from @docs/specs/Agent\ Definitions.md for implementation handoffs.
@@ -0,0 +1,5 @@
1
+ {
2
+ "enabledPlugins": {
3
+ "basic-memory@basicmachines": true
4
+ }
5
+ }
@@ -0,0 +1,28 @@
1
+ # Basic Memory Environment Variables Example
2
+ # Copy this file to .env and customize as needed
3
+ # Note: .env files are gitignored and should never be committed
4
+
5
+ # ============================================================================
6
+ # PostgreSQL Test Database Configuration
7
+ # ============================================================================
8
+ # These variables allow you to override the default test database credentials
9
+ # Default values match docker-compose-postgres.yml for local development
10
+ #
11
+ # Only needed if you want to use different credentials or a remote test database
12
+ # By default, tests use: postgresql://basic_memory_user:dev_password@localhost:5433/basic_memory_test
13
+
14
+ # Full PostgreSQL test database URL (used by tests and migrations)
15
+ # POSTGRES_TEST_URL=postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory_test
16
+
17
+ # Individual components (used by justfile postgres-reset command)
18
+ # POSTGRES_USER=basic_memory_user
19
+ # POSTGRES_TEST_DB=basic_memory_test
20
+
21
+ # ============================================================================
22
+ # Production Database Configuration
23
+ # ============================================================================
24
+ # For production use, set these in your deployment environment
25
+ # DO NOT use the test credentials above in production!
26
+
27
+ # BASIC_MEMORY_DATABASE_BACKEND=postgres # or "sqlite"
28
+ # BASIC_MEMORY_DATABASE_URL=postgresql+asyncpg://user:password@host:port/database
@@ -54,6 +54,7 @@ jobs:
54
54
  - [ ] Unit tests for new functions/methods
55
55
  - [ ] Integration tests for new MCP tools
56
56
  - [ ] Test coverage for edge cases
57
+ - [ ] **100% test coverage maintained** (use `# pragma: no cover` only for truly hard-to-test code)
57
58
  - [ ] Documentation updated (README, docstrings)
58
59
  - [ ] CLAUDE.md updated if conventions change
59
60
 
@@ -0,0 +1,167 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+ # pull_request_target runs on the BASE of the PR, not the merge result.
9
+ # It has write permissions and access to secrets.
10
+ # It's useful for PRs from forks or automated PRs but requires careful use for security reasons.
11
+ # See: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
12
+ pull_request_target:
13
+ branches: [ "main" ]
14
+
15
+ jobs:
16
+ test-sqlite:
17
+ name: Test SQLite (${{ matrix.os }}, Python ${{ matrix.python-version }})
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ os: [ubuntu-latest, windows-latest]
22
+ python-version: [ "3.12", "3.13", "3.14" ]
23
+ runs-on: ${{ matrix.os }}
24
+
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ with:
28
+ submodules: true
29
+
30
+ - name: Set up Python ${{ matrix.python-version }}
31
+ uses: actions/setup-python@v4
32
+ with:
33
+ python-version: ${{ matrix.python-version }}
34
+ cache: 'pip'
35
+
36
+ - name: Install uv
37
+ run: |
38
+ pip install uv
39
+
40
+ - name: Install just (Linux/macOS)
41
+ if: runner.os != 'Windows'
42
+ run: |
43
+ curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
44
+
45
+ - name: Install just (Windows)
46
+ if: runner.os == 'Windows'
47
+ run: |
48
+ # Install just using Chocolatey (pre-installed on GitHub Actions Windows runners)
49
+ choco install just --yes
50
+ shell: pwsh
51
+
52
+ - name: Create virtual env
53
+ run: |
54
+ uv venv
55
+
56
+ - name: Install dependencies
57
+ run: |
58
+ uv pip install -e .[dev]
59
+
60
+ - name: Run type checks
61
+ run: |
62
+ just typecheck
63
+
64
+ - name: Run linting
65
+ run: |
66
+ just lint
67
+
68
+ - name: Run tests (SQLite)
69
+ run: |
70
+ uv pip install pytest pytest-cov
71
+ just test-sqlite
72
+
73
+ test-postgres:
74
+ name: Test Postgres (Python ${{ matrix.python-version }})
75
+ strategy:
76
+ fail-fast: false
77
+ matrix:
78
+ python-version: [ "3.12", "3.13", "3.14" ]
79
+ runs-on: ubuntu-latest
80
+
81
+ # Note: No services section needed - testcontainers handles Postgres in Docker
82
+
83
+ steps:
84
+ - uses: actions/checkout@v4
85
+ with:
86
+ submodules: true
87
+
88
+ - name: Set up Python ${{ matrix.python-version }}
89
+ uses: actions/setup-python@v4
90
+ with:
91
+ python-version: ${{ matrix.python-version }}
92
+ cache: 'pip'
93
+
94
+ - name: Install uv
95
+ run: |
96
+ pip install uv
97
+
98
+ - name: Install just
99
+ run: |
100
+ curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
101
+
102
+ - name: Create virtual env
103
+ run: |
104
+ uv venv
105
+
106
+ - name: Install dependencies
107
+ run: |
108
+ uv pip install -e .[dev]
109
+
110
+ - name: Run tests (Postgres via testcontainers)
111
+ run: |
112
+ uv pip install pytest pytest-cov
113
+ just test-postgres
114
+
115
+ coverage:
116
+ name: Coverage Summary (combined, Python 3.12)
117
+ runs-on: ubuntu-latest
118
+
119
+ steps:
120
+ - uses: actions/checkout@v4
121
+ with:
122
+ submodules: true
123
+
124
+ - name: Set up Python 3.12
125
+ uses: actions/setup-python@v4
126
+ with:
127
+ python-version: "3.12"
128
+ cache: "pip"
129
+
130
+ - name: Install uv
131
+ run: |
132
+ pip install uv
133
+
134
+ - name: Install just
135
+ run: |
136
+ curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
137
+
138
+ - name: Create virtual env
139
+ run: |
140
+ uv venv
141
+
142
+ - name: Install dependencies
143
+ run: |
144
+ uv pip install -e .[dev]
145
+
146
+ - name: Run combined coverage (SQLite + Postgres)
147
+ run: |
148
+ uv pip install pytest pytest-cov
149
+ just coverage
150
+
151
+ - name: Add coverage report to job summary
152
+ if: always()
153
+ run: |
154
+ {
155
+ echo "## Coverage"
156
+ echo ""
157
+ echo '```'
158
+ uv run coverage report -m
159
+ echo '```'
160
+ } >> "$GITHUB_STEP_SUMMARY"
161
+
162
+ - name: Upload HTML coverage report
163
+ if: always()
164
+ uses: actions/upload-artifact@v4
165
+ with:
166
+ name: htmlcov
167
+ path: htmlcov/
@@ -52,4 +52,5 @@ ENV/
52
52
 
53
53
  # claude action
54
54
  claude-output
55
- **/.claude/settings.local.json
55
+ **/.claude/settings.local.json
56
+ .mcp.json
@@ -0,0 +1 @@
1
+ 3.14