basic-memory 0.18.4__tar.gz → 0.18.5__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.18.4 → basic_memory-0.18.5}/PKG-INFO +1 -1
- {basic_memory-0.18.4 → basic_memory-0.18.5}/server.json +2 -2
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/__init__.py +1 -1
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/rclone_commands.py +6 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/postgres_search_repository.py +10 -1
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/search_service.py +16 -7
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_postgres_search_repository.py +23 -1
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_search_service.py +57 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/test_rclone_commands.py +42 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/commands/release/beta.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/commands/release/changelog.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/commands/release/release-check.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/commands/release/release.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/commands/spec.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/commands/test-live.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.claude/settings.json +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.dockerignore +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.env.example +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/dependabot.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/claude-code-review.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/claude-issue-triage.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/claude.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/dev-release.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/docker.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/release.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.github/workflows/test.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.gitignore +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/.python-version +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/AGENTS.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/CHANGELOG.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/CITATION.cff +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/CLA.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/CLAUDE.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/CONTRIBUTING.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/Dockerfile +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/LICENSE +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/README.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/SECURITY.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docker-compose-postgres.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docker-compose.yml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/ARCHITECTURE.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/Docker.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/NOTE-FORMAT.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/ai-assistant-guide-extended.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/character-handling.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/cloud-cli.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/docs/testing-coverage.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/justfile +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/llms-install.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/pyproject.toml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/smithery.yaml +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/env.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/6830751f5fb6_merge_multiple_heads.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/d7e8f9a0b1c2_add_structured_metadata_indexes.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/alembic/versions/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/app.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/container.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/template_loader.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/directory_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/importer_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/knowledge_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/memory_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/project_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/prompt_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/resource_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/search_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/app.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/auth.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/rclone_installer.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/restore.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/schemas.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/snapshot.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/command_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/db.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/doctor.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/format.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/mcp.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/project.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/routing.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/status.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/tool.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/container.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/main.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/config.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/db.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/config.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/db.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/importers.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/projects.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/repositories.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps/services.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/deps.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/file_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/ignore_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/base.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/chatgpt_importer.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/claude_projects_importer.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/memory_json_importer.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/importers/utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/markdown/entity_parser.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/markdown/markdown_processor.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/markdown/plugins.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/markdown/utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/async_client.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/directory.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/knowledge.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/memory.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/project.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/resource.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/clients/search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/container.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/project_context.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/prompts/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/prompts/search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/prompts/utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/resources/project_info.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/server.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/build_context.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/canvas.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/delete_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/edit_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/list_directory.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/move_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/project_management.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/read_content.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/read_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/view_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/mcp/tools/write_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/models/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/models/knowledge.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/models/project.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/models/search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/project_resolver.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/entity_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/metadata_filters.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/observation_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/project_info_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/project_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/relation_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/search_index_row.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/search_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/search_repository_base.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/repository/sqlite_search_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/runtime.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/base.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/cloud.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/directory.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/importer.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/memory.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/project_info.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/prompt.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/request.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/response.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/sync_report.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/v2/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/v2/entity.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/schemas/v2/resource.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/context_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/directory_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/entity_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/exceptions.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/file_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/initialization.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/link_resolver.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/project_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/sync/background_sync.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/sync/coordinator.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/sync/sync_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/sync/watch_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/templates/prompts/search.hbs +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/BENCHMARKS.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/cli/test_cli_tool_json_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/cli/test_project_commands_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/cli/test_routing_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/cli/test_version_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/conftest.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_build_context_underscore.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_build_context_validation.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_default_project_mode_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_delete_directory_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_delete_note_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_edit_note_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_list_directory_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_move_directory_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_move_note_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_project_management_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_project_state_sync_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_read_content_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_read_note_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_search_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_smoke_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/mcp/test_write_note_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/test_db_wal_mode.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/test-int/test_disable_permalinks_integration.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/README.md +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/Screenshot.png +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/conftest.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_directory_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_importer_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_knowledge_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_memory_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_project_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_prompt_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_resource_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/api/v2/test_search_router.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/cloud/test_cloud_api_client_and_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/cloud/test_rclone_config_and_bmignore_filters.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/cloud/test_upload_path.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/conftest.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_auth_cli_auth.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_cli_container.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_cli_exit.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_cli_tool_exit.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_cli_tool_json_output.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_cli_tools.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_cloud_authentication.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_ignore_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_import_chatgpt.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_import_claude_conversations.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_import_claude_projects.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_import_memory_json.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_project_add_with_local_path.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_restore_commands.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_routing.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_snapshot_commands.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/cli/test_upload.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/conftest.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/importers/test_conversation_indexing.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/importers/test_importer_base.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/importers/test_importer_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_entity_parser.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_entity_parser_error_handling.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_markdown_plugins.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_markdown_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/clients/__init__.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/clients/test_clients.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/conftest.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_async_client_force_local.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_async_client_modes.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_mcp_container.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_project_context.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_prompts.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_recent_activity_prompt_modes.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_server_lifespan_branches.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_build_context.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_canvas.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_contracts.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_delete_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_edit_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_list_directory.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_move_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_project_management.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_read_content.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_read_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_recent_activity.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_resource.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_view_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_write_note.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/test_tool_write_note_kebab_filenames.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_entity_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_entity_repository_upsert.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_entity_upsert_issue_187.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_metadata_filters.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_observation_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_project_info_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_project_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_relation_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_search_repository.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_search_repository_edit_bug_fix.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_base_timeframe_minimum.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_memory_serialization.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_memory_url_validation.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_relation_response_reference_resolution.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_schemas.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_context_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_directory_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_entity_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_entity_service_disable_permalinks.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_file_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_initialization.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_initialization_cloud_mode_branches.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_link_resolver.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_project_removal_bug.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_project_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/services/test_project_service_operations.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_character_conflicts.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_coordinator.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_sync_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_sync_service_incremental.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_sync_wikilink_issue.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_tmp_files.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_watch_service.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_watch_service_atomic_adds.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_watch_service_edge_cases.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/sync/test_watch_service_reload.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/test_config.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/test_deps.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/test_production_cascade_delete.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/test_project_resolver.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/test_runtime.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_file_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_parse_tags.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_permalink_formatting.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_timezone_utils.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_utf8_handling.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/tests/utils/test_validate_project_path.py +0 -0
- {basic_memory-0.18.4 → basic_memory-0.18.5}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.5
|
|
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
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/basicmachines-co/basic-memory.git",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.18.
|
|
9
|
+
"version": "0.18.5",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "pypi",
|
|
13
13
|
"identifier": "basic-memory",
|
|
14
|
-
"version": "0.18.
|
|
14
|
+
"version": "0.18.5",
|
|
15
15
|
"runtimeHint": "uvx",
|
|
16
16
|
"runtimeArguments": [
|
|
17
17
|
{"type": "positional", "value": "basic-memory"},
|
|
@@ -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.18.
|
|
4
|
+
__version__ = "0.18.5"
|
|
5
5
|
|
|
6
6
|
# API version for FastAPI - independent of package version
|
|
7
7
|
__api_version__ = "v0"
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/rclone_commands.py
RENAMED
|
@@ -223,6 +223,9 @@ def project_sync(
|
|
|
223
223
|
*TIGRIS_CONSISTENCY_HEADERS,
|
|
224
224
|
"--filter-from",
|
|
225
225
|
str(filter_path),
|
|
226
|
+
# Prevent NUL byte padding on virtual filesystems (e.g. Google Drive File Stream)
|
|
227
|
+
# See: rclone/rclone#6801
|
|
228
|
+
"--local-no-preallocate",
|
|
226
229
|
]
|
|
227
230
|
|
|
228
231
|
if verbose:
|
|
@@ -299,6 +302,9 @@ def project_bisync(
|
|
|
299
302
|
str(filter_path),
|
|
300
303
|
"--workdir",
|
|
301
304
|
str(state_path),
|
|
305
|
+
# Prevent NUL byte padding on virtual filesystems (e.g. Google Drive File Stream)
|
|
306
|
+
# See: rclone/rclone#6801
|
|
307
|
+
"--local-no-preallocate",
|
|
302
308
|
]
|
|
303
309
|
|
|
304
310
|
# Add --create-empty-src-dirs if rclone version supports it (v1.64+)
|
|
@@ -19,6 +19,15 @@ from basic_memory.repository.metadata_filters import (
|
|
|
19
19
|
from basic_memory.schemas.search import SearchItemType
|
|
20
20
|
|
|
21
21
|
|
|
22
|
+
def _strip_nul_from_row(row_data: dict) -> dict:
|
|
23
|
+
"""Strip NUL bytes from all string values in a row dict.
|
|
24
|
+
|
|
25
|
+
Secondary defense: PostgreSQL text columns cannot store \\x00.
|
|
26
|
+
Primary sanitization happens in SearchService.index_entity_markdown().
|
|
27
|
+
"""
|
|
28
|
+
return {k: v.replace("\x00", "") if isinstance(v, str) else v for k, v in row_data.items()}
|
|
29
|
+
|
|
30
|
+
|
|
22
31
|
class PostgresSearchRepository(SearchRepositoryBase):
|
|
23
32
|
"""PostgreSQL tsvector implementation of search repository.
|
|
24
33
|
|
|
@@ -489,7 +498,7 @@ class PostgresSearchRepository(SearchRepositoryBase):
|
|
|
489
498
|
for row in search_index_rows:
|
|
490
499
|
insert_data = row.to_insert(serialize_json=True)
|
|
491
500
|
insert_data["project_id"] = self.project_id
|
|
492
|
-
insert_data_list.append(insert_data)
|
|
501
|
+
insert_data_list.append(_strip_nul_from_row(insert_data))
|
|
493
502
|
|
|
494
503
|
# Use upsert to handle race conditions during parallel indexing
|
|
495
504
|
# ON CONFLICT (permalink, project_id) matches the partial unique index
|
|
@@ -22,6 +22,15 @@ from basic_memory.services import FileService
|
|
|
22
22
|
MAX_CONTENT_STEMS_SIZE = 6000
|
|
23
23
|
|
|
24
24
|
|
|
25
|
+
def _strip_nul(value: str) -> str:
|
|
26
|
+
"""Strip NUL bytes that PostgreSQL text columns cannot store.
|
|
27
|
+
|
|
28
|
+
rclone preallocation on virtual filesystems (e.g. Google Drive File Stream)
|
|
29
|
+
can pad files with \\x00 bytes. See: rclone/rclone#6801
|
|
30
|
+
"""
|
|
31
|
+
return value.replace("\x00", "")
|
|
32
|
+
|
|
33
|
+
|
|
25
34
|
def _mtime_to_datetime(entity: Entity) -> datetime:
|
|
26
35
|
"""Convert entity mtime (file modification time) to datetime.
|
|
27
36
|
|
|
@@ -297,7 +306,7 @@ class SearchService:
|
|
|
297
306
|
content = await self.file_service.read_entity_content(entity)
|
|
298
307
|
if content:
|
|
299
308
|
content_stems.append(content)
|
|
300
|
-
content_snippet =
|
|
309
|
+
content_snippet = _strip_nul(content[:250])
|
|
301
310
|
|
|
302
311
|
if entity.permalink:
|
|
303
312
|
content_stems.extend(self._generate_variants(entity.permalink))
|
|
@@ -309,7 +318,7 @@ class SearchService:
|
|
|
309
318
|
if entity_tags:
|
|
310
319
|
content_stems.extend(entity_tags)
|
|
311
320
|
|
|
312
|
-
entity_content_stems = "\n".join(p for p in content_stems if p and p.strip())
|
|
321
|
+
entity_content_stems = _strip_nul("\n".join(p for p in content_stems if p and p.strip()))
|
|
313
322
|
|
|
314
323
|
# Truncate to stay under Postgres's 8KB index row limit
|
|
315
324
|
if len(entity_content_stems) > MAX_CONTENT_STEMS_SIZE: # pragma: no cover
|
|
@@ -346,8 +355,8 @@ class SearchService:
|
|
|
346
355
|
seen_permalinks.add(obs_permalink)
|
|
347
356
|
|
|
348
357
|
# Index with parent entity's file path since that's where it's defined
|
|
349
|
-
obs_content_stems =
|
|
350
|
-
p for p in self._generate_variants(obs.content) if p and p.strip()
|
|
358
|
+
obs_content_stems = _strip_nul(
|
|
359
|
+
"\n".join(p for p in self._generate_variants(obs.content) if p and p.strip())
|
|
351
360
|
)
|
|
352
361
|
# Truncate to stay under Postgres's 8KB index row limit
|
|
353
362
|
if len(obs_content_stems) > MAX_CONTENT_STEMS_SIZE: # pragma: no cover
|
|
@@ -358,7 +367,7 @@ class SearchService:
|
|
|
358
367
|
type=SearchItemType.OBSERVATION.value,
|
|
359
368
|
title=f"{obs.category}: {obs.content[:100]}...",
|
|
360
369
|
content_stems=obs_content_stems,
|
|
361
|
-
content_snippet=obs.content,
|
|
370
|
+
content_snippet=_strip_nul(obs.content),
|
|
362
371
|
permalink=obs_permalink,
|
|
363
372
|
file_path=entity.file_path,
|
|
364
373
|
category=obs.category,
|
|
@@ -381,8 +390,8 @@ class SearchService:
|
|
|
381
390
|
else f"{rel.from_entity.title}"
|
|
382
391
|
)
|
|
383
392
|
|
|
384
|
-
rel_content_stems =
|
|
385
|
-
p for p in self._generate_variants(relation_title) if p and p.strip()
|
|
393
|
+
rel_content_stems = _strip_nul(
|
|
394
|
+
"\n".join(p for p in self._generate_variants(relation_title) if p and p.strip())
|
|
386
395
|
)
|
|
387
396
|
rows_to_index.append(
|
|
388
397
|
SearchIndexRow(
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/tests/repository/test_postgres_search_repository.py
RENAMED
|
@@ -8,7 +8,10 @@ from datetime import datetime, timedelta, timezone
|
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
10
|
|
|
11
|
-
from basic_memory.repository.postgres_search_repository import
|
|
11
|
+
from basic_memory.repository.postgres_search_repository import (
|
|
12
|
+
PostgresSearchRepository,
|
|
13
|
+
_strip_nul_from_row,
|
|
14
|
+
)
|
|
12
15
|
from basic_memory.repository.search_index_row import SearchIndexRow
|
|
13
16
|
from basic_memory.schemas.search import SearchItemType
|
|
14
17
|
|
|
@@ -197,3 +200,22 @@ async def test_postgres_search_repository_reraises_non_tsquery_db_errors(
|
|
|
197
200
|
# Use a non-text query so the generated SQL doesn't include to_tsquery(),
|
|
198
201
|
# ensuring we hit the generic "re-raise other db errors" branch.
|
|
199
202
|
await repo.search(permalink="docs/anything")
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def test_strip_nul_from_row():
|
|
206
|
+
"""_strip_nul_from_row strips NUL bytes from string values, leaves non-strings alone."""
|
|
207
|
+
row = {
|
|
208
|
+
"title": "hello\x00world",
|
|
209
|
+
"content_stems": "some\x00content\x00here",
|
|
210
|
+
"content_snippet": "clean",
|
|
211
|
+
"id": 42,
|
|
212
|
+
"metadata": None,
|
|
213
|
+
"created_at": datetime(2024, 1, 1),
|
|
214
|
+
}
|
|
215
|
+
result = _strip_nul_from_row(row)
|
|
216
|
+
assert result["title"] == "helloworld"
|
|
217
|
+
assert result["content_stems"] == "somecontenthere"
|
|
218
|
+
assert result["content_snippet"] == "clean"
|
|
219
|
+
assert result["id"] == 42
|
|
220
|
+
assert result["metadata"] is None
|
|
221
|
+
assert result["created_at"] == datetime(2024, 1, 1)
|
|
@@ -7,6 +7,7 @@ from sqlalchemy import text
|
|
|
7
7
|
|
|
8
8
|
from basic_memory import db
|
|
9
9
|
from basic_memory.schemas.search import SearchQuery, SearchItemType
|
|
10
|
+
from basic_memory.services.search_service import _strip_nul
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
@pytest.mark.asyncio
|
|
@@ -968,3 +969,59 @@ async def test_index_entity_multiple_categories_same_content(
|
|
|
968
969
|
# Search for the shared content - should find both observations
|
|
969
970
|
results = await search_service.search(SearchQuery(text="Shared content"))
|
|
970
971
|
assert len(results) >= 2
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
# Tests for NUL byte stripping
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
def test_strip_nul_removes_nul_bytes():
|
|
978
|
+
"""_strip_nul removes \\x00 from strings."""
|
|
979
|
+
assert _strip_nul("hello\x00world") == "helloworld"
|
|
980
|
+
assert _strip_nul("\x00\x00\x00") == ""
|
|
981
|
+
assert _strip_nul("clean string") == "clean string"
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
@pytest.mark.asyncio
|
|
985
|
+
async def test_index_entity_markdown_strips_nul_bytes(search_service, session_maker, test_project):
|
|
986
|
+
"""Content with NUL bytes should be stripped before indexing.
|
|
987
|
+
|
|
988
|
+
rclone preallocation on virtual filesystems (e.g. Google Drive File Stream)
|
|
989
|
+
can pad files with \\x00 bytes, causing PostgreSQL CharacterNotInRepertoireError.
|
|
990
|
+
"""
|
|
991
|
+
from basic_memory.repository import EntityRepository, ObservationRepository
|
|
992
|
+
from basic_memory.repository.search_repository import SearchRepository
|
|
993
|
+
|
|
994
|
+
entity_repo = EntityRepository(session_maker, project_id=test_project.id)
|
|
995
|
+
obs_repo = ObservationRepository(session_maker, project_id=test_project.id)
|
|
996
|
+
|
|
997
|
+
entity_data = {
|
|
998
|
+
"title": "NUL Test Entity",
|
|
999
|
+
"entity_type": "note",
|
|
1000
|
+
"entity_metadata": {},
|
|
1001
|
+
"content_type": "text/markdown",
|
|
1002
|
+
"file_path": "test/nul-test.md",
|
|
1003
|
+
"permalink": "test/nul-test",
|
|
1004
|
+
"project_id": test_project.id,
|
|
1005
|
+
"created_at": datetime.now(),
|
|
1006
|
+
"updated_at": datetime.now(),
|
|
1007
|
+
}
|
|
1008
|
+
entity = await entity_repo.create(entity_data)
|
|
1009
|
+
|
|
1010
|
+
# Add observation with NUL bytes
|
|
1011
|
+
await obs_repo.create(
|
|
1012
|
+
{"entity_id": entity.id, "category": "note", "content": "obs with\x00nul bytes"}
|
|
1013
|
+
)
|
|
1014
|
+
entity = await entity_repo.get_by_permalink("test/nul-test")
|
|
1015
|
+
|
|
1016
|
+
# Index with NUL-containing content
|
|
1017
|
+
nul_content = "# NUL Test\x00\x00\nSome content\x00here"
|
|
1018
|
+
await search_service.index_entity(entity, content=nul_content)
|
|
1019
|
+
|
|
1020
|
+
# Verify no NUL bytes in stored search index rows
|
|
1021
|
+
search_repo: SearchRepository = search_service.repository
|
|
1022
|
+
results = await search_repo.search(permalink_match="test/nul-test*")
|
|
1023
|
+
for row in results:
|
|
1024
|
+
if row.content_snippet:
|
|
1025
|
+
assert "\x00" not in row.content_snippet, (
|
|
1026
|
+
f"NUL found in content_snippet for {row.permalink}"
|
|
1027
|
+
)
|
|
@@ -511,3 +511,45 @@ def test_supports_create_empty_src_dirs_false_for_unknown_version():
|
|
|
511
511
|
|
|
512
512
|
def test_min_rclone_version_constant():
|
|
513
513
|
assert MIN_RCLONE_VERSION_EMPTY_DIRS == (1, 64, 0)
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def test_project_sync_includes_no_preallocate_flag(tmp_path):
|
|
517
|
+
"""Sync command includes --local-no-preallocate to prevent NUL byte padding."""
|
|
518
|
+
runner = _Runner(returncode=0)
|
|
519
|
+
filter_path = _write_filter_file(tmp_path)
|
|
520
|
+
project = SyncProject(name="research", path="/research", local_sync_path="/tmp/research")
|
|
521
|
+
|
|
522
|
+
project_sync(
|
|
523
|
+
project,
|
|
524
|
+
"my-bucket",
|
|
525
|
+
run=runner,
|
|
526
|
+
is_installed=lambda: True,
|
|
527
|
+
filter_path=filter_path,
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
cmd, _ = runner.calls[0]
|
|
531
|
+
assert "--local-no-preallocate" in cmd
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
def test_project_bisync_includes_no_preallocate_flag(tmp_path):
|
|
535
|
+
"""Bisync command includes --local-no-preallocate to prevent NUL byte padding."""
|
|
536
|
+
runner = _Runner(returncode=0)
|
|
537
|
+
filter_path = _write_filter_file(tmp_path)
|
|
538
|
+
state_path = tmp_path / "state"
|
|
539
|
+
project = SyncProject(
|
|
540
|
+
name="research", path="app/data/research", local_sync_path="/tmp/research"
|
|
541
|
+
)
|
|
542
|
+
|
|
543
|
+
project_bisync(
|
|
544
|
+
project,
|
|
545
|
+
"my-bucket",
|
|
546
|
+
run=runner,
|
|
547
|
+
is_installed=lambda: True,
|
|
548
|
+
version=(1, 64, 2),
|
|
549
|
+
filter_path=filter_path,
|
|
550
|
+
state_path=state_path,
|
|
551
|
+
is_initialized=lambda _name: True,
|
|
552
|
+
)
|
|
553
|
+
|
|
554
|
+
cmd, _ = runner.calls[0]
|
|
555
|
+
assert "--local-no-preallocate" in cmd
|
|
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
|
|
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.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/directory_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/importer_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/knowledge_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/memory_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/project_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/prompt_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/api/v2/routers/resource_router.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/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
|
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/api_client.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/bisync_commands.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/cloud_utils.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/core_commands.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/rclone_config.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/cloud/rclone_installer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/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
|
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/import_claude_projects.py
RENAMED
|
File without changes
|
{basic_memory-0.18.4 → basic_memory-0.18.5}/src/basic_memory/cli/commands/import_memory_json.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
|
|
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
|