basic-memory 0.14.2__tar.gz → 0.14.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of basic-memory might be problematic. Click here for more details.
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/workflows/test.yml +12 -3
- basic_memory-0.14.4/CLA.md +71 -0
- basic_memory-0.14.4/CLAUDE.md +171 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/CONTRIBUTING.md +6 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/Dockerfile +15 -2
- basic_memory-0.14.4/LEGAL_INVENTORY_GUIDE.md +250 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/PKG-INFO +21 -92
- {basic_memory-0.14.2 → basic_memory-0.14.4}/README.md +19 -90
- basic_memory-0.14.4/create_csv_exhibits.py +88 -0
- basic_memory-0.14.4/create_individual_exhibits.py +208 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/docs/Docker.md +47 -16
- basic_memory-0.14.4/docs/character-handling.md +241 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/justfile +4 -1
- basic_memory-0.14.4/legal_exhibits/drew_cain_exhibit_a.csv +31 -0
- basic_memory-0.14.4/legal_exhibits/joe_exhibit_a.csv +28 -0
- basic_memory-0.14.4/legal_file_inventory.py +438 -0
- basic_memory-0.14.4/legal_inventory/basic_memory_inventory_20250730_110133.csv +272 -0
- basic_memory-0.14.4/legal_inventory_git/basic_memory_inventory_20250729_200145.md +1936 -0
- basic_memory-0.14.4/legal_inventory_main/basic_memory_inventory_20250730_094006.csv +272 -0
- basic_memory-0.14.4/legal_inventory_main/basic_memory_inventory_20250730_094006.md +1943 -0
- basic_memory-0.14.4/legal_inventory_main/basic_memory_inventory_20250730_101521.json +6788 -0
- basic_memory-0.14.4/legal_inventory_sample.json +5479 -0
- basic_memory-0.14.4/legal_inventory_sample.md +294 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/pyproject.toml +2 -2
- basic_memory-0.14.4/scripts/generate_legal_inventory.py +483 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/__init__.py +1 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/env.py +3 -1
- basic_memory-0.14.4/src/basic_memory/alembic/versions/a1b2c3d4e5f6_fix_project_foreign_keys.py +53 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/app.py +4 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/management_router.py +3 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/project_router.py +21 -13
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/resource_router.py +3 -3
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/app.py +3 -3
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/__init__.py +1 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/db.py +5 -5
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/import_chatgpt.py +3 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/import_claude_conversations.py +3 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/import_claude_projects.py +3 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/import_memory_json.py +5 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/mcp.py +3 -15
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/project.py +46 -6
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/status.py +4 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/sync.py +10 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/main.py +0 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/config.py +61 -34
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/db.py +2 -6
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/deps.py +3 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/file_utils.py +65 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/chatgpt_importer.py +20 -10
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/memory_json_importer.py +22 -7
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/utils.py +2 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/markdown/entity_parser.py +2 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/markdown/markdown_processor.py +2 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/markdown/plugins.py +42 -26
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/markdown/utils.py +1 -1
- basic_memory-0.14.4/src/basic_memory/mcp/async_client.py +28 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/project_session.py +6 -4
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/prompts/__init__.py +0 -2
- basic_memory-0.14.4/src/basic_memory/mcp/server.py +46 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/build_context.py +12 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/move_note.py +24 -12
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/project_management.py +22 -7
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/read_content.py +16 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/read_note.py +17 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/sync_status.py +3 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/write_note.py +9 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/models/knowledge.py +13 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/models/project.py +3 -3
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/entity_repository.py +2 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/project_repository.py +19 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/search_repository.py +7 -3
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/base.py +40 -10
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/importer.py +1 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/memory.py +23 -11
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/context_service.py +12 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/directory_service.py +7 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/entity_service.py +56 -10
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/initialization.py +0 -75
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/project_service.py +93 -36
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/sync/background_sync.py +4 -3
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/sync/sync_service.py +53 -4
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/sync/watch_service.py +31 -8
- basic_memory-0.14.4/src/basic_memory/utils.py +379 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/conftest.py +25 -38
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_build_context_validation.py +7 -6
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_delete_note_integration.py +37 -29
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_edit_note_integration.py +28 -28
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_list_directory_integration.py +96 -20
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_move_note_integration.py +43 -87
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_project_management_integration.py +85 -82
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_project_state_sync_integration.py +28 -25
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_read_content_integration.py +6 -6
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_read_note_integration.py +6 -6
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_search_integration.py +15 -15
- {basic_memory-0.14.2 → basic_memory-0.14.4}/test-int/mcp/test_write_note_integration.py +89 -25
- basic_memory-0.14.4/tests/api/test_async_client.py +36 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_knowledge_router.py +5 -2
- basic_memory-0.14.4/tests/api/test_project_router.py +396 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_resource_router.py +11 -10
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_cli_tools.py +36 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_import_chatgpt.py +3 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_import_claude_conversations.py +3 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_import_claude_projects.py +4 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_import_memory_json.py +40 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_project_commands.py +87 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_sync.py +11 -20
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/conftest.py +7 -42
- basic_memory-0.14.4/tests/db/test_issue_254_foreign_key_constraints.py +154 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_markdown_plugins.py +46 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/conftest.py +0 -2
- basic_memory-0.14.4/tests/mcp/test_obsidian_yaml_formatting.py +181 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_prompts.py +1 -1
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_build_context.py +20 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_move_note.py +264 -0
- basic_memory-0.14.4/tests/mcp/test_tool_read_content.py +459 -0
- basic_memory-0.14.4/tests/mcp/test_tool_read_note.py +620 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_write_note.py +405 -10
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_project_repository.py +28 -0
- basic_memory-0.14.4/tests/repository/test_search_repository_edit_bug_fix.py +270 -0
- basic_memory-0.14.4/tests/schemas/test_memory_serialization.py +234 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/schemas/test_schemas.py +9 -5
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_context_service.py +100 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_directory_service.py +22 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_entity_service.py +2 -2
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_initialization.py +0 -176
- basic_memory-0.14.4/tests/services/test_project_removal_bug.py +125 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_project_service.py +132 -19
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_project_service_operations.py +3 -3
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_search_service.py +2 -2
- basic_memory-0.14.4/tests/sync/test_character_conflicts.py +343 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/sync/test_sync_service.py +12 -6
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/sync/test_tmp_files.py +2 -2
- basic_memory-0.14.4/tests/sync/test_watch_service_edge_cases.py +273 -0
- basic_memory-0.14.4/tests/test_config.py +166 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/test_db_migration_deduplication.py +4 -6
- basic_memory-0.14.4/tests/test_production_cascade_delete.py +325 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/utils/test_file_utils.py +28 -0
- basic_memory-0.14.4/tests/utils/test_frontmatter_obsidian_compatible.py +183 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/utils/test_parse_tags.py +18 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/utils/test_permalink_formatting.py +3 -0
- basic_memory-0.14.4/tests/utils/test_validate_project_path.py +413 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/uv.lock +401 -216
- basic_memory-0.14.2/CLA.md +0 -34
- basic_memory-0.14.2/CLAUDE.md +0 -257
- basic_memory-0.14.2/src/basic_memory/cli/commands/auth.py +0 -136
- basic_memory-0.14.2/src/basic_memory/mcp/async_client.py +0 -8
- basic_memory-0.14.2/src/basic_memory/mcp/auth_provider.py +0 -270
- basic_memory-0.14.2/src/basic_memory/mcp/external_auth_provider.py +0 -321
- basic_memory-0.14.2/src/basic_memory/mcp/prompts/sync_status.py +0 -112
- basic_memory-0.14.2/src/basic_memory/mcp/server.py +0 -109
- basic_memory-0.14.2/src/basic_memory/mcp/supabase_auth_provider.py +0 -463
- basic_memory-0.14.2/src/basic_memory/services/migration_service.py +0 -168
- basic_memory-0.14.2/src/basic_memory/utils.py +0 -216
- basic_memory-0.14.2/test-int/cli/test_reset_integration.py +0 -158
- basic_memory-0.14.2/tests/api/test_project_router.py +0 -198
- basic_memory-0.14.2/tests/cli/test_auth_commands.py +0 -352
- basic_memory-0.14.2/tests/mcp/test_auth_provider.py +0 -313
- basic_memory-0.14.2/tests/mcp/test_server.py +0 -144
- basic_memory-0.14.2/tests/mcp/test_tool_read_note.py +0 -296
- basic_memory-0.14.2/tests/sync/test_watch_service_edge_cases.py +0 -68
- basic_memory-0.14.2/tests/test_config.py +0 -78
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.claude/commands/release/beta.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.claude/commands/release/changelog.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.claude/commands/release/release-check.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.claude/commands/release/release.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.claude/commands/test-live.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.dockerignore +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/dependabot.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/workflows/claude.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/workflows/dev-release.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/workflows/docker.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.github/workflows/release.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.gitignore +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/.python-version +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/CHANGELOG.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/CITATION.cff +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/LICENSE +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/SECURITY.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/docker-compose.yml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/docs/AI Assistant Guide.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/llms-install.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/memory.json +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/smithery.yaml +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/versions/647e7a75e2cd_project_constraint_fix.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/directory_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/importer_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/knowledge_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/memory_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/prompt_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/search_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/routers/utils.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/api/template_loader.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/cli/commands/tool.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/base.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/claude_conversations_importer.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/importers/claude_projects_importer.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/prompts/continue_conversation.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/prompts/recent_activity.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/prompts/search.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/prompts/utils.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/resources/project_info.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/canvas.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/delete_note.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/edit_note.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/list_directory.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/recent_activity.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/search.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/utils.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/mcp/tools/view_note.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/models/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/models/search.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/observation_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/project_info_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/relation_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/repository/repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/directory.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/project_info.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/prompt.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/request.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/response.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/schemas/search.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/exceptions.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/file_service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/link_resolver.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/search_service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/services/sync_status_service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/templates/prompts/continue_conversation.hbs +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/src/basic_memory/templates/prompts/search.hbs +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/Screenshot.png +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/conftest.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_continue_conversation_template.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_directory_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_importer_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_management_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_memory_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_project_router_operations.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_prompt_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_search_router.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_search_template.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_template_loader.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/api/test_template_loader_helpers.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/conftest.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_project_info.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_status.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/cli/test_version.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/importers/test_importer_base.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/importers/test_importer_utils.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_entity_parser.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_resource_project_info.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_canvas.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_delete_note.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_edit_note.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_list_directory.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_recent_activity.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_resource.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_search.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_sync_status.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_utils.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/mcp/test_tool_view_note.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_entity_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_entity_repository_upsert.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_observation_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_project_info_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_relation_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/repository/test_search_repository.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/schemas/test_memory_url_validation.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_file_service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_link_resolver.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/services/test_sync_status_service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/sync/test_sync_wikilink_issue.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/sync/test_watch_service.py +0 -0
- {basic_memory-0.14.2 → basic_memory-0.14.4}/tests/utils/test_utf8_handling.py +0 -0
|
@@ -14,11 +14,12 @@ on:
|
|
|
14
14
|
|
|
15
15
|
jobs:
|
|
16
16
|
test:
|
|
17
|
-
runs-on: ubuntu-latest
|
|
18
17
|
strategy:
|
|
19
18
|
fail-fast: false
|
|
20
19
|
matrix:
|
|
20
|
+
os: [ubuntu-latest, windows-latest]
|
|
21
21
|
python-version: [ "3.12" ]
|
|
22
|
+
runs-on: ${{ matrix.os }}
|
|
22
23
|
|
|
23
24
|
steps:
|
|
24
25
|
- uses: actions/checkout@v4
|
|
@@ -35,10 +36,18 @@ jobs:
|
|
|
35
36
|
run: |
|
|
36
37
|
pip install uv
|
|
37
38
|
|
|
38
|
-
- name: Install just
|
|
39
|
+
- name: Install just (Linux/macOS)
|
|
40
|
+
if: runner.os != 'Windows'
|
|
39
41
|
run: |
|
|
40
42
|
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
|
|
41
43
|
|
|
44
|
+
- name: Install just (Windows)
|
|
45
|
+
if: runner.os == 'Windows'
|
|
46
|
+
run: |
|
|
47
|
+
# Install just using Chocolatey (pre-installed on GitHub Actions Windows runners)
|
|
48
|
+
choco install just --yes
|
|
49
|
+
shell: pwsh
|
|
50
|
+
|
|
42
51
|
- name: Create virtual env
|
|
43
52
|
run: |
|
|
44
53
|
uv venv
|
|
@@ -54,4 +63,4 @@ jobs:
|
|
|
54
63
|
- name: Run tests
|
|
55
64
|
run: |
|
|
56
65
|
uv pip install pytest pytest-cov
|
|
57
|
-
just test
|
|
66
|
+
just test
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Contributor License Agreement
|
|
2
|
+
|
|
3
|
+
## Copyright Assignment and License Grant
|
|
4
|
+
|
|
5
|
+
By signing this Contributor License Agreement ("Agreement"), you accept and agree to the following terms and conditions
|
|
6
|
+
for your present and future Contributions submitted
|
|
7
|
+
to Basic Machines LLC. Except for the license granted herein to Basic Machines LLC and recipients of software
|
|
8
|
+
distributed by Basic Machines LLC, you reserve all right,
|
|
9
|
+
title, and interest in and to your Contributions.
|
|
10
|
+
|
|
11
|
+
### 1. Definitions
|
|
12
|
+
|
|
13
|
+
"You" (or "Your") shall mean the copyright owner or legal entity authorized by the copyright owner that is making this
|
|
14
|
+
Agreement with Basic Machines LLC.
|
|
15
|
+
|
|
16
|
+
"Contribution" shall mean any original work of authorship, including any modifications or additions to an existing work,
|
|
17
|
+
that is intentionally submitted by You to Basic
|
|
18
|
+
Machines LLC for inclusion in, or documentation of, any of the products owned or managed by Basic Machines LLC (the "
|
|
19
|
+
Work").
|
|
20
|
+
|
|
21
|
+
### 2. Grant of Copyright License
|
|
22
|
+
|
|
23
|
+
Subject to the terms and conditions of this Agreement, You hereby grant to Basic Machines LLC and to recipients of
|
|
24
|
+
software distributed by Basic Machines LLC a perpetual,
|
|
25
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish,
|
|
26
|
+
distribute, sublicense, and/or sell copies of the
|
|
27
|
+
Work, and to permit persons to whom the Work is furnished to do so.
|
|
28
|
+
|
|
29
|
+
### 3. Assignment of Copyright
|
|
30
|
+
|
|
31
|
+
You hereby assign to Basic Machines LLC all right, title, and interest worldwide in all Copyright covering your
|
|
32
|
+
Contributions. Basic Machines LLC may license the
|
|
33
|
+
Contributions under any license terms, including copyleft, permissive, commercial, or proprietary licenses.
|
|
34
|
+
|
|
35
|
+
### 4. Grant of Patent License
|
|
36
|
+
|
|
37
|
+
Subject to the terms and conditions of this Agreement, You hereby grant to Basic Machines LLC and to recipients of
|
|
38
|
+
software distributed by Basic Machines LLC a perpetual,
|
|
39
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to
|
|
40
|
+
make, have made, use, offer to sell, sell, import, and
|
|
41
|
+
otherwise transfer the Work.
|
|
42
|
+
|
|
43
|
+
### 5. Developer Certificate of Origin
|
|
44
|
+
|
|
45
|
+
By making a Contribution to this project, You certify that:
|
|
46
|
+
|
|
47
|
+
(a) The Contribution was created in whole or in part by You and You have the right to submit it under this Agreement; or
|
|
48
|
+
|
|
49
|
+
(b) The Contribution is based upon previous work that, to the best of Your knowledge, is covered under an appropriate
|
|
50
|
+
open source license and You have the right under that
|
|
51
|
+
license to submit that work with modifications, whether created in whole or in part by You, under this Agreement; or
|
|
52
|
+
|
|
53
|
+
(c) The Contribution was provided directly to You by some other person who certified (a), (b) or (c) and You have not
|
|
54
|
+
modified it.
|
|
55
|
+
|
|
56
|
+
(d) You understand and agree that this project and the Contribution are public and that a record of the Contribution (
|
|
57
|
+
including all personal information You submit with
|
|
58
|
+
it, including Your sign-off) is maintained indefinitely and may be redistributed consistent with this project or the
|
|
59
|
+
open source license(s) involved.
|
|
60
|
+
|
|
61
|
+
### 6. Representations
|
|
62
|
+
|
|
63
|
+
You represent that you are legally entitled to grant the above license and assignment. If your employer(s) has rights to
|
|
64
|
+
intellectual property that you create that
|
|
65
|
+
includes your Contributions, you represent that you have received permission to make Contributions on behalf of that
|
|
66
|
+
employer, or that your employer has waived such rights
|
|
67
|
+
for your Contributions to Basic Machines LLC.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
This Agreement is effective as of the date you first submit a Contribution to Basic Machines LLC.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# CLAUDE.md - Basic Memory Project Guide
|
|
2
|
+
|
|
3
|
+
## Project Overview
|
|
4
|
+
|
|
5
|
+
Basic Memory is a local-first knowledge management system built on the Model Context Protocol (MCP). It enables
|
|
6
|
+
bidirectional communication between LLMs (like Claude) and markdown files, creating a personal knowledge graph that can
|
|
7
|
+
be traversed using links between documents.
|
|
8
|
+
|
|
9
|
+
## CODEBASE DEVELOPMENT
|
|
10
|
+
|
|
11
|
+
### Project information
|
|
12
|
+
|
|
13
|
+
See the [README.md](README.md) file for a project overview.
|
|
14
|
+
|
|
15
|
+
### Build and Test Commands
|
|
16
|
+
|
|
17
|
+
- Install: `make install` or `pip install -e ".[dev]"`
|
|
18
|
+
- Run tests: `uv run pytest -p pytest_mock -v` or `make test`
|
|
19
|
+
- Single test: `pytest tests/path/to/test_file.py::test_function_name`
|
|
20
|
+
- Lint: `make lint` or `ruff check . --fix`
|
|
21
|
+
- Type check: `make type-check` or `uv run pyright`
|
|
22
|
+
- Format: `make format` or `uv run ruff format .`
|
|
23
|
+
- Run all code checks: `make check` (runs lint, format, type-check, test)
|
|
24
|
+
- Create db migration: `make migration m="Your migration message"`
|
|
25
|
+
- Run development MCP Inspector: `make run-inspector`
|
|
26
|
+
|
|
27
|
+
### Code Style Guidelines
|
|
28
|
+
|
|
29
|
+
- Line length: 100 characters max
|
|
30
|
+
- Python 3.12+ with full type annotations
|
|
31
|
+
- Format with ruff (consistent styling)
|
|
32
|
+
- Import order: standard lib, third-party, local imports
|
|
33
|
+
- Naming: snake_case for functions/variables, PascalCase for classes
|
|
34
|
+
- Prefer async patterns with SQLAlchemy 2.0
|
|
35
|
+
- Use Pydantic v2 for data validation and schemas
|
|
36
|
+
- CLI uses Typer for command structure
|
|
37
|
+
- API uses FastAPI for endpoints
|
|
38
|
+
- Follow the repository pattern for data access
|
|
39
|
+
- Tools communicate to api routers via the httpx ASGI client (in process)
|
|
40
|
+
|
|
41
|
+
### Codebase Architecture
|
|
42
|
+
|
|
43
|
+
- `/alembic` - Alembic db migrations
|
|
44
|
+
- `/api` - FastAPI implementation of REST endpoints
|
|
45
|
+
- `/cli` - Typer command-line interface
|
|
46
|
+
- `/markdown` - Markdown parsing and processing
|
|
47
|
+
- `/mcp` - Model Context Protocol server implementation
|
|
48
|
+
- `/models` - SQLAlchemy ORM models
|
|
49
|
+
- `/repository` - Data access layer
|
|
50
|
+
- `/schemas` - Pydantic models for validation
|
|
51
|
+
- `/services` - Business logic layer
|
|
52
|
+
- `/sync` - File synchronization services
|
|
53
|
+
|
|
54
|
+
### Development Notes
|
|
55
|
+
|
|
56
|
+
- MCP tools are defined in src/basic_memory/mcp/tools/
|
|
57
|
+
- MCP prompts are defined in src/basic_memory/mcp/prompts/
|
|
58
|
+
- MCP tools should be atomic, composable operations
|
|
59
|
+
- Use `textwrap.dedent()` for multi-line string formatting in prompts and tools
|
|
60
|
+
- MCP Prompts are used to invoke tools and format content with instructions for an LLM
|
|
61
|
+
- Schema changes require Alembic migrations
|
|
62
|
+
- SQLite is used for indexing and full text search, files are source of truth
|
|
63
|
+
- Testing uses pytest with asyncio support (strict mode)
|
|
64
|
+
- Test database uses in-memory SQLite
|
|
65
|
+
- Avoid creating mocks in tests in most circumstances.
|
|
66
|
+
- Each test runs in a standalone environment with in memory SQLite and tmp_file directory
|
|
67
|
+
|
|
68
|
+
## BASIC MEMORY PRODUCT USAGE
|
|
69
|
+
|
|
70
|
+
### Knowledge Structure
|
|
71
|
+
|
|
72
|
+
- Entity: Any concept, document, or idea represented as a markdown file
|
|
73
|
+
- Observation: A categorized fact about an entity (`- [category] content`)
|
|
74
|
+
- Relation: A directional link between entities (`- relation_type [[Target]]`)
|
|
75
|
+
- Frontmatter: YAML metadata at the top of markdown files
|
|
76
|
+
- Knowledge representation follows precise markdown format:
|
|
77
|
+
- Observations with [category] prefixes
|
|
78
|
+
- Relations with WikiLinks [[Entity]]
|
|
79
|
+
- Frontmatter with metadata
|
|
80
|
+
|
|
81
|
+
### Basic Memory Commands
|
|
82
|
+
|
|
83
|
+
- Sync knowledge: `basic-memory sync` or `basic-memory sync --watch`
|
|
84
|
+
- Import from Claude: `basic-memory import claude conversations`
|
|
85
|
+
- Import from ChatGPT: `basic-memory import chatgpt`
|
|
86
|
+
- Import from Memory JSON: `basic-memory import memory-json`
|
|
87
|
+
- Check sync status: `basic-memory status`
|
|
88
|
+
- Tool access: `basic-memory tools` (provides CLI access to MCP tools)
|
|
89
|
+
- Guide: `basic-memory tools basic-memory-guide`
|
|
90
|
+
- Continue: `basic-memory tools continue-conversation --topic="search"`
|
|
91
|
+
|
|
92
|
+
### MCP Capabilities
|
|
93
|
+
|
|
94
|
+
- Basic Memory exposes these MCP tools to LLMs:
|
|
95
|
+
|
|
96
|
+
**Content Management:**
|
|
97
|
+
- `write_note(title, content, folder, tags)` - Create/update markdown notes with semantic observations and relations
|
|
98
|
+
- `read_note(identifier, page, page_size)` - Read notes by title, permalink, or memory:// URL with knowledge graph
|
|
99
|
+
awareness
|
|
100
|
+
- `read_file(path)` - Read raw file content (text, images, binaries) without knowledge graph processing
|
|
101
|
+
|
|
102
|
+
**Knowledge Graph Navigation:**
|
|
103
|
+
- `build_context(url, depth, timeframe)` - Navigate the knowledge graph via memory:// URLs for conversation
|
|
104
|
+
continuity
|
|
105
|
+
- `recent_activity(type, depth, timeframe)` - Get recently updated information with specified timeframe (e.g., "
|
|
106
|
+
1d", "1 week")
|
|
107
|
+
|
|
108
|
+
**Search & Discovery:**
|
|
109
|
+
- `search(query, page, page_size)` - Full-text search across all content with filtering options
|
|
110
|
+
|
|
111
|
+
**Visualization:**
|
|
112
|
+
- `canvas(nodes, edges, title, folder)` - Generate Obsidian canvas files for knowledge graph visualization
|
|
113
|
+
|
|
114
|
+
- MCP Prompts for better AI interaction:
|
|
115
|
+
- `ai_assistant_guide()` - Guidance on effectively using Basic Memory tools for AI assistants
|
|
116
|
+
- `continue_conversation(topic, timeframe)` - Continue previous conversations with relevant historical context
|
|
117
|
+
- `search(query, after_date)` - Search with detailed, formatted results for better context understanding
|
|
118
|
+
- `recent_activity(timeframe)` - View recently changed items with formatted output
|
|
119
|
+
- `json_canvas_spec()` - Full JSON Canvas specification for Obsidian visualization
|
|
120
|
+
|
|
121
|
+
## AI-Human Collaborative Development
|
|
122
|
+
|
|
123
|
+
Basic Memory emerged from and enables a new kind of development process that combines human and AI capabilities. Instead
|
|
124
|
+
of using AI just for code generation, we've developed a true collaborative workflow:
|
|
125
|
+
|
|
126
|
+
1. AI (LLM) writes initial implementation based on specifications and context
|
|
127
|
+
2. Human reviews, runs tests, and commits code with any necessary adjustments
|
|
128
|
+
3. Knowledge persists across conversations using Basic Memory's knowledge graph
|
|
129
|
+
4. Development continues seamlessly across different AI sessions with consistent context
|
|
130
|
+
5. Results improve through iterative collaboration and shared understanding
|
|
131
|
+
|
|
132
|
+
This approach has allowed us to tackle more complex challenges and build a more robust system than either humans or AI
|
|
133
|
+
could achieve independently.
|
|
134
|
+
|
|
135
|
+
## GitHub Integration
|
|
136
|
+
|
|
137
|
+
Basic Memory has taken AI-Human collaboration to the next level by integrating Claude directly into the development workflow through GitHub:
|
|
138
|
+
|
|
139
|
+
### GitHub MCP Tools
|
|
140
|
+
|
|
141
|
+
Using the GitHub Model Context Protocol server, Claude can now:
|
|
142
|
+
|
|
143
|
+
- **Repository Management**:
|
|
144
|
+
- View repository files and structure
|
|
145
|
+
- Read file contents
|
|
146
|
+
- Create new branches
|
|
147
|
+
- Create and update files
|
|
148
|
+
|
|
149
|
+
- **Issue Management**:
|
|
150
|
+
- Create new issues
|
|
151
|
+
- Comment on existing issues
|
|
152
|
+
- Close and update issues
|
|
153
|
+
- Search across issues
|
|
154
|
+
|
|
155
|
+
- **Pull Request Workflow**:
|
|
156
|
+
- Create pull requests
|
|
157
|
+
- Review code changes
|
|
158
|
+
- Add comments to PRs
|
|
159
|
+
|
|
160
|
+
This integration enables Claude to participate as a full team member in the development process, not just as a code generation tool. Claude's GitHub account ([bm-claudeai](https://github.com/bm-claudeai)) is a member of the Basic Machines organization with direct contributor access to the codebase.
|
|
161
|
+
|
|
162
|
+
### Collaborative Development Process
|
|
163
|
+
|
|
164
|
+
With GitHub integration, the development workflow includes:
|
|
165
|
+
|
|
166
|
+
1. **Direct code review** - Claude can analyze PRs and provide detailed feedback
|
|
167
|
+
2. **Contribution tracking** - All of Claude's contributions are properly attributed in the Git history
|
|
168
|
+
3. **Branch management** - Claude can create feature branches for implementations
|
|
169
|
+
4. **Documentation maintenance** - Claude can keep documentation updated as the code evolves
|
|
170
|
+
|
|
171
|
+
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.
|
|
@@ -27,7 +27,12 @@ project and how to get started as a developer.
|
|
|
27
27
|
|
|
28
28
|
> **Note**: Basic Memory uses [just](https://just.systems) as a modern command runner. Install with `brew install just` or `cargo install just`.
|
|
29
29
|
|
|
30
|
-
3. **
|
|
30
|
+
3. **Activate the Virtual Environment**
|
|
31
|
+
```bash
|
|
32
|
+
source .venv/bin/activate
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
4. **Run the Tests**:
|
|
31
36
|
```bash
|
|
32
37
|
# Run all tests
|
|
33
38
|
just test
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
FROM python:3.12-slim-bookworm
|
|
2
2
|
|
|
3
|
+
# Build arguments for user ID and group ID (defaults to 1000)
|
|
4
|
+
ARG UID=1000
|
|
5
|
+
ARG GID=1000
|
|
6
|
+
|
|
3
7
|
# Copy uv from official image
|
|
4
8
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
|
5
9
|
|
|
@@ -7,6 +11,11 @@ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
|
|
7
11
|
ENV PYTHONUNBUFFERED=1 \
|
|
8
12
|
PYTHONDONTWRITEBYTECODE=1
|
|
9
13
|
|
|
14
|
+
# Create a group and user with the provided UID/GID
|
|
15
|
+
# Check if the GID already exists, if not create appgroup
|
|
16
|
+
RUN (getent group ${GID} || groupadd --gid ${GID} appgroup) && \
|
|
17
|
+
useradd --uid ${UID} --gid ${GID} --create-home --shell /bin/bash appuser
|
|
18
|
+
|
|
10
19
|
# Copy the project into the image
|
|
11
20
|
ADD . /app
|
|
12
21
|
|
|
@@ -14,13 +23,17 @@ ADD . /app
|
|
|
14
23
|
WORKDIR /app
|
|
15
24
|
RUN uv sync --locked
|
|
16
25
|
|
|
17
|
-
# Create
|
|
18
|
-
RUN mkdir -p /app/data
|
|
26
|
+
# Create necessary directories and set ownership
|
|
27
|
+
RUN mkdir -p /app/data /app/.basic-memory && \
|
|
28
|
+
chown -R appuser:${GID} /app
|
|
19
29
|
|
|
20
30
|
# Set default data directory and add venv to PATH
|
|
21
31
|
ENV BASIC_MEMORY_HOME=/app/data \
|
|
22
32
|
PATH="/app/.venv/bin:$PATH"
|
|
23
33
|
|
|
34
|
+
# Switch to the non-root user
|
|
35
|
+
USER appuser
|
|
36
|
+
|
|
24
37
|
# Expose port
|
|
25
38
|
EXPOSE 8000
|
|
26
39
|
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Legal File Inventory Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide documents the comprehensive file inventory script created for Basic Memory's legal documentation needs, including copyright assignments and company agreement exhibits.
|
|
6
|
+
|
|
7
|
+
## Repository Analysis Summary
|
|
8
|
+
|
|
9
|
+
### Repository Structure
|
|
10
|
+
- **Primary Language**: Python (3,958 files)
|
|
11
|
+
- **License**: GNU Affero General Public License v3.0
|
|
12
|
+
- **Total Contributors**: 12 identified contributors
|
|
13
|
+
- **Main Contributors**:
|
|
14
|
+
- `phernandez@basicmachines.co` / `paul@basicmachines.co` (Paul Hernandez) - 700+ commits
|
|
15
|
+
- `groksrc@gmail.com` / `groksrc@users.noreply.github.com` (Drew Cain) - 18+ commits
|
|
16
|
+
- Various AI bots and automated systems
|
|
17
|
+
|
|
18
|
+
### File Type Distribution
|
|
19
|
+
Based on the analysis, the repository contains:
|
|
20
|
+
|
|
21
|
+
| Extension | Count | Purpose |
|
|
22
|
+
|-----------|-------|---------|
|
|
23
|
+
| `.py` | 3,958 | Python source code |
|
|
24
|
+
| `.pyi` | 4,536 | Python type stubs (dependencies) |
|
|
25
|
+
| `.pyc` | 1,435 | Compiled Python (excluded from inventory) |
|
|
26
|
+
| `.md` | 34 | Documentation files |
|
|
27
|
+
| `.toml` | 179 | Configuration files |
|
|
28
|
+
| `.html` | 119 | Coverage reports and documentation |
|
|
29
|
+
| `.txt` | 127 | Various text files |
|
|
30
|
+
|
|
31
|
+
### Contributors by Email Domain
|
|
32
|
+
|
|
33
|
+
**Basic Machines Contributors:**
|
|
34
|
+
- `phernandez@basicmachines.co` - 547 commits (Primary maintainer)
|
|
35
|
+
- `paul@basicmachines.co` / `paulmh@gmail.com` - 170 commits (Paul Hernandez)
|
|
36
|
+
- `claude@basicmachines.co` - 3 commits (AI assistant)
|
|
37
|
+
|
|
38
|
+
**External Contributors:**
|
|
39
|
+
- `groksrc@gmail.com` / `groksrc@users.noreply.github.com` - 18 commits (Drew Cain)
|
|
40
|
+
- Various one-time contributors (1-2 commits each)
|
|
41
|
+
|
|
42
|
+
**Automated Systems:**
|
|
43
|
+
- GitHub Actions, semantic-release, and other bots
|
|
44
|
+
|
|
45
|
+
## Legal Inventory Script Features
|
|
46
|
+
|
|
47
|
+
### What It Includes
|
|
48
|
+
|
|
49
|
+
**Source Files:**
|
|
50
|
+
- All Python source code (`.py` files)
|
|
51
|
+
- Configuration files (`.toml`, `.yaml`, `.json`, etc.)
|
|
52
|
+
- Documentation (`.md`, `.rst`, `.txt`)
|
|
53
|
+
- Build and deployment scripts
|
|
54
|
+
- Database migrations and SQL files
|
|
55
|
+
- Legal and license files
|
|
56
|
+
|
|
57
|
+
**Metadata for Each File:**
|
|
58
|
+
- File path, size, and creation/modification dates
|
|
59
|
+
- Git history (creation date, last modified, commit count)
|
|
60
|
+
- Contributors and their line contributions
|
|
61
|
+
- Primary author identification
|
|
62
|
+
- File categorization
|
|
63
|
+
- SHA-256 hash for integrity verification
|
|
64
|
+
|
|
65
|
+
### What It Excludes
|
|
66
|
+
|
|
67
|
+
**Generated/Build Artifacts:**
|
|
68
|
+
- `__pycache__/` and `.pyc` files
|
|
69
|
+
- Build directories (`build/`, `dist/`, `htmlcov/`)
|
|
70
|
+
- Coverage reports and cache files
|
|
71
|
+
|
|
72
|
+
**Dependencies:**
|
|
73
|
+
- Virtual environment files (`.venv/`, `venv/`)
|
|
74
|
+
- Third-party packages (`site-packages/`, `*.dist-info/`)
|
|
75
|
+
- Lock files (`uv.lock`, `package-lock.json`)
|
|
76
|
+
|
|
77
|
+
**IDE/Editor Files:**
|
|
78
|
+
- `.idea/`, `.vscode/`, `.DS_Store`
|
|
79
|
+
- Temporary and swap files
|
|
80
|
+
|
|
81
|
+
**Version Control:**
|
|
82
|
+
- `.git/` directory contents
|
|
83
|
+
- Git configuration files
|
|
84
|
+
|
|
85
|
+
## Usage Instructions
|
|
86
|
+
|
|
87
|
+
### Basic Usage
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Generate CSV inventory (default)
|
|
91
|
+
python3 legal_file_inventory.py
|
|
92
|
+
|
|
93
|
+
# Generate Markdown report
|
|
94
|
+
python3 legal_file_inventory.py --format markdown --output legal_report.md
|
|
95
|
+
|
|
96
|
+
# Generate JSON with full metadata
|
|
97
|
+
python3 legal_file_inventory.py --format json --output legal_data.json
|
|
98
|
+
|
|
99
|
+
# Specify different repository path
|
|
100
|
+
python3 legal_file_inventory.py --repo-path /path/to/repo --output inventory.csv
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Command Line Options
|
|
104
|
+
|
|
105
|
+
- `--output`, `-o`: Output file path (default: `basic_memory_legal_inventory.csv`)
|
|
106
|
+
- `--format`, `-f`: Output format - `csv`, `json`, or `markdown` (default: `csv`)
|
|
107
|
+
- `--repo-path`, `-r`: Repository path (default: current directory)
|
|
108
|
+
|
|
109
|
+
### Output Formats
|
|
110
|
+
|
|
111
|
+
**CSV Format:**
|
|
112
|
+
- Suitable for spreadsheet applications
|
|
113
|
+
- Contains all metadata fields
|
|
114
|
+
- Contributors stored as JSON string in separate column
|
|
115
|
+
|
|
116
|
+
**JSON Format:**
|
|
117
|
+
- Complete structured data
|
|
118
|
+
- Includes summary statistics and detailed file information
|
|
119
|
+
- Best for programmatic processing
|
|
120
|
+
|
|
121
|
+
**Markdown Format:**
|
|
122
|
+
- Human-readable report
|
|
123
|
+
- Summary statistics and contributor rankings
|
|
124
|
+
- Detailed table of all files
|
|
125
|
+
|
|
126
|
+
## Legal Documentation Applications
|
|
127
|
+
|
|
128
|
+
### Copyright Assignment Use Cases
|
|
129
|
+
|
|
130
|
+
1. **Contributor Identification**: The script identifies all contributors to each file based on git blame analysis
|
|
131
|
+
2. **Primary Author Recognition**: Determines the primary author of each file (contributor with most lines)
|
|
132
|
+
3. **Contribution Metrics**: Provides line counts and commit counts per contributor
|
|
133
|
+
4. **File Categorization**: Groups files by purpose (source code, documentation, configuration, etc.)
|
|
134
|
+
|
|
135
|
+
### Company Agreement Exhibits
|
|
136
|
+
|
|
137
|
+
The inventory provides comprehensive documentation of:
|
|
138
|
+
|
|
139
|
+
1. **Intellectual Property Scope**: All source code files and their origins
|
|
140
|
+
2. **Contributor Tracking**: Complete list of all individuals who have contributed code
|
|
141
|
+
3. **File Integrity**: SHA-256 hashes for verification of file contents
|
|
142
|
+
4. **Historical Documentation**: Git creation dates and modification history
|
|
143
|
+
|
|
144
|
+
### Due Diligence Documentation
|
|
145
|
+
|
|
146
|
+
The script generates data suitable for:
|
|
147
|
+
|
|
148
|
+
1. **Legal Review**: Comprehensive file listing with contributor information
|
|
149
|
+
2. **IP Audit**: Identification of all copyright holders
|
|
150
|
+
3. **License Compliance**: Verification of file ownership and licensing
|
|
151
|
+
4. **Asset Documentation**: Complete inventory of company code assets
|
|
152
|
+
|
|
153
|
+
## Integration with Legal Processes
|
|
154
|
+
|
|
155
|
+
### Recommended Workflow
|
|
156
|
+
|
|
157
|
+
1. **Generate Inventory**: Run the script to create current file inventory
|
|
158
|
+
2. **Legal Review**: Have legal counsel review the contributor list and file categorization
|
|
159
|
+
3. **Copyright Assignment**: Use contributor data to ensure proper copyright assignments
|
|
160
|
+
4. **Document Attachment**: Include inventory as exhibit in company agreements
|
|
161
|
+
5. **Regular Updates**: Re-run inventory for significant releases or legal milestones
|
|
162
|
+
|
|
163
|
+
### Key Legal Considerations
|
|
164
|
+
|
|
165
|
+
**AGPL-3.0 License:**
|
|
166
|
+
- All files are under AGPL-3.0 unless otherwise specified
|
|
167
|
+
- Contributors retain copyright but license under AGPL-3.0 terms
|
|
168
|
+
- Company needs proper copyright assignments for proprietary licensing
|
|
169
|
+
|
|
170
|
+
**Contributor Rights:**
|
|
171
|
+
- External contributors may retain rights to their contributions
|
|
172
|
+
- Proper contributor license agreements (CLAs) should be in place
|
|
173
|
+
- AI-generated content may have different legal status
|
|
174
|
+
|
|
175
|
+
**File Categories for Legal Review:**
|
|
176
|
+
- **Source Code**: Core IP, requires copyright assignment
|
|
177
|
+
- **Configuration**: May contain proprietary deployment information
|
|
178
|
+
- **Documentation**: Usually less sensitive but may contain trade secrets
|
|
179
|
+
- **Legal/License**: Critical for compliance verification
|
|
180
|
+
|
|
181
|
+
## Maintenance and Updates
|
|
182
|
+
|
|
183
|
+
### When to Regenerate Inventory
|
|
184
|
+
|
|
185
|
+
- Before major releases
|
|
186
|
+
- During legal document preparation
|
|
187
|
+
- After significant contributor additions
|
|
188
|
+
- For annual compliance reviews
|
|
189
|
+
- During acquisition or investment processes
|
|
190
|
+
|
|
191
|
+
### Validation Steps
|
|
192
|
+
|
|
193
|
+
1. Verify contributor email mapping is accurate
|
|
194
|
+
2. Check that file categorization makes sense
|
|
195
|
+
3. Ensure excluded files are appropriate
|
|
196
|
+
4. Review contributor counts against expectations
|
|
197
|
+
5. Validate file hashes for integrity
|
|
198
|
+
|
|
199
|
+
## Technical Implementation Notes
|
|
200
|
+
|
|
201
|
+
### Git Integration
|
|
202
|
+
- Uses `git blame --line-porcelain` for detailed contributor analysis
|
|
203
|
+
- Tracks file history with `git log --follow`
|
|
204
|
+
- Handles renamed files and complex git histories
|
|
205
|
+
|
|
206
|
+
### Performance Considerations
|
|
207
|
+
- Scans repository incrementally to handle large codebases
|
|
208
|
+
- Excludes binary dependencies to reduce processing time
|
|
209
|
+
- Caches git operations where possible
|
|
210
|
+
|
|
211
|
+
### Error Handling
|
|
212
|
+
- Gracefully handles files not in git
|
|
213
|
+
- Continues processing if individual files fail
|
|
214
|
+
- Provides detailed error reporting
|
|
215
|
+
|
|
216
|
+
## Security and Privacy
|
|
217
|
+
|
|
218
|
+
### Data Sensitivity
|
|
219
|
+
- Contains contributor names and email addresses
|
|
220
|
+
- May reveal internal file structure and organization
|
|
221
|
+
- Should be treated as confidential legal documentation
|
|
222
|
+
|
|
223
|
+
### Recommended Handling
|
|
224
|
+
- Limit access to legal and executive team
|
|
225
|
+
- Store in secure, access-controlled systems
|
|
226
|
+
- Consider redacting contributor emails for external sharing
|
|
227
|
+
- Regular cleanup of generated inventory files
|
|
228
|
+
|
|
229
|
+
## Troubleshooting
|
|
230
|
+
|
|
231
|
+
### Common Issues
|
|
232
|
+
|
|
233
|
+
**Git Not Available:**
|
|
234
|
+
- Ensure git is installed and repository is initialized
|
|
235
|
+
- Check that the script is run from within the repository
|
|
236
|
+
|
|
237
|
+
**Permission Errors:**
|
|
238
|
+
- Ensure read access to all repository files
|
|
239
|
+
- Check write permissions for output directory
|
|
240
|
+
|
|
241
|
+
**Large Repository Performance:**
|
|
242
|
+
- Consider running on subsets of files for very large repositories
|
|
243
|
+
- Use `--repo-path` to target specific subdirectories
|
|
244
|
+
|
|
245
|
+
**Contributor Mapping Issues:**
|
|
246
|
+
- Git usernames may not match real identities
|
|
247
|
+
- Consider post-processing to normalize contributor names
|
|
248
|
+
- Review .mailmap files for git identity consolidation
|
|
249
|
+
|
|
250
|
+
This comprehensive legal file inventory system provides the foundation for proper intellectual property documentation and legal compliance for the Basic Memory project.
|