basic-memory 0.12.3__tar.gz → 0.13.0b1__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.13.0b1/.env.oauth.example +55 -0
- basic_memory-0.13.0b1/.github/workflows/claude.yml +81 -0
- basic_memory-0.13.0b1/.github/workflows/dev-release.yml +53 -0
- basic_memory-0.13.0b1/.github/workflows/release.yml +60 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.gitignore +2 -1
- basic_memory-0.13.0b1/.mcp.json +14 -0
- basic_memory-0.13.0b1/AUTH.md +42 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/CHANGELOG.md +76 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/CLAUDE.md +36 -1
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/CONTRIBUTING.md +34 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/Makefile +7 -15
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/PKG-INFO +23 -1
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/README.md +18 -0
- basic_memory-0.13.0b1/RELEASE_NOTES_v0.13.0.md +237 -0
- basic_memory-0.13.0b1/TESTING.md +337 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/AI Assistant Guide.md +154 -144
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/CLI Reference.md +101 -19
- basic_memory-0.13.0b1/docs/Claude.ai Integration.md +335 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/Getting Started with Basic Memory.md +90 -28
- basic_memory-0.13.0b1/docs/OAuth Authentication Guide.md +259 -0
- basic_memory-0.13.0b1/docs/Supabase OAuth Setup.md +311 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/User Guide.md +127 -26
- basic_memory-0.13.0b1/examples/testing/Test Note Creation - Basic Functionality.md +69 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/pyproject.toml +40 -17
- basic_memory-0.13.0b1/src/basic_memory/__init__.py +9 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/env.py +1 -1
- basic_memory-0.13.0b1/src/basic_memory/alembic/versions/5fe1ab1ccebe_add_projects_table.py +108 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/cc7172b46608_update_search_index_schema.py +0 -5
- basic_memory-0.13.0b1/src/basic_memory/api/app.py +89 -0
- basic_memory-0.13.0b1/src/basic_memory/api/routers/__init__.py +11 -0
- basic_memory-0.13.0b1/src/basic_memory/api/routers/directory_router.py +63 -0
- basic_memory-0.13.0b1/src/basic_memory/api/routers/importer_router.py +152 -0
- basic_memory-0.13.0b1/src/basic_memory/api/routers/knowledge_router.py +277 -0
- basic_memory-0.13.0b1/src/basic_memory/api/routers/management_router.py +78 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/api/routers/memory_router.py +4 -59
- basic_memory-0.13.0b1/src/basic_memory/api/routers/project_router.py +230 -0
- basic_memory-0.13.0b1/src/basic_memory/api/routers/prompt_router.py +260 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/api/routers/search_router.py +3 -21
- basic_memory-0.13.0b1/src/basic_memory/api/routers/utils.py +130 -0
- basic_memory-0.13.0b1/src/basic_memory/api/template_loader.py +292 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/app.py +20 -21
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/__init__.py +2 -1
- basic_memory-0.13.0b1/src/basic_memory/cli/commands/auth.py +136 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/db.py +3 -3
- basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_chatgpt.py +82 -0
- basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_claude_conversations.py +84 -0
- basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_claude_projects.py +83 -0
- basic_memory-0.13.0b1/src/basic_memory/cli/commands/import_memory_json.py +87 -0
- basic_memory-0.13.0b1/src/basic_memory/cli/commands/mcp.py +88 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/project.py +99 -67
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/status.py +19 -9
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/sync.py +44 -58
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/main.py +1 -5
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/config.py +145 -88
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/db.py +6 -4
- basic_memory-0.13.0b1/src/basic_memory/deps.py +389 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/__init__.py +27 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/base.py +79 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/chatgpt_importer.py +222 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/claude_conversations_importer.py +172 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/claude_projects_importer.py +148 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/memory_json_importer.py +93 -0
- basic_memory-0.13.0b1/src/basic_memory/importers/utils.py +58 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/markdown/entity_parser.py +5 -2
- basic_memory-0.13.0b1/src/basic_memory/mcp/auth_provider.py +270 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/external_auth_provider.py +321 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/project_session.py +103 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/prompts/continue_conversation.py +61 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/recent_activity.py +19 -3
- basic_memory-0.13.0b1/src/basic_memory/mcp/prompts/search.py +56 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/utils.py +3 -3
- {basic_memory-0.12.3/src/basic_memory/mcp/tools → basic_memory-0.13.0b1/src/basic_memory/mcp/resources}/project_info.py +6 -2
- basic_memory-0.13.0b1/src/basic_memory/mcp/server.py +111 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/supabase_auth_provider.py +463 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/__init__.py +20 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/build_context.py +11 -1
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/canvas.py +15 -2
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/delete_note.py +12 -4
- basic_memory-0.13.0b1/src/basic_memory/mcp/tools/edit_note.py +297 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/tools/list_directory.py +154 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/tools/move_note.py +87 -0
- basic_memory-0.13.0b1/src/basic_memory/mcp/tools/project_management.py +300 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/read_content.py +15 -6
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/read_note.py +17 -5
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/recent_activity.py +11 -2
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/search.py +10 -1
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/utils.py +137 -12
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/tools/write_note.py +11 -15
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/models/__init__.py +3 -2
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/models/knowledge.py +16 -4
- basic_memory-0.13.0b1/src/basic_memory/models/project.py +80 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/models/search.py +8 -5
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/__init__.py +2 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/entity_repository.py +8 -3
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/observation_repository.py +35 -3
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/project_info_repository.py +3 -2
- basic_memory-0.13.0b1/src/basic_memory/repository/project_repository.py +85 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/relation_repository.py +8 -2
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/repository.py +107 -15
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/repository/search_repository.py +87 -27
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/schemas/__init__.py +6 -0
- basic_memory-0.13.0b1/src/basic_memory/schemas/directory.py +30 -0
- basic_memory-0.13.0b1/src/basic_memory/schemas/importer.py +34 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/schemas/memory.py +26 -12
- basic_memory-0.13.0b1/src/basic_memory/schemas/project_info.py +206 -0
- basic_memory-0.13.0b1/src/basic_memory/schemas/prompt.py +90 -0
- basic_memory-0.13.0b1/src/basic_memory/schemas/request.py +112 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/schemas/search.py +1 -1
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/services/__init__.py +2 -1
- basic_memory-0.13.0b1/src/basic_memory/services/context_service.py +401 -0
- basic_memory-0.13.0b1/src/basic_memory/services/directory_service.py +167 -0
- basic_memory-0.13.0b1/src/basic_memory/services/entity_service.py +702 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/services/exceptions.py +6 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/services/file_service.py +14 -15
- basic_memory-0.13.0b1/src/basic_memory/services/initialization.py +220 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/services/link_resolver.py +16 -8
- basic_memory-0.13.0b1/src/basic_memory/services/project_service.py +548 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/services/search_service.py +77 -2
- basic_memory-0.13.0b1/src/basic_memory/sync/background_sync.py +25 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/sync/sync_service.py +10 -9
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/sync/watch_service.py +63 -39
- basic_memory-0.13.0b1/src/basic_memory/templates/prompts/continue_conversation.hbs +110 -0
- basic_memory-0.13.0b1/src/basic_memory/templates/prompts/search.hbs +101 -0
- basic_memory-0.13.0b1/test-int/conftest.py +231 -0
- basic_memory-0.13.0b1/test-int/mcp/.coverage.Pauls-MacBook-Pro-2.local.66900.XDhpuELx +0 -0
- basic_memory-0.13.0b1/test-int/mcp/test_delete_note_integration.py +422 -0
- basic_memory-0.13.0b1/test-int/mcp/test_edit_note_integration.py +608 -0
- basic_memory-0.13.0b1/test-int/mcp/test_list_directory_integration.py +467 -0
- basic_memory-0.13.0b1/test-int/mcp/test_move_note_integration.py +515 -0
- basic_memory-0.13.0b1/test-int/mcp/test_project_management_integration.py +637 -0
- basic_memory-0.13.0b1/test-int/mcp/test_read_content_integration.py +367 -0
- basic_memory-0.13.0b1/test-int/mcp/test_read_note_integration.py +46 -0
- basic_memory-0.13.0b1/test-int/mcp/test_search_integration.py +468 -0
- basic_memory-0.13.0b1/test-int/mcp/test_write_note_integration.py +284 -0
- basic_memory-0.13.0b1/tests/.coverage.Pauls-MacBook-Pro-2.local.28077.XqMfGOxx +0 -0
- basic_memory-0.13.0b1/tests/api/.coverage.Pauls-MacBook-Pro-2.local.60974.XPpBfqqx +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/api/conftest.py +17 -3
- basic_memory-0.13.0b1/tests/api/test_continue_conversation_template.py +142 -0
- basic_memory-0.13.0b1/tests/api/test_directory_router.py +279 -0
- basic_memory-0.13.0b1/tests/api/test_importer_router.py +465 -0
- basic_memory-0.13.0b1/tests/api/test_knowledge_router.py +1240 -0
- basic_memory-0.13.0b1/tests/api/test_management_router.py +211 -0
- basic_memory-0.13.0b1/tests/api/test_memory_router.py +146 -0
- basic_memory-0.13.0b1/tests/api/test_project_router.py +198 -0
- basic_memory-0.13.0b1/tests/api/test_project_router_operations.py +55 -0
- basic_memory-0.13.0b1/tests/api/test_prompt_router.py +155 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/api/test_resource_router.py +47 -35
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/api/test_search_router.py +25 -21
- basic_memory-0.13.0b1/tests/api/test_search_template.py +158 -0
- basic_memory-0.13.0b1/tests/api/test_template_loader.py +219 -0
- basic_memory-0.13.0b1/tests/api/test_template_loader_helpers.py +203 -0
- basic_memory-0.13.0b1/tests/cli/.coverage.Pauls-MacBook-Pro-2.local.63666.XDIUQNrx +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/conftest.py +8 -6
- basic_memory-0.13.0b1/tests/cli/test_auth_commands.py +352 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_cli_tools.py +28 -26
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_import_chatgpt.py +2 -81
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_import_claude_conversations.py +3 -29
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_import_claude_projects.py +2 -37
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_import_memory_json.py +2 -22
- basic_memory-0.13.0b1/tests/cli/test_project_commands.py +146 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_project_info.py +7 -5
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_status.py +7 -5
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_sync.py +8 -20
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/conftest.py +193 -44
- basic_memory-0.13.0b1/tests/importers/test_importer_base.py +130 -0
- basic_memory-0.13.0b1/tests/importers/test_importer_utils.py +57 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_entity_parser.py +10 -10
- basic_memory-0.13.0b1/tests/mcp/.coverage.Pauls-MacBook-Pro-2.local.63904.XiAZuuhx +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/conftest.py +8 -6
- basic_memory-0.13.0b1/tests/mcp/test_auth_provider.py +313 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_prompts.py +5 -53
- basic_memory-0.12.3/tests/mcp/test_tool_project_info.py → basic_memory-0.13.0b1/tests/mcp/test_resource_project_info.py +22 -5
- basic_memory-0.13.0b1/tests/mcp/test_server.py +144 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_build_context.py +23 -8
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_canvas.py +11 -11
- basic_memory-0.13.0b1/tests/mcp/test_tool_edit_note.py +359 -0
- basic_memory-0.13.0b1/tests/mcp/test_tool_list_directory.py +212 -0
- basic_memory-0.13.0b1/tests/mcp/test_tool_move_note.py +439 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_recent_activity.py +19 -11
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_utils.py +12 -3
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_write_note.py +113 -77
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/repository/test_entity_repository.py +15 -3
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/repository/test_observation_repository.py +21 -7
- basic_memory-0.13.0b1/tests/repository/test_project_info_repository.py +36 -0
- basic_memory-0.13.0b1/tests/repository/test_project_repository.py +269 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/repository/test_relation_repository.py +5 -3
- basic_memory-0.13.0b1/tests/repository/test_search_repository.py +303 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/schemas/test_schemas.py +76 -1
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/services/test_context_service.py +98 -25
- basic_memory-0.13.0b1/tests/services/test_directory_service.py +188 -0
- basic_memory-0.13.0b1/tests/services/test_entity_service.py +1660 -0
- basic_memory-0.13.0b1/tests/services/test_initialization.py +355 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/services/test_link_resolver.py +49 -0
- basic_memory-0.13.0b1/tests/services/test_project_service.py +301 -0
- basic_memory-0.13.0b1/tests/services/test_project_service_operations.py +134 -0
- basic_memory-0.13.0b1/tests/services/test_search_service.py +743 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/sync/test_sync_service.py +123 -112
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/sync/test_sync_wikilink_issue.py +6 -6
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/sync/test_tmp_files.py +24 -46
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/sync/test_watch_service.py +77 -59
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/sync/test_watch_service_edge_cases.py +10 -17
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/utils/test_permalink_formatting.py +3 -3
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/utils/test_utf8_handling.py +4 -4
- basic_memory-0.13.0b1/uv.lock +1586 -0
- basic_memory-0.12.3/.github/workflows/claude-code-actions.yml +0 -16
- basic_memory-0.12.3/.github/workflows/release.yml +0 -96
- basic_memory-0.12.3/installer/Basic.icns +0 -0
- basic_memory-0.12.3/installer/README.md +0 -26
- basic_memory-0.12.3/installer/icon.svg +0 -64
- basic_memory-0.12.3/installer/installer.py +0 -93
- basic_memory-0.12.3/installer/make_icons.sh +0 -27
- basic_memory-0.12.3/installer/setup.py +0 -40
- basic_memory-0.12.3/src/basic_memory/__init__.py +0 -3
- basic_memory-0.12.3/src/basic_memory/api/app.py +0 -59
- basic_memory-0.12.3/src/basic_memory/api/routers/__init__.py +0 -9
- basic_memory-0.12.3/src/basic_memory/api/routers/knowledge_router.py +0 -188
- basic_memory-0.12.3/src/basic_memory/api/routers/project_info_router.py +0 -274
- basic_memory-0.12.3/src/basic_memory/cli/commands/import_chatgpt.py +0 -258
- basic_memory-0.12.3/src/basic_memory/cli/commands/import_claude_conversations.py +0 -210
- basic_memory-0.12.3/src/basic_memory/cli/commands/import_claude_projects.py +0 -193
- basic_memory-0.12.3/src/basic_memory/cli/commands/import_memory_json.py +0 -144
- basic_memory-0.12.3/src/basic_memory/cli/commands/mcp.py +0 -35
- basic_memory-0.12.3/src/basic_memory/deps.py +0 -192
- basic_memory-0.12.3/src/basic_memory/mcp/main.py +0 -24
- basic_memory-0.12.3/src/basic_memory/mcp/prompts/continue_conversation.py +0 -111
- basic_memory-0.12.3/src/basic_memory/mcp/prompts/search.py +0 -182
- basic_memory-0.12.3/src/basic_memory/mcp/server.py +0 -37
- basic_memory-0.12.3/src/basic_memory/schemas/project_info.py +0 -96
- basic_memory-0.12.3/src/basic_memory/schemas/request.py +0 -58
- basic_memory-0.12.3/src/basic_memory/services/context_service.py +0 -288
- basic_memory-0.12.3/src/basic_memory/services/entity_service.py +0 -322
- basic_memory-0.12.3/src/basic_memory/services/initialization.py +0 -143
- basic_memory-0.12.3/tests/api/test_knowledge_router.py +0 -482
- basic_memory-0.12.3/tests/api/test_memory_router.py +0 -136
- basic_memory-0.12.3/tests/api/test_project_info_router.py +0 -110
- basic_memory-0.12.3/tests/cli/test_project_commands.py +0 -208
- basic_memory-0.12.3/tests/edit_file_test.py +0 -19
- basic_memory-0.12.3/tests/services/test_entity_service.py +0 -591
- basic_memory-0.12.3/tests/services/test_initialization.py +0 -49
- basic_memory-0.12.3/tests/services/test_search_service.py +0 -345
- basic_memory-0.12.3/tests/test_basic_memory.py +0 -47
- basic_memory-0.12.3/tests/test_config.py +0 -156
- basic_memory-0.12.3/uv.lock +0 -1481
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/documentation.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/dependabot.yml +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/workflows/pr-title.yml +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.github/workflows/test.yml +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/.python-version +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/CITATION.cff +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/CLA.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/Dockerfile +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/LICENSE +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/SECURITY.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/basic-memory.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/Canvas.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/Knowledge Format.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/Obsidian Integration.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/Technical Information.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/Welcome to Basic memory.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/Canvas.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/Claude-Obsidian-Demo.mp4 +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/Prompt.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/disk-ai-logo-400x400.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/disk-ai-logo.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/prompt 1.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/prompt2.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/prompt3.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/attachments/prompt4.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/docs/publish.js +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Brewing Equipment.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Bean Origins.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Brewing Methods.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Flavor Map.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Coffee Knowledge Base.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Flavor Extraction.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Perfect Pour Over Coffee Method.canvas +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/examples/Coffee Notes/Tasting Notes.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/llms-install.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/memory.json +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/scripts/install.sh +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/smithery.yaml +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/alembic.ini +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/migrations.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/script.py.mako +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/502b60eaa905_remove_required_from_entity_permalink.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/alembic/versions/b3c3938bacdb_relation_to_name_unique_index.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/api/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/api/routers/resource_router.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/cli/commands/tool.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/file_utils.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/markdown/markdown_processor.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/markdown/plugins.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/markdown/schemas.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/markdown/utils.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/async_client.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/prompts/ai_assistant_guide.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/mcp/resources/ai_assistant_guide.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/models/base.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/schemas/base.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/schemas/delete.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/schemas/response.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/services/service.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/sync/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/src/basic_memory/utils.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/static/ai_assistant_guide.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/static/json_canvas_spec_1_0.md +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/Non-MarkdownFileSupport.pdf +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/Screenshot.png +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/cli/test_version.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_markdown_plugins.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_markdown_processor.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_observation_edge_cases.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/markdown/test_task_detection.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_resources.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_read_note.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_resource.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/mcp/test_tool_search.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/repository/test_repository.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/schemas/test_memory_url.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/schemas/test_search.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/services/test_file_service.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/utils/test_file_utils.py +0 -0
- {basic_memory-0.12.3 → basic_memory-0.13.0b1}/tests/utils/test_parse_tags.py +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# OAuth Configuration for Basic Memory MCP Server
|
|
2
|
+
# Copy this file to .env and update the values
|
|
3
|
+
|
|
4
|
+
# Enable OAuth authentication
|
|
5
|
+
FASTMCP_AUTH_ENABLED=true
|
|
6
|
+
|
|
7
|
+
# OAuth provider type: basic, github, google, or supabase
|
|
8
|
+
# - basic: Built-in OAuth provider with in-memory storage
|
|
9
|
+
# - github: Integrate with GitHub OAuth
|
|
10
|
+
# - google: Integrate with Google OAuth
|
|
11
|
+
# - supabase: Integrate with Supabase Auth (recommended for production)
|
|
12
|
+
FASTMCP_AUTH_PROVIDER=basic
|
|
13
|
+
|
|
14
|
+
# OAuth issuer URL (your MCP server URL)
|
|
15
|
+
FASTMCP_AUTH_ISSUER_URL=http://localhost:8000
|
|
16
|
+
|
|
17
|
+
# Documentation URL for OAuth endpoints
|
|
18
|
+
FASTMCP_AUTH_DOCS_URL=http://localhost:8000/docs/oauth
|
|
19
|
+
|
|
20
|
+
# Required scopes (comma-separated)
|
|
21
|
+
# Examples: read,write,admin
|
|
22
|
+
FASTMCP_AUTH_REQUIRED_SCOPES=read,write
|
|
23
|
+
|
|
24
|
+
# Secret key for JWT tokens (auto-generated if not set)
|
|
25
|
+
# FASTMCP_AUTH_SECRET_KEY=your-secret-key-here
|
|
26
|
+
|
|
27
|
+
# Enable client registration endpoint
|
|
28
|
+
FASTMCP_AUTH_CLIENT_REGISTRATION_ENABLED=true
|
|
29
|
+
|
|
30
|
+
# Enable token revocation endpoint
|
|
31
|
+
FASTMCP_AUTH_REVOCATION_ENABLED=true
|
|
32
|
+
|
|
33
|
+
# Default scopes for new clients
|
|
34
|
+
FASTMCP_AUTH_DEFAULT_SCOPES=read
|
|
35
|
+
|
|
36
|
+
# Valid scopes that can be requested
|
|
37
|
+
FASTMCP_AUTH_VALID_SCOPES=read,write,admin
|
|
38
|
+
|
|
39
|
+
# Client secret expiry in seconds (optional)
|
|
40
|
+
# FASTMCP_AUTH_CLIENT_SECRET_EXPIRY=86400
|
|
41
|
+
|
|
42
|
+
# GitHub OAuth settings (if using github provider)
|
|
43
|
+
# GITHUB_CLIENT_ID=your-github-client-id
|
|
44
|
+
# GITHUB_CLIENT_SECRET=your-github-client-secret
|
|
45
|
+
|
|
46
|
+
# Google OAuth settings (if using google provider)
|
|
47
|
+
# GOOGLE_CLIENT_ID=your-google-client-id
|
|
48
|
+
# GOOGLE_CLIENT_SECRET=your-google-client-secret
|
|
49
|
+
|
|
50
|
+
# Supabase settings (if using supabase provider)
|
|
51
|
+
# SUPABASE_URL=https://your-project.supabase.co
|
|
52
|
+
# SUPABASE_ANON_KEY=your-anon-key
|
|
53
|
+
# SUPABASE_SERVICE_KEY=your-service-key # Optional, for admin operations
|
|
54
|
+
# SUPABASE_JWT_SECRET=your-jwt-secret # Optional, for token validation
|
|
55
|
+
# SUPABASE_ALLOWED_CLIENTS=client1,client2 # Comma-separated list of allowed client IDs
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: Claude Code
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_review_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
issues:
|
|
9
|
+
types: [opened, assigned]
|
|
10
|
+
pull_request_review:
|
|
11
|
+
types: [submitted]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude:
|
|
15
|
+
if: |
|
|
16
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
20
|
+
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
pull-requests: read
|
|
25
|
+
issues: read
|
|
26
|
+
id-token: write
|
|
27
|
+
steps:
|
|
28
|
+
- name: Check organization membership
|
|
29
|
+
id: check_membership
|
|
30
|
+
uses: actions/github-script@v7
|
|
31
|
+
with:
|
|
32
|
+
script: |
|
|
33
|
+
let actor;
|
|
34
|
+
if (context.eventName === 'issue_comment') {
|
|
35
|
+
actor = context.payload.comment.user.login;
|
|
36
|
+
} else if (context.eventName === 'pull_request_review_comment') {
|
|
37
|
+
actor = context.payload.comment.user.login;
|
|
38
|
+
} else if (context.eventName === 'pull_request_review') {
|
|
39
|
+
actor = context.payload.review.user.login;
|
|
40
|
+
} else if (context.eventName === 'issues') {
|
|
41
|
+
actor = context.payload.issue.user.login;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log(`Checking membership for user: ${actor}`);
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const membership = await github.rest.orgs.getMembershipForUser({
|
|
48
|
+
org: 'basicmachines-co',
|
|
49
|
+
username: actor
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
console.log(`Membership status: ${membership.data.state}`);
|
|
53
|
+
|
|
54
|
+
// Allow if user is a member (public or private) or admin
|
|
55
|
+
const allowed = membership.data.state === 'active' &&
|
|
56
|
+
(membership.data.role === 'member' || membership.data.role === 'admin');
|
|
57
|
+
|
|
58
|
+
core.setOutput('is_member', allowed);
|
|
59
|
+
|
|
60
|
+
if (!allowed) {
|
|
61
|
+
core.notice(`User ${actor} is not a member of basicmachines-co organization`);
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.log(`Error checking membership: ${error.message}`);
|
|
65
|
+
core.setOutput('is_member', false);
|
|
66
|
+
core.notice(`User ${actor} is not a member of basicmachines-co organization`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
- name: Checkout repository
|
|
70
|
+
if: steps.check_membership.outputs.is_member == 'true'
|
|
71
|
+
uses: actions/checkout@v4
|
|
72
|
+
with:
|
|
73
|
+
fetch-depth: 1
|
|
74
|
+
|
|
75
|
+
- name: Run Claude Code
|
|
76
|
+
if: steps.check_membership.outputs.is_member == 'true'
|
|
77
|
+
id: claude
|
|
78
|
+
uses: anthropics/claude-code-action@beta
|
|
79
|
+
with:
|
|
80
|
+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
81
|
+
allowed_tools: Bash(uv run pytest),Bash(uv run ruff check . --fix),Bash(uv run ruff format .),Bash(uv run pyright),Bash(make test),Bash(make lint),Bash(make format),Bash(make type-check),Bash(make check),Read,Write,Edit,MultiEdit,Glob,Grep,LS
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: Dev Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch: # Allow manual triggering
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
dev-release:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
contents: write
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
|
|
20
|
+
- name: Set up Python
|
|
21
|
+
uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
|
|
25
|
+
- name: Install uv
|
|
26
|
+
run: |
|
|
27
|
+
pip install uv
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies and build
|
|
30
|
+
run: |
|
|
31
|
+
uv venv
|
|
32
|
+
uv sync
|
|
33
|
+
uv build
|
|
34
|
+
|
|
35
|
+
- name: Check if this is a dev version
|
|
36
|
+
id: check_version
|
|
37
|
+
run: |
|
|
38
|
+
VERSION=$(uv run python -c "import basic_memory; print(basic_memory.__version__)")
|
|
39
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
40
|
+
if [[ "$VERSION" == *"dev"* ]]; then
|
|
41
|
+
echo "is_dev=true" >> $GITHUB_OUTPUT
|
|
42
|
+
echo "Dev version detected: $VERSION"
|
|
43
|
+
else
|
|
44
|
+
echo "is_dev=false" >> $GITHUB_OUTPUT
|
|
45
|
+
echo "Release version detected: $VERSION, skipping dev release"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
- name: Publish dev version to PyPI
|
|
49
|
+
if: steps.check_version.outputs.is_dev == 'true'
|
|
50
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
51
|
+
with:
|
|
52
|
+
password: ${{ secrets.PYPI_TOKEN }}
|
|
53
|
+
skip-existing: true # Don't fail if version already exists
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*' # Trigger on version tags like v1.0.0, v0.13.0, etc.
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
contents: write
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
|
|
20
|
+
- name: Set up Python
|
|
21
|
+
uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
|
|
25
|
+
- name: Install uv
|
|
26
|
+
run: |
|
|
27
|
+
pip install uv
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies and build
|
|
30
|
+
run: |
|
|
31
|
+
uv venv
|
|
32
|
+
uv sync
|
|
33
|
+
uv build
|
|
34
|
+
|
|
35
|
+
- name: Verify version matches tag
|
|
36
|
+
run: |
|
|
37
|
+
# Get version from built package
|
|
38
|
+
PACKAGE_VERSION=$(uv run python -c "import basic_memory; print(basic_memory.__version__)")
|
|
39
|
+
TAG_VERSION=${GITHUB_REF_NAME#v} # Remove 'v' prefix from tag
|
|
40
|
+
echo "Package version: $PACKAGE_VERSION"
|
|
41
|
+
echo "Tag version: $TAG_VERSION"
|
|
42
|
+
if [ "$PACKAGE_VERSION" != "$TAG_VERSION" ]; then
|
|
43
|
+
echo "Version mismatch! Package: $PACKAGE_VERSION, Tag: $TAG_VERSION"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
- name: Create GitHub Release
|
|
48
|
+
uses: softprops/action-gh-release@v2
|
|
49
|
+
with:
|
|
50
|
+
files: |
|
|
51
|
+
dist/*.whl
|
|
52
|
+
dist/*.tar.gz
|
|
53
|
+
generate_release_notes: true
|
|
54
|
+
tag_name: ${{ github.ref_name }}
|
|
55
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
56
|
+
|
|
57
|
+
- name: Publish to PyPI
|
|
58
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
59
|
+
with:
|
|
60
|
+
password: ${{ secrets.PYPI_TOKEN }}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# OAuth Quick Start
|
|
2
|
+
|
|
3
|
+
Basic Memory supports OAuth authentication for secure access control. For detailed documentation, see [OAuth Authentication Guide](docs/OAuth%20Authentication%20Guide.md).
|
|
4
|
+
|
|
5
|
+
## Quick Test with MCP Inspector
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 1. Set a consistent secret key
|
|
9
|
+
export FASTMCP_AUTH_SECRET_KEY="test-secret-key"
|
|
10
|
+
|
|
11
|
+
# 2. Start server with OAuth
|
|
12
|
+
FASTMCP_AUTH_ENABLED=true basic-memory mcp --transport streamable-http
|
|
13
|
+
|
|
14
|
+
# 3. In another terminal, get a test token
|
|
15
|
+
export FASTMCP_AUTH_SECRET_KEY="test-secret-key" # Same key!
|
|
16
|
+
basic-memory auth test-auth
|
|
17
|
+
|
|
18
|
+
# 4. Copy the access token and use in MCP Inspector:
|
|
19
|
+
# - Server URL: http://localhost:8000/mcp
|
|
20
|
+
# - Transport: streamable-http
|
|
21
|
+
# - Custom Headers:
|
|
22
|
+
# Authorization: Bearer YOUR_ACCESS_TOKEN
|
|
23
|
+
# Accept: application/json, text/event-stream
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## OAuth Endpoints
|
|
27
|
+
|
|
28
|
+
- `GET /authorize` - Authorization endpoint
|
|
29
|
+
- `POST /token` - Token exchange endpoint
|
|
30
|
+
- `GET /.well-known/oauth-authorization-server` - OAuth metadata
|
|
31
|
+
|
|
32
|
+
## Common Issues
|
|
33
|
+
|
|
34
|
+
1. **401 Unauthorized**: Make sure you're using the same secret key for both server and client
|
|
35
|
+
2. **404 Not Found**: Use `/authorize` not `/auth/authorize`
|
|
36
|
+
3. **Token Invalid**: Tokens don't persist across server restarts with basic provider
|
|
37
|
+
|
|
38
|
+
## Documentation
|
|
39
|
+
|
|
40
|
+
- [OAuth Authentication Guide](docs/OAuth%20Authentication%20Guide.md) - Complete setup guide
|
|
41
|
+
- [Supabase OAuth Setup](docs/Supabase%20OAuth%20Setup.md) - Production deployment
|
|
42
|
+
- [External OAuth Providers](docs/External%20OAuth%20Providers.md) - GitHub, Google integration
|
|
@@ -1,6 +1,82 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v0.13.0 (2025-06-03)
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
- **Multi-Project Management System** - Switch between projects instantly during conversations
|
|
9
|
+
([`993e88a`](https://github.com/basicmachines-co/basic-memory/commit/993e88a))
|
|
10
|
+
- Instant project switching with session context
|
|
11
|
+
- Project-specific operations and isolation
|
|
12
|
+
- Project discovery and management tools
|
|
13
|
+
|
|
14
|
+
- **Advanced Note Editing** - Incremental editing with append, prepend, find/replace, and section operations
|
|
15
|
+
([`6fc3904`](https://github.com/basicmachines-co/basic-memory/commit/6fc3904))
|
|
16
|
+
- `edit_note` tool with multiple operation types
|
|
17
|
+
- Smart frontmatter-aware editing
|
|
18
|
+
- Validation and error handling
|
|
19
|
+
|
|
20
|
+
- **Smart File Management** - Move notes with database consistency and search reindexing
|
|
21
|
+
([`9fb931c`](https://github.com/basicmachines-co/basic-memory/commit/9fb931c))
|
|
22
|
+
- `move_note` tool with rollback protection
|
|
23
|
+
- Automatic folder creation and permalink updates
|
|
24
|
+
- Full database consistency maintenance
|
|
25
|
+
|
|
26
|
+
- **Enhanced Search Capabilities** - Frontmatter tags now searchable, improved content discovery
|
|
27
|
+
([`3f5368e`](https://github.com/basicmachines-co/basic-memory/commit/3f5368e))
|
|
28
|
+
- YAML frontmatter tag indexing
|
|
29
|
+
- Improved FTS5 search functionality
|
|
30
|
+
- Project-scoped search operations
|
|
31
|
+
|
|
32
|
+
- **Production Features** - OAuth authentication, development builds, comprehensive testing
|
|
33
|
+
([`5f8d945`](https://github.com/basicmachines-co/basic-memory/commit/5f8d945))
|
|
34
|
+
- Development build automation
|
|
35
|
+
- MCP integration testing framework
|
|
36
|
+
- Enhanced CI/CD pipeline
|
|
37
|
+
|
|
38
|
+
### Bug Fixes
|
|
39
|
+
|
|
40
|
+
- **#118**: Fix YAML tag formatting to follow standard specification
|
|
41
|
+
([`2dc7e27`](https://github.com/basicmachines-co/basic-memory/commit/2dc7e27))
|
|
42
|
+
|
|
43
|
+
- **#110**: Make --project flag work consistently across CLI commands
|
|
44
|
+
([`02dd91a`](https://github.com/basicmachines-co/basic-memory/commit/02dd91a))
|
|
45
|
+
|
|
46
|
+
- **#93**: Respect custom permalinks in frontmatter for write_note
|
|
47
|
+
([`6b6fd76`](https://github.com/basicmachines-co/basic-memory/commit/6b6fd76))
|
|
48
|
+
|
|
49
|
+
- Fix list_directory path display to not include leading slash
|
|
50
|
+
([`6057126`](https://github.com/basicmachines-co/basic-memory/commit/6057126))
|
|
51
|
+
|
|
52
|
+
### Technical Improvements
|
|
53
|
+
|
|
54
|
+
- **Unified Database Architecture** - Single app-level database for better performance
|
|
55
|
+
- Migration from per-project databases to unified structure
|
|
56
|
+
- Project isolation with foreign key relationships
|
|
57
|
+
- Optimized queries and reduced file I/O
|
|
58
|
+
|
|
59
|
+
- **Comprehensive Testing** - 100% test coverage with integration testing
|
|
60
|
+
([`468a22f`](https://github.com/basicmachines-co/basic-memory/commit/468a22f))
|
|
61
|
+
- MCP integration test suite
|
|
62
|
+
- End-to-end testing framework
|
|
63
|
+
- Performance and edge case validation
|
|
64
|
+
|
|
65
|
+
### Documentation
|
|
66
|
+
|
|
67
|
+
- Add comprehensive testing documentation (TESTING.md)
|
|
68
|
+
- Update project management guides (PROJECT_MANAGEMENT.md)
|
|
69
|
+
- Enhanced note editing documentation (EDIT_NOTE.md)
|
|
70
|
+
- Updated release workflow documentation
|
|
71
|
+
|
|
72
|
+
### Breaking Changes
|
|
73
|
+
|
|
74
|
+
- **Database Migration**: Automatic migration from per-project to unified database.
|
|
75
|
+
Data will be re-index from the filesystem, resulting in no data loss.
|
|
76
|
+
- **Configuration Changes**: Projects now synced between config.json and database
|
|
77
|
+
- **Full Backward Compatibility**: All existing setups continue to work seamlessly
|
|
78
|
+
|
|
79
|
+
|
|
4
80
|
## v0.12.3 (2025-04-17)
|
|
5
81
|
|
|
6
82
|
### Bug Fixes
|
|
@@ -65,6 +65,7 @@ See the [README.md](README.md) file for a project overview.
|
|
|
65
65
|
- Test database uses in-memory SQLite
|
|
66
66
|
- Avoid creating mocks in tests in most circumstances.
|
|
67
67
|
- Each test runs in a standalone environment with in memory SQLite and tmp_file directory
|
|
68
|
+
- Do not use mocks in tests if possible. Tests run with an in memory sqlite db, so they are not needed. See fixtures in conftest.py
|
|
68
69
|
|
|
69
70
|
## BASIC MEMORY PRODUCT USAGE
|
|
70
71
|
|
|
@@ -186,4 +187,38 @@ Basic Memory Pro is a desktop GUI application that wraps the basic-memory CLI/MC
|
|
|
186
187
|
- Multiple project support with visual switching interface
|
|
187
188
|
|
|
188
189
|
local repo: /Users/phernandez/dev/basicmachines/basic-memory-pro
|
|
189
|
-
github: https://github.com/basicmachines-co/basic-memory-pro
|
|
190
|
+
github: https://github.com/basicmachines-co/basic-memory-pro
|
|
191
|
+
|
|
192
|
+
## Release and Version Management
|
|
193
|
+
|
|
194
|
+
Basic Memory uses `uv-dynamic-versioning` for automatic version management based on git tags:
|
|
195
|
+
|
|
196
|
+
### Version Types
|
|
197
|
+
- **Development versions**: Automatically generated from commits (e.g., `0.12.4.dev26+468a22f`)
|
|
198
|
+
- **Beta releases**: Created by tagging with beta suffixes (e.g., `v0.13.0b1`, `v0.13.0rc1`)
|
|
199
|
+
- **Stable releases**: Created by tagging with version numbers (e.g., `v0.13.0`)
|
|
200
|
+
|
|
201
|
+
### Release Workflows
|
|
202
|
+
|
|
203
|
+
#### Development Builds (Automatic)
|
|
204
|
+
- Triggered on every push to `main` branch
|
|
205
|
+
- Publishes dev versions like `0.12.4.dev26+468a22f` to PyPI
|
|
206
|
+
- Allows continuous testing of latest changes
|
|
207
|
+
- Users install with: `pip install basic-memory --pre --force-reinstall`
|
|
208
|
+
|
|
209
|
+
#### Beta/RC Releases (Manual)
|
|
210
|
+
- Create beta tag: `git tag v0.13.0b1 && git push origin v0.13.0b1`
|
|
211
|
+
- Automatically builds and publishes to PyPI as pre-release
|
|
212
|
+
- Users install with: `pip install basic-memory --pre`
|
|
213
|
+
- Use for milestone testing before stable release
|
|
214
|
+
|
|
215
|
+
#### Stable Releases (Manual)
|
|
216
|
+
- Create version tag: `git tag v0.13.0 && git push origin v0.13.0`
|
|
217
|
+
- Automatically builds, creates GitHub release, and publishes to PyPI
|
|
218
|
+
- Users install with: `pip install basic-memory`
|
|
219
|
+
|
|
220
|
+
### For Development
|
|
221
|
+
- No manual version bumping required
|
|
222
|
+
- Versions automatically derived from git tags
|
|
223
|
+
- `pyproject.toml` uses `dynamic = ["version"]`
|
|
224
|
+
- `__init__.py` dynamically reads version from package metadata
|
|
@@ -144,6 +144,40 @@ agreement to the DCO.
|
|
|
144
144
|
- **Database Testing**: Use in-memory SQLite for testing database operations
|
|
145
145
|
- **Fixtures**: Use async pytest fixtures for setup and teardown
|
|
146
146
|
|
|
147
|
+
## Release Process
|
|
148
|
+
|
|
149
|
+
Basic Memory uses automatic versioning based on git tags with `uv-dynamic-versioning`. Here's how releases work:
|
|
150
|
+
|
|
151
|
+
### Version Management
|
|
152
|
+
- **Development versions**: Automatically generated from git commits (e.g., `0.12.4.dev26+468a22f`)
|
|
153
|
+
- **Beta releases**: Created by tagging with beta suffixes (e.g., `git tag v0.13.0b1`)
|
|
154
|
+
- **Stable releases**: Created by tagging with version numbers (e.g., `git tag v0.13.0`)
|
|
155
|
+
|
|
156
|
+
### Release Workflows
|
|
157
|
+
|
|
158
|
+
#### Development Builds
|
|
159
|
+
- Automatically published to PyPI on every commit to `main`
|
|
160
|
+
- Version format: `0.12.4.dev26+468a22f` (base version + dev + commit count + hash)
|
|
161
|
+
- Users install with: `pip install basic-memory --pre --force-reinstall`
|
|
162
|
+
|
|
163
|
+
#### Beta Releases
|
|
164
|
+
1. Create and push a beta tag: `git tag v0.13.0b1 && git push origin v0.13.0b1`
|
|
165
|
+
2. GitHub Actions automatically builds and publishes to PyPI
|
|
166
|
+
3. Users install with: `pip install basic-memory --pre`
|
|
167
|
+
|
|
168
|
+
#### Stable Releases
|
|
169
|
+
1. Create and push a version tag: `git tag v0.13.0 && git push origin v0.13.0`
|
|
170
|
+
2. GitHub Actions automatically:
|
|
171
|
+
- Builds the package with version `0.13.0`
|
|
172
|
+
- Creates GitHub release with auto-generated notes
|
|
173
|
+
- Publishes to PyPI
|
|
174
|
+
3. Users install with: `pip install basic-memory`
|
|
175
|
+
|
|
176
|
+
### For Contributors
|
|
177
|
+
- No manual version bumping required
|
|
178
|
+
- Versions are automatically derived from git tags
|
|
179
|
+
- Focus on code changes, not version management
|
|
180
|
+
|
|
147
181
|
## Creating Issues
|
|
148
182
|
|
|
149
183
|
If you're planning to work on something, please create an issue first to discuss the approach. Include:
|
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
.PHONY: install test test-module lint clean format type-check installer-mac installer-win check
|
|
1
|
+
.PHONY: install test test-module lint clean format type-check installer-mac installer-win check test-int
|
|
2
2
|
|
|
3
3
|
install:
|
|
4
4
|
pip install -e ".[dev]"
|
|
5
5
|
|
|
6
|
-
test:
|
|
6
|
+
test-unit:
|
|
7
7
|
uv run pytest -p pytest_mock -v
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
echo "Usage: make test-module m=path/to/module.py [cov=module_path]"; \
|
|
14
|
-
exit 1; \
|
|
15
|
-
fi; \
|
|
16
|
-
if [ -z "$(cov)" ]; then \
|
|
17
|
-
uv run pytest $(m) -v; \
|
|
18
|
-
else \
|
|
19
|
-
uv run pytest $(m) -v --cov=$(cov); \
|
|
20
|
-
fi
|
|
9
|
+
test-int:
|
|
10
|
+
uv run pytest -p pytest_mock -v --no-cov test-int
|
|
11
|
+
|
|
12
|
+
test: test-unit test-int
|
|
21
13
|
|
|
22
14
|
lint:
|
|
23
15
|
ruff check . --fix
|
|
@@ -41,7 +33,7 @@ format:
|
|
|
41
33
|
|
|
42
34
|
# run inspector tool
|
|
43
35
|
run-inspector:
|
|
44
|
-
|
|
36
|
+
npx @modelcontextprotocol/inspector
|
|
45
37
|
|
|
46
38
|
# Build app installer
|
|
47
39
|
installer-mac:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0b1
|
|
4
4
|
Summary: Local-first knowledge management combining Zettelkasten with knowledge graphs
|
|
5
5
|
Project-URL: Homepage, https://github.com/basicmachines-co/basic-memory
|
|
6
6
|
Project-URL: Repository, https://github.com/basicmachines-co/basic-memory
|
|
@@ -13,15 +13,19 @@ Requires-Dist: aiosqlite>=0.20.0
|
|
|
13
13
|
Requires-Dist: alembic>=1.14.1
|
|
14
14
|
Requires-Dist: dateparser>=1.2.0
|
|
15
15
|
Requires-Dist: fastapi[standard]>=0.115.8
|
|
16
|
+
Requires-Dist: fastmcp>=2.3.4
|
|
16
17
|
Requires-Dist: greenlet>=3.1.1
|
|
17
18
|
Requires-Dist: icecream>=2.1.3
|
|
18
19
|
Requires-Dist: loguru>=0.7.3
|
|
19
20
|
Requires-Dist: markdown-it-py>=3.0.0
|
|
20
21
|
Requires-Dist: mcp>=1.2.0
|
|
21
22
|
Requires-Dist: pillow>=11.1.0
|
|
23
|
+
Requires-Dist: pybars3>=0.9.7
|
|
22
24
|
Requires-Dist: pydantic-settings>=2.6.1
|
|
23
25
|
Requires-Dist: pydantic[email,timezone]>=2.10.3
|
|
26
|
+
Requires-Dist: pyjwt>=2.10.1
|
|
24
27
|
Requires-Dist: pyright>=1.1.390
|
|
28
|
+
Requires-Dist: python-dotenv>=1.1.0
|
|
25
29
|
Requires-Dist: python-frontmatter>=1.1.0
|
|
26
30
|
Requires-Dist: pyyaml>=6.0.1
|
|
27
31
|
Requires-Dist: qasync>=0.27.1
|
|
@@ -410,6 +414,24 @@ See the [Documentation](https://memory.basicmachines.co/) for more info, includi
|
|
|
410
414
|
- [Managing multiple Projects](https://memory.basicmachines.co/docs/cli-reference#project)
|
|
411
415
|
- [Importing data from OpenAI/Claude Projects](https://memory.basicmachines.co/docs/cli-reference#import)
|
|
412
416
|
|
|
417
|
+
## Installation Options
|
|
418
|
+
|
|
419
|
+
### Stable Release
|
|
420
|
+
```bash
|
|
421
|
+
pip install basic-memory
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Beta/Pre-releases
|
|
425
|
+
```bash
|
|
426
|
+
pip install basic-memory --pre
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### Development Builds
|
|
430
|
+
Development versions are automatically published on every commit to main with versions like `0.12.4.dev26+468a22f`:
|
|
431
|
+
```bash
|
|
432
|
+
pip install basic-memory --pre --force-reinstall
|
|
433
|
+
```
|
|
434
|
+
|
|
413
435
|
## License
|
|
414
436
|
|
|
415
437
|
AGPL-3.0
|
|
@@ -376,6 +376,24 @@ See the [Documentation](https://memory.basicmachines.co/) for more info, includi
|
|
|
376
376
|
- [Managing multiple Projects](https://memory.basicmachines.co/docs/cli-reference#project)
|
|
377
377
|
- [Importing data from OpenAI/Claude Projects](https://memory.basicmachines.co/docs/cli-reference#import)
|
|
378
378
|
|
|
379
|
+
## Installation Options
|
|
380
|
+
|
|
381
|
+
### Stable Release
|
|
382
|
+
```bash
|
|
383
|
+
pip install basic-memory
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Beta/Pre-releases
|
|
387
|
+
```bash
|
|
388
|
+
pip install basic-memory --pre
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Development Builds
|
|
392
|
+
Development versions are automatically published on every commit to main with versions like `0.12.4.dev26+468a22f`:
|
|
393
|
+
```bash
|
|
394
|
+
pip install basic-memory --pre --force-reinstall
|
|
395
|
+
```
|
|
396
|
+
|
|
379
397
|
## License
|
|
380
398
|
|
|
381
399
|
AGPL-3.0
|