basic-memory 0.16.1__tar.gz → 0.16.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. basic_memory-0.16.3/.claude/commands/release/release.md +169 -0
  2. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/spec.md +17 -21
  3. basic_memory-0.16.3/.claude/settings.json +5 -0
  4. basic_memory-0.16.3/.env.example +28 -0
  5. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/test.yml +46 -3
  6. {basic_memory-0.16.1 → basic_memory-0.16.3}/.gitignore +2 -1
  7. {basic_memory-0.16.1 → basic_memory-0.16.3}/CHANGELOG.md +115 -0
  8. {basic_memory-0.16.1 → basic_memory-0.16.3}/CLAUDE.md +20 -6
  9. {basic_memory-0.16.1 → basic_memory-0.16.3}/PKG-INFO +91 -4
  10. {basic_memory-0.16.1 → basic_memory-0.16.3}/README.md +85 -0
  11. basic_memory-0.16.3/docker-compose-postgres.yml +42 -0
  12. {basic_memory-0.16.1 → basic_memory-0.16.3}/justfile +77 -8
  13. {basic_memory-0.16.1 → basic_memory-0.16.3}/pyproject.toml +10 -4
  14. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/__init__.py +1 -1
  15. basic_memory-0.16.3/src/basic_memory/alembic/env.py +181 -0
  16. basic_memory-0.16.3/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +131 -0
  17. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +15 -3
  18. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +44 -36
  19. basic_memory-0.16.3/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +56 -0
  20. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +13 -0
  21. basic_memory-0.16.3/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +199 -0
  22. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/app.py +31 -6
  23. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/knowledge_router.py +13 -2
  24. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/project_router.py +50 -8
  25. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/resource_router.py +35 -25
  26. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/utils.py +53 -14
  27. basic_memory-0.16.3/src/basic_memory/api/v2/__init__.py +35 -0
  28. basic_memory-0.16.3/src/basic_memory/api/v2/routers/__init__.py +21 -0
  29. basic_memory-0.16.3/src/basic_memory/api/v2/routers/directory_router.py +93 -0
  30. basic_memory-0.16.3/src/basic_memory/api/v2/routers/importer_router.py +182 -0
  31. basic_memory-0.16.3/src/basic_memory/api/v2/routers/knowledge_router.py +415 -0
  32. basic_memory-0.16.3/src/basic_memory/api/v2/routers/memory_router.py +130 -0
  33. basic_memory-0.16.3/src/basic_memory/api/v2/routers/project_router.py +264 -0
  34. basic_memory-0.16.3/src/basic_memory/api/v2/routers/prompt_router.py +270 -0
  35. basic_memory-0.16.3/src/basic_memory/api/v2/routers/resource_router.py +286 -0
  36. basic_memory-0.16.3/src/basic_memory/api/v2/routers/search_router.py +73 -0
  37. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/app.py +4 -1
  38. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/rclone_commands.py +28 -3
  39. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/rclone_installer.py +18 -4
  40. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/mcp.py +3 -1
  41. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/config.py +126 -76
  42. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/db.py +139 -73
  43. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/deps.py +288 -6
  44. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/file_utils.py +16 -0
  45. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/claude_conversations_importer.py +4 -1
  46. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/entity_parser.py +56 -23
  47. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/markdown_processor.py +1 -0
  48. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/plugins.py +4 -2
  49. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/utils.py +10 -1
  50. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/knowledge.py +9 -2
  51. basic_memory-0.16.3/src/basic_memory/models/search.py +85 -0
  52. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/entity_repository.py +192 -3
  53. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/observation_repository.py +1 -0
  54. basic_memory-0.16.3/src/basic_memory/repository/postgres_search_repository.py +379 -0
  55. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/project_repository.py +13 -0
  56. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/relation_repository.py +58 -2
  57. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/repository.py +1 -0
  58. basic_memory-0.16.3/src/basic_memory/repository/search_index_row.py +95 -0
  59. basic_memory-0.16.3/src/basic_memory/repository/search_repository.py +94 -0
  60. basic_memory-0.16.3/src/basic_memory/repository/search_repository_base.py +241 -0
  61. basic_memory-0.16.1/src/basic_memory/repository/search_repository.py → basic_memory-0.16.3/src/basic_memory/repository/sqlite_search_repository.py +28 -228
  62. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/base.py +33 -3
  63. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/memory.py +7 -0
  64. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/project_info.py +1 -0
  65. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/search.py +5 -0
  66. basic_memory-0.16.3/src/basic_memory/schemas/v2/__init__.py +23 -0
  67. basic_memory-0.16.3/src/basic_memory/schemas/v2/entity.py +96 -0
  68. basic_memory-0.16.3/src/basic_memory/schemas/v2/resource.py +46 -0
  69. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/context_service.py +219 -43
  70. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/directory_service.py +15 -2
  71. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/entity_service.py +60 -32
  72. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/file_service.py +91 -7
  73. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/initialization.py +8 -0
  74. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/link_resolver.py +1 -0
  75. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/project_service.py +35 -18
  76. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/search_service.py +51 -10
  77. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/sync_service.py +90 -110
  78. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/watch_service.py +20 -5
  79. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/utils.py +89 -70
  80. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/cli/test_project_commands_integration.py +59 -15
  81. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/conftest.py +147 -27
  82. basic_memory-0.16.3/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +70 -0
  83. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_project_management_integration.py +2 -1
  84. basic_memory-0.16.3/test-int/mcp/test_read_note_integration.py +102 -0
  85. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_write_note_integration.py +68 -86
  86. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/test_db_wal_mode.py +66 -43
  87. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/test_disable_permalinks_integration.py +31 -16
  88. basic_memory-0.16.3/tests/README.md +172 -0
  89. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_async_client.py +18 -14
  90. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_continue_conversation_template.py +3 -0
  91. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_project_router.py +8 -8
  92. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_resource_router.py +5 -1
  93. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_search_router.py +10 -2
  94. basic_memory-0.16.3/tests/api/v2/__init__.py +1 -0
  95. basic_memory-0.16.3/tests/api/v2/conftest.py +21 -0
  96. basic_memory-0.16.3/tests/api/v2/test_directory_router.py +129 -0
  97. basic_memory-0.16.3/tests/api/v2/test_importer_router.py +530 -0
  98. basic_memory-0.16.3/tests/api/v2/test_knowledge_router.py +407 -0
  99. basic_memory-0.16.3/tests/api/v2/test_memory_router.py +301 -0
  100. basic_memory-0.16.3/tests/api/v2/test_project_router.py +251 -0
  101. basic_memory-0.16.3/tests/api/v2/test_prompt_router.py +212 -0
  102. basic_memory-0.16.3/tests/api/v2/test_resource_router.py +267 -0
  103. basic_memory-0.16.3/tests/api/v2/test_search_router.py +289 -0
  104. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/conftest.py +29 -3
  105. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_cli_tools.py +5 -0
  106. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_project_add_with_local_path.py +6 -0
  107. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/conftest.py +150 -28
  108. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_entity_parser.py +3 -3
  109. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_markdown_plugins.py +40 -2
  110. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_parser_edge_cases.py +1 -1
  111. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/conftest.py +2 -1
  112. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_prompts.py +1 -0
  113. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_move_note.py +65 -28
  114. basic_memory-0.16.3/tests/mcp/test_tool_write_note_kebab_filenames.py +392 -0
  115. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_entity_repository.py +242 -0
  116. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_entity_upsert_issue_187.py +3 -0
  117. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_observation_repository.py +111 -1
  118. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_project_repository.py +1 -1
  119. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_relation_repository.py +157 -2
  120. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_repository.py +8 -4
  121. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_search_repository.py +112 -25
  122. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_search_repository_edit_bug_fix.py +8 -7
  123. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_memory_serialization.py +20 -1
  124. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_context_service.py +26 -11
  125. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_entity_service.py +7 -7
  126. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_file_service.py +74 -0
  127. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_initialization.py +68 -0
  128. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_link_resolver.py +1 -0
  129. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_project_service.py +37 -36
  130. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_project_service_operations.py +10 -10
  131. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_search_service.py +198 -5
  132. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_sync_service.py +86 -2
  133. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_watch_service.py +2 -5
  134. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_watch_service_reload.py +2 -2
  135. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_config.py +137 -21
  136. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_rclone_commands.py +142 -14
  137. basic_memory-0.16.3/tests/utils/test_timezone_utils.py +96 -0
  138. {basic_memory-0.16.1 → basic_memory-0.16.3}/uv.lock +97 -169
  139. basic_memory-0.16.1/.claude/commands/release/release.md +0 -92
  140. basic_memory-0.16.1/src/basic_memory/alembic/env.py +0 -99
  141. basic_memory-0.16.1/src/basic_memory/models/search.py +0 -38
  142. basic_memory-0.16.1/test-int/mcp/test_read_note_integration.py +0 -48
  143. basic_memory-0.16.1/test-int/test_sync_performance_benchmark.py +0 -369
  144. basic_memory-0.16.1/tests/test_db_migration_deduplication.py +0 -185
  145. basic_memory-0.16.1/v0.15.0-RELEASE-DOCS.md +0 -161
  146. basic_memory-0.16.1/v15-docs/README.md +0 -61
  147. basic_memory-0.16.1/v15-docs/api-performance.md +0 -585
  148. basic_memory-0.16.1/v15-docs/background-relations.md +0 -531
  149. basic_memory-0.16.1/v15-docs/basic-memory-home.md +0 -371
  150. basic_memory-0.16.1/v15-docs/bug-fixes.md +0 -395
  151. basic_memory-0.16.1/v15-docs/chatgpt-integration.md +0 -648
  152. basic_memory-0.16.1/v15-docs/cloud-authentication.md +0 -381
  153. basic_memory-0.16.1/v15-docs/cloud-bisync.md +0 -531
  154. basic_memory-0.16.1/v15-docs/cloud-mode-usage.md +0 -546
  155. basic_memory-0.16.1/v15-docs/cloud-mount.md +0 -501
  156. basic_memory-0.16.1/v15-docs/default-project-mode.md +0 -425
  157. basic_memory-0.16.1/v15-docs/env-file-removal.md +0 -434
  158. basic_memory-0.16.1/v15-docs/env-var-overrides.md +0 -449
  159. basic_memory-0.16.1/v15-docs/explicit-project-parameter.md +0 -198
  160. basic_memory-0.16.1/v15-docs/gitignore-integration.md +0 -621
  161. basic_memory-0.16.1/v15-docs/project-root-env-var.md +0 -424
  162. basic_memory-0.16.1/v15-docs/sqlite-performance.md +0 -512
  163. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/agents/python-developer.md +0 -0
  164. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/agents/system-architect.md +0 -0
  165. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/release/beta.md +0 -0
  166. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/release/changelog.md +0 -0
  167. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/release/release-check.md +0 -0
  168. {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/test-live.md +0 -0
  169. {basic_memory-0.16.1 → basic_memory-0.16.3}/.dockerignore +0 -0
  170. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  171. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  172. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  173. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  174. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/dependabot.yml +0 -0
  175. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/claude-code-review.yml +0 -0
  176. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/claude-issue-triage.yml +0 -0
  177. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/claude.yml +0 -0
  178. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/dev-release.yml +0 -0
  179. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/docker.yml +0 -0
  180. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/pr-title.yml +0 -0
  181. {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/release.yml +0 -0
  182. {basic_memory-0.16.1 → basic_memory-0.16.3}/.python-version +0 -0
  183. {basic_memory-0.16.1 → basic_memory-0.16.3}/CITATION.cff +0 -0
  184. {basic_memory-0.16.1 → basic_memory-0.16.3}/CLA.md +0 -0
  185. {basic_memory-0.16.1 → basic_memory-0.16.3}/CODE_OF_CONDUCT.md +0 -0
  186. {basic_memory-0.16.1 → basic_memory-0.16.3}/CONTRIBUTING.md +0 -0
  187. {basic_memory-0.16.1 → basic_memory-0.16.3}/Dockerfile +0 -0
  188. {basic_memory-0.16.1 → basic_memory-0.16.3}/LICENSE +0 -0
  189. {basic_memory-0.16.1 → basic_memory-0.16.3}/SECURITY.md +0 -0
  190. {basic_memory-0.16.1 → basic_memory-0.16.3}/docker-compose.yml +0 -0
  191. {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/Docker.md +0 -0
  192. {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/ai-assistant-guide-extended.md +0 -0
  193. {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/character-handling.md +0 -0
  194. {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/cloud-cli.md +0 -0
  195. {basic_memory-0.16.1 → basic_memory-0.16.3}/llms-install.md +0 -0
  196. {basic_memory-0.16.1 → basic_memory-0.16.3}/smithery.yaml +0 -0
  197. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-1 Specification-Driven Development Process.md +0 -0
  198. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-10 Unified Deployment Workflow and Event Tracking.md +0 -0
  199. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-11 Basic Memory API Performance Optimization.md +0 -0
  200. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-12 OpenTelemetry Observability.md +0 -0
  201. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-13 CLI Authentication with Subscription Validation.md +0 -0
  202. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md +0 -0
  203. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md +0 -0
  204. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-15 Configuration Persistence via Tigris for Cloud Tenants.md +0 -0
  205. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-16 MCP Cloud Service Consolidation.md +0 -0
  206. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-17 Semantic Search with ChromaDB.md +0 -0
  207. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-18 AI Memory Management Tool.md +0 -0
  208. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-19 Sync Performance and Memory Optimization.md +0 -0
  209. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-2 Slash Commands Reference.md +0 -0
  210. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md +0 -0
  211. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-3 Agent Definitions.md +0 -0
  212. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-4 Notes Web UI Component Architecture.md +0 -0
  213. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-5 CLI Cloud Upload via WebDAV.md +0 -0
  214. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-6 Explicit Project Parameter Architecture.md +0 -0
  215. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-7 POC to spike Tigris Turso for local access to cloud data.md +0 -0
  216. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-8 TigrisFS Integration.md +0 -0
  217. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-9 Multi-Project Bidirectional Sync Architecture.md +0 -0
  218. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-9 Signed Header Tenant Information.md +0 -0
  219. {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-9-1 Follow-Ups- Conflict, Sync, and Observability.md +0 -0
  220. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/alembic.ini +0 -0
  221. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/migrations.py +0 -0
  222. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/script.py.mako +0 -0
  223. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  224. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  225. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  226. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  227. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  228. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  229. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/__init__.py +0 -0
  230. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/__init__.py +0 -0
  231. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/directory_router.py +0 -0
  232. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/importer_router.py +0 -0
  233. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/management_router.py +0 -0
  234. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/memory_router.py +0 -0
  235. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/prompt_router.py +0 -0
  236. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/search_router.py +0 -0
  237. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/template_loader.py +0 -0
  238. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/__init__.py +0 -0
  239. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/auth.py +0 -0
  240. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/__init__.py +0 -0
  241. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  242. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  243. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  244. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
  245. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  246. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  247. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  248. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  249. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/command_utils.py +0 -0
  250. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/db.py +0 -0
  251. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
  252. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
  253. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
  254. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
  255. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/project.py +0 -0
  256. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/status.py +0 -0
  257. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/tool.py +0 -0
  258. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/main.py +0 -0
  259. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/ignore_utils.py +0 -0
  260. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/__init__.py +0 -0
  261. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/base.py +0 -0
  262. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  263. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  264. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/memory_json_importer.py +0 -0
  265. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/utils.py +0 -0
  266. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/__init__.py +0 -0
  267. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/schemas.py +0 -0
  268. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/__init__.py +0 -0
  269. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/async_client.py +0 -0
  270. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/project_context.py +0 -0
  271. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  272. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  273. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  274. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  275. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/search.py +0 -0
  276. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/utils.py +0 -0
  277. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  278. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/resources/project_info.py +0 -0
  279. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/server.py +0 -0
  280. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/__init__.py +0 -0
  281. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/build_context.py +0 -0
  282. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/canvas.py +0 -0
  283. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
  284. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/delete_note.py +0 -0
  285. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/edit_note.py +0 -0
  286. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/list_directory.py +0 -0
  287. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/move_note.py +0 -0
  288. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/project_management.py +0 -0
  289. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/read_content.py +0 -0
  290. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/read_note.py +0 -0
  291. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
  292. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/search.py +0 -0
  293. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/utils.py +0 -0
  294. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/view_note.py +0 -0
  295. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/write_note.py +0 -0
  296. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/__init__.py +0 -0
  297. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/base.py +0 -0
  298. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/project.py +0 -0
  299. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/__init__.py +0 -0
  300. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/project_info_repository.py +0 -0
  301. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/__init__.py +0 -0
  302. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/cloud.py +0 -0
  303. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/delete.py +0 -0
  304. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/directory.py +0 -0
  305. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/importer.py +0 -0
  306. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/prompt.py +0 -0
  307. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/request.py +0 -0
  308. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/response.py +0 -0
  309. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/sync_report.py +0 -0
  310. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/__init__.py +0 -0
  311. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/exceptions.py +0 -0
  312. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/service.py +0 -0
  313. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/__init__.py +0 -0
  314. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/background_sync.py +0 -0
  315. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  316. {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/templates/prompts/search.hbs +0 -0
  317. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/BENCHMARKS.md +0 -0
  318. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/cli/test_version_integration.py +0 -0
  319. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_build_context_underscore.py +0 -0
  320. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_build_context_validation.py +0 -0
  321. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  322. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  323. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_delete_note_integration.py +0 -0
  324. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_edit_note_integration.py +0 -0
  325. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_list_directory_integration.py +0 -0
  326. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_move_note_integration.py +0 -0
  327. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_project_state_sync_integration.py +0 -0
  328. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_read_content_integration.py +0 -0
  329. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_search_integration.py +0 -0
  330. {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  331. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/Non-MarkdownFileSupport.pdf +0 -0
  332. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/Screenshot.png +0 -0
  333. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/__init__.py +0 -0
  334. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/conftest.py +0 -0
  335. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_directory_router.py +0 -0
  336. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_importer_router.py +0 -0
  337. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_knowledge_router.py +0 -0
  338. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_management_router.py +0 -0
  339. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_memory_router.py +0 -0
  340. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_project_router_operations.py +0 -0
  341. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_prompt_router.py +0 -0
  342. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_relation_background_resolution.py +0 -0
  343. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_search_template.py +0 -0
  344. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_template_loader.py +0 -0
  345. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_template_loader_helpers.py +0 -0
  346. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_cloud_authentication.py +0 -0
  347. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_ignore_utils.py +0 -0
  348. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_chatgpt.py +0 -0
  349. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_claude_conversations.py +0 -0
  350. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_claude_projects.py +0 -0
  351. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_memory_json.py +0 -0
  352. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_upload.py +0 -0
  353. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  354. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/importers/test_importer_base.py +0 -0
  355. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/importers/test_importer_utils.py +0 -0
  356. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/__init__.py +0 -0
  357. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  358. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  359. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_markdown_processor.py +0 -0
  360. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_observation_edge_cases.py +0 -0
  361. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_relation_edge_cases.py +0 -0
  362. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_task_detection.py +0 -0
  363. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  364. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  365. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_resources.py +0 -0
  366. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_build_context.py +0 -0
  367. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_canvas.py +0 -0
  368. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_delete_note.py +0 -0
  369. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_edit_note.py +0 -0
  370. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_list_directory.py +0 -0
  371. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_read_content.py +0 -0
  372. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_read_note.py +0 -0
  373. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_recent_activity.py +0 -0
  374. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_resource.py +0 -0
  375. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_search.py +0 -0
  376. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_utils.py +0 -0
  377. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_view_note.py +0 -0
  378. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_write_note.py +0 -0
  379. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
  380. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_entity_repository_upsert.py +0 -0
  381. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_project_info_repository.py +0 -0
  382. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  383. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_memory_url.py +0 -0
  384. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_memory_url_validation.py +0 -0
  385. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_schemas.py +0 -0
  386. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_search.py +0 -0
  387. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_directory_service.py +0 -0
  388. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  389. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_project_removal_bug.py +0 -0
  390. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_character_conflicts.py +0 -0
  391. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_sync_service_incremental.py +0 -0
  392. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_sync_wikilink_issue.py +0 -0
  393. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_tmp_files.py +0 -0
  394. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_watch_service_edge_cases.py +0 -0
  395. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_deps.py +0 -0
  396. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_production_cascade_delete.py +0 -0
  397. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_file_utils.py +0 -0
  398. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  399. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_parse_tags.py +0 -0
  400. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_permalink_formatting.py +0 -0
  401. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_utf8_handling.py +0 -0
  402. {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_validate_project_path.py +0 -0
@@ -0,0 +1,169 @@
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
+ #### Website Updates
82
+
83
+ **1. basicmachines.co** (`/Users/drew/code/basicmachines.co`)
84
+ - **Goal**: Update version number displayed on the homepage
85
+ - **Location**: Search for "Basic Memory v0." in the codebase to find version displays
86
+ - **What to update**:
87
+ - Hero section heading that shows "Basic Memory v{VERSION}"
88
+ - "What's New in v{VERSION}" section heading
89
+ - Feature highlights array (look for array of features with title/description)
90
+ - **Process**:
91
+ 1. Pull latest from GitHub: `git pull origin main`
92
+ 2. Create release branch: `git checkout -b release/v{VERSION}`
93
+ 3. Search codebase for current version number (e.g., "v0.16.1")
94
+ 4. Update version numbers to new release version
95
+ 5. Update feature highlights with 3-5 key features from this release (extract from CHANGELOG.md)
96
+ 6. Commit changes: `git commit -m "chore: update to v{VERSION}"`
97
+ 7. Push branch: `git push origin release/v{VERSION}`
98
+ - **Deploy**: Follow deployment process for basicmachines.co
99
+
100
+ **2. docs.basicmemory.com** (`/Users/drew/code/docs.basicmemory.com`)
101
+ - **Goal**: Add new release notes section to the latest-releases page
102
+ - **File**: `src/pages/latest-releases.mdx`
103
+ - **What to do**:
104
+ 1. Pull latest from GitHub: `git pull origin main`
105
+ 2. Create release branch: `git checkout -b release/v{VERSION}`
106
+ 3. Read the existing file to understand the format and structure
107
+ 4. Read `/Users/drew/code/basic-memory/CHANGELOG.md` to get release content
108
+ 5. Add new release section **at the top** (after MDX imports, before other releases)
109
+ 6. Follow the existing pattern:
110
+ - Heading: `## [v{VERSION}](github-link) — YYYY-MM-DD`
111
+ - Focus statement if applicable
112
+ - `<Info>` block with highlights (3-5 key items)
113
+ - Sections for Features, Bug Fixes, Breaking Changes, etc.
114
+ - Link to full changelog at the end
115
+ - Separator `---` between releases
116
+ 7. Commit changes: `git commit -m "docs: add v{VERSION} release notes"`
117
+ 8. Push branch: `git push origin release/v{VERSION}`
118
+ - **Source content**: Extract and format sections from CHANGELOG.md for this version
119
+ - **Deploy**: Follow deployment process for docs.basicmemory.com
120
+
121
+ **4. Announce Release**
122
+ - Post to Discord community if significant changes
123
+ - Update social media if major release
124
+ - Notify users via appropriate channels
125
+
126
+ ## Pre-conditions Check
127
+ Before starting, verify:
128
+ - [ ] All beta testing is complete
129
+ - [ ] Critical bugs are fixed
130
+ - [ ] Breaking changes are documented
131
+ - [ ] CHANGELOG.md is updated (if needed)
132
+ - [ ] Version number follows semantic versioning
133
+
134
+ ## Error Handling
135
+ - If `just release` fails, examine the error output for specific issues
136
+ - If quality checks fail, fix issues and retry
137
+ - If changelog entry missing, update CHANGELOG.md and commit before retrying
138
+ - If GitHub Actions fail, check workflow logs for debugging
139
+
140
+ ## Success Output
141
+ ```
142
+ 🎉 Stable Release v0.13.2 Created Successfully!
143
+
144
+ 🏷️ Tag: v0.13.2
145
+ 📋 GitHub Release: https://github.com/basicmachines-co/basic-memory/releases/tag/v0.13.2
146
+ 📦 PyPI: https://pypi.org/project/basic-memory/0.13.2/
147
+ 🍺 Homebrew: https://github.com/basicmachines-co/homebrew-basic-memory
148
+ 🚀 GitHub Actions: Completed
149
+
150
+ Install with pip/uv:
151
+ uv tool install basic-memory
152
+
153
+ Install with Homebrew:
154
+ brew install basicmachines-co/basic-memory/basic-memory
155
+
156
+ Users can now upgrade:
157
+ uv tool upgrade basic-memory
158
+ brew upgrade basic-memory
159
+ ```
160
+
161
+ ## Context
162
+ - This creates production releases used by end users
163
+ - Must pass all quality gates before proceeding
164
+ - Uses the automated justfile target for consistency
165
+ - Version is automatically updated in `__init__.py`
166
+ - Triggers automated GitHub release with changelog
167
+ - Package is published to PyPI for `pip` and `uv` users
168
+ - Homebrew formula is automatically updated for stable releases
169
+ - 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
@@ -13,7 +13,8 @@ on:
13
13
  branches: [ "main" ]
14
14
 
15
15
  jobs:
16
- test:
16
+ test-sqlite:
17
+ name: Test SQLite (${{ matrix.os }}, Python ${{ matrix.python-version }})
17
18
  strategy:
18
19
  fail-fast: false
19
20
  matrix:
@@ -64,7 +65,49 @@ jobs:
64
65
  run: |
65
66
  just lint
66
67
 
67
- - name: Run tests
68
+ - name: Run tests (SQLite)
68
69
  run: |
69
70
  uv pip install pytest pytest-cov
70
- just test
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" ]
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
@@ -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
@@ -1,5 +1,120 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.16.3 (2025-12-20)
4
+
5
+ ### Features
6
+
7
+ - **#439**: Add PostgreSQL database backend support
8
+ ([`fb5e9e1`](https://github.com/basicmachines-co/basic-memory/commit/fb5e9e1))
9
+ - Full PostgreSQL/Neon database support as alternative to SQLite
10
+ - Async connection pooling with asyncpg
11
+ - Alembic migrations support for both backends
12
+ - Configurable via `BASIC_MEMORY_DATABASE_BACKEND` environment variable
13
+
14
+ - **#441**: Implement API v2 with ID-based endpoints (Phase 1)
15
+ ([`28cc522`](https://github.com/basicmachines-co/basic-memory/commit/28cc522))
16
+ - New ID-based API endpoints for improved performance
17
+ - Foundation for future API enhancements
18
+ - Backward compatible with existing endpoints
19
+
20
+ - Add project_id to Relation and Observation for efficient project-scoped queries
21
+ ([`a920a9f`](https://github.com/basicmachines-co/basic-memory/commit/a920a9f))
22
+ - Enables faster queries in multi-project environments
23
+ - Improved database schema for cloud deployments
24
+
25
+ - Add bulk insert with ON CONFLICT handling for relations
26
+ ([`0818bda`](https://github.com/basicmachines-co/basic-memory/commit/0818bda))
27
+ - Faster relation creation during sync operations
28
+ - Handles duplicate relations gracefully
29
+
30
+ ### Performance
31
+
32
+ - Lightweight permalink resolution to avoid eager loading
33
+ ([`6f99d2e`](https://github.com/basicmachines-co/basic-memory/commit/6f99d2e))
34
+ - Reduces database queries during entity lookups
35
+ - Improved response times for read operations
36
+
37
+ ### Bug Fixes
38
+
39
+ - **#464**: Pin FastMCP to 2.12.3 to fix MCP tools visibility
40
+ ([`f227ef6`](https://github.com/basicmachines-co/basic-memory/commit/f227ef6))
41
+ - Fixes issue where MCP tools were not visible to Claude
42
+ - Reverts to last known working FastMCP version
43
+
44
+ - **#458**: Reduce watch service CPU usage by increasing reload interval
45
+ ([`897b1ed`](https://github.com/basicmachines-co/basic-memory/commit/897b1ed))
46
+ - Lowers CPU usage during file watching
47
+ - More efficient resource utilization
48
+
49
+ - **#456**: Await background sync task cancellation in lifespan shutdown
50
+ ([`efbc758`](https://github.com/basicmachines-co/basic-memory/commit/efbc758))
51
+ - Prevents hanging on shutdown
52
+ - Clean async task cleanup
53
+
54
+ - **#434**: Respect --project flag in background sync
55
+ ([`70bb10b`](https://github.com/basicmachines-co/basic-memory/commit/70bb10b))
56
+ - Background sync now correctly uses specified project
57
+ - Fixes multi-project sync issues
58
+
59
+ - **#446**: Fix observation parsing and permalink limits
60
+ ([`73d940e`](https://github.com/basicmachines-co/basic-memory/commit/73d940e))
61
+ - Handles edge cases in observation content
62
+ - Prevents permalink truncation issues
63
+
64
+ - **#424**: Handle periods in kebab_filenames mode
65
+ ([`b004565`](https://github.com/basicmachines-co/basic-memory/commit/b004565))
66
+ - Fixes filename handling for files with multiple periods
67
+ - Improved kebab-case conversion
68
+
69
+ - Fix Postgres/Neon connection settings and search index dedupe
70
+ ([`b5d4fb5`](https://github.com/basicmachines-co/basic-memory/commit/b5d4fb5))
71
+ - Optimized connection pooling for Postgres
72
+ - Prevents duplicate search index entries
73
+
74
+ ### Testing & CI
75
+
76
+ - Replace py-pglite with testcontainers for Postgres testing
77
+ ([`c462faf`](https://github.com/basicmachines-co/basic-memory/commit/c462faf))
78
+ - More reliable Postgres testing infrastructure
79
+ - Uses Docker-based test containers
80
+
81
+ - Add PostgreSQL testing to GitHub Actions workflow
82
+ ([`66b91b2`](https://github.com/basicmachines-co/basic-memory/commit/66b91b2))
83
+ - CI now tests both SQLite and PostgreSQL backends
84
+ - Ensures cross-database compatibility
85
+
86
+ - **#416**: Add integration test for read_note with underscored folders
87
+ ([`0c12a39`](https://github.com/basicmachines-co/basic-memory/commit/0c12a39))
88
+ - Verifies folder name handling edge cases
89
+
90
+ ### Internal
91
+
92
+ - Cloud compatibility fixes and performance improvements (#454)
93
+ - Remove logfire instrumentation for cleaner production deployments
94
+ - Truncate content_stems to fix Postgres 8KB index row limit
95
+
96
+ ## v0.16.2 (2025-11-16)
97
+
98
+ ### Bug Fixes
99
+
100
+ - **#429**: Use platform-native path separators in config.json
101
+ ([`6517e98`](https://github.com/basicmachines-co/basic-memory/commit/6517e98))
102
+ - Fixes config.json path separator issues on Windows
103
+ - Uses os.path.join for platform-native path construction
104
+ - Ensures consistent path handling across platforms
105
+
106
+ - **#427**: Add rclone installation checks for Windows bisync commands
107
+ ([`1af0539`](https://github.com/basicmachines-co/basic-memory/commit/1af0539))
108
+ - Validates rclone installation before running bisync commands
109
+ - Provides clear error messages when rclone is not installed
110
+ - Improves user experience on Windows
111
+
112
+ - **#421**: Main project always recreated on project list command
113
+ ([`cad7019`](https://github.com/basicmachines-co/basic-memory/commit/cad7019))
114
+ - Fixes issue where main project was recreated unnecessarily
115
+ - Improves project list command reliability
116
+ - Reduces unnecessary file system operations
117
+
3
118
  ## v0.16.1 (2025-11-11)
4
119
 
5
120
  ### Bug Fixes
@@ -15,10 +15,14 @@ See the [README.md](README.md) file for a project overview.
15
15
  ### Build and Test Commands
16
16
 
17
17
  - Install: `just install` or `pip install -e ".[dev]"`
18
- - Run all tests (with coverage): `just test` - Runs both unit and integration tests with unified coverage
19
- - Run unit tests only: `just test-unit` - Fast, no coverage
20
- - Run integration tests only: `just test-int` - Fast, no coverage
21
- - Generate HTML coverage: `just coverage` - Opens in browser
18
+ - Run all tests (SQLite + Postgres): `just test`
19
+ - Run all tests against SQLite: `just test-sqlite`
20
+ - Run all tests against Postgres: `just test-postgres` (uses testcontainers)
21
+ - Run unit tests (SQLite): `just test-unit-sqlite`
22
+ - Run unit tests (Postgres): `just test-unit-postgres`
23
+ - Run integration tests (SQLite): `just test-int-sqlite`
24
+ - Run integration tests (Postgres): `just test-int-postgres`
25
+ - Generate HTML coverage: `just coverage`
22
26
  - Single test: `pytest tests/path/to/test_file.py::test_function_name`
23
27
  - Run benchmarks: `pytest test-int/test_sync_performance_benchmark.py -v -m "benchmark and not slow"`
24
28
  - Lint: `just lint` or `ruff check . --fix`
@@ -30,6 +34,8 @@ See the [README.md](README.md) file for a project overview.
30
34
 
31
35
  **Note:** Project requires Python 3.12+ (uses type parameter syntax and `type` aliases introduced in 3.12)
32
36
 
37
+ **Postgres Testing:** Uses [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
38
+
33
39
  ### Test Structure
34
40
 
35
41
  - `tests/` - Unit tests for individual components (mocked, fast)
@@ -76,8 +82,10 @@ See the [README.md](README.md) file for a project overview.
76
82
  - SQLite is used for indexing and full text search, files are source of truth
77
83
  - Testing uses pytest with asyncio support (strict mode)
78
84
  - Unit tests (`tests/`) use mocks when necessary; integration tests (`test-int/`) use real implementations
79
- - Test database uses in-memory SQLite
80
- - Each test runs in a standalone environment with in-memory SQLite and tmp_file directory
85
+ - By default, tests run against SQLite (fast, no Docker needed)
86
+ - Set `BASIC_MEMORY_TEST_POSTGRES=1` to run against Postgres (uses testcontainers - Docker required)
87
+ - Each test runs in a standalone environment with isolated database and tmp_path directory
88
+ - CI runs SQLite and Postgres tests in parallel for faster feedback
81
89
  - Performance benchmarks are in `test-int/test_sync_performance_benchmark.py`
82
90
  - Use pytest markers: `@pytest.mark.benchmark` for benchmarks, `@pytest.mark.slow` for slow tests
83
91
 
@@ -229,6 +237,11 @@ of using AI just for code generation, we've developed a true collaborative workf
229
237
  This approach has allowed us to tackle more complex challenges and build a more robust system than either humans or AI
230
238
  could achieve independently.
231
239
 
240
+ **Problem-Solving Guidance:**
241
+ - If a solution isn't working after reasonable effort, suggest alternative approaches
242
+ - Don't persist with a problematic library or pattern when better alternatives exist
243
+ - Example: When py-pglite caused cascading test failures, switching to testcontainers-postgres was the right call
244
+
232
245
  ## GitHub Integration
233
246
 
234
247
  Basic Memory has taken AI-Human collaboration to the next level by integrating Claude directly into the development workflow through GitHub:
@@ -264,5 +277,6 @@ With GitHub integration, the development workflow includes:
264
277
  2. **Contribution tracking** - All of Claude's contributions are properly attributed in the Git history
265
278
  3. **Branch management** - Claude can create feature branches for implementations
266
279
  4. **Documentation maintenance** - Claude can keep documentation updated as the code evolves
280
+ 5. **Code Commits**: ALWAYS sign off commits with `git commit -s`
267
281
 
268
282
  This level of integration represents a new paradigm in AI-human collaboration, where the AI assistant becomes a full-fledged team member rather than just a tool for generating code snippets.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: basic-memory
3
- Version: 0.16.1
3
+ Version: 0.16.3
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
@@ -12,22 +12,24 @@ Requires-Python: >=3.12
12
12
  Requires-Dist: aiofiles>=24.1.0
13
13
  Requires-Dist: aiosqlite>=0.20.0
14
14
  Requires-Dist: alembic>=1.14.1
15
+ Requires-Dist: asyncpg>=0.30.0
15
16
  Requires-Dist: dateparser>=1.2.0
16
17
  Requires-Dist: fastapi[standard]>=0.115.8
17
- Requires-Dist: fastmcp>=2.10.2
18
+ Requires-Dist: fastmcp==2.12.3
18
19
  Requires-Dist: greenlet>=3.1.1
19
- Requires-Dist: icecream>=2.1.3
20
- Requires-Dist: logfire>=0.73.0
21
20
  Requires-Dist: loguru>=0.7.3
22
21
  Requires-Dist: markdown-it-py>=3.0.0
23
22
  Requires-Dist: mcp>=1.2.0
23
+ Requires-Dist: nest-asyncio>=1.6.0
24
24
  Requires-Dist: pillow>=11.1.0
25
+ Requires-Dist: psycopg==3.3.1
25
26
  Requires-Dist: pybars3>=0.9.7
26
27
  Requires-Dist: pydantic-settings>=2.6.1
27
28
  Requires-Dist: pydantic[email,timezone]>=2.10.3
28
29
  Requires-Dist: pyjwt>=2.10.1
29
30
  Requires-Dist: pyright>=1.1.390
30
31
  Requires-Dist: pytest-aio>=1.9.0
32
+ Requires-Dist: pytest-asyncio>=1.2.0
31
33
  Requires-Dist: python-dotenv>=1.1.0
32
34
  Requires-Dist: python-frontmatter>=1.1.0
33
35
  Requires-Dist: pyyaml>=6.0.1
@@ -473,6 +475,91 @@ See the [Documentation](https://memory.basicmachines.co/) for more info, includi
473
475
  - [Managing multiple Projects](https://docs.basicmemory.com/guides/cli-reference/#project)
474
476
  - [Importing data from OpenAI/Claude Projects](https://docs.basicmemory.com/guides/cli-reference/#import)
475
477
 
478
+ ## Logging
479
+
480
+ Basic Memory uses [Loguru](https://github.com/Delgan/loguru) for logging. The logging behavior varies by entry point:
481
+
482
+ | Entry Point | Default Behavior | Use Case |
483
+ |-------------|------------------|----------|
484
+ | CLI commands | File only | Prevents log output from interfering with command output |
485
+ | MCP server | File only | Stdout would corrupt the JSON-RPC protocol |
486
+ | API server | File (local) or stdout (cloud) | Docker/cloud deployments use stdout |
487
+
488
+ **Log file location:** `~/.basic-memory/basic-memory.log` (10MB rotation, 10 days retention)
489
+
490
+ ### Environment Variables
491
+
492
+ | Variable | Default | Description |
493
+ |----------|---------|-------------|
494
+ | `BASIC_MEMORY_LOG_LEVEL` | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |
495
+ | `BASIC_MEMORY_CLOUD_MODE` | `false` | When `true`, API logs to stdout with structured context |
496
+ | `BASIC_MEMORY_ENV` | `dev` | Set to `test` for test mode (stderr only) |
497
+
498
+ ### Examples
499
+
500
+ ```bash
501
+ # Enable debug logging
502
+ BASIC_MEMORY_LOG_LEVEL=DEBUG basic-memory sync
503
+
504
+ # View logs
505
+ tail -f ~/.basic-memory/basic-memory.log
506
+
507
+ # Cloud/Docker mode (stdout logging with structured context)
508
+ BASIC_MEMORY_CLOUD_MODE=true uvicorn basic_memory.api.app:app
509
+ ```
510
+
511
+ ## Development
512
+
513
+ ### Running Tests
514
+
515
+ Basic Memory supports dual database backends (SQLite and Postgres). By default, tests run against SQLite. Set `BASIC_MEMORY_TEST_POSTGRES=1` to run against Postgres (uses testcontainers - Docker required).
516
+
517
+ **Quick Start:**
518
+ ```bash
519
+ # Run all tests against SQLite (default, fast)
520
+ just test-sqlite
521
+
522
+ # Run all tests against Postgres (uses testcontainers)
523
+ just test-postgres
524
+
525
+ # Run both SQLite and Postgres tests
526
+ just test
527
+ ```
528
+
529
+ **Available Test Commands:**
530
+
531
+ - `just test` - Run all tests against both SQLite and Postgres
532
+ - `just test-sqlite` - Run all tests against SQLite (fast, no Docker needed)
533
+ - `just test-postgres` - Run all tests against Postgres (uses testcontainers)
534
+ - `just test-unit-sqlite` - Run unit tests against SQLite
535
+ - `just test-unit-postgres` - Run unit tests against Postgres
536
+ - `just test-int-sqlite` - Run integration tests against SQLite
537
+ - `just test-int-postgres` - Run integration tests against Postgres
538
+ - `just test-windows` - Run Windows-specific tests (auto-skips on other platforms)
539
+ - `just test-benchmark` - Run performance benchmark tests
540
+
541
+ **Postgres Testing:**
542
+
543
+ Postgres tests use [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
544
+
545
+ **Test Markers:**
546
+
547
+ Tests use pytest markers for selective execution:
548
+ - `windows` - Windows-specific database optimizations
549
+ - `benchmark` - Performance tests (excluded from default runs)
550
+
551
+ **Other Development Commands:**
552
+ ```bash
553
+ just install # Install with dev dependencies
554
+ just lint # Run linting checks
555
+ just typecheck # Run type checking
556
+ just format # Format code with ruff
557
+ just check # Run all quality checks
558
+ just migration "msg" # Create database migration
559
+ ```
560
+
561
+ See the [justfile](justfile) for the complete list of development commands.
562
+
476
563
  ## License
477
564
 
478
565
  AGPL-3.0