basic-memory 0.17.9__tar.gz → 0.18.1__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.
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.gitignore +2 -0
- basic_memory-0.17.9/CLAUDE.md → basic_memory-0.18.1/AGENTS.md +44 -5
- {basic_memory-0.17.9 → basic_memory-0.18.1}/CHANGELOG.md +76 -0
- basic_memory-0.18.1/CLAUDE.md +1 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/PKG-INFO +34 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/README.md +33 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/ARCHITECTURE.md +15 -2
- basic_memory-0.18.1/docs/NOTE-FORMAT.md +494 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/ai-assistant-guide-extended.md +49 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/justfile +28 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/pyproject.toml +2 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/server.json +2 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/__init__.py +1 -1
- basic_memory-0.18.1/src/basic_memory/alembic/versions/d7e8f9a0b1c2_add_structured_metadata_indexes.py +152 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/app.py +43 -25
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/importer_router.py +15 -15
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/knowledge_router.py +213 -54
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/memory_router.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/project_router.py +193 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/prompt_router.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/search_router.py +12 -9
- {basic_memory-0.17.9/src/basic_memory/api/routers → basic_memory-0.18.1/src/basic_memory/api/v2}/utils.py +29 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/app.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/__init__.py +2 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/cloud_utils.py +2 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/rclone_commands.py +12 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/command_utils.py +2 -2
- basic_memory-0.18.1/src/basic_memory/cli/commands/doctor.py +153 -0
- basic_memory-0.18.1/src/basic_memory/cli/commands/mcp.py +80 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/project.py +161 -61
- basic_memory-0.18.1/src/basic_memory/cli/commands/routing.py +73 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/status.py +17 -3
- basic_memory-0.18.1/src/basic_memory/cli/commands/tool.py +644 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/main.py +1 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/__init__.py +4 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/services.py +83 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/file_utils.py +4 -4
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/entity_parser.py +3 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/utils.py +4 -3
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/async_client.py +32 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/knowledge.py +73 -4
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/project.py +2 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/project_context.py +17 -6
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/continue_conversation.py +7 -6
- basic_memory-0.18.1/src/basic_memory/mcp/prompts/recent_activity.py +98 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/search.py +9 -6
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/utils.py +1 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/resources/project_info.py +1 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/__init__.py +2 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/canvas.py +11 -11
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/delete_note.py +94 -14
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/edit_note.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/move_note.py +94 -11
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/recent_activity.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/search.py +114 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/write_note.py +22 -20
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/entity_repository.py +12 -3
- basic_memory-0.18.1/src/basic_memory/repository/metadata_filters.py +139 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/postgres_search_repository.py +109 -28
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/search_repository.py +1 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/search_repository_base.py +2 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/sqlite_search_repository.py +127 -27
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/base.py +7 -5
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/cloud.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/memory.py +4 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/request.py +24 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/response.py +68 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/search.py +22 -6
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/v2/__init__.py +4 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/v2/entity.py +48 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/entity_service.py +393 -44
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/exceptions.py +6 -0
- basic_memory-0.18.1/src/basic_memory/services/link_resolver.py +251 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/search_service.py +22 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/sync_service.py +5 -13
- basic_memory-0.18.1/test-int/cli/test_cli_tool_json_integration.py +126 -0
- basic_memory-0.18.1/test-int/cli/test_routing_integration.py +181 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_build_context_underscore.py +5 -5
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_build_context_validation.py +2 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_chatgpt_tools_integration.py +10 -10
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_default_project_mode_integration.py +9 -9
- basic_memory-0.18.1/test-int/mcp/test_delete_directory_integration.py +268 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_delete_note_integration.py +8 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_edit_note_integration.py +11 -11
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_list_directory_integration.py +23 -23
- basic_memory-0.18.1/test-int/mcp/test_move_directory_integration.py +343 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_move_note_integration.py +14 -14
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_project_management_integration.py +5 -5
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_project_state_sync_integration.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_read_content_integration.py +8 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_read_note_integration.py +2 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_search_integration.py +20 -20
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_single_project_mcp_integration.py +6 -6
- basic_memory-0.18.1/test-int/mcp/test_smoke_integration.py +55 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_write_note_integration.py +13 -13
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/test_disable_permalinks_integration.py +1 -1
- basic_memory-0.18.1/tests/api/v2/conftest.py +59 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_importer_router.py +18 -16
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_knowledge_router.py +390 -13
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_project_router.py +26 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/cloud/test_cloud_api_client_and_utils.py +2 -2
- basic_memory-0.18.1/tests/cli/test_cli_tool_json_output.py +333 -0
- basic_memory-0.18.1/tests/cli/test_routing.py +102 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/conftest.py +6 -6
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_entity_parser_error_handling.py +94 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/clients/test_clients.py +1 -1
- basic_memory-0.18.1/tests/mcp/test_async_client_force_local.py +79 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_obsidian_yaml_formatting.py +8 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_permalink_collision_file_overwrite.py +5 -5
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_prompts.py +9 -6
- basic_memory-0.18.1/tests/mcp/test_recent_activity_prompt_modes.py +108 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_canvas.py +8 -6
- basic_memory-0.18.1/tests/mcp/test_tool_contracts.py +88 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_edit_note.py +16 -16
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_list_directory.py +3 -3
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_move_note.py +28 -28
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_read_content.py +1 -1
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_read_note.py +11 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_recent_activity.py +6 -2
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_resource.py +3 -3
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_search.py +8 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_view_note.py +12 -12
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_write_note.py +39 -39
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_write_note_kebab_filenames.py +20 -20
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/tools/test_chatgpt_tools.py +3 -3
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_entity_repository.py +60 -0
- basic_memory-0.18.1/tests/repository/test_metadata_filters.py +82 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_project_repository.py +23 -17
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_search_repository.py +106 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_memory_serialization.py +7 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_schemas.py +8 -8
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_entity_service.py +117 -53
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_entity_service_disable_permalinks.py +4 -4
- basic_memory-0.18.1/tests/services/test_link_resolver.py +811 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_search_service.py +66 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_sync_service.py +6 -6
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_rclone_commands.py +18 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_file_utils.py +19 -19
- {basic_memory-0.17.9 → basic_memory-0.18.1}/uv.lock +15 -0
- basic_memory-0.17.9/src/basic_memory/api/routers/__init__.py +0 -11
- basic_memory-0.17.9/src/basic_memory/api/routers/directory_router.py +0 -84
- basic_memory-0.17.9/src/basic_memory/api/routers/importer_router.py +0 -152
- basic_memory-0.17.9/src/basic_memory/api/routers/knowledge_router.py +0 -319
- basic_memory-0.17.9/src/basic_memory/api/routers/management_router.py +0 -80
- basic_memory-0.17.9/src/basic_memory/api/routers/memory_router.py +0 -90
- basic_memory-0.17.9/src/basic_memory/api/routers/project_router.py +0 -472
- basic_memory-0.17.9/src/basic_memory/api/routers/prompt_router.py +0 -260
- basic_memory-0.17.9/src/basic_memory/api/routers/resource_router.py +0 -252
- basic_memory-0.17.9/src/basic_memory/api/routers/search_router.py +0 -36
- basic_memory-0.17.9/src/basic_memory/cli/commands/mcp.py +0 -76
- basic_memory-0.17.9/src/basic_memory/cli/commands/tool.py +0 -341
- basic_memory-0.17.9/src/basic_memory/mcp/prompts/recent_activity.py +0 -188
- basic_memory-0.17.9/src/basic_memory/services/link_resolver.py +0 -121
- basic_memory-0.17.9/tests/api/conftest.py +0 -40
- basic_memory-0.17.9/tests/api/test_api_container.py +0 -62
- basic_memory-0.17.9/tests/api/test_async_client.py +0 -53
- basic_memory-0.17.9/tests/api/test_continue_conversation_template.py +0 -145
- basic_memory-0.17.9/tests/api/test_directory_router.py +0 -212
- basic_memory-0.17.9/tests/api/test_importer_router.py +0 -465
- basic_memory-0.17.9/tests/api/test_knowledge_router.py +0 -1289
- basic_memory-0.17.9/tests/api/test_management_router.py +0 -121
- basic_memory-0.17.9/tests/api/test_memory_router.py +0 -146
- basic_memory-0.17.9/tests/api/test_project_router.py +0 -843
- basic_memory-0.17.9/tests/api/test_project_router_operations.py +0 -55
- basic_memory-0.17.9/tests/api/test_prompt_router.py +0 -155
- basic_memory-0.17.9/tests/api/test_relation_background_resolution.py +0 -52
- basic_memory-0.17.9/tests/api/test_resource_router.py +0 -454
- basic_memory-0.17.9/tests/api/test_search_router.py +0 -179
- basic_memory-0.17.9/tests/api/test_search_template.py +0 -158
- basic_memory-0.17.9/tests/api/test_template_loader.py +0 -219
- basic_memory-0.17.9/tests/api/test_template_loader_helpers.py +0 -203
- basic_memory-0.17.9/tests/api/v2/conftest.py +0 -21
- basic_memory-0.17.9/tests/mcp/test_recent_activity_prompt_modes.py +0 -111
- basic_memory-0.17.9/tests/services/test_link_resolver.py +0 -359
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/beta.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/changelog.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/release-check.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/release/release.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/spec.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/commands/test-live.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.claude/settings.json +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.dockerignore +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.env.example +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/dependabot.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/claude-code-review.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/claude-issue-triage.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/claude.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/dev-release.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/docker.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/release.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.github/workflows/test.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/.python-version +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/CITATION.cff +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/CLA.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/CONTRIBUTING.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/Dockerfile +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/LICENSE +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/SECURITY.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docker-compose-postgres.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docker-compose.yml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/Docker.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/character-handling.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/cloud-cli.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/docs/testing-coverage.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/llms-install.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/smithery.yaml +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/env.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/container.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/template_loader.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/auth.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/restore.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/schemas.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/snapshot.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/db.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/format.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/cli/container.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/config.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/db.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/config.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/db.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/importers.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/projects.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps/repositories.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/deps.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/ignore_utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/base.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/chatgpt_importer.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/claude_projects_importer.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/memory_json_importer.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/importers/utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/markdown_processor.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/plugins.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/directory.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/memory.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/resource.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/clients/search.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/container.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/server.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/build_context.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/list_directory.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/project_management.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/read_content.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/read_note.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/mcp/tools/view_note.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/knowledge.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/project.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/models/search.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/project_resolver.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/observation_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/project_info_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/project_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/relation_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/repository/search_index_row.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/runtime.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/directory.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/importer.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/project_info.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/prompt.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/sync_report.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/schemas/v2/resource.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/context_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/directory_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/file_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/initialization.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/project_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/background_sync.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/coordinator.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/sync/watch_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/templates/prompts/search.hbs +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/src/basic_memory/utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/BENCHMARKS.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/cli/test_project_commands_integration.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/cli/test_version_integration.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/conftest.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/test-int/test_db_wal_mode.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/README.md +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/Screenshot.png +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_directory_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_memory_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_prompt_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_resource_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/api/v2/test_search_router.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/cloud/test_upload_path.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/conftest.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_auth_cli_auth.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_container.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_exit.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_tool_exit.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cli_tools.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_cloud_authentication.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_ignore_utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_chatgpt.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_claude_conversations.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_claude_projects.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_import_memory_json.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_project_add_with_local_path.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_restore_commands.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_snapshot_commands.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/cli/test_upload.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/importers/test_conversation_indexing.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/importers/test_importer_base.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/importers/test_importer_utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_entity_parser.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_markdown_plugins.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_markdown_utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/clients/__init__.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/conftest.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_async_client_modes.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_mcp_container.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_project_context.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_server_lifespan_branches.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_build_context.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_delete_note.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_project_management.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/mcp/test_tool_utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_entity_repository_upsert.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_entity_upsert_issue_187.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_observation_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_postgres_search_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_project_info_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_relation_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_repository.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_base_timeframe_minimum.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_memory_url_validation.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_relation_response_reference_resolution.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_context_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_directory_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_file_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_initialization.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_initialization_cloud_mode_branches.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_project_removal_bug.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_project_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/services/test_project_service_operations.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_character_conflicts.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_coordinator.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_sync_service_incremental.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_sync_wikilink_issue.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_tmp_files.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service_atomic_adds.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service_edge_cases.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/sync/test_watch_service_reload.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_config.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_deps.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_production_cascade_delete.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_project_resolver.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/test_runtime.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_parse_tags.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_permalink_formatting.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_timezone_utils.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_utf8_handling.py +0 -0
- {basic_memory-0.17.9 → basic_memory-0.18.1}/tests/utils/test_validate_project_path.py +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AGENTS.md - Basic Memory Project Guide
|
|
2
2
|
|
|
3
3
|
## Project Overview
|
|
4
4
|
|
|
@@ -22,6 +22,10 @@ See the [README.md](README.md) file for a project overview.
|
|
|
22
22
|
- Run unit tests (Postgres): `just test-unit-postgres`
|
|
23
23
|
- Run integration tests (SQLite): `just test-int-sqlite`
|
|
24
24
|
- Run integration tests (Postgres): `just test-int-postgres`
|
|
25
|
+
- Run impacted tests: `just testmon` (pytest-testmon)
|
|
26
|
+
- Run MCP smoke test: `just test-smoke`
|
|
27
|
+
- Fast local loop: `just fast-check`
|
|
28
|
+
- Local consistency check: `just doctor`
|
|
25
29
|
- Generate HTML coverage: `just coverage`
|
|
26
30
|
- Single test: `pytest tests/path/to/test_file.py::test_function_name`
|
|
27
31
|
- Run benchmarks: `pytest test-int/test_sync_performance_benchmark.py -v -m "benchmark and not slow"`
|
|
@@ -36,6 +40,19 @@ See the [README.md](README.md) file for a project overview.
|
|
|
36
40
|
|
|
37
41
|
**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
42
|
|
|
43
|
+
**Doctor Note:** `just doctor` runs with a temporary HOME/config so it won't touch your local Basic Memory settings. It leaves temp dirs in `/tmp` (safe to ignore or remove).
|
|
44
|
+
|
|
45
|
+
**Testmon Note:** When no files have changed, `just testmon` may collect 0 tests. That's expected and means no impacted tests were detected.
|
|
46
|
+
|
|
47
|
+
### Code/Test/Verify Loop (fast path)
|
|
48
|
+
|
|
49
|
+
1) **Code:** make changes.
|
|
50
|
+
2) **Test:** `just fast-check` (lint/format/typecheck + impacted tests + MCP smoke).
|
|
51
|
+
3) **Verify:** `just doctor` (end-to-end file ↔ DB loop in a temp project).
|
|
52
|
+
4) **Full gate (when needed):** `just test` or `just check` for SQLite + Postgres.
|
|
53
|
+
|
|
54
|
+
If testmon is “cold,” the first run may be long. Subsequent runs get much faster.
|
|
55
|
+
|
|
39
56
|
### Test Structure
|
|
40
57
|
|
|
41
58
|
- `tests/` - Unit tests for individual components (mocked, fast)
|
|
@@ -43,6 +60,7 @@ See the [README.md](README.md) file for a project overview.
|
|
|
43
60
|
- Both directories are covered by unified coverage reporting
|
|
44
61
|
- Benchmark tests in `test-int/` are marked with `@pytest.mark.benchmark`
|
|
45
62
|
- Slow tests are marked with `@pytest.mark.slow`
|
|
63
|
+
- Smoke tests are marked with `@pytest.mark.smoke`
|
|
46
64
|
|
|
47
65
|
### Code Style Guidelines
|
|
48
66
|
|
|
@@ -221,6 +239,7 @@ See SPEC-16 for full context manager refactor details.
|
|
|
221
239
|
|
|
222
240
|
**Local Commands:**
|
|
223
241
|
- Check sync status: `basic-memory status`
|
|
242
|
+
- Doctor check (file <-> DB loop): `basic-memory doctor`
|
|
224
243
|
- Import from Claude: `basic-memory import claude conversations`
|
|
225
244
|
- Import from ChatGPT: `basic-memory import chatgpt`
|
|
226
245
|
- Import from Memory JSON: `basic-memory import memory-json`
|
|
@@ -248,13 +267,13 @@ See SPEC-16 for full context manager refactor details.
|
|
|
248
267
|
- Basic Memory exposes these MCP tools to LLMs:
|
|
249
268
|
|
|
250
269
|
**Content Management:**
|
|
251
|
-
- `write_note(title, content,
|
|
270
|
+
- `write_note(title, content, directory, tags)` - Create/update markdown notes with semantic observations and relations
|
|
252
271
|
- `read_note(identifier, page, page_size)` - Read notes by title, permalink, or memory:// URL with knowledge graph awareness
|
|
253
272
|
- `read_content(path)` - Read raw file content (text, images, binaries) without knowledge graph processing
|
|
254
273
|
- `view_note(identifier, page, page_size)` - View notes as formatted artifacts for better readability
|
|
255
274
|
- `edit_note(identifier, operation, content)` - Edit notes incrementally (append, prepend, find/replace, replace_section)
|
|
256
|
-
- `move_note(identifier, destination_path)` - Move notes to new locations, updating database and maintaining links
|
|
257
|
-
- `delete_note(identifier)` - Delete notes from the knowledge base
|
|
275
|
+
- `move_note(identifier, destination_path, is_directory)` - Move notes or directories to new locations, updating database and maintaining links
|
|
276
|
+
- `delete_note(identifier, is_directory)` - Delete notes or directories from the knowledge base
|
|
258
277
|
|
|
259
278
|
**Knowledge Graph Navigation:**
|
|
260
279
|
- `build_context(url, depth, timeframe)` - Navigate the knowledge graph via memory:// URLs for conversation continuity
|
|
@@ -270,7 +289,7 @@ See SPEC-16 for full context manager refactor details.
|
|
|
270
289
|
- `delete_project(project_name)` - Delete a project from configuration
|
|
271
290
|
|
|
272
291
|
**Visualization:**
|
|
273
|
-
- `canvas(nodes, edges, title,
|
|
292
|
+
- `canvas(nodes, edges, title, directory)` - Generate Obsidian canvas files for knowledge graph visualization
|
|
274
293
|
|
|
275
294
|
**ChatGPT-Compatible Tools:**
|
|
276
295
|
- `search(query)` - Search across knowledge base (OpenAI actions compatible)
|
|
@@ -310,6 +329,26 @@ Basic Memory now supports cloud synchronization and storage (requires active sub
|
|
|
310
329
|
- Background relation resolution (non-blocking startup)
|
|
311
330
|
- API performance optimizations (SPEC-11)
|
|
312
331
|
|
|
332
|
+
**CLI Routing Flags:**
|
|
333
|
+
|
|
334
|
+
When cloud mode is enabled, CLI commands route to the cloud API by default. Use `--local` and `--cloud` flags to override:
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
# Force local routing (ignore cloud mode)
|
|
338
|
+
basic-memory status --local
|
|
339
|
+
basic-memory project list --local
|
|
340
|
+
|
|
341
|
+
# Force cloud routing (when cloud mode is disabled)
|
|
342
|
+
basic-memory status --cloud
|
|
343
|
+
basic-memory project info my-project --cloud
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Key behaviors:
|
|
347
|
+
- The local MCP server (`basic-memory mcp`) automatically uses local routing
|
|
348
|
+
- This allows simultaneous use of local Claude Desktop and cloud-based clients
|
|
349
|
+
- Some commands (like `project default`, `project sync-config`, `project move`) require `--local` in cloud mode since they modify local configuration
|
|
350
|
+
- Environment variable `BASIC_MEMORY_FORCE_LOCAL=true` forces local routing globally
|
|
351
|
+
|
|
313
352
|
## AI-Human Collaborative Development
|
|
314
353
|
|
|
315
354
|
Basic Memory emerged from and enables a new kind of development process that combines human and AI capabilities. Instead
|
|
@@ -1,5 +1,81 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v0.18.1 (2026-02-11)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- **#552**: Add `--format json` to CLI tool commands
|
|
8
|
+
([`a47c9c0`](https://github.com/basicmachines-co/basic-memory/commit/a47c9c0))
|
|
9
|
+
- CLI tool commands now support `--format json` for machine-readable output
|
|
10
|
+
|
|
11
|
+
- **#535**: Support `tag:` query shorthand in search
|
|
12
|
+
([`f1d50c2`](https://github.com/basicmachines-co/basic-memory/commit/f1d50c2))
|
|
13
|
+
- Use `tag:mytag` as a convenient shorthand in search queries
|
|
14
|
+
|
|
15
|
+
- **#532**: Fast edit entities, refactors for webui, enhanced search
|
|
16
|
+
([`530cbac`](https://github.com/basicmachines-co/basic-memory/commit/530cbac))
|
|
17
|
+
- Performance improvements for entity editing and search operations
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
- **#558**: Add X-Tigris-Consistent headers to all rclone commands
|
|
22
|
+
([`8489a3d`](https://github.com/basicmachines-co/basic-memory/commit/8489a3d))
|
|
23
|
+
- Ensures consistent reads from Tigris object storage during sync
|
|
24
|
+
|
|
25
|
+
- **#541**: Handle EntityCreationError as conflict
|
|
26
|
+
([`343a6e1`](https://github.com/basicmachines-co/basic-memory/commit/343a6e1))
|
|
27
|
+
|
|
28
|
+
- **#536**: Stabilize metadata filters on Postgres
|
|
29
|
+
([`009e849`](https://github.com/basicmachines-co/basic-memory/commit/009e849))
|
|
30
|
+
|
|
31
|
+
- **#533**: Fix recent_activity prompt defaults
|
|
32
|
+
([`24ca5f6`](https://github.com/basicmachines-co/basic-memory/commit/24ca5f6))
|
|
33
|
+
|
|
34
|
+
- **#530**: Prevent spurious `metadata: {}` in frontmatter output
|
|
35
|
+
([`e3ced49`](https://github.com/basicmachines-co/basic-memory/commit/e3ced49))
|
|
36
|
+
|
|
37
|
+
- Add POST legacy compat routes for v0.18.0 CLI
|
|
38
|
+
([`c46d7a6`](https://github.com/basicmachines-co/basic-memory/commit/c46d7a6))
|
|
39
|
+
|
|
40
|
+
- Restore legacy `/projects/projects` endpoint for older CLI versions
|
|
41
|
+
([`a0e754b`](https://github.com/basicmachines-co/basic-memory/commit/a0e754b))
|
|
42
|
+
|
|
43
|
+
### Internal
|
|
44
|
+
|
|
45
|
+
- **#538**: Add fast feedback loop tooling (`just fast-check`, `just doctor`, `just testmon`)
|
|
46
|
+
([`8072449`](https://github.com/basicmachines-co/basic-memory/commit/8072449))
|
|
47
|
+
|
|
48
|
+
## v0.18.0 (2026-01-28)
|
|
49
|
+
|
|
50
|
+
### Features
|
|
51
|
+
|
|
52
|
+
- **#527**: Add context-aware wiki link resolution with source_path support
|
|
53
|
+
([`0023e73`](https://github.com/basicmachines-co/basic-memory/commit/0023e73))
|
|
54
|
+
- Add `source_path` parameter to `resolve_link()` for context-aware resolution
|
|
55
|
+
- Relative path resolution: `[[nested/note]]` from `folder/file.md` → `folder/nested/note.md`
|
|
56
|
+
- Proximity-based resolution for duplicate titles (prefers notes in same folder)
|
|
57
|
+
- Strict mode to disable fuzzy search fallback for wiki links
|
|
58
|
+
|
|
59
|
+
- **#518**: Add directory support to move_note and delete_note tools
|
|
60
|
+
([`0b20801`](https://github.com/basicmachines-co/basic-memory/commit/0b20801))
|
|
61
|
+
- Add `is_directory` parameter to `move_note` and `delete_note` MCP tools
|
|
62
|
+
- New `POST /move-directory` and delete directory API endpoints
|
|
63
|
+
- Rename `folder` → `directory` parameter across codebase for consistency
|
|
64
|
+
|
|
65
|
+
- **#522**: Local MCP cloud mode routing
|
|
66
|
+
([`8730067`](https://github.com/basicmachines-co/basic-memory/commit/8730067))
|
|
67
|
+
- Add `--local` and `--cloud` CLI routing flags
|
|
68
|
+
- Local MCP server (`basic-memory mcp`) automatically uses local routing
|
|
69
|
+
- Enables simultaneous use of local Claude Desktop and cloud-based clients
|
|
70
|
+
- Environment variable `BASIC_MEMORY_FORCE_LOCAL=true` for global override
|
|
71
|
+
|
|
72
|
+
### Bug Fixes
|
|
73
|
+
|
|
74
|
+
- **#524**: Fix MCP prompt rendering errors
|
|
75
|
+
([`e14ba92`](https://github.com/basicmachines-co/basic-memory/commit/e14ba92))
|
|
76
|
+
- Fix "Error rendering prompt recent_activity" error
|
|
77
|
+
- Change `TimeFrame` to `str` in prompt type annotations for FastMCP compatibility
|
|
78
|
+
|
|
3
79
|
## v0.17.9 (2026-01-24)
|
|
4
80
|
|
|
5
81
|
### Bug Fixes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
AGENTS.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.1
|
|
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
|
|
@@ -405,6 +405,22 @@ basic-memory cloud check
|
|
|
405
405
|
basic-memory cloud mount
|
|
406
406
|
```
|
|
407
407
|
|
|
408
|
+
**Routing Flags** (for users with cloud subscriptions):
|
|
409
|
+
|
|
410
|
+
When cloud mode is enabled, CLI commands communicate with the cloud API by default. Use routing flags to override this:
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# Force local routing (useful for local MCP server while cloud mode is enabled)
|
|
414
|
+
basic-memory status --local
|
|
415
|
+
basic-memory project list --local
|
|
416
|
+
|
|
417
|
+
# Force cloud routing (when cloud mode is disabled but you want cloud access)
|
|
418
|
+
basic-memory status --cloud
|
|
419
|
+
basic-memory project info my-project --cloud
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
The local MCP server (`basic-memory mcp`) automatically uses local routing, so you can use both local Claude Desktop and cloud-based clients simultaneously.
|
|
423
|
+
|
|
408
424
|
4. In Claude Desktop, the LLM can now use these tools:
|
|
409
425
|
|
|
410
426
|
**Content Management:**
|
|
@@ -428,6 +444,8 @@ list_directory(dir_name, depth) - Browse directory contents with filtering
|
|
|
428
444
|
**Search & Discovery:**
|
|
429
445
|
```
|
|
430
446
|
search(query, page, page_size) - Search across your knowledge base
|
|
447
|
+
search_notes(query, page, page_size, search_type, types, entity_types, after_date, metadata_filters, tags, status, project) - Search with filters
|
|
448
|
+
search_by_metadata(filters, limit, offset, project) - Structured frontmatter search
|
|
431
449
|
```
|
|
432
450
|
|
|
433
451
|
**Project Management:**
|
|
@@ -481,6 +499,7 @@ Basic Memory uses [Loguru](https://github.com/Delgan/loguru) for logging. The lo
|
|
|
481
499
|
|----------|---------|-------------|
|
|
482
500
|
| `BASIC_MEMORY_LOG_LEVEL` | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |
|
|
483
501
|
| `BASIC_MEMORY_CLOUD_MODE` | `false` | When `true`, API logs to stdout with structured context |
|
|
502
|
+
| `BASIC_MEMORY_FORCE_LOCAL` | `false` | When `true`, forces local API routing (ignores cloud mode) |
|
|
484
503
|
| `BASIC_MEMORY_ENV` | `dev` | Set to `test` for test mode (stderr only) |
|
|
485
504
|
|
|
486
505
|
### Examples
|
|
@@ -525,16 +544,23 @@ just test
|
|
|
525
544
|
- `just test-int-postgres` - Run integration tests against Postgres
|
|
526
545
|
- `just test-windows` - Run Windows-specific tests (auto-skips on other platforms)
|
|
527
546
|
- `just test-benchmark` - Run performance benchmark tests
|
|
547
|
+
- `just testmon` - Run tests impacted by recent changes (pytest-testmon)
|
|
548
|
+
- `just test-smoke` - Run fast MCP end-to-end smoke test
|
|
549
|
+
- `just fast-check` - Run fix/format/typecheck + impacted tests + smoke test
|
|
550
|
+
- `just doctor` - Run local file <-> DB consistency checks with temp config
|
|
528
551
|
|
|
529
552
|
**Postgres Testing:**
|
|
530
553
|
|
|
531
554
|
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.
|
|
532
555
|
|
|
556
|
+
**Testmon Note:** When no files have changed, `just testmon` may collect 0 tests. That's expected and means no impacted tests were detected.
|
|
557
|
+
|
|
533
558
|
**Test Markers:**
|
|
534
559
|
|
|
535
560
|
Tests use pytest markers for selective execution:
|
|
536
561
|
- `windows` - Windows-specific database optimizations
|
|
537
562
|
- `benchmark` - Performance tests (excluded from default runs)
|
|
563
|
+
- `smoke` - Fast MCP end-to-end smoke tests
|
|
538
564
|
|
|
539
565
|
**Other Development Commands:**
|
|
540
566
|
```bash
|
|
@@ -542,10 +568,17 @@ just install # Install with dev dependencies
|
|
|
542
568
|
just lint # Run linting checks
|
|
543
569
|
just typecheck # Run type checking
|
|
544
570
|
just format # Format code with ruff
|
|
571
|
+
just fast-check # Fast local loop (fix/format/typecheck + testmon + smoke)
|
|
572
|
+
just doctor # Local consistency check (temp config)
|
|
545
573
|
just check # Run all quality checks
|
|
546
574
|
just migration "msg" # Create database migration
|
|
547
575
|
```
|
|
548
576
|
|
|
577
|
+
**Local Consistency Check:**
|
|
578
|
+
```bash
|
|
579
|
+
basic-memory doctor # Verifies file <-> database sync in a temp project
|
|
580
|
+
```
|
|
581
|
+
|
|
549
582
|
See the [justfile](justfile) for the complete list of development commands.
|
|
550
583
|
|
|
551
584
|
## License
|
|
@@ -357,6 +357,22 @@ basic-memory cloud check
|
|
|
357
357
|
basic-memory cloud mount
|
|
358
358
|
```
|
|
359
359
|
|
|
360
|
+
**Routing Flags** (for users with cloud subscriptions):
|
|
361
|
+
|
|
362
|
+
When cloud mode is enabled, CLI commands communicate with the cloud API by default. Use routing flags to override this:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
# Force local routing (useful for local MCP server while cloud mode is enabled)
|
|
366
|
+
basic-memory status --local
|
|
367
|
+
basic-memory project list --local
|
|
368
|
+
|
|
369
|
+
# Force cloud routing (when cloud mode is disabled but you want cloud access)
|
|
370
|
+
basic-memory status --cloud
|
|
371
|
+
basic-memory project info my-project --cloud
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
The local MCP server (`basic-memory mcp`) automatically uses local routing, so you can use both local Claude Desktop and cloud-based clients simultaneously.
|
|
375
|
+
|
|
360
376
|
4. In Claude Desktop, the LLM can now use these tools:
|
|
361
377
|
|
|
362
378
|
**Content Management:**
|
|
@@ -380,6 +396,8 @@ list_directory(dir_name, depth) - Browse directory contents with filtering
|
|
|
380
396
|
**Search & Discovery:**
|
|
381
397
|
```
|
|
382
398
|
search(query, page, page_size) - Search across your knowledge base
|
|
399
|
+
search_notes(query, page, page_size, search_type, types, entity_types, after_date, metadata_filters, tags, status, project) - Search with filters
|
|
400
|
+
search_by_metadata(filters, limit, offset, project) - Structured frontmatter search
|
|
383
401
|
```
|
|
384
402
|
|
|
385
403
|
**Project Management:**
|
|
@@ -433,6 +451,7 @@ Basic Memory uses [Loguru](https://github.com/Delgan/loguru) for logging. The lo
|
|
|
433
451
|
|----------|---------|-------------|
|
|
434
452
|
| `BASIC_MEMORY_LOG_LEVEL` | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |
|
|
435
453
|
| `BASIC_MEMORY_CLOUD_MODE` | `false` | When `true`, API logs to stdout with structured context |
|
|
454
|
+
| `BASIC_MEMORY_FORCE_LOCAL` | `false` | When `true`, forces local API routing (ignores cloud mode) |
|
|
436
455
|
| `BASIC_MEMORY_ENV` | `dev` | Set to `test` for test mode (stderr only) |
|
|
437
456
|
|
|
438
457
|
### Examples
|
|
@@ -477,16 +496,23 @@ just test
|
|
|
477
496
|
- `just test-int-postgres` - Run integration tests against Postgres
|
|
478
497
|
- `just test-windows` - Run Windows-specific tests (auto-skips on other platforms)
|
|
479
498
|
- `just test-benchmark` - Run performance benchmark tests
|
|
499
|
+
- `just testmon` - Run tests impacted by recent changes (pytest-testmon)
|
|
500
|
+
- `just test-smoke` - Run fast MCP end-to-end smoke test
|
|
501
|
+
- `just fast-check` - Run fix/format/typecheck + impacted tests + smoke test
|
|
502
|
+
- `just doctor` - Run local file <-> DB consistency checks with temp config
|
|
480
503
|
|
|
481
504
|
**Postgres Testing:**
|
|
482
505
|
|
|
483
506
|
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.
|
|
484
507
|
|
|
508
|
+
**Testmon Note:** When no files have changed, `just testmon` may collect 0 tests. That's expected and means no impacted tests were detected.
|
|
509
|
+
|
|
485
510
|
**Test Markers:**
|
|
486
511
|
|
|
487
512
|
Tests use pytest markers for selective execution:
|
|
488
513
|
- `windows` - Windows-specific database optimizations
|
|
489
514
|
- `benchmark` - Performance tests (excluded from default runs)
|
|
515
|
+
- `smoke` - Fast MCP end-to-end smoke tests
|
|
490
516
|
|
|
491
517
|
**Other Development Commands:**
|
|
492
518
|
```bash
|
|
@@ -494,10 +520,17 @@ just install # Install with dev dependencies
|
|
|
494
520
|
just lint # Run linting checks
|
|
495
521
|
just typecheck # Run type checking
|
|
496
522
|
just format # Format code with ruff
|
|
523
|
+
just fast-check # Fast local loop (fix/format/typecheck + testmon + smoke)
|
|
524
|
+
just doctor # Local consistency check (temp config)
|
|
497
525
|
just check # Run all quality checks
|
|
498
526
|
just migration "msg" # Create database migration
|
|
499
527
|
```
|
|
500
528
|
|
|
529
|
+
**Local Consistency Check:**
|
|
530
|
+
```bash
|
|
531
|
+
basic-memory doctor # Verifies file <-> database sync in a temp project
|
|
532
|
+
```
|
|
533
|
+
|
|
501
534
|
See the [justfile](justfile) for the complete list of development commands.
|
|
502
535
|
|
|
503
536
|
## License
|
|
@@ -214,15 +214,28 @@ Example tool using typed client:
|
|
|
214
214
|
|
|
215
215
|
```python
|
|
216
216
|
@mcp.tool()
|
|
217
|
-
async def search_notes(
|
|
217
|
+
async def search_notes(
|
|
218
|
+
query: str,
|
|
219
|
+
project: str | None = None,
|
|
220
|
+
metadata_filters: dict | None = None,
|
|
221
|
+
tags: list[str] | None = None,
|
|
222
|
+
status: str | None = None,
|
|
223
|
+
) -> SearchResponse:
|
|
218
224
|
async with get_client() as client:
|
|
219
225
|
active_project = await get_active_project(client, project)
|
|
220
226
|
|
|
221
227
|
# Import client inside function to avoid circular imports
|
|
222
228
|
from basic_memory.mcp.clients import SearchClient
|
|
229
|
+
from basic_memory.schemas.search import SearchQuery
|
|
223
230
|
|
|
231
|
+
search_query = SearchQuery(
|
|
232
|
+
text=query,
|
|
233
|
+
metadata_filters=metadata_filters,
|
|
234
|
+
tags=tags,
|
|
235
|
+
status=status,
|
|
236
|
+
)
|
|
224
237
|
search_client = SearchClient(client, active_project.external_id)
|
|
225
|
-
return await search_client.search(
|
|
238
|
+
return await search_client.search(search_query.model_dump())
|
|
226
239
|
```
|
|
227
240
|
|
|
228
241
|
## Sync Coordination
|