basic-memory 0.16.0__tar.gz → 0.17.0__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 (413) hide show
  1. basic_memory-0.17.0/.claude/commands/release/release.md +169 -0
  2. {basic_memory-0.16.0 → basic_memory-0.17.0}/.claude/commands/spec.md +17 -21
  3. basic_memory-0.17.0/.claude/settings.json +5 -0
  4. basic_memory-0.17.0/.env.example +28 -0
  5. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/test.yml +46 -3
  6. {basic_memory-0.16.0 → basic_memory-0.17.0}/.gitignore +2 -1
  7. {basic_memory-0.16.0 → basic_memory-0.17.0}/CHANGELOG.md +207 -0
  8. {basic_memory-0.16.0 → basic_memory-0.17.0}/CLAUDE.md +95 -18
  9. basic_memory-0.16.0/README.md → basic_memory-0.17.0/PKG-INFO +164 -0
  10. basic_memory-0.16.0/PKG-INFO → basic_memory-0.17.0/README.md +118 -40
  11. basic_memory-0.17.0/docker-compose-postgres.yml +42 -0
  12. {basic_memory-0.16.0 → basic_memory-0.17.0}/justfile +86 -8
  13. {basic_memory-0.16.0 → basic_memory-0.17.0}/pyproject.toml +14 -4
  14. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/__init__.py +1 -1
  15. basic_memory-0.17.0/src/basic_memory/alembic/env.py +181 -0
  16. basic_memory-0.17.0/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +131 -0
  17. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +15 -3
  18. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +44 -36
  19. basic_memory-0.17.0/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +56 -0
  20. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +13 -0
  21. basic_memory-0.17.0/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +239 -0
  22. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/app.py +43 -10
  23. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/knowledge_router.py +13 -2
  24. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/project_router.py +52 -10
  25. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/resource_router.py +35 -25
  26. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/utils.py +53 -14
  27. basic_memory-0.17.0/src/basic_memory/api/v2/__init__.py +35 -0
  28. basic_memory-0.17.0/src/basic_memory/api/v2/routers/__init__.py +21 -0
  29. basic_memory-0.17.0/src/basic_memory/api/v2/routers/directory_router.py +93 -0
  30. basic_memory-0.17.0/src/basic_memory/api/v2/routers/importer_router.py +182 -0
  31. basic_memory-0.17.0/src/basic_memory/api/v2/routers/knowledge_router.py +413 -0
  32. basic_memory-0.17.0/src/basic_memory/api/v2/routers/memory_router.py +130 -0
  33. basic_memory-0.17.0/src/basic_memory/api/v2/routers/project_router.py +342 -0
  34. basic_memory-0.17.0/src/basic_memory/api/v2/routers/prompt_router.py +270 -0
  35. basic_memory-0.17.0/src/basic_memory/api/v2/routers/resource_router.py +286 -0
  36. basic_memory-0.17.0/src/basic_memory/api/v2/routers/search_router.py +73 -0
  37. basic_memory-0.17.0/src/basic_memory/cli/app.py +84 -0
  38. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/__init__.py +3 -1
  39. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/rclone_commands.py +76 -4
  40. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/rclone_installer.py +18 -4
  41. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/command_utils.py +27 -1
  42. basic_memory-0.17.0/src/basic_memory/cli/commands/format.py +198 -0
  43. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/import_chatgpt.py +3 -2
  44. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/import_claude_conversations.py +3 -2
  45. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/import_claude_projects.py +3 -2
  46. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/import_memory_json.py +3 -2
  47. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/mcp.py +8 -26
  48. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/project.py +22 -9
  49. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/status.py +3 -2
  50. basic_memory-0.17.0/src/basic_memory/cli/commands/telemetry.py +81 -0
  51. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/main.py +7 -0
  52. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/config.py +176 -76
  53. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/db.py +155 -73
  54. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/deps.py +303 -9
  55. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/file_utils.py +212 -3
  56. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/claude_conversations_importer.py +4 -1
  57. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/utils.py +5 -2
  58. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/markdown/entity_parser.py +62 -23
  59. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/markdown/markdown_processor.py +23 -4
  60. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/markdown/plugins.py +4 -2
  61. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/markdown/utils.py +10 -1
  62. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/async_client.py +1 -0
  63. basic_memory-0.17.0/src/basic_memory/mcp/server.py +81 -0
  64. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/build_context.py +3 -3
  65. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/canvas.py +34 -12
  66. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/chatgpt_tools.py +3 -0
  67. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/delete_note.py +20 -3
  68. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/edit_note.py +7 -3
  69. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/list_directory.py +3 -2
  70. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/move_note.py +16 -10
  71. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/project_management.py +6 -5
  72. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/read_content.py +13 -3
  73. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/read_note.py +24 -12
  74. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/recent_activity.py +4 -4
  75. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/search.py +3 -2
  76. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/utils.py +28 -0
  77. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/view_note.py +2 -1
  78. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/write_note.py +33 -10
  79. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/models/knowledge.py +9 -2
  80. basic_memory-0.17.0/src/basic_memory/models/search.py +85 -0
  81. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/entity_repository.py +192 -3
  82. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/observation_repository.py +1 -0
  83. basic_memory-0.17.0/src/basic_memory/repository/postgres_search_repository.py +379 -0
  84. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/project_repository.py +26 -1
  85. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/relation_repository.py +58 -2
  86. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/repository.py +1 -0
  87. basic_memory-0.17.0/src/basic_memory/repository/search_index_row.py +95 -0
  88. basic_memory-0.17.0/src/basic_memory/repository/search_repository.py +94 -0
  89. basic_memory-0.17.0/src/basic_memory/repository/search_repository_base.py +241 -0
  90. basic_memory-0.16.0/src/basic_memory/repository/search_repository.py → basic_memory-0.17.0/src/basic_memory/repository/sqlite_search_repository.py +28 -228
  91. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/base.py +34 -4
  92. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/memory.py +7 -0
  93. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/project_info.py +1 -0
  94. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/search.py +5 -0
  95. basic_memory-0.17.0/src/basic_memory/schemas/v2/__init__.py +27 -0
  96. basic_memory-0.17.0/src/basic_memory/schemas/v2/entity.py +129 -0
  97. basic_memory-0.17.0/src/basic_memory/schemas/v2/resource.py +46 -0
  98. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/context_service.py +219 -43
  99. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/directory_service.py +15 -2
  100. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/entity_service.py +68 -33
  101. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/file_service.py +123 -12
  102. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/initialization.py +51 -26
  103. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/link_resolver.py +1 -0
  104. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/project_service.py +35 -18
  105. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/search_service.py +51 -10
  106. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/sync/sync_service.py +126 -112
  107. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/sync/watch_service.py +20 -5
  108. basic_memory-0.17.0/src/basic_memory/telemetry.py +249 -0
  109. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/utils.py +91 -70
  110. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/cli/test_project_commands_integration.py +59 -15
  111. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/conftest.py +156 -27
  112. basic_memory-0.17.0/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +68 -0
  113. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_project_management_integration.py +50 -23
  114. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_project_state_sync_integration.py +2 -2
  115. basic_memory-0.17.0/test-int/mcp/test_read_note_integration.py +102 -0
  116. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_write_note_integration.py +68 -86
  117. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/test_db_wal_mode.py +66 -43
  118. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/test_disable_permalinks_integration.py +31 -16
  119. basic_memory-0.17.0/tests/README.md +172 -0
  120. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_async_client.py +18 -14
  121. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_continue_conversation_template.py +3 -0
  122. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_project_router.py +8 -8
  123. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_resource_router.py +5 -1
  124. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_search_router.py +10 -2
  125. basic_memory-0.17.0/tests/api/v2/__init__.py +1 -0
  126. basic_memory-0.17.0/tests/api/v2/conftest.py +21 -0
  127. basic_memory-0.17.0/tests/api/v2/test_directory_router.py +129 -0
  128. basic_memory-0.17.0/tests/api/v2/test_importer_router.py +530 -0
  129. basic_memory-0.17.0/tests/api/v2/test_knowledge_router.py +407 -0
  130. basic_memory-0.17.0/tests/api/v2/test_memory_router.py +301 -0
  131. basic_memory-0.17.0/tests/api/v2/test_project_router.py +334 -0
  132. basic_memory-0.17.0/tests/api/v2/test_prompt_router.py +212 -0
  133. basic_memory-0.17.0/tests/api/v2/test_resource_router.py +267 -0
  134. basic_memory-0.17.0/tests/api/v2/test_search_router.py +289 -0
  135. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/conftest.py +29 -3
  136. basic_memory-0.17.0/tests/cli/test_cli_exit.py +48 -0
  137. basic_memory-0.17.0/tests/cli/test_cli_tool_exit.py +85 -0
  138. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_cli_tools.py +11 -6
  139. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_project_add_with_local_path.py +6 -0
  140. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/conftest.py +150 -28
  141. basic_memory-0.17.0/tests/importers/test_conversation_indexing.py +114 -0
  142. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/importers/test_importer_utils.py +3 -0
  143. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_entity_parser.py +9 -6
  144. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_markdown_plugins.py +40 -2
  145. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_parser_edge_cases.py +1 -1
  146. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/conftest.py +2 -1
  147. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_prompts.py +1 -0
  148. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_move_note.py +59 -28
  149. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_read_content.py +124 -93
  150. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_read_note.py +17 -37
  151. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_view_note.py +18 -11
  152. basic_memory-0.17.0/tests/mcp/test_tool_write_note_kebab_filenames.py +392 -0
  153. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_entity_repository.py +242 -0
  154. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_entity_upsert_issue_187.py +3 -0
  155. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_observation_repository.py +111 -1
  156. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_project_repository.py +1 -1
  157. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_relation_repository.py +157 -2
  158. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_repository.py +8 -4
  159. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_search_repository.py +112 -25
  160. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_search_repository_edit_bug_fix.py +8 -7
  161. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/schemas/test_memory_serialization.py +20 -1
  162. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/schemas/test_schemas.py +42 -0
  163. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_context_service.py +26 -11
  164. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_entity_service.py +7 -7
  165. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_file_service.py +74 -0
  166. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_initialization.py +2 -60
  167. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_link_resolver.py +1 -0
  168. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_project_service.py +37 -36
  169. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_project_service_operations.py +10 -10
  170. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_search_service.py +198 -5
  171. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_sync_service.py +148 -2
  172. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_watch_service.py +2 -5
  173. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_watch_service_reload.py +2 -2
  174. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/test_config.py +250 -21
  175. basic_memory-0.17.0/tests/test_rclone_commands.py +647 -0
  176. basic_memory-0.17.0/tests/test_telemetry.py +276 -0
  177. basic_memory-0.17.0/tests/utils/test_file_utils.py +550 -0
  178. basic_memory-0.17.0/tests/utils/test_timezone_utils.py +96 -0
  179. {basic_memory-0.16.0 → basic_memory-0.17.0}/uv.lock +224 -164
  180. basic_memory-0.16.0/.claude/agents/python-developer.md +0 -154
  181. basic_memory-0.16.0/.claude/agents/system-architect.md +0 -126
  182. basic_memory-0.16.0/.claude/commands/release/release.md +0 -92
  183. basic_memory-0.16.0/src/basic_memory/alembic/env.py +0 -99
  184. basic_memory-0.16.0/src/basic_memory/cli/app.py +0 -54
  185. basic_memory-0.16.0/src/basic_memory/mcp/server.py +0 -9
  186. basic_memory-0.16.0/src/basic_memory/models/search.py +0 -38
  187. basic_memory-0.16.0/test-int/mcp/test_read_note_integration.py +0 -48
  188. basic_memory-0.16.0/test-int/test_sync_performance_benchmark.py +0 -369
  189. basic_memory-0.16.0/tests/test_db_migration_deduplication.py +0 -185
  190. basic_memory-0.16.0/tests/test_rclone_commands.py +0 -353
  191. basic_memory-0.16.0/tests/utils/test_file_utils.py +0 -216
  192. basic_memory-0.16.0/v0.15.0-RELEASE-DOCS.md +0 -161
  193. basic_memory-0.16.0/v15-docs/README.md +0 -61
  194. basic_memory-0.16.0/v15-docs/api-performance.md +0 -585
  195. basic_memory-0.16.0/v15-docs/background-relations.md +0 -531
  196. basic_memory-0.16.0/v15-docs/basic-memory-home.md +0 -371
  197. basic_memory-0.16.0/v15-docs/bug-fixes.md +0 -395
  198. basic_memory-0.16.0/v15-docs/chatgpt-integration.md +0 -648
  199. basic_memory-0.16.0/v15-docs/cloud-authentication.md +0 -381
  200. basic_memory-0.16.0/v15-docs/cloud-bisync.md +0 -531
  201. basic_memory-0.16.0/v15-docs/cloud-mode-usage.md +0 -546
  202. basic_memory-0.16.0/v15-docs/cloud-mount.md +0 -501
  203. basic_memory-0.16.0/v15-docs/default-project-mode.md +0 -425
  204. basic_memory-0.16.0/v15-docs/env-file-removal.md +0 -434
  205. basic_memory-0.16.0/v15-docs/env-var-overrides.md +0 -449
  206. basic_memory-0.16.0/v15-docs/explicit-project-parameter.md +0 -198
  207. basic_memory-0.16.0/v15-docs/gitignore-integration.md +0 -621
  208. basic_memory-0.16.0/v15-docs/project-root-env-var.md +0 -424
  209. basic_memory-0.16.0/v15-docs/sqlite-performance.md +0 -512
  210. {basic_memory-0.16.0 → basic_memory-0.17.0}/.claude/commands/release/beta.md +0 -0
  211. {basic_memory-0.16.0 → basic_memory-0.17.0}/.claude/commands/release/changelog.md +0 -0
  212. {basic_memory-0.16.0 → basic_memory-0.17.0}/.claude/commands/release/release-check.md +0 -0
  213. {basic_memory-0.16.0 → basic_memory-0.17.0}/.claude/commands/test-live.md +0 -0
  214. {basic_memory-0.16.0 → basic_memory-0.17.0}/.dockerignore +0 -0
  215. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  216. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  217. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
  218. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  219. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/dependabot.yml +0 -0
  220. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/claude-code-review.yml +0 -0
  221. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/claude-issue-triage.yml +0 -0
  222. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/claude.yml +0 -0
  223. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/dev-release.yml +0 -0
  224. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/docker.yml +0 -0
  225. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/pr-title.yml +0 -0
  226. {basic_memory-0.16.0 → basic_memory-0.17.0}/.github/workflows/release.yml +0 -0
  227. {basic_memory-0.16.0 → basic_memory-0.17.0}/.python-version +0 -0
  228. {basic_memory-0.16.0 → basic_memory-0.17.0}/CITATION.cff +0 -0
  229. {basic_memory-0.16.0 → basic_memory-0.17.0}/CLA.md +0 -0
  230. {basic_memory-0.16.0 → basic_memory-0.17.0}/CODE_OF_CONDUCT.md +0 -0
  231. {basic_memory-0.16.0 → basic_memory-0.17.0}/CONTRIBUTING.md +0 -0
  232. {basic_memory-0.16.0 → basic_memory-0.17.0}/Dockerfile +0 -0
  233. {basic_memory-0.16.0 → basic_memory-0.17.0}/LICENSE +0 -0
  234. {basic_memory-0.16.0 → basic_memory-0.17.0}/SECURITY.md +0 -0
  235. {basic_memory-0.16.0 → basic_memory-0.17.0}/docker-compose.yml +0 -0
  236. {basic_memory-0.16.0 → basic_memory-0.17.0}/docs/Docker.md +0 -0
  237. {basic_memory-0.16.0 → basic_memory-0.17.0}/docs/ai-assistant-guide-extended.md +0 -0
  238. {basic_memory-0.16.0 → basic_memory-0.17.0}/docs/character-handling.md +0 -0
  239. {basic_memory-0.16.0 → basic_memory-0.17.0}/docs/cloud-cli.md +0 -0
  240. {basic_memory-0.16.0 → basic_memory-0.17.0}/llms-install.md +0 -0
  241. {basic_memory-0.16.0 → basic_memory-0.17.0}/smithery.yaml +0 -0
  242. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-1 Specification-Driven Development Process.md +0 -0
  243. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-10 Unified Deployment Workflow and Event Tracking.md +0 -0
  244. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-11 Basic Memory API Performance Optimization.md +0 -0
  245. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-12 OpenTelemetry Observability.md +0 -0
  246. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-13 CLI Authentication with Subscription Validation.md +0 -0
  247. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md +0 -0
  248. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md +0 -0
  249. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-15 Configuration Persistence via Tigris for Cloud Tenants.md +0 -0
  250. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-16 MCP Cloud Service Consolidation.md +0 -0
  251. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-17 Semantic Search with ChromaDB.md +0 -0
  252. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-18 AI Memory Management Tool.md +0 -0
  253. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-19 Sync Performance and Memory Optimization.md +0 -0
  254. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-2 Slash Commands Reference.md +0 -0
  255. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md +0 -0
  256. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-3 Agent Definitions.md +0 -0
  257. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-4 Notes Web UI Component Architecture.md +0 -0
  258. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-5 CLI Cloud Upload via WebDAV.md +0 -0
  259. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-6 Explicit Project Parameter Architecture.md +0 -0
  260. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-7 POC to spike Tigris Turso for local access to cloud data.md +0 -0
  261. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-8 TigrisFS Integration.md +0 -0
  262. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-9 Multi-Project Bidirectional Sync Architecture.md +0 -0
  263. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-9 Signed Header Tenant Information.md +0 -0
  264. {basic_memory-0.16.0 → basic_memory-0.17.0}/specs/SPEC-9-1 Follow-Ups- Conflict, Sync, and Observability.md +0 -0
  265. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/alembic.ini +0 -0
  266. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/migrations.py +0 -0
  267. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/script.py.mako +0 -0
  268. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
  269. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
  270. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
  271. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
  272. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
  273. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
  274. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/__init__.py +0 -0
  275. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/__init__.py +0 -0
  276. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/directory_router.py +0 -0
  277. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/importer_router.py +0 -0
  278. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/management_router.py +0 -0
  279. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/memory_router.py +0 -0
  280. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/prompt_router.py +0 -0
  281. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/routers/search_router.py +0 -0
  282. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/api/template_loader.py +0 -0
  283. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/__init__.py +0 -0
  284. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/auth.py +0 -0
  285. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
  286. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
  287. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
  288. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
  289. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
  290. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
  291. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
  292. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
  293. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/db.py +0 -0
  294. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/cli/commands/tool.py +0 -0
  295. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/ignore_utils.py +0 -0
  296. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/__init__.py +0 -0
  297. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/base.py +0 -0
  298. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/chatgpt_importer.py +0 -0
  299. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/claude_projects_importer.py +0 -0
  300. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/importers/memory_json_importer.py +0 -0
  301. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/markdown/__init__.py +0 -0
  302. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/markdown/schemas.py +0 -0
  303. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/__init__.py +0 -0
  304. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/project_context.py +0 -0
  305. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/prompts/__init__.py +0 -0
  306. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
  307. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
  308. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
  309. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/prompts/search.py +0 -0
  310. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/prompts/utils.py +0 -0
  311. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
  312. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/resources/project_info.py +0 -0
  313. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/mcp/tools/__init__.py +0 -0
  314. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/models/__init__.py +0 -0
  315. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/models/base.py +0 -0
  316. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/models/project.py +0 -0
  317. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/__init__.py +0 -0
  318. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/repository/project_info_repository.py +0 -0
  319. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/__init__.py +0 -0
  320. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/cloud.py +0 -0
  321. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/delete.py +0 -0
  322. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/directory.py +0 -0
  323. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/importer.py +0 -0
  324. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/prompt.py +0 -0
  325. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/request.py +0 -0
  326. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/response.py +0 -0
  327. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/schemas/sync_report.py +0 -0
  328. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/__init__.py +0 -0
  329. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/exceptions.py +0 -0
  330. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/services/service.py +0 -0
  331. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/sync/__init__.py +0 -0
  332. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/sync/background_sync.py +0 -0
  333. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
  334. {basic_memory-0.16.0 → basic_memory-0.17.0}/src/basic_memory/templates/prompts/search.hbs +0 -0
  335. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/BENCHMARKS.md +0 -0
  336. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/cli/test_version_integration.py +0 -0
  337. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_build_context_underscore.py +0 -0
  338. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_build_context_validation.py +0 -0
  339. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
  340. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_default_project_mode_integration.py +0 -0
  341. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_delete_note_integration.py +0 -0
  342. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_edit_note_integration.py +0 -0
  343. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_list_directory_integration.py +0 -0
  344. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_move_note_integration.py +0 -0
  345. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_read_content_integration.py +0 -0
  346. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_search_integration.py +0 -0
  347. {basic_memory-0.16.0 → basic_memory-0.17.0}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
  348. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/Non-MarkdownFileSupport.pdf +0 -0
  349. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/Screenshot.png +0 -0
  350. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/__init__.py +0 -0
  351. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/conftest.py +0 -0
  352. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_directory_router.py +0 -0
  353. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_importer_router.py +0 -0
  354. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_knowledge_router.py +0 -0
  355. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_management_router.py +0 -0
  356. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_memory_router.py +0 -0
  357. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_project_router_operations.py +0 -0
  358. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_prompt_router.py +0 -0
  359. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_relation_background_resolution.py +0 -0
  360. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_search_template.py +0 -0
  361. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_template_loader.py +0 -0
  362. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/api/test_template_loader_helpers.py +0 -0
  363. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_cloud_authentication.py +0 -0
  364. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_ignore_utils.py +0 -0
  365. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_import_chatgpt.py +0 -0
  366. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_import_claude_conversations.py +0 -0
  367. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_import_claude_projects.py +0 -0
  368. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_import_memory_json.py +0 -0
  369. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/cli/test_upload.py +0 -0
  370. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
  371. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/importers/test_importer_base.py +0 -0
  372. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/__init__.py +0 -0
  373. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
  374. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_entity_parser_error_handling.py +0 -0
  375. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_markdown_processor.py +0 -0
  376. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_observation_edge_cases.py +0 -0
  377. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_relation_edge_cases.py +0 -0
  378. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/markdown/test_task_detection.py +0 -0
  379. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
  380. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
  381. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_resources.py +0 -0
  382. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_build_context.py +0 -0
  383. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_canvas.py +0 -0
  384. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_delete_note.py +0 -0
  385. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_edit_note.py +0 -0
  386. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_list_directory.py +0 -0
  387. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_recent_activity.py +0 -0
  388. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_resource.py +0 -0
  389. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_search.py +0 -0
  390. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_utils.py +0 -0
  391. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/test_tool_write_note.py +0 -0
  392. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
  393. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_entity_repository_upsert.py +0 -0
  394. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/repository/test_project_info_repository.py +0 -0
  395. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/schemas/test_base_timeframe_minimum.py +0 -0
  396. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/schemas/test_memory_url.py +0 -0
  397. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/schemas/test_memory_url_validation.py +0 -0
  398. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/schemas/test_search.py +0 -0
  399. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_directory_service.py +0 -0
  400. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_entity_service_disable_permalinks.py +0 -0
  401. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/services/test_project_removal_bug.py +0 -0
  402. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_character_conflicts.py +0 -0
  403. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_sync_service_incremental.py +0 -0
  404. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_sync_wikilink_issue.py +0 -0
  405. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_tmp_files.py +0 -0
  406. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/sync/test_watch_service_edge_cases.py +0 -0
  407. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/test_deps.py +0 -0
  408. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/test_production_cascade_delete.py +0 -0
  409. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
  410. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/utils/test_parse_tags.py +0 -0
  411. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/utils/test_permalink_formatting.py +0 -0
  412. {basic_memory-0.16.0 → basic_memory-0.17.0}/tests/utils/test_utf8_handling.py +0 -0
  413. {basic_memory-0.16.0 → basic_memory-0.17.0}/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,212 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.17.0 (2025-12-28)
4
+
5
+ ### Features
6
+
7
+ - **#478**: Add anonymous usage telemetry with Homebrew-style opt-out
8
+ ([`856737f`](https://github.com/basicmachines-co/basic-memory/commit/856737f))
9
+ - Privacy-respecting anonymous usage analytics
10
+ - Easy opt-out via `BASIC_MEMORY_NO_ANALYTICS=1` environment variable
11
+ - Helps improve Basic Memory based on real usage patterns
12
+
13
+ - **#474**: Add auto-format files on save with built-in Python formatter
14
+ ([`1fd680c`](https://github.com/basicmachines-co/basic-memory/commit/1fd680c))
15
+ - Automatic markdown formatting on file save
16
+ - Built-in Python formatter for consistent code style
17
+ - Configurable formatting options
18
+
19
+ - **#447**: Complete Phase 2 of API v2 migration - MCP tools use v2 endpoints
20
+ ([`1a74d85`](https://github.com/basicmachines-co/basic-memory/commit/1a74d85))
21
+ - All MCP tools now use optimized v2 API endpoints
22
+ - Improved performance for knowledge graph operations
23
+ - Foundation for future API enhancements
24
+
25
+ ### Bug Fixes
26
+
27
+ - Fix UTF-8 BOM handling in frontmatter parsing
28
+ ([`85684f8`](https://github.com/basicmachines-co/basic-memory/commit/85684f8))
29
+ - Handles files with UTF-8 byte order marks correctly
30
+ - Prevents frontmatter parsing failures
31
+
32
+ - **#475**: Handle null titles in ChatGPT import
33
+ ([`14ce5a3`](https://github.com/basicmachines-co/basic-memory/commit/14ce5a3))
34
+ - Gracefully handles conversations without titles
35
+ - Improved import robustness
36
+
37
+ - Remove MaxLen constraint from observation content
38
+ ([`45d6caf`](https://github.com/basicmachines-co/basic-memory/commit/45d6caf))
39
+ - Allows longer observation content without truncation
40
+ - Removes arbitrary 2000 character limit
41
+
42
+ - Handle FileNotFoundError gracefully during sync
43
+ ([`1652f86`](https://github.com/basicmachines-co/basic-memory/commit/1652f86))
44
+ - Prevents sync failures when files are deleted during sync
45
+ - More resilient file watching
46
+
47
+ - Use canonical project names in API response messages
48
+ ([`c23927d`](https://github.com/basicmachines-co/basic-memory/commit/c23927d))
49
+ - Consistent project name formatting in all responses
50
+
51
+ - Suppress CLI warnings for cleaner output
52
+ ([`d71c6e8`](https://github.com/basicmachines-co/basic-memory/commit/d71c6e8))
53
+ - Cleaner terminal output without spurious warnings
54
+
55
+ - Prevent DEBUG logs from appearing on CLI stdout
56
+ ([`63b9849`](https://github.com/basicmachines-co/basic-memory/commit/63b9849))
57
+ - Debug logging no longer pollutes CLI output
58
+
59
+ - **#473**: Detect rclone version for --create-empty-src-dirs support
60
+ ([`622d37e`](https://github.com/basicmachines-co/basic-memory/commit/622d37e))
61
+ - Automatic rclone version detection for compatibility
62
+ - Prevents errors on older rclone versions
63
+
64
+ - **#471**: Prevent CLI commands from hanging on exit
65
+ ([`916baf8`](https://github.com/basicmachines-co/basic-memory/commit/916baf8))
66
+ - Fixes CLI hang on shutdown
67
+ - Proper async cleanup
68
+
69
+ - Add cloud_mode check to initialize_app()
70
+ ([`ef7adb7`](https://github.com/basicmachines-co/basic-memory/commit/ef7adb7))
71
+ - Correct initialization for cloud deployments
72
+
73
+ ### Internal
74
+
75
+ - Centralize test environment detection in config.is_test_env
76
+ ([`3cd9178`](https://github.com/basicmachines-co/basic-memory/commit/3cd9178))
77
+ - Unified test environment detection
78
+ - Disables analytics in test environments
79
+
80
+ - Make test-int-postgres compatible with macOS
81
+ ([`95937c6`](https://github.com/basicmachines-co/basic-memory/commit/95937c6))
82
+ - Cross-platform PostgreSQL testing support
83
+
84
+ ## v0.16.3 (2025-12-20)
85
+
86
+ ### Features
87
+
88
+ - **#439**: Add PostgreSQL database backend support
89
+ ([`fb5e9e1`](https://github.com/basicmachines-co/basic-memory/commit/fb5e9e1))
90
+ - Full PostgreSQL/Neon database support as alternative to SQLite
91
+ - Async connection pooling with asyncpg
92
+ - Alembic migrations support for both backends
93
+ - Configurable via `BASIC_MEMORY_DATABASE_BACKEND` environment variable
94
+
95
+ - **#441**: Implement API v2 with ID-based endpoints (Phase 1)
96
+ ([`28cc522`](https://github.com/basicmachines-co/basic-memory/commit/28cc522))
97
+ - New ID-based API endpoints for improved performance
98
+ - Foundation for future API enhancements
99
+ - Backward compatible with existing endpoints
100
+
101
+ - Add project_id to Relation and Observation for efficient project-scoped queries
102
+ ([`a920a9f`](https://github.com/basicmachines-co/basic-memory/commit/a920a9f))
103
+ - Enables faster queries in multi-project environments
104
+ - Improved database schema for cloud deployments
105
+
106
+ - Add bulk insert with ON CONFLICT handling for relations
107
+ ([`0818bda`](https://github.com/basicmachines-co/basic-memory/commit/0818bda))
108
+ - Faster relation creation during sync operations
109
+ - Handles duplicate relations gracefully
110
+
111
+ ### Performance
112
+
113
+ - Lightweight permalink resolution to avoid eager loading
114
+ ([`6f99d2e`](https://github.com/basicmachines-co/basic-memory/commit/6f99d2e))
115
+ - Reduces database queries during entity lookups
116
+ - Improved response times for read operations
117
+
118
+ ### Bug Fixes
119
+
120
+ - **#464**: Pin FastMCP to 2.12.3 to fix MCP tools visibility
121
+ ([`f227ef6`](https://github.com/basicmachines-co/basic-memory/commit/f227ef6))
122
+ - Fixes issue where MCP tools were not visible to Claude
123
+ - Reverts to last known working FastMCP version
124
+
125
+ - **#458**: Reduce watch service CPU usage by increasing reload interval
126
+ ([`897b1ed`](https://github.com/basicmachines-co/basic-memory/commit/897b1ed))
127
+ - Lowers CPU usage during file watching
128
+ - More efficient resource utilization
129
+
130
+ - **#456**: Await background sync task cancellation in lifespan shutdown
131
+ ([`efbc758`](https://github.com/basicmachines-co/basic-memory/commit/efbc758))
132
+ - Prevents hanging on shutdown
133
+ - Clean async task cleanup
134
+
135
+ - **#434**: Respect --project flag in background sync
136
+ ([`70bb10b`](https://github.com/basicmachines-co/basic-memory/commit/70bb10b))
137
+ - Background sync now correctly uses specified project
138
+ - Fixes multi-project sync issues
139
+
140
+ - **#446**: Fix observation parsing and permalink limits
141
+ ([`73d940e`](https://github.com/basicmachines-co/basic-memory/commit/73d940e))
142
+ - Handles edge cases in observation content
143
+ - Prevents permalink truncation issues
144
+
145
+ - **#424**: Handle periods in kebab_filenames mode
146
+ ([`b004565`](https://github.com/basicmachines-co/basic-memory/commit/b004565))
147
+ - Fixes filename handling for files with multiple periods
148
+ - Improved kebab-case conversion
149
+
150
+ - Fix Postgres/Neon connection settings and search index dedupe
151
+ ([`b5d4fb5`](https://github.com/basicmachines-co/basic-memory/commit/b5d4fb5))
152
+ - Optimized connection pooling for Postgres
153
+ - Prevents duplicate search index entries
154
+
155
+ ### Testing & CI
156
+
157
+ - Replace py-pglite with testcontainers for Postgres testing
158
+ ([`c462faf`](https://github.com/basicmachines-co/basic-memory/commit/c462faf))
159
+ - More reliable Postgres testing infrastructure
160
+ - Uses Docker-based test containers
161
+
162
+ - Add PostgreSQL testing to GitHub Actions workflow
163
+ ([`66b91b2`](https://github.com/basicmachines-co/basic-memory/commit/66b91b2))
164
+ - CI now tests both SQLite and PostgreSQL backends
165
+ - Ensures cross-database compatibility
166
+
167
+ - **#416**: Add integration test for read_note with underscored folders
168
+ ([`0c12a39`](https://github.com/basicmachines-co/basic-memory/commit/0c12a39))
169
+ - Verifies folder name handling edge cases
170
+
171
+ ### Internal
172
+
173
+ - Cloud compatibility fixes and performance improvements (#454)
174
+ - Remove logfire instrumentation for cleaner production deployments
175
+ - Truncate content_stems to fix Postgres 8KB index row limit
176
+
177
+ ## v0.16.2 (2025-11-16)
178
+
179
+ ### Bug Fixes
180
+
181
+ - **#429**: Use platform-native path separators in config.json
182
+ ([`6517e98`](https://github.com/basicmachines-co/basic-memory/commit/6517e98))
183
+ - Fixes config.json path separator issues on Windows
184
+ - Uses os.path.join for platform-native path construction
185
+ - Ensures consistent path handling across platforms
186
+
187
+ - **#427**: Add rclone installation checks for Windows bisync commands
188
+ ([`1af0539`](https://github.com/basicmachines-co/basic-memory/commit/1af0539))
189
+ - Validates rclone installation before running bisync commands
190
+ - Provides clear error messages when rclone is not installed
191
+ - Improves user experience on Windows
192
+
193
+ - **#421**: Main project always recreated on project list command
194
+ ([`cad7019`](https://github.com/basicmachines-co/basic-memory/commit/cad7019))
195
+ - Fixes issue where main project was recreated unnecessarily
196
+ - Improves project list command reliability
197
+ - Reduces unnecessary file system operations
198
+
199
+ ## v0.16.1 (2025-11-11)
200
+
201
+ ### Bug Fixes
202
+
203
+ - **#422**: Handle Windows line endings in rclone bisync
204
+ ([`e9d0a94`](https://github.com/basicmachines-co/basic-memory/commit/e9d0a94))
205
+ - Added `--compare=modtime` flag to rclone bisync to ignore size differences from line ending conversions
206
+ - Fixes issue where LF→CRLF conversion on Windows was treated as file corruption
207
+ - Resolves "corrupted on transfer: sizes differ" errors during cloud sync on Windows
208
+ - Users will need to run `--resync` once after updating to establish new baseline
209
+
3
210
  ## v0.16.0 (2025-11-10)
4
211
 
5
212
  ### Features