basic-memory 0.17.0__tar.gz → 0.17.2__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.0 → basic_memory-0.17.2}/CHANGELOG.md +24 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/PKG-INFO +1 -1
- {basic_memory-0.17.0 → basic_memory-0.17.2}/justfile +3 -2
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/__init__.py +1 -1
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/env.py +6 -2
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/project_context.py +16 -4
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/recent_activity.py +2 -1
- basic_memory-0.17.2/tests/mcp/test_project_context.py +144 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/beta.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/changelog.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/release-check.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/release/release.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/spec.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/commands/test-live.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.claude/settings.json +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.dockerignore +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.env.example +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/dependabot.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/claude-code-review.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/claude-issue-triage.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/claude.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/dev-release.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/docker.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/release.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.github/workflows/test.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.gitignore +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/.python-version +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/CITATION.cff +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/CLA.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/CLAUDE.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/CONTRIBUTING.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/Dockerfile +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/LICENSE +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/README.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/SECURITY.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/docker-compose-postgres.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/docker-compose.yml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/Docker.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/ai-assistant-guide-extended.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/character-handling.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/docs/cloud-cli.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/llms-install.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/pyproject.toml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/smithery.yaml +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-1 Specification-Driven Development Process.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-10 Unified Deployment Workflow and Event Tracking.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-11 Basic Memory API Performance Optimization.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-12 OpenTelemetry Observability.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-13 CLI Authentication with Subscription Validation.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-15 Configuration Persistence via Tigris for Cloud Tenants.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-16 MCP Cloud Service Consolidation.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-17 Semantic Search with ChromaDB.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-18 AI Memory Management Tool.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-19 Sync Performance and Memory Optimization.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-2 Slash Commands Reference.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-3 Agent Definitions.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-4 Notes Web UI Component Architecture.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-5 CLI Cloud Upload via WebDAV.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-6 Explicit Project Parameter Architecture.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-7 POC to spike Tigris Turso for local access to cloud data.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-8 TigrisFS Integration.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9 Multi-Project Bidirectional Sync Architecture.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9 Signed Header Tenant Information.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9-1 Follow-Ups- Conflict, Sync, and Observability.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/app.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/directory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/importer_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/knowledge_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/management_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/memory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/project_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/prompt_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/resource_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/search_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/template_loader.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/importer_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/knowledge_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/memory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/project_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/prompt_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/search_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/app.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/auth.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_commands.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/command_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/db.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/format.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/mcp.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/project.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/status.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/telemetry.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/tool.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/main.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/config.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/db.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/deps.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/file_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/ignore_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/base.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/chatgpt_importer.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/claude_projects_importer.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/memory_json_importer.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/importers/utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/entity_parser.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/markdown_processor.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/plugins.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/markdown/utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/async_client.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/search.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/prompts/utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/resources/project_info.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/server.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/build_context.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/canvas.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/delete_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/edit_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/list_directory.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/move_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/project_management.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/read_content.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/read_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/search.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/view_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/mcp/tools/write_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/knowledge.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/project.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/models/search.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/entity_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/observation_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/postgres_search_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/project_info_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/project_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/relation_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/search_index_row.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/search_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/search_repository_base.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/repository/sqlite_search_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/base.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/cloud.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/directory.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/importer.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/memory.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/project_info.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/prompt.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/request.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/response.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/search.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/sync_report.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/v2/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/v2/entity.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/schemas/v2/resource.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/context_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/directory_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/entity_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/exceptions.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/file_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/initialization.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/link_resolver.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/project_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/search_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/background_sync.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/sync_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/sync/watch_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/telemetry.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/templates/prompts/search.hbs +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/BENCHMARKS.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/cli/test_project_commands_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/cli/test_version_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/conftest.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_build_context_underscore.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_build_context_validation.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_default_project_mode_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_delete_note_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_edit_note_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_list_directory_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_move_note_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_project_management_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_project_state_sync_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_read_content_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_read_note_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_search_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/mcp/test_write_note_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/test_db_wal_mode.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/test-int/test_disable_permalinks_integration.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/README.md +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/Screenshot.png +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/conftest.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_async_client.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_continue_conversation_template.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_directory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_importer_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_knowledge_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_management_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_memory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_project_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_project_router_operations.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_prompt_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_relation_background_resolution.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_resource_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_search_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_search_template.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_template_loader.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/test_template_loader_helpers.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/conftest.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_directory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_importer_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_knowledge_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_memory_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_project_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_prompt_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_resource_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/api/v2/test_search_router.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/conftest.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cli_exit.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cli_tool_exit.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cli_tools.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_cloud_authentication.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_ignore_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_chatgpt.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_claude_conversations.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_claude_projects.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_import_memory_json.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_project_add_with_local_path.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/cli/test_upload.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/conftest.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/importers/test_conversation_indexing.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/importers/test_importer_base.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/importers/test_importer_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_entity_parser.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_entity_parser_error_handling.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_markdown_plugins.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/conftest.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_prompts.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_build_context.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_canvas.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_delete_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_edit_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_list_directory.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_move_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_read_content.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_read_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_recent_activity.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_resource.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_search.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_view_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_write_note.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/test_tool_write_note_kebab_filenames.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_entity_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_entity_repository_upsert.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_entity_upsert_issue_187.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_observation_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_project_info_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_project_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_relation_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_search_repository.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_base_timeframe_minimum.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_memory_serialization.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_memory_url_validation.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_schemas.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_context_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_directory_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_entity_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_entity_service_disable_permalinks.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_file_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_initialization.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_link_resolver.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_project_removal_bug.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_project_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_project_service_operations.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/services/test_search_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_character_conflicts.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_sync_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_sync_service_incremental.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_sync_wikilink_issue.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_tmp_files.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_watch_service.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_watch_service_edge_cases.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/sync/test_watch_service_reload.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_config.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_deps.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_production_cascade_delete.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_rclone_commands.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/test_telemetry.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_file_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_parse_tags.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_permalink_formatting.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_timezone_utils.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_utf8_handling.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/tests/utils/test_validate_project_path.py +0 -0
- {basic_memory-0.17.0 → basic_memory-0.17.2}/uv.lock +0 -0
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v0.17.2 (2025-12-29)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- Allow recent_activity discovery mode in cloud mode
|
|
8
|
+
([`0bcda4a`](https://github.com/basicmachines-co/basic-memory/commit/0bcda4a))
|
|
9
|
+
- Add `allow_discovery` parameter to `resolve_project_parameter()`
|
|
10
|
+
- Tools like `recent_activity` can now work across all projects in cloud mode
|
|
11
|
+
- Fix circular import in project_context module
|
|
12
|
+
|
|
13
|
+
### Internal
|
|
14
|
+
|
|
15
|
+
- Optimize release workflow by running lint/typecheck only (skip full tests)
|
|
16
|
+
([`0b5425f`](https://github.com/basicmachines-co/basic-memory/commit/0b5425f))
|
|
17
|
+
|
|
18
|
+
## v0.17.1 (2025-12-29)
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
- **#482**: Only set BASIC_MEMORY_ENV=test during pytest runs
|
|
23
|
+
([`98fbd60`](https://github.com/basicmachines-co/basic-memory/commit/98fbd60))
|
|
24
|
+
- Fixes environment variable pollution affecting alembic migrations
|
|
25
|
+
- Test environment detection now scoped to pytest execution only
|
|
26
|
+
|
|
3
27
|
## v0.17.0 (2025-12-28)
|
|
4
28
|
|
|
5
29
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.2
|
|
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
|
|
@@ -182,8 +182,9 @@ release version:
|
|
|
182
182
|
fi
|
|
183
183
|
|
|
184
184
|
# Run quality checks
|
|
185
|
-
echo "🔍 Running
|
|
186
|
-
just
|
|
185
|
+
echo "🔍 Running lint checks..."
|
|
186
|
+
just lint
|
|
187
|
+
just typecheck
|
|
187
188
|
|
|
188
189
|
# Update version in __init__.py
|
|
189
190
|
echo "📝 Updating version in __init__.py..."
|
|
@@ -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.17.
|
|
4
|
+
__version__ = "0.17.2"
|
|
5
5
|
|
|
6
6
|
# API version for FastAPI - independent of package version
|
|
7
7
|
__api_version__ = "v0"
|
|
@@ -21,8 +21,12 @@ from alembic import context
|
|
|
21
21
|
|
|
22
22
|
from basic_memory.config import ConfigManager
|
|
23
23
|
|
|
24
|
-
#
|
|
25
|
-
|
|
24
|
+
# Trigger: only set test env when actually running under pytest
|
|
25
|
+
# Why: alembic/env.py is imported during normal operations (MCP server startup, migrations)
|
|
26
|
+
# but we only want test behavior during actual test runs
|
|
27
|
+
# Outcome: prevents is_test_env from returning True in production, enabling watch service
|
|
28
|
+
if os.getenv("PYTEST_CURRENT_TEST") is not None:
|
|
29
|
+
os.environ["BASIC_MEMORY_ENV"] = "test"
|
|
26
30
|
|
|
27
31
|
# Import after setting environment variable # noqa: E402
|
|
28
32
|
from basic_memory.models import Base # noqa: E402
|
|
@@ -14,16 +14,17 @@ from loguru import logger
|
|
|
14
14
|
from fastmcp import Context
|
|
15
15
|
|
|
16
16
|
from basic_memory.config import ConfigManager
|
|
17
|
-
from basic_memory.mcp.tools.utils import call_get
|
|
18
17
|
from basic_memory.schemas.project_info import ProjectItem, ProjectList
|
|
19
18
|
from basic_memory.utils import generate_permalink
|
|
20
19
|
|
|
21
20
|
|
|
22
|
-
async def resolve_project_parameter(
|
|
21
|
+
async def resolve_project_parameter(
|
|
22
|
+
project: Optional[str] = None, allow_discovery: bool = False
|
|
23
|
+
) -> Optional[str]:
|
|
23
24
|
"""Resolve project parameter using three-tier hierarchy.
|
|
24
25
|
|
|
25
26
|
if config.cloud_mode:
|
|
26
|
-
project is required
|
|
27
|
+
project is required (unless allow_discovery=True for tools that support discovery mode)
|
|
27
28
|
else:
|
|
28
29
|
Resolution order:
|
|
29
30
|
1. Single Project Mode (--project cli arg, or BASIC_MEMORY_MCP_PROJECT env var) - highest priority
|
|
@@ -32,17 +33,22 @@ async def resolve_project_parameter(project: Optional[str] = None) -> Optional[s
|
|
|
32
33
|
|
|
33
34
|
Args:
|
|
34
35
|
project: Optional explicit project parameter
|
|
36
|
+
allow_discovery: If True, allows returning None in cloud mode for discovery mode
|
|
37
|
+
(used by tools like recent_activity that can operate across all projects)
|
|
35
38
|
|
|
36
39
|
Returns:
|
|
37
40
|
Resolved project name or None if no resolution possible
|
|
38
41
|
"""
|
|
39
42
|
|
|
40
43
|
config = ConfigManager().config
|
|
41
|
-
# if cloud_mode, project is required
|
|
44
|
+
# if cloud_mode, project is required (unless discovery mode is allowed)
|
|
42
45
|
if config.cloud_mode:
|
|
43
46
|
if project:
|
|
44
47
|
logger.debug(f"project: {project}, cloud_mode: {config.cloud_mode}")
|
|
45
48
|
return project
|
|
49
|
+
elif allow_discovery:
|
|
50
|
+
logger.debug("cloud_mode: discovery mode allowed, returning None")
|
|
51
|
+
return None
|
|
46
52
|
else:
|
|
47
53
|
raise ValueError("No project specified. Project is required for cloud mode.")
|
|
48
54
|
|
|
@@ -67,6 +73,9 @@ async def resolve_project_parameter(project: Optional[str] = None) -> Optional[s
|
|
|
67
73
|
|
|
68
74
|
|
|
69
75
|
async def get_project_names(client: AsyncClient, headers: HeaderTypes | None = None) -> List[str]:
|
|
76
|
+
# Deferred import to avoid circular dependency with tools
|
|
77
|
+
from basic_memory.mcp.tools.utils import call_get
|
|
78
|
+
|
|
70
79
|
response = await call_get(client, "/projects/projects", headers=headers)
|
|
71
80
|
project_list = ProjectList.model_validate(response.json())
|
|
72
81
|
return [project.name for project in project_list.projects]
|
|
@@ -92,6 +101,9 @@ async def get_active_project(
|
|
|
92
101
|
ValueError: If no project can be resolved
|
|
93
102
|
HTTPError: If project doesn't exist or is inaccessible
|
|
94
103
|
"""
|
|
104
|
+
# Deferred import to avoid circular dependency with tools
|
|
105
|
+
from basic_memory.mcp.tools.utils import call_get
|
|
106
|
+
|
|
95
107
|
resolved_project = await resolve_project_parameter(project)
|
|
96
108
|
if not resolved_project:
|
|
97
109
|
project_names = await get_project_names(client, headers)
|
|
@@ -135,7 +135,8 @@ async def recent_activity(
|
|
|
135
135
|
params["type"] = [t.value for t in validated_types] # pyright: ignore
|
|
136
136
|
|
|
137
137
|
# Resolve project parameter using the three-tier hierarchy
|
|
138
|
-
|
|
138
|
+
# allow_discovery=True enables Discovery Mode, so a project is not required
|
|
139
|
+
resolved_project = await resolve_project_parameter(project, allow_discovery=True)
|
|
139
140
|
|
|
140
141
|
if resolved_project is None:
|
|
141
142
|
# Discovery Mode: Get activity across all projects
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""Tests for project context utilities."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from unittest.mock import patch, MagicMock
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TestResolveProjectParameter:
|
|
10
|
+
"""Tests for resolve_project_parameter function."""
|
|
11
|
+
|
|
12
|
+
@pytest.mark.asyncio
|
|
13
|
+
async def test_cloud_mode_requires_project_by_default(self):
|
|
14
|
+
"""In cloud mode, project is required when allow_discovery=False."""
|
|
15
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
16
|
+
|
|
17
|
+
mock_config = MagicMock()
|
|
18
|
+
mock_config.cloud_mode = True
|
|
19
|
+
|
|
20
|
+
with patch(
|
|
21
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
22
|
+
) as mock_config_manager:
|
|
23
|
+
mock_config_manager.return_value.config = mock_config
|
|
24
|
+
|
|
25
|
+
with pytest.raises(ValueError) as exc_info:
|
|
26
|
+
await resolve_project_parameter(project=None, allow_discovery=False)
|
|
27
|
+
|
|
28
|
+
assert "No project specified" in str(exc_info.value)
|
|
29
|
+
assert "Project is required for cloud mode" in str(exc_info.value)
|
|
30
|
+
|
|
31
|
+
@pytest.mark.asyncio
|
|
32
|
+
async def test_cloud_mode_allows_discovery_when_enabled(self):
|
|
33
|
+
"""In cloud mode with allow_discovery=True, returns None instead of error."""
|
|
34
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
35
|
+
|
|
36
|
+
mock_config = MagicMock()
|
|
37
|
+
mock_config.cloud_mode = True
|
|
38
|
+
|
|
39
|
+
with patch(
|
|
40
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
41
|
+
) as mock_config_manager:
|
|
42
|
+
mock_config_manager.return_value.config = mock_config
|
|
43
|
+
|
|
44
|
+
result = await resolve_project_parameter(project=None, allow_discovery=True)
|
|
45
|
+
|
|
46
|
+
assert result is None
|
|
47
|
+
|
|
48
|
+
@pytest.mark.asyncio
|
|
49
|
+
async def test_cloud_mode_returns_project_when_specified(self):
|
|
50
|
+
"""In cloud mode, returns the specified project."""
|
|
51
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
52
|
+
|
|
53
|
+
mock_config = MagicMock()
|
|
54
|
+
mock_config.cloud_mode = True
|
|
55
|
+
|
|
56
|
+
with patch(
|
|
57
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
58
|
+
) as mock_config_manager:
|
|
59
|
+
mock_config_manager.return_value.config = mock_config
|
|
60
|
+
|
|
61
|
+
result = await resolve_project_parameter(project="my-project")
|
|
62
|
+
|
|
63
|
+
assert result == "my-project"
|
|
64
|
+
|
|
65
|
+
@pytest.mark.asyncio
|
|
66
|
+
async def test_local_mode_uses_env_var_priority(self):
|
|
67
|
+
"""In local mode, BASIC_MEMORY_MCP_PROJECT env var takes priority."""
|
|
68
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
69
|
+
|
|
70
|
+
mock_config = MagicMock()
|
|
71
|
+
mock_config.cloud_mode = False
|
|
72
|
+
|
|
73
|
+
with patch(
|
|
74
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
75
|
+
) as mock_config_manager:
|
|
76
|
+
mock_config_manager.return_value.config = mock_config
|
|
77
|
+
|
|
78
|
+
with patch.dict(os.environ, {"BASIC_MEMORY_MCP_PROJECT": "env-project"}):
|
|
79
|
+
result = await resolve_project_parameter(project="explicit-project")
|
|
80
|
+
|
|
81
|
+
# Env var should take priority over explicit project
|
|
82
|
+
assert result == "env-project"
|
|
83
|
+
|
|
84
|
+
@pytest.mark.asyncio
|
|
85
|
+
async def test_local_mode_uses_explicit_project(self):
|
|
86
|
+
"""In local mode without env var, uses explicit project parameter."""
|
|
87
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
88
|
+
|
|
89
|
+
mock_config = MagicMock()
|
|
90
|
+
mock_config.cloud_mode = False
|
|
91
|
+
mock_config.default_project_mode = False
|
|
92
|
+
|
|
93
|
+
with patch(
|
|
94
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
95
|
+
) as mock_config_manager:
|
|
96
|
+
mock_config_manager.return_value.config = mock_config
|
|
97
|
+
|
|
98
|
+
with patch.dict(os.environ, {}, clear=True):
|
|
99
|
+
# Remove the env var if it exists
|
|
100
|
+
os.environ.pop("BASIC_MEMORY_MCP_PROJECT", None)
|
|
101
|
+
result = await resolve_project_parameter(project="explicit-project")
|
|
102
|
+
|
|
103
|
+
assert result == "explicit-project"
|
|
104
|
+
|
|
105
|
+
@pytest.mark.asyncio
|
|
106
|
+
async def test_local_mode_uses_default_project(self):
|
|
107
|
+
"""In local mode with default_project_mode, uses default project."""
|
|
108
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
109
|
+
|
|
110
|
+
mock_config = MagicMock()
|
|
111
|
+
mock_config.cloud_mode = False
|
|
112
|
+
mock_config.default_project_mode = True
|
|
113
|
+
mock_config.default_project = "default-project"
|
|
114
|
+
|
|
115
|
+
with patch(
|
|
116
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
117
|
+
) as mock_config_manager:
|
|
118
|
+
mock_config_manager.return_value.config = mock_config
|
|
119
|
+
|
|
120
|
+
with patch.dict(os.environ, {}, clear=True):
|
|
121
|
+
os.environ.pop("BASIC_MEMORY_MCP_PROJECT", None)
|
|
122
|
+
result = await resolve_project_parameter(project=None)
|
|
123
|
+
|
|
124
|
+
assert result == "default-project"
|
|
125
|
+
|
|
126
|
+
@pytest.mark.asyncio
|
|
127
|
+
async def test_local_mode_returns_none_when_no_resolution(self):
|
|
128
|
+
"""In local mode without any project source, returns None."""
|
|
129
|
+
from basic_memory.mcp.project_context import resolve_project_parameter
|
|
130
|
+
|
|
131
|
+
mock_config = MagicMock()
|
|
132
|
+
mock_config.cloud_mode = False
|
|
133
|
+
mock_config.default_project_mode = False
|
|
134
|
+
|
|
135
|
+
with patch(
|
|
136
|
+
"basic_memory.mcp.project_context.ConfigManager"
|
|
137
|
+
) as mock_config_manager:
|
|
138
|
+
mock_config_manager.return_value.config = mock_config
|
|
139
|
+
|
|
140
|
+
with patch.dict(os.environ, {}, clear=True):
|
|
141
|
+
os.environ.pop("BASIC_MEMORY_MCP_PROJECT", None)
|
|
142
|
+
result = await resolve_project_parameter(project=None)
|
|
143
|
+
|
|
144
|
+
assert result is None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-1 Specification-Driven Development Process.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md
RENAMED
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-16 MCP Cloud Service Consolidation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md
RENAMED
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-4 Notes Web UI Component Architecture.md
RENAMED
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-6 Explicit Project Parameter Architecture.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/specs/SPEC-9 Signed Header Tenant Information.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/directory_router.py
RENAMED
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/knowledge_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/routers/management_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/directory_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/importer_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/knowledge_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/memory_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/project_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/prompt_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/resource_router.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/api/v2/routers/search_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/api_client.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/bisync_commands.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/cloud_utils.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/core_commands.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_commands.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_config.py
RENAMED
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/rclone_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
{basic_memory-0.17.0 → basic_memory-0.17.2}/src/basic_memory/cli/commands/cloud/upload_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|