basic-memory 0.16.1__tar.gz → 0.16.3__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.16.3/.claude/commands/release/release.md +169 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/spec.md +17 -21
- basic_memory-0.16.3/.claude/settings.json +5 -0
- basic_memory-0.16.3/.env.example +28 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/test.yml +46 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.gitignore +2 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/CHANGELOG.md +115 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/CLAUDE.md +20 -6
- {basic_memory-0.16.1 → basic_memory-0.16.3}/PKG-INFO +91 -4
- {basic_memory-0.16.1 → basic_memory-0.16.3}/README.md +85 -0
- basic_memory-0.16.3/docker-compose-postgres.yml +42 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/justfile +77 -8
- {basic_memory-0.16.1 → basic_memory-0.16.3}/pyproject.toml +10 -4
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/__init__.py +1 -1
- basic_memory-0.16.3/src/basic_memory/alembic/env.py +181 -0
- basic_memory-0.16.3/src/basic_memory/alembic/versions/314f1ea54dc4_add_postgres_full_text_search_support_.py +131 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +15 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +44 -36
- basic_memory-0.16.3/src/basic_memory/alembic/versions/a2b3c4d5e6f7_add_search_index_entity_cascade.py +56 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +13 -0
- basic_memory-0.16.3/src/basic_memory/alembic/versions/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py +199 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/app.py +31 -6
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/knowledge_router.py +13 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/project_router.py +50 -8
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/resource_router.py +35 -25
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/utils.py +53 -14
- basic_memory-0.16.3/src/basic_memory/api/v2/__init__.py +35 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/__init__.py +21 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/directory_router.py +93 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/importer_router.py +182 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/knowledge_router.py +415 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/memory_router.py +130 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/project_router.py +264 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/prompt_router.py +270 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/resource_router.py +286 -0
- basic_memory-0.16.3/src/basic_memory/api/v2/routers/search_router.py +73 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/app.py +4 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/rclone_commands.py +28 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/rclone_installer.py +18 -4
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/mcp.py +3 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/config.py +126 -76
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/db.py +139 -73
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/deps.py +288 -6
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/file_utils.py +16 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/claude_conversations_importer.py +4 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/entity_parser.py +56 -23
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/markdown_processor.py +1 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/plugins.py +4 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/utils.py +10 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/knowledge.py +9 -2
- basic_memory-0.16.3/src/basic_memory/models/search.py +85 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/entity_repository.py +192 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/observation_repository.py +1 -0
- basic_memory-0.16.3/src/basic_memory/repository/postgres_search_repository.py +379 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/project_repository.py +13 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/relation_repository.py +58 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/repository.py +1 -0
- basic_memory-0.16.3/src/basic_memory/repository/search_index_row.py +95 -0
- basic_memory-0.16.3/src/basic_memory/repository/search_repository.py +94 -0
- basic_memory-0.16.3/src/basic_memory/repository/search_repository_base.py +241 -0
- basic_memory-0.16.1/src/basic_memory/repository/search_repository.py → basic_memory-0.16.3/src/basic_memory/repository/sqlite_search_repository.py +28 -228
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/base.py +33 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/memory.py +7 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/project_info.py +1 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/search.py +5 -0
- basic_memory-0.16.3/src/basic_memory/schemas/v2/__init__.py +23 -0
- basic_memory-0.16.3/src/basic_memory/schemas/v2/entity.py +96 -0
- basic_memory-0.16.3/src/basic_memory/schemas/v2/resource.py +46 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/context_service.py +219 -43
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/directory_service.py +15 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/entity_service.py +60 -32
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/file_service.py +91 -7
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/initialization.py +8 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/link_resolver.py +1 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/project_service.py +35 -18
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/search_service.py +51 -10
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/sync_service.py +90 -110
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/watch_service.py +20 -5
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/utils.py +89 -70
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/cli/test_project_commands_integration.py +59 -15
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/conftest.py +147 -27
- basic_memory-0.16.3/test-int/mcp/test_lifespan_shutdown_sync_task_cancellation_integration.py +70 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_project_management_integration.py +2 -1
- basic_memory-0.16.3/test-int/mcp/test_read_note_integration.py +102 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_write_note_integration.py +68 -86
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/test_db_wal_mode.py +66 -43
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/test_disable_permalinks_integration.py +31 -16
- basic_memory-0.16.3/tests/README.md +172 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_async_client.py +18 -14
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_continue_conversation_template.py +3 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_project_router.py +8 -8
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_resource_router.py +5 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_search_router.py +10 -2
- basic_memory-0.16.3/tests/api/v2/__init__.py +1 -0
- basic_memory-0.16.3/tests/api/v2/conftest.py +21 -0
- basic_memory-0.16.3/tests/api/v2/test_directory_router.py +129 -0
- basic_memory-0.16.3/tests/api/v2/test_importer_router.py +530 -0
- basic_memory-0.16.3/tests/api/v2/test_knowledge_router.py +407 -0
- basic_memory-0.16.3/tests/api/v2/test_memory_router.py +301 -0
- basic_memory-0.16.3/tests/api/v2/test_project_router.py +251 -0
- basic_memory-0.16.3/tests/api/v2/test_prompt_router.py +212 -0
- basic_memory-0.16.3/tests/api/v2/test_resource_router.py +267 -0
- basic_memory-0.16.3/tests/api/v2/test_search_router.py +289 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/conftest.py +29 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_cli_tools.py +5 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_project_add_with_local_path.py +6 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/conftest.py +150 -28
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_entity_parser.py +3 -3
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_markdown_plugins.py +40 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_parser_edge_cases.py +1 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/conftest.py +2 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_prompts.py +1 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_move_note.py +65 -28
- basic_memory-0.16.3/tests/mcp/test_tool_write_note_kebab_filenames.py +392 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_entity_repository.py +242 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_entity_upsert_issue_187.py +3 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_observation_repository.py +111 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_project_repository.py +1 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_relation_repository.py +157 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_repository.py +8 -4
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_search_repository.py +112 -25
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_search_repository_edit_bug_fix.py +8 -7
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_memory_serialization.py +20 -1
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_context_service.py +26 -11
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_entity_service.py +7 -7
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_file_service.py +74 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_initialization.py +68 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_link_resolver.py +1 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_project_service.py +37 -36
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_project_service_operations.py +10 -10
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_search_service.py +198 -5
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_sync_service.py +86 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_watch_service.py +2 -5
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_watch_service_reload.py +2 -2
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_config.py +137 -21
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_rclone_commands.py +142 -14
- basic_memory-0.16.3/tests/utils/test_timezone_utils.py +96 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/uv.lock +97 -169
- basic_memory-0.16.1/.claude/commands/release/release.md +0 -92
- basic_memory-0.16.1/src/basic_memory/alembic/env.py +0 -99
- basic_memory-0.16.1/src/basic_memory/models/search.py +0 -38
- basic_memory-0.16.1/test-int/mcp/test_read_note_integration.py +0 -48
- basic_memory-0.16.1/test-int/test_sync_performance_benchmark.py +0 -369
- basic_memory-0.16.1/tests/test_db_migration_deduplication.py +0 -185
- basic_memory-0.16.1/v0.15.0-RELEASE-DOCS.md +0 -161
- basic_memory-0.16.1/v15-docs/README.md +0 -61
- basic_memory-0.16.1/v15-docs/api-performance.md +0 -585
- basic_memory-0.16.1/v15-docs/background-relations.md +0 -531
- basic_memory-0.16.1/v15-docs/basic-memory-home.md +0 -371
- basic_memory-0.16.1/v15-docs/bug-fixes.md +0 -395
- basic_memory-0.16.1/v15-docs/chatgpt-integration.md +0 -648
- basic_memory-0.16.1/v15-docs/cloud-authentication.md +0 -381
- basic_memory-0.16.1/v15-docs/cloud-bisync.md +0 -531
- basic_memory-0.16.1/v15-docs/cloud-mode-usage.md +0 -546
- basic_memory-0.16.1/v15-docs/cloud-mount.md +0 -501
- basic_memory-0.16.1/v15-docs/default-project-mode.md +0 -425
- basic_memory-0.16.1/v15-docs/env-file-removal.md +0 -434
- basic_memory-0.16.1/v15-docs/env-var-overrides.md +0 -449
- basic_memory-0.16.1/v15-docs/explicit-project-parameter.md +0 -198
- basic_memory-0.16.1/v15-docs/gitignore-integration.md +0 -621
- basic_memory-0.16.1/v15-docs/project-root-env-var.md +0 -424
- basic_memory-0.16.1/v15-docs/sqlite-performance.md +0 -512
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/agents/python-developer.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/agents/system-architect.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/release/beta.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/release/changelog.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/release/release-check.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.claude/commands/test-live.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.dockerignore +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/dependabot.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/claude-code-review.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/claude-issue-triage.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/claude.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/dev-release.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/docker.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.github/workflows/release.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/.python-version +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/CITATION.cff +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/CLA.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/CONTRIBUTING.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/Dockerfile +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/LICENSE +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/SECURITY.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/docker-compose.yml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/Docker.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/ai-assistant-guide-extended.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/character-handling.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/docs/cloud-cli.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/llms-install.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/smithery.yaml +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-1 Specification-Driven Development Process.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-10 Unified Deployment Workflow and Event Tracking.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-11 Basic Memory API Performance Optimization.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-12 OpenTelemetry Observability.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-13 CLI Authentication with Subscription Validation.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-14 Cloud Git Versioning & GitHub Backup.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-14- Cloud Git Versioning & GitHub Backup.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-15 Configuration Persistence via Tigris for Cloud Tenants.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-16 MCP Cloud Service Consolidation.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-17 Semantic Search with ChromaDB.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-18 AI Memory Management Tool.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-19 Sync Performance and Memory Optimization.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-2 Slash Commands Reference.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-20 Simplified Project-Scoped Rclone Sync.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-3 Agent Definitions.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-4 Notes Web UI Component Architecture.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-5 CLI Cloud Upload via WebDAV.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-6 Explicit Project Parameter Architecture.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-7 POC to spike Tigris Turso for local access to cloud data.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-8 TigrisFS Integration.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-9 Multi-Project Bidirectional Sync Architecture.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-9 Signed Header Tenant Information.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/specs/SPEC-9-1 Follow-Ups- Conflict, Sync, and Observability.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/9d9c1cb7d8f5_add_mtime_and_size_columns_to_entity_.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/alembic/versions/e7e1f4367280_add_scan_watermark_tracking_to_project.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/directory_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/importer_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/management_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/memory_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/prompt_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/routers/search_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/api/template_loader.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/auth.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/api_client.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/bisync_commands.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/cloud_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/core_commands.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/rclone_config.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/upload.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/cloud/upload_command.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/command_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/db.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_chatgpt.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_claude_conversations.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_claude_projects.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/import_memory_json.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/project.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/status.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/commands/tool.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/cli/main.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/ignore_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/base.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/chatgpt_importer.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/claude_projects_importer.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/memory_json_importer.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/importers/utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/async_client.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/project_context.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/search.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/prompts/utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/resources/project_info.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/server.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/build_context.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/canvas.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/chatgpt_tools.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/delete_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/edit_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/list_directory.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/move_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/project_management.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/read_content.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/read_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/search.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/view_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/mcp/tools/write_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/models/project.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/repository/project_info_repository.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/cloud.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/directory.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/importer.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/prompt.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/request.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/response.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/schemas/sync_report.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/exceptions.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/sync/background_sync.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/src/basic_memory/templates/prompts/search.hbs +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/BENCHMARKS.md +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/cli/test_version_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_build_context_underscore.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_build_context_validation.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_chatgpt_tools_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_default_project_mode_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_delete_note_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_edit_note_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_list_directory_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_move_note_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_project_state_sync_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_read_content_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_search_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/test-int/mcp/test_single_project_mcp_integration.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/Screenshot.png +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/conftest.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_directory_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_importer_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_knowledge_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_management_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_memory_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_project_router_operations.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_prompt_router.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_relation_background_resolution.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_search_template.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_template_loader.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/api/test_template_loader_helpers.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_cloud_authentication.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_ignore_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_chatgpt.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_claude_conversations.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_claude_projects.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_import_memory_json.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/cli/test_upload.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/db/test_issue_254_foreign_key_constraints.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/importers/test_importer_base.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/importers/test_importer_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_date_frontmatter_parsing.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_entity_parser_error_handling.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_obsidian_yaml_formatting.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_permalink_collision_file_overwrite.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_build_context.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_canvas.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_delete_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_edit_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_list_directory.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_read_content.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_read_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_recent_activity.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_resource.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_search.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_view_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/test_tool_write_note.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/mcp/tools/test_chatgpt_tools.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_entity_repository_upsert.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/repository/test_project_info_repository.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_base_timeframe_minimum.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_memory_url_validation.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_schemas.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_directory_service.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_entity_service_disable_permalinks.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/services/test_project_removal_bug.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_character_conflicts.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_sync_service_incremental.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_sync_wikilink_issue.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_tmp_files.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/sync/test_watch_service_edge_cases.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_deps.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/test_production_cascade_delete.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_file_utils.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_frontmatter_obsidian_compatible.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_parse_tags.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_permalink_formatting.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_utf8_handling.py +0 -0
- {basic_memory-0.16.1 → basic_memory-0.16.3}/tests/utils/test_validate_project_path.py +0 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# /release - Create Stable Release
|
|
2
|
+
|
|
3
|
+
Create a stable release using the automated justfile target with comprehensive validation.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
```
|
|
7
|
+
/release <version>
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
**Parameters:**
|
|
11
|
+
- `version` (required): Release version like `v0.13.2`
|
|
12
|
+
|
|
13
|
+
## Implementation
|
|
14
|
+
|
|
15
|
+
You are an expert release manager for the Basic Memory project. When the user runs `/release`, execute the following steps:
|
|
16
|
+
|
|
17
|
+
### Step 1: Pre-flight Validation
|
|
18
|
+
|
|
19
|
+
#### Version Check
|
|
20
|
+
1. Check current version in `src/basic_memory/__init__.py`
|
|
21
|
+
2. Verify new version format matches `v\d+\.\d+\.\d+` pattern
|
|
22
|
+
3. Confirm version is higher than current version
|
|
23
|
+
|
|
24
|
+
#### Git Status
|
|
25
|
+
1. Check current git status for uncommitted changes
|
|
26
|
+
2. Verify we're on the `main` branch
|
|
27
|
+
3. Confirm no existing tag with this version
|
|
28
|
+
|
|
29
|
+
#### Documentation Validation
|
|
30
|
+
1. **Changelog Check**
|
|
31
|
+
- CHANGELOG.md contains entry for target version
|
|
32
|
+
- Entry includes all major features and fixes
|
|
33
|
+
- Breaking changes are documented
|
|
34
|
+
|
|
35
|
+
### Step 2: Use Justfile Automation
|
|
36
|
+
Execute the automated release process:
|
|
37
|
+
```bash
|
|
38
|
+
just release <version>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The justfile target handles:
|
|
42
|
+
- ✅ Version format validation
|
|
43
|
+
- ✅ Git status and branch checks
|
|
44
|
+
- ✅ Quality checks (`just check` - lint, format, type-check, tests)
|
|
45
|
+
- ✅ Version update in `src/basic_memory/__init__.py`
|
|
46
|
+
- ✅ Automatic commit with proper message
|
|
47
|
+
- ✅ Tag creation and pushing to GitHub
|
|
48
|
+
- ✅ Release workflow trigger (automatic on tag push)
|
|
49
|
+
|
|
50
|
+
The GitHub Actions workflow (`.github/workflows/release.yml`) then:
|
|
51
|
+
- ✅ Builds the package using `uv build`
|
|
52
|
+
- ✅ Creates GitHub release with auto-generated notes
|
|
53
|
+
- ✅ Publishes to PyPI
|
|
54
|
+
- ✅ Updates Homebrew formula (stable releases only)
|
|
55
|
+
|
|
56
|
+
### Step 3: Monitor Release Process
|
|
57
|
+
1. Verify tag push triggered the workflow (should start automatically within seconds)
|
|
58
|
+
2. Monitor workflow progress at: https://github.com/basicmachines-co/basic-memory/actions
|
|
59
|
+
3. Watch for successful completion of both jobs:
|
|
60
|
+
- `release` - Builds package and publishes to PyPI
|
|
61
|
+
- `homebrew` - Updates Homebrew formula (stable releases only)
|
|
62
|
+
4. Check for any workflow failures and investigate logs if needed
|
|
63
|
+
|
|
64
|
+
### Step 4: Post-Release Validation
|
|
65
|
+
|
|
66
|
+
#### GitHub Release
|
|
67
|
+
1. Verify GitHub release is created at: https://github.com/basicmachines-co/basic-memory/releases/tag/<version>
|
|
68
|
+
2. Check that release notes are auto-generated from commits
|
|
69
|
+
3. Validate release assets (`.whl` and `.tar.gz` files are attached)
|
|
70
|
+
|
|
71
|
+
#### PyPI Publication
|
|
72
|
+
1. Verify package published at: https://pypi.org/project/basic-memory/<version>/
|
|
73
|
+
2. Test installation: `uv tool install basic-memory`
|
|
74
|
+
3. Verify installed version: `basic-memory --version`
|
|
75
|
+
|
|
76
|
+
#### Homebrew Formula (Stable Releases Only)
|
|
77
|
+
1. Check formula update at: https://github.com/basicmachines-co/homebrew-basic-memory
|
|
78
|
+
2. Verify formula version matches release
|
|
79
|
+
3. Test Homebrew installation: `brew install basicmachines-co/basic-memory/basic-memory`
|
|
80
|
+
|
|
81
|
+
#### Website Updates
|
|
82
|
+
|
|
83
|
+
**1. basicmachines.co** (`/Users/drew/code/basicmachines.co`)
|
|
84
|
+
- **Goal**: Update version number displayed on the homepage
|
|
85
|
+
- **Location**: Search for "Basic Memory v0." in the codebase to find version displays
|
|
86
|
+
- **What to update**:
|
|
87
|
+
- Hero section heading that shows "Basic Memory v{VERSION}"
|
|
88
|
+
- "What's New in v{VERSION}" section heading
|
|
89
|
+
- Feature highlights array (look for array of features with title/description)
|
|
90
|
+
- **Process**:
|
|
91
|
+
1. Pull latest from GitHub: `git pull origin main`
|
|
92
|
+
2. Create release branch: `git checkout -b release/v{VERSION}`
|
|
93
|
+
3. Search codebase for current version number (e.g., "v0.16.1")
|
|
94
|
+
4. Update version numbers to new release version
|
|
95
|
+
5. Update feature highlights with 3-5 key features from this release (extract from CHANGELOG.md)
|
|
96
|
+
6. Commit changes: `git commit -m "chore: update to v{VERSION}"`
|
|
97
|
+
7. Push branch: `git push origin release/v{VERSION}`
|
|
98
|
+
- **Deploy**: Follow deployment process for basicmachines.co
|
|
99
|
+
|
|
100
|
+
**2. docs.basicmemory.com** (`/Users/drew/code/docs.basicmemory.com`)
|
|
101
|
+
- **Goal**: Add new release notes section to the latest-releases page
|
|
102
|
+
- **File**: `src/pages/latest-releases.mdx`
|
|
103
|
+
- **What to do**:
|
|
104
|
+
1. Pull latest from GitHub: `git pull origin main`
|
|
105
|
+
2. Create release branch: `git checkout -b release/v{VERSION}`
|
|
106
|
+
3. Read the existing file to understand the format and structure
|
|
107
|
+
4. Read `/Users/drew/code/basic-memory/CHANGELOG.md` to get release content
|
|
108
|
+
5. Add new release section **at the top** (after MDX imports, before other releases)
|
|
109
|
+
6. Follow the existing pattern:
|
|
110
|
+
- Heading: `## [v{VERSION}](github-link) — YYYY-MM-DD`
|
|
111
|
+
- Focus statement if applicable
|
|
112
|
+
- `<Info>` block with highlights (3-5 key items)
|
|
113
|
+
- Sections for Features, Bug Fixes, Breaking Changes, etc.
|
|
114
|
+
- Link to full changelog at the end
|
|
115
|
+
- Separator `---` between releases
|
|
116
|
+
7. Commit changes: `git commit -m "docs: add v{VERSION} release notes"`
|
|
117
|
+
8. Push branch: `git push origin release/v{VERSION}`
|
|
118
|
+
- **Source content**: Extract and format sections from CHANGELOG.md for this version
|
|
119
|
+
- **Deploy**: Follow deployment process for docs.basicmemory.com
|
|
120
|
+
|
|
121
|
+
**4. Announce Release**
|
|
122
|
+
- Post to Discord community if significant changes
|
|
123
|
+
- Update social media if major release
|
|
124
|
+
- Notify users via appropriate channels
|
|
125
|
+
|
|
126
|
+
## Pre-conditions Check
|
|
127
|
+
Before starting, verify:
|
|
128
|
+
- [ ] All beta testing is complete
|
|
129
|
+
- [ ] Critical bugs are fixed
|
|
130
|
+
- [ ] Breaking changes are documented
|
|
131
|
+
- [ ] CHANGELOG.md is updated (if needed)
|
|
132
|
+
- [ ] Version number follows semantic versioning
|
|
133
|
+
|
|
134
|
+
## Error Handling
|
|
135
|
+
- If `just release` fails, examine the error output for specific issues
|
|
136
|
+
- If quality checks fail, fix issues and retry
|
|
137
|
+
- If changelog entry missing, update CHANGELOG.md and commit before retrying
|
|
138
|
+
- If GitHub Actions fail, check workflow logs for debugging
|
|
139
|
+
|
|
140
|
+
## Success Output
|
|
141
|
+
```
|
|
142
|
+
🎉 Stable Release v0.13.2 Created Successfully!
|
|
143
|
+
|
|
144
|
+
🏷️ Tag: v0.13.2
|
|
145
|
+
📋 GitHub Release: https://github.com/basicmachines-co/basic-memory/releases/tag/v0.13.2
|
|
146
|
+
📦 PyPI: https://pypi.org/project/basic-memory/0.13.2/
|
|
147
|
+
🍺 Homebrew: https://github.com/basicmachines-co/homebrew-basic-memory
|
|
148
|
+
🚀 GitHub Actions: Completed
|
|
149
|
+
|
|
150
|
+
Install with pip/uv:
|
|
151
|
+
uv tool install basic-memory
|
|
152
|
+
|
|
153
|
+
Install with Homebrew:
|
|
154
|
+
brew install basicmachines-co/basic-memory/basic-memory
|
|
155
|
+
|
|
156
|
+
Users can now upgrade:
|
|
157
|
+
uv tool upgrade basic-memory
|
|
158
|
+
brew upgrade basic-memory
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Context
|
|
162
|
+
- This creates production releases used by end users
|
|
163
|
+
- Must pass all quality gates before proceeding
|
|
164
|
+
- Uses the automated justfile target for consistency
|
|
165
|
+
- Version is automatically updated in `__init__.py`
|
|
166
|
+
- Triggers automated GitHub release with changelog
|
|
167
|
+
- Package is published to PyPI for `pip` and `uv` users
|
|
168
|
+
- Homebrew formula is automatically updated for stable releases
|
|
169
|
+
- Supports multiple installation methods (uv, pip, Homebrew)
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
allowed-tools: mcp__basic-memory__write_note, mcp__basic-memory__read_note, mcp__basic-memory__search_notes, mcp__basic-memory__edit_note
|
|
3
|
-
argument-hint: [create|status|
|
|
2
|
+
allowed-tools: mcp__basic-memory__write_note, mcp__basic-memory__read_note, mcp__basic-memory__search_notes, mcp__basic-memory__edit_note
|
|
3
|
+
argument-hint: [create|status|show|review] [spec-name]
|
|
4
4
|
description: Manage specifications in our development process
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Context
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Specifications are managed in the Basic Memory "specs" project. All specs live in a centralized location accessible across all repositories via MCP tools.
|
|
10
|
+
|
|
11
|
+
See SPEC-1 and SPEC-2 in the "specs" project for the full specification-driven development process.
|
|
10
12
|
|
|
11
13
|
Available commands:
|
|
12
14
|
- `create [name]` - Create new specification
|
|
13
15
|
- `status` - Show all spec statuses
|
|
14
|
-
- `
|
|
16
|
+
- `show [spec-name]` - Read a specific spec
|
|
15
17
|
- `review [spec-name]` - Review implementation against spec
|
|
16
18
|
|
|
17
19
|
## Your task
|
|
@@ -19,23 +21,19 @@ Available commands:
|
|
|
19
21
|
Execute the spec command: `/spec $ARGUMENTS`
|
|
20
22
|
|
|
21
23
|
### If command is "create":
|
|
22
|
-
1. Get next SPEC number by searching existing specs
|
|
23
|
-
2. Create new spec using template from
|
|
24
|
-
3.
|
|
24
|
+
1. Get next SPEC number by searching existing specs in "specs" project
|
|
25
|
+
2. Create new spec using template from SPEC-2
|
|
26
|
+
3. Use mcp__basic-memory__write_note with project="specs"
|
|
25
27
|
4. Include standard sections: Why, What, How, How to Evaluate
|
|
26
28
|
|
|
27
29
|
### If command is "status":
|
|
28
|
-
1.
|
|
29
|
-
2. Display table with spec number, title, and
|
|
30
|
-
3. Show
|
|
31
|
-
|
|
32
|
-
### If command is "
|
|
33
|
-
1.
|
|
34
|
-
2.
|
|
35
|
-
- Frontend/UI → vue-developer
|
|
36
|
-
- Architecture/system → system-architect
|
|
37
|
-
- Backend/API → python-developer
|
|
38
|
-
3. Launch Task tool with appropriate agent and spec context
|
|
30
|
+
1. Use mcp__basic-memory__search_notes with project="specs"
|
|
31
|
+
2. Display table with spec number, title, and progress
|
|
32
|
+
3. Show completion status from checkboxes in content
|
|
33
|
+
|
|
34
|
+
### If command is "show":
|
|
35
|
+
1. Use mcp__basic-memory__read_note with project="specs"
|
|
36
|
+
2. Display the full spec content
|
|
39
37
|
|
|
40
38
|
### If command is "review":
|
|
41
39
|
1. Read the specified spec and its "How to Evaluate" section
|
|
@@ -49,7 +47,5 @@ Execute the spec command: `/spec $ARGUMENTS`
|
|
|
49
47
|
- **Architecture compliance** - Component isolation, state management patterns
|
|
50
48
|
- **Documentation completeness** - Implementation matches specification
|
|
51
49
|
3. Provide honest, accurate assessment - do not overstate completeness
|
|
52
|
-
4. Document findings and update spec with review results
|
|
50
|
+
4. Document findings and update spec with review results using mcp__basic-memory__edit_note
|
|
53
51
|
5. If gaps found, clearly identify what still needs to be implemented/tested
|
|
54
|
-
|
|
55
|
-
Use the agent definitions from @docs/specs/Agent\ Definitions.md for implementation handoffs.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Basic Memory Environment Variables Example
|
|
2
|
+
# Copy this file to .env and customize as needed
|
|
3
|
+
# Note: .env files are gitignored and should never be committed
|
|
4
|
+
|
|
5
|
+
# ============================================================================
|
|
6
|
+
# PostgreSQL Test Database Configuration
|
|
7
|
+
# ============================================================================
|
|
8
|
+
# These variables allow you to override the default test database credentials
|
|
9
|
+
# Default values match docker-compose-postgres.yml for local development
|
|
10
|
+
#
|
|
11
|
+
# Only needed if you want to use different credentials or a remote test database
|
|
12
|
+
# By default, tests use: postgresql://basic_memory_user:dev_password@localhost:5433/basic_memory_test
|
|
13
|
+
|
|
14
|
+
# Full PostgreSQL test database URL (used by tests and migrations)
|
|
15
|
+
# POSTGRES_TEST_URL=postgresql+asyncpg://basic_memory_user:dev_password@localhost:5433/basic_memory_test
|
|
16
|
+
|
|
17
|
+
# Individual components (used by justfile postgres-reset command)
|
|
18
|
+
# POSTGRES_USER=basic_memory_user
|
|
19
|
+
# POSTGRES_TEST_DB=basic_memory_test
|
|
20
|
+
|
|
21
|
+
# ============================================================================
|
|
22
|
+
# Production Database Configuration
|
|
23
|
+
# ============================================================================
|
|
24
|
+
# For production use, set these in your deployment environment
|
|
25
|
+
# DO NOT use the test credentials above in production!
|
|
26
|
+
|
|
27
|
+
# BASIC_MEMORY_DATABASE_BACKEND=postgres # or "sqlite"
|
|
28
|
+
# BASIC_MEMORY_DATABASE_URL=postgresql+asyncpg://user:password@host:port/database
|
|
@@ -13,7 +13,8 @@ on:
|
|
|
13
13
|
branches: [ "main" ]
|
|
14
14
|
|
|
15
15
|
jobs:
|
|
16
|
-
test:
|
|
16
|
+
test-sqlite:
|
|
17
|
+
name: Test SQLite (${{ matrix.os }}, Python ${{ matrix.python-version }})
|
|
17
18
|
strategy:
|
|
18
19
|
fail-fast: false
|
|
19
20
|
matrix:
|
|
@@ -64,7 +65,49 @@ jobs:
|
|
|
64
65
|
run: |
|
|
65
66
|
just lint
|
|
66
67
|
|
|
67
|
-
- name: Run tests
|
|
68
|
+
- name: Run tests (SQLite)
|
|
68
69
|
run: |
|
|
69
70
|
uv pip install pytest pytest-cov
|
|
70
|
-
just test
|
|
71
|
+
just test-sqlite
|
|
72
|
+
|
|
73
|
+
test-postgres:
|
|
74
|
+
name: Test Postgres (Python ${{ matrix.python-version }})
|
|
75
|
+
strategy:
|
|
76
|
+
fail-fast: false
|
|
77
|
+
matrix:
|
|
78
|
+
python-version: [ "3.12", "3.13" ]
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
|
|
81
|
+
# Note: No services section needed - testcontainers handles Postgres in Docker
|
|
82
|
+
|
|
83
|
+
steps:
|
|
84
|
+
- uses: actions/checkout@v4
|
|
85
|
+
with:
|
|
86
|
+
submodules: true
|
|
87
|
+
|
|
88
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
89
|
+
uses: actions/setup-python@v4
|
|
90
|
+
with:
|
|
91
|
+
python-version: ${{ matrix.python-version }}
|
|
92
|
+
cache: 'pip'
|
|
93
|
+
|
|
94
|
+
- name: Install uv
|
|
95
|
+
run: |
|
|
96
|
+
pip install uv
|
|
97
|
+
|
|
98
|
+
- name: Install just
|
|
99
|
+
run: |
|
|
100
|
+
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
|
|
101
|
+
|
|
102
|
+
- name: Create virtual env
|
|
103
|
+
run: |
|
|
104
|
+
uv venv
|
|
105
|
+
|
|
106
|
+
- name: Install dependencies
|
|
107
|
+
run: |
|
|
108
|
+
uv pip install -e .[dev]
|
|
109
|
+
|
|
110
|
+
- name: Run tests (Postgres via testcontainers)
|
|
111
|
+
run: |
|
|
112
|
+
uv pip install pytest pytest-cov
|
|
113
|
+
just test-postgres
|
|
@@ -1,5 +1,120 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v0.16.3 (2025-12-20)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- **#439**: Add PostgreSQL database backend support
|
|
8
|
+
([`fb5e9e1`](https://github.com/basicmachines-co/basic-memory/commit/fb5e9e1))
|
|
9
|
+
- Full PostgreSQL/Neon database support as alternative to SQLite
|
|
10
|
+
- Async connection pooling with asyncpg
|
|
11
|
+
- Alembic migrations support for both backends
|
|
12
|
+
- Configurable via `BASIC_MEMORY_DATABASE_BACKEND` environment variable
|
|
13
|
+
|
|
14
|
+
- **#441**: Implement API v2 with ID-based endpoints (Phase 1)
|
|
15
|
+
([`28cc522`](https://github.com/basicmachines-co/basic-memory/commit/28cc522))
|
|
16
|
+
- New ID-based API endpoints for improved performance
|
|
17
|
+
- Foundation for future API enhancements
|
|
18
|
+
- Backward compatible with existing endpoints
|
|
19
|
+
|
|
20
|
+
- Add project_id to Relation and Observation for efficient project-scoped queries
|
|
21
|
+
([`a920a9f`](https://github.com/basicmachines-co/basic-memory/commit/a920a9f))
|
|
22
|
+
- Enables faster queries in multi-project environments
|
|
23
|
+
- Improved database schema for cloud deployments
|
|
24
|
+
|
|
25
|
+
- Add bulk insert with ON CONFLICT handling for relations
|
|
26
|
+
([`0818bda`](https://github.com/basicmachines-co/basic-memory/commit/0818bda))
|
|
27
|
+
- Faster relation creation during sync operations
|
|
28
|
+
- Handles duplicate relations gracefully
|
|
29
|
+
|
|
30
|
+
### Performance
|
|
31
|
+
|
|
32
|
+
- Lightweight permalink resolution to avoid eager loading
|
|
33
|
+
([`6f99d2e`](https://github.com/basicmachines-co/basic-memory/commit/6f99d2e))
|
|
34
|
+
- Reduces database queries during entity lookups
|
|
35
|
+
- Improved response times for read operations
|
|
36
|
+
|
|
37
|
+
### Bug Fixes
|
|
38
|
+
|
|
39
|
+
- **#464**: Pin FastMCP to 2.12.3 to fix MCP tools visibility
|
|
40
|
+
([`f227ef6`](https://github.com/basicmachines-co/basic-memory/commit/f227ef6))
|
|
41
|
+
- Fixes issue where MCP tools were not visible to Claude
|
|
42
|
+
- Reverts to last known working FastMCP version
|
|
43
|
+
|
|
44
|
+
- **#458**: Reduce watch service CPU usage by increasing reload interval
|
|
45
|
+
([`897b1ed`](https://github.com/basicmachines-co/basic-memory/commit/897b1ed))
|
|
46
|
+
- Lowers CPU usage during file watching
|
|
47
|
+
- More efficient resource utilization
|
|
48
|
+
|
|
49
|
+
- **#456**: Await background sync task cancellation in lifespan shutdown
|
|
50
|
+
([`efbc758`](https://github.com/basicmachines-co/basic-memory/commit/efbc758))
|
|
51
|
+
- Prevents hanging on shutdown
|
|
52
|
+
- Clean async task cleanup
|
|
53
|
+
|
|
54
|
+
- **#434**: Respect --project flag in background sync
|
|
55
|
+
([`70bb10b`](https://github.com/basicmachines-co/basic-memory/commit/70bb10b))
|
|
56
|
+
- Background sync now correctly uses specified project
|
|
57
|
+
- Fixes multi-project sync issues
|
|
58
|
+
|
|
59
|
+
- **#446**: Fix observation parsing and permalink limits
|
|
60
|
+
([`73d940e`](https://github.com/basicmachines-co/basic-memory/commit/73d940e))
|
|
61
|
+
- Handles edge cases in observation content
|
|
62
|
+
- Prevents permalink truncation issues
|
|
63
|
+
|
|
64
|
+
- **#424**: Handle periods in kebab_filenames mode
|
|
65
|
+
([`b004565`](https://github.com/basicmachines-co/basic-memory/commit/b004565))
|
|
66
|
+
- Fixes filename handling for files with multiple periods
|
|
67
|
+
- Improved kebab-case conversion
|
|
68
|
+
|
|
69
|
+
- Fix Postgres/Neon connection settings and search index dedupe
|
|
70
|
+
([`b5d4fb5`](https://github.com/basicmachines-co/basic-memory/commit/b5d4fb5))
|
|
71
|
+
- Optimized connection pooling for Postgres
|
|
72
|
+
- Prevents duplicate search index entries
|
|
73
|
+
|
|
74
|
+
### Testing & CI
|
|
75
|
+
|
|
76
|
+
- Replace py-pglite with testcontainers for Postgres testing
|
|
77
|
+
([`c462faf`](https://github.com/basicmachines-co/basic-memory/commit/c462faf))
|
|
78
|
+
- More reliable Postgres testing infrastructure
|
|
79
|
+
- Uses Docker-based test containers
|
|
80
|
+
|
|
81
|
+
- Add PostgreSQL testing to GitHub Actions workflow
|
|
82
|
+
([`66b91b2`](https://github.com/basicmachines-co/basic-memory/commit/66b91b2))
|
|
83
|
+
- CI now tests both SQLite and PostgreSQL backends
|
|
84
|
+
- Ensures cross-database compatibility
|
|
85
|
+
|
|
86
|
+
- **#416**: Add integration test for read_note with underscored folders
|
|
87
|
+
([`0c12a39`](https://github.com/basicmachines-co/basic-memory/commit/0c12a39))
|
|
88
|
+
- Verifies folder name handling edge cases
|
|
89
|
+
|
|
90
|
+
### Internal
|
|
91
|
+
|
|
92
|
+
- Cloud compatibility fixes and performance improvements (#454)
|
|
93
|
+
- Remove logfire instrumentation for cleaner production deployments
|
|
94
|
+
- Truncate content_stems to fix Postgres 8KB index row limit
|
|
95
|
+
|
|
96
|
+
## v0.16.2 (2025-11-16)
|
|
97
|
+
|
|
98
|
+
### Bug Fixes
|
|
99
|
+
|
|
100
|
+
- **#429**: Use platform-native path separators in config.json
|
|
101
|
+
([`6517e98`](https://github.com/basicmachines-co/basic-memory/commit/6517e98))
|
|
102
|
+
- Fixes config.json path separator issues on Windows
|
|
103
|
+
- Uses os.path.join for platform-native path construction
|
|
104
|
+
- Ensures consistent path handling across platforms
|
|
105
|
+
|
|
106
|
+
- **#427**: Add rclone installation checks for Windows bisync commands
|
|
107
|
+
([`1af0539`](https://github.com/basicmachines-co/basic-memory/commit/1af0539))
|
|
108
|
+
- Validates rclone installation before running bisync commands
|
|
109
|
+
- Provides clear error messages when rclone is not installed
|
|
110
|
+
- Improves user experience on Windows
|
|
111
|
+
|
|
112
|
+
- **#421**: Main project always recreated on project list command
|
|
113
|
+
([`cad7019`](https://github.com/basicmachines-co/basic-memory/commit/cad7019))
|
|
114
|
+
- Fixes issue where main project was recreated unnecessarily
|
|
115
|
+
- Improves project list command reliability
|
|
116
|
+
- Reduces unnecessary file system operations
|
|
117
|
+
|
|
3
118
|
## v0.16.1 (2025-11-11)
|
|
4
119
|
|
|
5
120
|
### Bug Fixes
|
|
@@ -15,10 +15,14 @@ See the [README.md](README.md) file for a project overview.
|
|
|
15
15
|
### Build and Test Commands
|
|
16
16
|
|
|
17
17
|
- Install: `just install` or `pip install -e ".[dev]"`
|
|
18
|
-
- Run all tests (
|
|
19
|
-
- Run
|
|
20
|
-
- Run
|
|
21
|
-
-
|
|
18
|
+
- Run all tests (SQLite + Postgres): `just test`
|
|
19
|
+
- Run all tests against SQLite: `just test-sqlite`
|
|
20
|
+
- Run all tests against Postgres: `just test-postgres` (uses testcontainers)
|
|
21
|
+
- Run unit tests (SQLite): `just test-unit-sqlite`
|
|
22
|
+
- Run unit tests (Postgres): `just test-unit-postgres`
|
|
23
|
+
- Run integration tests (SQLite): `just test-int-sqlite`
|
|
24
|
+
- Run integration tests (Postgres): `just test-int-postgres`
|
|
25
|
+
- Generate HTML coverage: `just coverage`
|
|
22
26
|
- Single test: `pytest tests/path/to/test_file.py::test_function_name`
|
|
23
27
|
- Run benchmarks: `pytest test-int/test_sync_performance_benchmark.py -v -m "benchmark and not slow"`
|
|
24
28
|
- Lint: `just lint` or `ruff check . --fix`
|
|
@@ -30,6 +34,8 @@ See the [README.md](README.md) file for a project overview.
|
|
|
30
34
|
|
|
31
35
|
**Note:** Project requires Python 3.12+ (uses type parameter syntax and `type` aliases introduced in 3.12)
|
|
32
36
|
|
|
37
|
+
**Postgres Testing:** Uses [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
|
|
38
|
+
|
|
33
39
|
### Test Structure
|
|
34
40
|
|
|
35
41
|
- `tests/` - Unit tests for individual components (mocked, fast)
|
|
@@ -76,8 +82,10 @@ See the [README.md](README.md) file for a project overview.
|
|
|
76
82
|
- SQLite is used for indexing and full text search, files are source of truth
|
|
77
83
|
- Testing uses pytest with asyncio support (strict mode)
|
|
78
84
|
- Unit tests (`tests/`) use mocks when necessary; integration tests (`test-int/`) use real implementations
|
|
79
|
-
-
|
|
80
|
-
-
|
|
85
|
+
- By default, tests run against SQLite (fast, no Docker needed)
|
|
86
|
+
- Set `BASIC_MEMORY_TEST_POSTGRES=1` to run against Postgres (uses testcontainers - Docker required)
|
|
87
|
+
- Each test runs in a standalone environment with isolated database and tmp_path directory
|
|
88
|
+
- CI runs SQLite and Postgres tests in parallel for faster feedback
|
|
81
89
|
- Performance benchmarks are in `test-int/test_sync_performance_benchmark.py`
|
|
82
90
|
- Use pytest markers: `@pytest.mark.benchmark` for benchmarks, `@pytest.mark.slow` for slow tests
|
|
83
91
|
|
|
@@ -229,6 +237,11 @@ of using AI just for code generation, we've developed a true collaborative workf
|
|
|
229
237
|
This approach has allowed us to tackle more complex challenges and build a more robust system than either humans or AI
|
|
230
238
|
could achieve independently.
|
|
231
239
|
|
|
240
|
+
**Problem-Solving Guidance:**
|
|
241
|
+
- If a solution isn't working after reasonable effort, suggest alternative approaches
|
|
242
|
+
- Don't persist with a problematic library or pattern when better alternatives exist
|
|
243
|
+
- Example: When py-pglite caused cascading test failures, switching to testcontainers-postgres was the right call
|
|
244
|
+
|
|
232
245
|
## GitHub Integration
|
|
233
246
|
|
|
234
247
|
Basic Memory has taken AI-Human collaboration to the next level by integrating Claude directly into the development workflow through GitHub:
|
|
@@ -264,5 +277,6 @@ With GitHub integration, the development workflow includes:
|
|
|
264
277
|
2. **Contribution tracking** - All of Claude's contributions are properly attributed in the Git history
|
|
265
278
|
3. **Branch management** - Claude can create feature branches for implementations
|
|
266
279
|
4. **Documentation maintenance** - Claude can keep documentation updated as the code evolves
|
|
280
|
+
5. **Code Commits**: ALWAYS sign off commits with `git commit -s`
|
|
267
281
|
|
|
268
282
|
This level of integration represents a new paradigm in AI-human collaboration, where the AI assistant becomes a full-fledged team member rather than just a tool for generating code snippets.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.3
|
|
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
|
|
@@ -12,22 +12,24 @@ Requires-Python: >=3.12
|
|
|
12
12
|
Requires-Dist: aiofiles>=24.1.0
|
|
13
13
|
Requires-Dist: aiosqlite>=0.20.0
|
|
14
14
|
Requires-Dist: alembic>=1.14.1
|
|
15
|
+
Requires-Dist: asyncpg>=0.30.0
|
|
15
16
|
Requires-Dist: dateparser>=1.2.0
|
|
16
17
|
Requires-Dist: fastapi[standard]>=0.115.8
|
|
17
|
-
Requires-Dist: fastmcp
|
|
18
|
+
Requires-Dist: fastmcp==2.12.3
|
|
18
19
|
Requires-Dist: greenlet>=3.1.1
|
|
19
|
-
Requires-Dist: icecream>=2.1.3
|
|
20
|
-
Requires-Dist: logfire>=0.73.0
|
|
21
20
|
Requires-Dist: loguru>=0.7.3
|
|
22
21
|
Requires-Dist: markdown-it-py>=3.0.0
|
|
23
22
|
Requires-Dist: mcp>=1.2.0
|
|
23
|
+
Requires-Dist: nest-asyncio>=1.6.0
|
|
24
24
|
Requires-Dist: pillow>=11.1.0
|
|
25
|
+
Requires-Dist: psycopg==3.3.1
|
|
25
26
|
Requires-Dist: pybars3>=0.9.7
|
|
26
27
|
Requires-Dist: pydantic-settings>=2.6.1
|
|
27
28
|
Requires-Dist: pydantic[email,timezone]>=2.10.3
|
|
28
29
|
Requires-Dist: pyjwt>=2.10.1
|
|
29
30
|
Requires-Dist: pyright>=1.1.390
|
|
30
31
|
Requires-Dist: pytest-aio>=1.9.0
|
|
32
|
+
Requires-Dist: pytest-asyncio>=1.2.0
|
|
31
33
|
Requires-Dist: python-dotenv>=1.1.0
|
|
32
34
|
Requires-Dist: python-frontmatter>=1.1.0
|
|
33
35
|
Requires-Dist: pyyaml>=6.0.1
|
|
@@ -473,6 +475,91 @@ See the [Documentation](https://memory.basicmachines.co/) for more info, includi
|
|
|
473
475
|
- [Managing multiple Projects](https://docs.basicmemory.com/guides/cli-reference/#project)
|
|
474
476
|
- [Importing data from OpenAI/Claude Projects](https://docs.basicmemory.com/guides/cli-reference/#import)
|
|
475
477
|
|
|
478
|
+
## Logging
|
|
479
|
+
|
|
480
|
+
Basic Memory uses [Loguru](https://github.com/Delgan/loguru) for logging. The logging behavior varies by entry point:
|
|
481
|
+
|
|
482
|
+
| Entry Point | Default Behavior | Use Case |
|
|
483
|
+
|-------------|------------------|----------|
|
|
484
|
+
| CLI commands | File only | Prevents log output from interfering with command output |
|
|
485
|
+
| MCP server | File only | Stdout would corrupt the JSON-RPC protocol |
|
|
486
|
+
| API server | File (local) or stdout (cloud) | Docker/cloud deployments use stdout |
|
|
487
|
+
|
|
488
|
+
**Log file location:** `~/.basic-memory/basic-memory.log` (10MB rotation, 10 days retention)
|
|
489
|
+
|
|
490
|
+
### Environment Variables
|
|
491
|
+
|
|
492
|
+
| Variable | Default | Description |
|
|
493
|
+
|----------|---------|-------------|
|
|
494
|
+
| `BASIC_MEMORY_LOG_LEVEL` | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |
|
|
495
|
+
| `BASIC_MEMORY_CLOUD_MODE` | `false` | When `true`, API logs to stdout with structured context |
|
|
496
|
+
| `BASIC_MEMORY_ENV` | `dev` | Set to `test` for test mode (stderr only) |
|
|
497
|
+
|
|
498
|
+
### Examples
|
|
499
|
+
|
|
500
|
+
```bash
|
|
501
|
+
# Enable debug logging
|
|
502
|
+
BASIC_MEMORY_LOG_LEVEL=DEBUG basic-memory sync
|
|
503
|
+
|
|
504
|
+
# View logs
|
|
505
|
+
tail -f ~/.basic-memory/basic-memory.log
|
|
506
|
+
|
|
507
|
+
# Cloud/Docker mode (stdout logging with structured context)
|
|
508
|
+
BASIC_MEMORY_CLOUD_MODE=true uvicorn basic_memory.api.app:app
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
## Development
|
|
512
|
+
|
|
513
|
+
### Running Tests
|
|
514
|
+
|
|
515
|
+
Basic Memory supports dual database backends (SQLite and Postgres). By default, tests run against SQLite. Set `BASIC_MEMORY_TEST_POSTGRES=1` to run against Postgres (uses testcontainers - Docker required).
|
|
516
|
+
|
|
517
|
+
**Quick Start:**
|
|
518
|
+
```bash
|
|
519
|
+
# Run all tests against SQLite (default, fast)
|
|
520
|
+
just test-sqlite
|
|
521
|
+
|
|
522
|
+
# Run all tests against Postgres (uses testcontainers)
|
|
523
|
+
just test-postgres
|
|
524
|
+
|
|
525
|
+
# Run both SQLite and Postgres tests
|
|
526
|
+
just test
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
**Available Test Commands:**
|
|
530
|
+
|
|
531
|
+
- `just test` - Run all tests against both SQLite and Postgres
|
|
532
|
+
- `just test-sqlite` - Run all tests against SQLite (fast, no Docker needed)
|
|
533
|
+
- `just test-postgres` - Run all tests against Postgres (uses testcontainers)
|
|
534
|
+
- `just test-unit-sqlite` - Run unit tests against SQLite
|
|
535
|
+
- `just test-unit-postgres` - Run unit tests against Postgres
|
|
536
|
+
- `just test-int-sqlite` - Run integration tests against SQLite
|
|
537
|
+
- `just test-int-postgres` - Run integration tests against Postgres
|
|
538
|
+
- `just test-windows` - Run Windows-specific tests (auto-skips on other platforms)
|
|
539
|
+
- `just test-benchmark` - Run performance benchmark tests
|
|
540
|
+
|
|
541
|
+
**Postgres Testing:**
|
|
542
|
+
|
|
543
|
+
Postgres tests use [testcontainers](https://testcontainers-python.readthedocs.io/) which automatically spins up a Postgres instance in Docker. No manual database setup required - just have Docker running.
|
|
544
|
+
|
|
545
|
+
**Test Markers:**
|
|
546
|
+
|
|
547
|
+
Tests use pytest markers for selective execution:
|
|
548
|
+
- `windows` - Windows-specific database optimizations
|
|
549
|
+
- `benchmark` - Performance tests (excluded from default runs)
|
|
550
|
+
|
|
551
|
+
**Other Development Commands:**
|
|
552
|
+
```bash
|
|
553
|
+
just install # Install with dev dependencies
|
|
554
|
+
just lint # Run linting checks
|
|
555
|
+
just typecheck # Run type checking
|
|
556
|
+
just format # Format code with ruff
|
|
557
|
+
just check # Run all quality checks
|
|
558
|
+
just migration "msg" # Create database migration
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
See the [justfile](justfile) for the complete list of development commands.
|
|
562
|
+
|
|
476
563
|
## License
|
|
477
564
|
|
|
478
565
|
AGPL-3.0
|