basic-memory 0.14.0b1__tar.gz → 0.14.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.
Potentially problematic release.
This version of basic-memory might be problematic. Click here for more details.
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/CHANGELOG.md +121 -39
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/PKG-INFO +14 -3
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/README.md +12 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/justfile +1 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/pyproject.toml +2 -2
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/__init__.py +1 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/markdown/utils.py +3 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/__init__.py +4 -4
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/project_management.py +7 -7
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/search.py +115 -38
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/response.py +1 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_server.py +1 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_edit_note.py +39 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_search.py +63 -22
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_search_repository.py +11 -9
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/schemas/test_schemas.py +30 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/uv.lock +1 -1
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.claude/commands/release/beta.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.claude/commands/release/changelog.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.claude/commands/release/release-check.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.claude/commands/release/release.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.claude/commands/test-live.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.dockerignore +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/dependabot.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/workflows/claude.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/workflows/dev-release.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/workflows/docker.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/workflows/release.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.github/workflows/test.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.gitignore +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/.python-version +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/CITATION.cff +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/CLA.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/CLAUDE.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/CONTRIBUTING.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/Dockerfile +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/LICENSE +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/SECURITY.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/docker-compose.yml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/docs/AI Assistant Guide.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/docs/Docker.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/llms-install.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/memory.json +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/smithery.yaml +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/env.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/app.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/directory_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/importer_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/knowledge_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/management_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/memory_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/project_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/prompt_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/resource_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/search_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/routers/utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/api/template_loader.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/app.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/auth.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/db.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/mcp.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/project.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/status.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/sync.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/commands/tool.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/cli/main.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/config.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/db.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/deps.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/file_utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/base.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/chatgpt_importer.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/claude_projects_importer.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/memory_json_importer.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/importers/utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/markdown/entity_parser.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/markdown/markdown_processor.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/markdown/plugins.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/async_client.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/auth_provider.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/external_auth_provider.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/project_session.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/search.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/sync_status.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/prompts/utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/resources/project_info.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/server.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/supabase_auth_provider.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/build_context.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/canvas.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/delete_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/edit_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/list_directory.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/move_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/read_content.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/read_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/sync_status.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/view_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/write_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/models/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/models/knowledge.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/models/project.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/models/search.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/entity_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/observation_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/project_info_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/project_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/relation_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/repository/search_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/base.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/directory.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/importer.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/memory.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/project_info.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/prompt.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/request.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/schemas/search.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/context_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/directory_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/entity_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/exceptions.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/file_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/initialization.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/link_resolver.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/migration_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/project_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/search_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/services/sync_status_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/sync/background_sync.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/sync/sync_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/sync/watch_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/templates/prompts/search.hbs +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/cli/test_reset_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/conftest.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_build_context_validation.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_delete_note_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_edit_note_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_list_directory_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_move_note_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_project_management_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_project_state_sync_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_read_content_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_read_note_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_search_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/test-int/mcp/test_write_note_integration.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/Screenshot.png +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/conftest.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_continue_conversation_template.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_directory_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_importer_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_knowledge_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_management_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_memory_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_project_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_project_router_operations.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_prompt_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_resource_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_search_router.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_search_template.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_template_loader.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/api/test_template_loader_helpers.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/conftest.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_auth_commands.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_cli_tools.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_import_chatgpt.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_import_claude_conversations.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_import_claude_projects.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_import_memory_json.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_project_commands.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_project_info.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_status.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_sync.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/cli/test_version.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/conftest.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/importers/test_importer_base.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/importers/test_importer_utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_entity_parser.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_markdown_plugins.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/conftest.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_auth_provider.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_prompts.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_resource_project_info.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_build_context.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_canvas.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_delete_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_list_directory.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_move_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_read_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_recent_activity.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_resource.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_sync_status.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_view_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/mcp/test_tool_write_note.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_entity_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_entity_repository_upsert.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_observation_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_project_info_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_project_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_relation_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/repository/test_repository.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/schemas/test_memory_url_validation.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_context_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_directory_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_entity_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_file_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_initialization.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_link_resolver.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_project_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_project_service_operations.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_search_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/services/test_sync_status_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/sync/test_sync_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/sync/test_sync_wikilink_issue.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/sync/test_tmp_files.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/sync/test_watch_service.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/sync/test_watch_service_edge_cases.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/test_config.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/test_db_migration_deduplication.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/utils/test_file_utils.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/utils/test_parse_tags.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/utils/test_permalink_formatting.py +0 -0
- {basic_memory-0.14.0b1 → basic_memory-0.14.1}/tests/utils/test_utf8_handling.py +0 -0
|
@@ -1,56 +1,138 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
-
## v0.
|
|
3
|
+
## v0.14.0 (2025-06-26)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
|
|
7
|
-
- **Docker Container
|
|
8
|
-
([`
|
|
9
|
-
- Docker
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
7
|
+
- **Docker Container Registry Migration** - Switch from Docker Hub to GitHub Container Registry for better security and integration
|
|
8
|
+
([`616c1f0`](https://github.com/basicmachines-co/basic-memory/commit/616c1f0710da59c7098a5f4843d4f017877ff7b2))
|
|
9
|
+
- Automated Docker image publishing via GitHub Actions CI/CD pipeline
|
|
10
|
+
- Enhanced container security with GitHub's integrated vulnerability scanning
|
|
11
|
+
- Streamlined container deployment workflow for production environments
|
|
12
|
+
|
|
13
|
+
- **Enhanced Search Documentation** - Comprehensive search syntax examples for improved user experience
|
|
14
|
+
([`a589f8b`](https://github.com/basicmachines-co/basic-memory/commit/a589f8b894e78cce01eb25656856cfea8785fbbf))
|
|
15
|
+
- Detailed examples for Boolean search operators (AND, OR, NOT)
|
|
16
|
+
- Advanced search patterns including phrase matching and field-specific queries
|
|
17
|
+
- User-friendly documentation for complex search scenarios
|
|
18
|
+
|
|
19
|
+
- **Cross-Project File Management** - Intelligent move operations with project boundary detection
|
|
20
|
+
([`db5ef7d`](https://github.com/basicmachines-co/basic-memory/commit/db5ef7d35cc0894309c7a57b5741c9dd978526d4))
|
|
21
|
+
- Automatic detection of cross-project move attempts with helpful guidance
|
|
22
|
+
- Clear error messages when attempting unsupported cross-project operations
|
|
13
23
|
|
|
14
24
|
### Bug Fixes
|
|
15
25
|
|
|
16
|
-
- **#
|
|
17
|
-
([`
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
- **#
|
|
23
|
-
([`
|
|
24
|
-
- Fix
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
|
|
26
|
+
- **#184**: Preserve permalinks when editing notes without frontmatter permalinks
|
|
27
|
+
([`c2f4b63`](https://github.com/basicmachines-co/basic-memory/commit/c2f4b632cf04921b1a3c2f0d43831b80c519cb31))
|
|
28
|
+
- Fix permalink preservation during note editing operations
|
|
29
|
+
- Ensure consistent permalink handling across different note formats
|
|
30
|
+
- Maintain note identity and searchability during incremental edits
|
|
31
|
+
|
|
32
|
+
- **#183**: Implement project-specific sync status checks for MCP tools
|
|
33
|
+
([`12b5152`](https://github.com/basicmachines-co/basic-memory/commit/12b51522bc953fca117fc5bc01fcb29c6ca7e13c))
|
|
34
|
+
- Fix sync status reporting to correctly reflect current project state
|
|
35
|
+
- Resolve inconsistencies where sync status showed global instead of project-specific information
|
|
36
|
+
- Improve project isolation for sync operations and status reporting
|
|
37
|
+
|
|
38
|
+
- **#180**: Handle Boolean search syntax with hyphenated terms
|
|
39
|
+
([`546e3cd`](https://github.com/basicmachines-co/basic-memory/commit/546e3cd8db98b74f746749d41887f8a213cd0b11))
|
|
40
|
+
- Fix search parsing issues with hyphenated terms in Boolean queries
|
|
41
|
+
- Improve search query tokenization for complex term structures
|
|
42
|
+
- Enhanced search reliability for technical documentation and multi-word concepts
|
|
43
|
+
|
|
44
|
+
- **#174**: Respect BASIC_MEMORY_HOME environment variable in Docker containers
|
|
45
|
+
([`9f1db23`](https://github.com/basicmachines-co/basic-memory/commit/9f1db23c78d4648e2c242ad1ee27eed85e3f3b5d))
|
|
46
|
+
- Fix Docker container configuration to properly honor custom home directory settings
|
|
47
|
+
- Improve containerized deployment flexibility with environment variable support
|
|
48
|
+
- Ensure consistent behavior between local and containerized installations
|
|
49
|
+
|
|
50
|
+
- **#168**: Scope entity queries by project_id in upsert_entity method
|
|
51
|
+
([`2a3adc1`](https://github.com/basicmachines-co/basic-memory/commit/2a3adc109a3e4d7ccd65cae4abf63d9bb2338326))
|
|
52
|
+
- Fix entity isolation issues in multi-project setups
|
|
53
|
+
- Prevent cross-project entity conflicts during database operations
|
|
54
|
+
- Strengthen project boundary enforcement at the database level
|
|
55
|
+
|
|
56
|
+
- **#166**: Handle None from_entity in Context API RelationSummary
|
|
57
|
+
([`8a065c3`](https://github.com/basicmachines-co/basic-memory/commit/8a065c32f4e41613207d29aafc952a56e3a52241))
|
|
58
|
+
- Fix null pointer exceptions in relation processing
|
|
59
|
+
- Improve error handling for incomplete relation data
|
|
60
|
+
- Enhanced stability for knowledge graph traversal operations
|
|
61
|
+
|
|
62
|
+
- **#164**: Remove log level configuration from mcp_server.run()
|
|
63
|
+
([`224e4bf`](https://github.com/basicmachines-co/basic-memory/commit/224e4bf9e4438c44a82ffc21bd1a282fe9087690))
|
|
64
|
+
- Simplify MCP server startup by removing redundant log level settings
|
|
65
|
+
- Fix potential logging configuration conflicts
|
|
66
|
+
- Streamline server initialization process
|
|
67
|
+
|
|
68
|
+
- **#162**: Ensure permalinks are generated for entities with null permalinks during move operations
|
|
69
|
+
([`f506507`](https://github.com/basicmachines-co/basic-memory/commit/f50650763dbd4322c132e4bdc959ce4bf074374b))
|
|
70
|
+
- Fix move operations for entities without existing permalinks
|
|
71
|
+
- Automatic permalink generation during file move operations
|
|
72
|
+
- Maintain database consistency during file reorganization
|
|
34
73
|
|
|
35
74
|
### Technical Improvements
|
|
36
75
|
|
|
37
|
-
- **Comprehensive
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
76
|
+
- **Comprehensive Test Coverage** - Extensive test suites for new features and edge cases
|
|
77
|
+
- Enhanced test coverage for project-specific sync status functionality
|
|
78
|
+
- Additional test scenarios for search syntax validation and edge cases
|
|
79
|
+
- Integration tests for Docker CI workflow and container publishing
|
|
80
|
+
- Comprehensive move operations testing with project boundary validation
|
|
81
|
+
|
|
82
|
+
- **Docker CI/CD Pipeline** - Production-ready automated container publishing
|
|
83
|
+
([`74847cc`](https://github.com/basicmachines-co/basic-memory/commit/74847cc3807b0c6ed511e0d83e0d560e9f07ec44))
|
|
84
|
+
- Automated Docker image building and publishing on release
|
|
85
|
+
- Multi-architecture container support for AMD64 and ARM64 platforms
|
|
86
|
+
- Integrated security scanning and vulnerability assessments
|
|
87
|
+
- Streamlined deployment pipeline for production environments
|
|
88
|
+
|
|
89
|
+
- **Release Process Improvements** - Enhanced automation and quality gates
|
|
90
|
+
([`a52ce1c`](https://github.com/basicmachines-co/basic-memory/commit/a52ce1c8605ec2cd450d1f909154172cbc30faa2))
|
|
91
|
+
- Homebrew formula updates limited to stable releases only
|
|
92
|
+
- Improved release automation with better quality control
|
|
93
|
+
- Enhanced CI/CD pipeline reliability and error handling
|
|
94
|
+
|
|
95
|
+
- **Code Quality Enhancements** - Improved error handling and validation
|
|
96
|
+
- Better null safety in entity and relation processing
|
|
97
|
+
- Enhanced project isolation validation throughout the codebase
|
|
98
|
+
- Improved error messages and user guidance for edge cases
|
|
99
|
+
- Strengthened database consistency guarantees across operations
|
|
100
|
+
|
|
101
|
+
### Infrastructure
|
|
102
|
+
|
|
103
|
+
- **GitHub Container Registry Integration** - Modern container infrastructure
|
|
104
|
+
- Migration from Docker Hub to GitHub Container Registry (ghcr.io)
|
|
105
|
+
- Improved security with integrated vulnerability scanning
|
|
106
|
+
- Better integration with GitHub-based development workflow
|
|
107
|
+
- Enhanced container versioning and artifact management
|
|
108
|
+
|
|
109
|
+
- **Enhanced CI/CD Workflows** - Robust automated testing and deployment
|
|
110
|
+
- Automated Docker image publishing on releases
|
|
111
|
+
- Comprehensive test coverage validation before deployment
|
|
112
|
+
- Multi-platform container building and publishing
|
|
113
|
+
- Integration with GitHub's security and monitoring tools
|
|
42
114
|
|
|
43
|
-
|
|
44
|
-
- Improved project state management across system components
|
|
45
|
-
- Better session refresh patterns for configuration changes
|
|
46
|
-
- Streamlined Docker setup with reduced image size
|
|
115
|
+
### Migration Guide
|
|
47
116
|
|
|
48
|
-
|
|
117
|
+
This release includes several behind-the-scenes improvements and fixes. All changes are backward compatible:
|
|
118
|
+
|
|
119
|
+
- **Docker Users**: Container images now served from `ghcr.io/basicmachines-co/basic-memory` instead of Docker Hub
|
|
120
|
+
- **Search Users**: Enhanced search syntax handling - existing queries continue to work unchanged
|
|
121
|
+
- **Multi-Project Users**: Improved project isolation - all existing projects remain fully functional
|
|
122
|
+
- **All Users**: Enhanced stability and error handling - no breaking changes to existing workflows
|
|
123
|
+
|
|
124
|
+
### Installation
|
|
49
125
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
126
|
+
```bash
|
|
127
|
+
# Latest stable release
|
|
128
|
+
uv tool install basic-memory
|
|
129
|
+
|
|
130
|
+
# Update existing installation
|
|
131
|
+
uv tool upgrade basic-memory
|
|
132
|
+
|
|
133
|
+
# Docker (new registry)
|
|
134
|
+
docker pull ghcr.io/basicmachines-co/basic-memory:latest
|
|
135
|
+
```
|
|
54
136
|
|
|
55
137
|
## v0.13.7 (2025-06-19)
|
|
56
138
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.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
|
|
@@ -13,7 +13,7 @@ Requires-Dist: aiosqlite>=0.20.0
|
|
|
13
13
|
Requires-Dist: alembic>=1.14.1
|
|
14
14
|
Requires-Dist: dateparser>=1.2.0
|
|
15
15
|
Requires-Dist: fastapi[standard]>=0.115.8
|
|
16
|
-
Requires-Dist: fastmcp
|
|
16
|
+
Requires-Dist: fastmcp<2.10.0,>=2.3.4
|
|
17
17
|
Requires-Dist: greenlet>=3.1.1
|
|
18
18
|
Requires-Dist: icecream>=2.1.3
|
|
19
19
|
Requires-Dist: loguru>=0.7.3
|
|
@@ -71,6 +71,10 @@ https://github.com/user-attachments/assets/a55d8238-8dd0-454a-be4c-8860dbbd0ddc
|
|
|
71
71
|
# Install with uv (recommended)
|
|
72
72
|
uv tool install basic-memory
|
|
73
73
|
|
|
74
|
+
# or with Homebrew
|
|
75
|
+
brew tap basicmachines-co/basic-memory
|
|
76
|
+
brew install basic-memory
|
|
77
|
+
|
|
74
78
|
# Configure Claude Desktop (edit ~/Library/Application Support/Claude/claude_desktop_config.json)
|
|
75
79
|
# Add this to your config:
|
|
76
80
|
{
|
|
@@ -104,6 +108,13 @@ npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
|
|
|
104
108
|
|
|
105
109
|
This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. Note: The Smithery installation uses their hosted MCP server, while your data remains stored locally as Markdown files.
|
|
106
110
|
|
|
111
|
+
### Add to Cursor
|
|
112
|
+
|
|
113
|
+
Once you have installed Basic Memory revisit this page for the 1-click installer for Cursor:
|
|
114
|
+
|
|
115
|
+
[](https://cursor.com/install-mcp?name=basic-memory&config=eyJjb21tYW5kIjoiL1VzZXJzL2RyZXcvLmxvY2FsL2Jpbi91dnggYmFzaWMtbWVtb3J5IG1jcCJ9)
|
|
116
|
+
|
|
117
|
+
|
|
107
118
|
### Glama.ai
|
|
108
119
|
|
|
109
120
|
<a href="https://glama.ai/mcp/servers/o90kttu9ym">
|
|
@@ -252,7 +263,7 @@ title: <Entity title>
|
|
|
252
263
|
type: <The type of Entity> (e.g. note)
|
|
253
264
|
permalink: <a uri slug>
|
|
254
265
|
|
|
255
|
-
- <optional metadata> (such as tags)
|
|
266
|
+
- <optional metadata> (such as tags)
|
|
256
267
|
```
|
|
257
268
|
|
|
258
269
|
### Observations
|
|
@@ -33,6 +33,10 @@ https://github.com/user-attachments/assets/a55d8238-8dd0-454a-be4c-8860dbbd0ddc
|
|
|
33
33
|
# Install with uv (recommended)
|
|
34
34
|
uv tool install basic-memory
|
|
35
35
|
|
|
36
|
+
# or with Homebrew
|
|
37
|
+
brew tap basicmachines-co/basic-memory
|
|
38
|
+
brew install basic-memory
|
|
39
|
+
|
|
36
40
|
# Configure Claude Desktop (edit ~/Library/Application Support/Claude/claude_desktop_config.json)
|
|
37
41
|
# Add this to your config:
|
|
38
42
|
{
|
|
@@ -66,6 +70,13 @@ npx -y @smithery/cli install @basicmachines-co/basic-memory --client claude
|
|
|
66
70
|
|
|
67
71
|
This installs and configures Basic Memory without requiring manual edits to the Claude Desktop configuration file. Note: The Smithery installation uses their hosted MCP server, while your data remains stored locally as Markdown files.
|
|
68
72
|
|
|
73
|
+
### Add to Cursor
|
|
74
|
+
|
|
75
|
+
Once you have installed Basic Memory revisit this page for the 1-click installer for Cursor:
|
|
76
|
+
|
|
77
|
+
[](https://cursor.com/install-mcp?name=basic-memory&config=eyJjb21tYW5kIjoiL1VzZXJzL2RyZXcvLmxvY2FsL2Jpbi91dnggYmFzaWMtbWVtb3J5IG1jcCJ9)
|
|
78
|
+
|
|
79
|
+
|
|
69
80
|
### Glama.ai
|
|
70
81
|
|
|
71
82
|
<a href="https://glama.ai/mcp/servers/o90kttu9ym">
|
|
@@ -214,7 +225,7 @@ title: <Entity title>
|
|
|
214
225
|
type: <The type of Entity> (e.g. note)
|
|
215
226
|
permalink: <a uri slug>
|
|
216
227
|
|
|
217
|
-
- <optional metadata> (such as tags)
|
|
228
|
+
- <optional metadata> (such as tags)
|
|
218
229
|
```
|
|
219
230
|
|
|
220
231
|
### Observations
|
|
@@ -30,7 +30,7 @@ dependencies = [
|
|
|
30
30
|
"alembic>=1.14.1",
|
|
31
31
|
"pillow>=11.1.0",
|
|
32
32
|
"pybars3>=0.9.7",
|
|
33
|
-
"fastmcp>=2.3.4",
|
|
33
|
+
"fastmcp>=2.3.4,<2.10.0",
|
|
34
34
|
"pyjwt>=2.10.1",
|
|
35
35
|
"python-dotenv>=1.1.0",
|
|
36
36
|
"pytest-aio>=1.9.0",
|
|
@@ -123,4 +123,4 @@ omit = [
|
|
|
123
123
|
]
|
|
124
124
|
|
|
125
125
|
[tool.logfire]
|
|
126
|
-
ignore_no_config = true
|
|
126
|
+
ignore_no_config = true
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""basic-memory - Local-first knowledge management combining Zettelkasten with knowledge graphs"""
|
|
2
2
|
|
|
3
3
|
# Package version - updated by release automation
|
|
4
|
-
__version__ = "0.14.
|
|
4
|
+
__version__ = "0.14.1"
|
|
5
5
|
|
|
6
6
|
# API version for FastAPI - independent of package version
|
|
7
7
|
__api_version__ = "v0"
|
|
@@ -38,7 +38,9 @@ def entity_model_from_markdown(
|
|
|
38
38
|
# Update basic fields
|
|
39
39
|
model.title = markdown.frontmatter.title
|
|
40
40
|
model.entity_type = markdown.frontmatter.type
|
|
41
|
-
|
|
41
|
+
# Only update permalink if it exists in frontmatter, otherwise preserve existing
|
|
42
|
+
if markdown.frontmatter.permalink is not None:
|
|
43
|
+
model.permalink = markdown.frontmatter.permalink
|
|
42
44
|
model.file_path = str(file_path)
|
|
43
45
|
model.content_type = "text/markdown"
|
|
44
46
|
model.created_at = markdown.created
|
|
@@ -20,24 +20,24 @@ from basic_memory.mcp.tools.edit_note import edit_note
|
|
|
20
20
|
from basic_memory.mcp.tools.move_note import move_note
|
|
21
21
|
from basic_memory.mcp.tools.sync_status import sync_status
|
|
22
22
|
from basic_memory.mcp.tools.project_management import (
|
|
23
|
-
|
|
23
|
+
list_memory_projects,
|
|
24
24
|
switch_project,
|
|
25
25
|
get_current_project,
|
|
26
26
|
set_default_project,
|
|
27
|
-
|
|
27
|
+
create_memory_project,
|
|
28
28
|
delete_project,
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
__all__ = [
|
|
32
32
|
"build_context",
|
|
33
33
|
"canvas",
|
|
34
|
-
"
|
|
34
|
+
"create_memory_project",
|
|
35
35
|
"delete_note",
|
|
36
36
|
"delete_project",
|
|
37
37
|
"edit_note",
|
|
38
38
|
"get_current_project",
|
|
39
39
|
"list_directory",
|
|
40
|
-
"
|
|
40
|
+
"list_memory_projects",
|
|
41
41
|
"move_note",
|
|
42
42
|
"read_content",
|
|
43
43
|
"read_note",
|
{basic_memory-0.14.0b1 → basic_memory-0.14.1}/src/basic_memory/mcp/tools/project_management.py
RENAMED
|
@@ -19,7 +19,7 @@ from basic_memory.utils import generate_permalink
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
@mcp.tool("list_memory_projects")
|
|
22
|
-
async def
|
|
22
|
+
async def list_memory_projects(ctx: Context | None = None) -> str:
|
|
23
23
|
"""List all available projects with their status.
|
|
24
24
|
|
|
25
25
|
Shows all Basic Memory projects that are available, indicating which one
|
|
@@ -29,7 +29,7 @@ async def list_projects(ctx: Context | None = None) -> str:
|
|
|
29
29
|
Formatted list of projects with status indicators
|
|
30
30
|
|
|
31
31
|
Example:
|
|
32
|
-
|
|
32
|
+
list_memory_projects()
|
|
33
33
|
"""
|
|
34
34
|
if ctx: # pragma: no cover
|
|
35
35
|
await ctx.info("Listing all available projects")
|
|
@@ -144,13 +144,13 @@ async def switch_project(project_name: str, ctx: Context | None = None) -> str:
|
|
|
144
144
|
Your session remains on the previous project.
|
|
145
145
|
|
|
146
146
|
## Troubleshooting:
|
|
147
|
-
1. **Check available projects**: Use `
|
|
147
|
+
1. **Check available projects**: Use `list_memory_projects()` to see valid project names
|
|
148
148
|
2. **Verify spelling**: Ensure the project name is spelled correctly
|
|
149
149
|
3. **Check permissions**: Verify you have access to the requested project
|
|
150
150
|
4. **Try again**: The error might be temporary
|
|
151
151
|
|
|
152
152
|
## Available options:
|
|
153
|
-
- See all projects: `
|
|
153
|
+
- See all projects: `list_memory_projects()`
|
|
154
154
|
- Stay on current project: `get_current_project()`
|
|
155
155
|
- Try different project: `switch_project("correct-project-name")`
|
|
156
156
|
|
|
@@ -231,7 +231,7 @@ async def set_default_project(project_name: str, ctx: Context | None = None) ->
|
|
|
231
231
|
|
|
232
232
|
|
|
233
233
|
@mcp.tool("create_memory_project")
|
|
234
|
-
async def
|
|
234
|
+
async def create_memory_project(
|
|
235
235
|
project_name: str, project_path: str, set_default: bool = False, ctx: Context | None = None
|
|
236
236
|
) -> str:
|
|
237
237
|
"""Create a new Basic Memory project.
|
|
@@ -248,8 +248,8 @@ async def create_project(
|
|
|
248
248
|
Confirmation message with project details
|
|
249
249
|
|
|
250
250
|
Example:
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
create_memory_project("my-research", "~/Documents/research")
|
|
252
|
+
create_memory_project("work-notes", "/home/user/work", set_default=True)
|
|
253
253
|
"""
|
|
254
254
|
if ctx: # pragma: no cover
|
|
255
255
|
await ctx.info(f"Creating project: {project_name} at {project_path}")
|
|
@@ -45,13 +45,18 @@ def _format_search_error_response(error_message: str, query: str, search_type: s
|
|
|
45
45
|
- Boolean OR: `meeting OR discussion`
|
|
46
46
|
- Boolean NOT: `project NOT archived`
|
|
47
47
|
- Grouped: `(project OR planning) AND notes`
|
|
48
|
+
- Exact phrases: `"weekly standup meeting"`
|
|
49
|
+
- Content-specific: `tag:example` or `category:observation`
|
|
48
50
|
|
|
49
51
|
## Try again with:
|
|
50
52
|
```
|
|
51
|
-
search_notes("
|
|
53
|
+
search_notes("{clean_query}")
|
|
52
54
|
```
|
|
53
55
|
|
|
54
|
-
|
|
56
|
+
## Alternative search strategies:
|
|
57
|
+
- Break into simpler terms: `search_notes("{" ".join(clean_query.split()[:2])}")`
|
|
58
|
+
- Try different search types: `search_notes("{clean_query}", search_type="title")`
|
|
59
|
+
- Use filtering: `search_notes("{clean_query}", types=["entity"])`
|
|
55
60
|
""").strip()
|
|
56
61
|
|
|
57
62
|
# Project not found errors (check before general "not found")
|
|
@@ -85,24 +90,39 @@ def _format_search_error_response(error_message: str, query: str, search_type: s
|
|
|
85
90
|
|
|
86
91
|
No content found matching '{query}' in the current project.
|
|
87
92
|
|
|
88
|
-
##
|
|
93
|
+
## Search strategy suggestions:
|
|
89
94
|
1. **Broaden your search**: Try fewer or more general terms
|
|
90
95
|
- Instead of: `{query}`
|
|
91
96
|
- Try: `{simplified_query}`
|
|
92
97
|
|
|
93
|
-
2. **Check spelling
|
|
94
|
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
2. **Check spelling and try variations**:
|
|
99
|
+
- Verify terms are spelled correctly
|
|
100
|
+
- Try synonyms or related terms
|
|
101
|
+
|
|
102
|
+
3. **Use different search approaches**:
|
|
103
|
+
- **Text search**: `search_notes("{query}", search_type="text")` (searches full content)
|
|
104
|
+
- **Title search**: `search_notes("{query}", search_type="title")` (searches only titles)
|
|
105
|
+
- **Permalink search**: `search_notes("{query}", search_type="permalink")` (searches file paths)
|
|
106
|
+
|
|
107
|
+
4. **Try boolean operators for broader results**:
|
|
108
|
+
- OR search: `search_notes("{" OR ".join(query.split()[:3])}")`
|
|
109
|
+
- Remove restrictive terms: Focus on the most important keywords
|
|
110
|
+
|
|
111
|
+
5. **Use filtering to narrow scope**:
|
|
112
|
+
- By content type: `search_notes("{query}", types=["entity"])`
|
|
113
|
+
- By recent content: `search_notes("{query}", after_date="1 week")`
|
|
114
|
+
- By entity type: `search_notes("{query}", entity_types=["observation"])`
|
|
115
|
+
|
|
116
|
+
6. **Try advanced search patterns**:
|
|
117
|
+
- Tag search: `search_notes("tag:your-tag")`
|
|
118
|
+
- Category search: `search_notes("category:observation")`
|
|
119
|
+
- Pattern matching: `search_notes("*{query}*", search_type="permalink")`
|
|
120
|
+
|
|
121
|
+
## Explore what content exists:
|
|
122
|
+
- **Recent activity**: `recent_activity(timeframe="7d")` - See what's been updated recently
|
|
123
|
+
- **List directories**: `list_directory("/")` - Browse all content
|
|
124
|
+
- **Browse by folder**: `list_directory("/notes")` or `list_directory("/docs")`
|
|
125
|
+
- **Check project**: `get_current_project()` - Verify you're in the right project
|
|
106
126
|
""").strip()
|
|
107
127
|
|
|
108
128
|
# Server/API errors
|
|
@@ -151,25 +171,36 @@ You don't have permission to search in the current project: {error_message}
|
|
|
151
171
|
|
|
152
172
|
Error searching for '{query}': {error_message}
|
|
153
173
|
|
|
154
|
-
##
|
|
155
|
-
1. **
|
|
156
|
-
2. **
|
|
174
|
+
## Troubleshooting steps:
|
|
175
|
+
1. **Simplify your query**: Try basic words without special characters
|
|
176
|
+
2. **Check search syntax**: Ensure boolean operators are correctly formatted
|
|
157
177
|
3. **Verify project access**: Make sure you can access the current project
|
|
158
|
-
4. **
|
|
159
|
-
|
|
160
|
-
## Alternative approaches:
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
|
|
178
|
+
4. **Test with simple search**: Try `search_notes("test")` to verify search is working
|
|
179
|
+
|
|
180
|
+
## Alternative search approaches:
|
|
181
|
+
- **Different search types**:
|
|
182
|
+
- Title only: `search_notes("{query}", search_type="title")`
|
|
183
|
+
- Permalink patterns: `search_notes("{query}*", search_type="permalink")`
|
|
184
|
+
- **With filters**: `search_notes("{query}", types=["entity"])`
|
|
185
|
+
- **Recent content**: `search_notes("{query}", after_date="1 week")`
|
|
186
|
+
- **Boolean variations**: `search_notes("{" OR ".join(query.split()[:2])}")`
|
|
187
|
+
|
|
188
|
+
## Explore your content:
|
|
189
|
+
- **Browse files**: `list_directory("/")` - See all available content
|
|
190
|
+
- **Recent activity**: `recent_activity(timeframe="7d")` - Check what's been updated
|
|
191
|
+
- **Project info**: `get_current_project()` - Verify current project
|
|
192
|
+
- **All projects**: `list_projects()` - Switch to different project if needed
|
|
193
|
+
|
|
194
|
+
## Search syntax reference:
|
|
195
|
+
- **Basic**: `keyword` or `multiple words`
|
|
196
|
+
- **Boolean**: `term1 AND term2`, `term1 OR term2`, `term1 NOT term2`
|
|
197
|
+
- **Phrases**: `"exact phrase"`
|
|
198
|
+
- **Grouping**: `(term1 OR term2) AND term3`
|
|
199
|
+
- **Patterns**: `tag:example`, `category:observation`"""
|
|
169
200
|
|
|
170
201
|
|
|
171
202
|
@mcp.tool(
|
|
172
|
-
description="Search across all content in the knowledge base.",
|
|
203
|
+
description="Search across all content in the knowledge base with advanced syntax support.",
|
|
173
204
|
)
|
|
174
205
|
async def search_notes(
|
|
175
206
|
query: str,
|
|
@@ -181,24 +212,60 @@ async def search_notes(
|
|
|
181
212
|
after_date: Optional[str] = None,
|
|
182
213
|
project: Optional[str] = None,
|
|
183
214
|
) -> SearchResponse | str:
|
|
184
|
-
"""Search across all content in the knowledge base.
|
|
215
|
+
"""Search across all content in the knowledge base with comprehensive syntax support.
|
|
185
216
|
|
|
186
217
|
This tool searches the knowledge base using full-text search, pattern matching,
|
|
187
218
|
or exact permalink lookup. It supports filtering by content type, entity type,
|
|
188
|
-
and date.
|
|
219
|
+
and date, with advanced boolean and phrase search capabilities.
|
|
220
|
+
|
|
221
|
+
## Search Syntax Examples
|
|
222
|
+
|
|
223
|
+
### Basic Searches
|
|
224
|
+
- `search_notes("keyword")` - Find any content containing "keyword"
|
|
225
|
+
- `search_notes("exact phrase")` - Search for exact phrase match
|
|
226
|
+
|
|
227
|
+
### Advanced Boolean Searches
|
|
228
|
+
- `search_notes("term1 term2")` - Find content with both terms (implicit AND)
|
|
229
|
+
- `search_notes("term1 AND term2")` - Explicit AND search (both terms required)
|
|
230
|
+
- `search_notes("term1 OR term2")` - Either term can be present
|
|
231
|
+
- `search_notes("term1 NOT term2")` - Include term1 but exclude term2
|
|
232
|
+
- `search_notes("(project OR planning) AND notes")` - Grouped boolean logic
|
|
233
|
+
|
|
234
|
+
### Content-Specific Searches
|
|
235
|
+
- `search_notes("tag:example")` - Search within specific tags (if supported by content)
|
|
236
|
+
- `search_notes("category:observation")` - Filter by observation categories
|
|
237
|
+
- `search_notes("author:username")` - Find content by author (if metadata available)
|
|
238
|
+
|
|
239
|
+
### Search Type Examples
|
|
240
|
+
- `search_notes("Meeting", search_type="title")` - Search only in titles
|
|
241
|
+
- `search_notes("docs/meeting-*", search_type="permalink")` - Pattern match permalinks
|
|
242
|
+
- `search_notes("keyword", search_type="text")` - Full-text search (default)
|
|
243
|
+
|
|
244
|
+
### Filtering Options
|
|
245
|
+
- `search_notes("query", types=["entity"])` - Search only entities
|
|
246
|
+
- `search_notes("query", types=["note", "person"])` - Multiple content types
|
|
247
|
+
- `search_notes("query", entity_types=["observation"])` - Filter by entity type
|
|
248
|
+
- `search_notes("query", after_date="2024-01-01")` - Recent content only
|
|
249
|
+
- `search_notes("query", after_date="1 week")` - Relative date filtering
|
|
250
|
+
|
|
251
|
+
### Advanced Pattern Examples
|
|
252
|
+
- `search_notes("project AND (meeting OR discussion)")` - Complex boolean logic
|
|
253
|
+
- `search_notes("\"exact phrase\" AND keyword")` - Combine phrase and keyword search
|
|
254
|
+
- `search_notes("bug NOT fixed")` - Exclude resolved issues
|
|
255
|
+
- `search_notes("docs/2024-*", search_type="permalink")` - Year-based permalink search
|
|
189
256
|
|
|
190
257
|
Args:
|
|
191
|
-
query: The search query string
|
|
258
|
+
query: The search query string (supports boolean operators, phrases, patterns)
|
|
192
259
|
page: The page number of results to return (default 1)
|
|
193
260
|
page_size: The number of results to return per page (default 10)
|
|
194
261
|
search_type: Type of search to perform, one of: "text", "title", "permalink" (default: "text")
|
|
195
262
|
types: Optional list of note types to search (e.g., ["note", "person"])
|
|
196
263
|
entity_types: Optional list of entity types to filter by (e.g., ["entity", "observation"])
|
|
197
|
-
after_date: Optional date filter for recent content (e.g., "1 week", "2d")
|
|
264
|
+
after_date: Optional date filter for recent content (e.g., "1 week", "2d", "2024-01-01")
|
|
198
265
|
project: Optional project name to search in. If not provided, uses current active project.
|
|
199
266
|
|
|
200
267
|
Returns:
|
|
201
|
-
SearchResponse with results and pagination info
|
|
268
|
+
SearchResponse with results and pagination info, or helpful error guidance if search fails
|
|
202
269
|
|
|
203
270
|
Examples:
|
|
204
271
|
# Basic text search
|
|
@@ -216,16 +283,19 @@ async def search_notes(
|
|
|
216
283
|
# Boolean search with grouping
|
|
217
284
|
results = await search_notes("(project OR planning) AND notes")
|
|
218
285
|
|
|
286
|
+
# Exact phrase search
|
|
287
|
+
results = await search_notes("\"weekly standup meeting\"")
|
|
288
|
+
|
|
219
289
|
# Search with type filter
|
|
220
290
|
results = await search_notes(
|
|
221
291
|
query="meeting notes",
|
|
222
292
|
types=["entity"],
|
|
223
293
|
)
|
|
224
294
|
|
|
225
|
-
# Search with entity type filter
|
|
295
|
+
# Search with entity type filter
|
|
226
296
|
results = await search_notes(
|
|
227
297
|
query="meeting notes",
|
|
228
|
-
|
|
298
|
+
entity_types=["observation"],
|
|
229
299
|
)
|
|
230
300
|
|
|
231
301
|
# Search for recent content
|
|
@@ -242,6 +312,13 @@ async def search_notes(
|
|
|
242
312
|
|
|
243
313
|
# Search in specific project
|
|
244
314
|
results = await search_notes("meeting notes", project="work-project")
|
|
315
|
+
|
|
316
|
+
# Complex search with multiple filters
|
|
317
|
+
results = await search_notes(
|
|
318
|
+
query="(bug OR issue) AND NOT resolved",
|
|
319
|
+
types=["entity"],
|
|
320
|
+
after_date="2024-01-01"
|
|
321
|
+
)
|
|
245
322
|
"""
|
|
246
323
|
# Create a SearchQuery object based on the parameters
|
|
247
324
|
search_query = SearchQuery()
|
|
@@ -93,7 +93,7 @@ class TestMCPServer:
|
|
|
93
93
|
# Missing SUPABASE_ANON_KEY
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
with patch.dict(os.environ, env_vars):
|
|
96
|
+
with patch.dict(os.environ, env_vars, clear=True):
|
|
97
97
|
with pytest.raises(ValueError, match="SUPABASE_URL and SUPABASE_ANON_KEY must be set"):
|
|
98
98
|
create_auth_config()
|
|
99
99
|
|