basic-memory 0.1.1__tar.gz → 0.2.0__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.2.0/.github/workflows/pr-title.yml +41 -0
- basic_memory-0.2.0/.github/workflows/release.yml +83 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/.github/workflows/test.yml +4 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/.gitignore +16 -14
- {basic_memory-0.1.1 → basic_memory-0.2.0}/CHANGELOG.md +32 -0
- basic_memory-0.2.0/Makefile +42 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/PKG-INFO +2 -7
- basic_memory-0.2.0/alembic.ini +119 -0
- basic_memory-0.2.0/installer/Basic.icns +0 -0
- basic_memory-0.2.0/installer/icon.svg +64 -0
- basic_memory-0.2.0/installer/installer.py +89 -0
- basic_memory-0.2.0/installer/make_icons.sh +27 -0
- basic_memory-0.2.0/installer/setup.py +44 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/pyproject.toml +17 -10
- basic_memory-0.2.0/scripts/install.sh +36 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/__init__.py +1 -1
- basic_memory-0.2.0/src/basic_memory/alembic/README +1 -0
- basic_memory-0.2.0/src/basic_memory/alembic/env.py +75 -0
- basic_memory-0.2.0/src/basic_memory/alembic/migrations.py +29 -0
- basic_memory-0.2.0/src/basic_memory/alembic/script.py.mako +26 -0
- basic_memory-0.2.0/src/basic_memory/alembic/versions/3dae7c7b1564_initial_schema.py +93 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/__init__.py +2 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/app.py +26 -24
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/routers/knowledge_router.py +28 -26
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/routers/memory_router.py +17 -11
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/routers/search_router.py +6 -12
- basic_memory-0.2.0/src/basic_memory/cli/__init__.py +1 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/cli/app.py +0 -1
- basic_memory-0.2.0/src/basic_memory/cli/commands/__init__.py +5 -0
- basic_memory-0.2.0/src/basic_memory/cli/commands/db.py +25 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/cli/commands/import_memory_json.py +35 -31
- basic_memory-0.2.0/src/basic_memory/cli/commands/mcp.py +20 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/cli/commands/status.py +10 -6
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/cli/commands/sync.py +5 -56
- basic_memory-0.2.0/src/basic_memory/cli/main.py +14 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/config.py +3 -3
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/db.py +15 -22
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/deps.py +3 -4
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/file_utils.py +36 -35
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/markdown/entity_parser.py +13 -30
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/markdown/markdown_processor.py +7 -7
- basic_memory-0.2.0/src/basic_memory/markdown/plugins.py +222 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/markdown/schemas.py +7 -8
- basic_memory-0.2.0/src/basic_memory/markdown/utils.py +93 -0
- basic_memory-0.2.0/src/basic_memory/mcp/__init__.py +1 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/async_client.py +0 -2
- basic_memory-0.2.0/src/basic_memory/mcp/server.py +15 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/tools/__init__.py +5 -3
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/tools/knowledge.py +2 -2
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/tools/memory.py +8 -4
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/tools/search.py +2 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/tools/utils.py +1 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/models/__init__.py +1 -2
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/models/base.py +3 -3
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/models/knowledge.py +23 -60
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/models/search.py +1 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/repository/__init__.py +5 -3
- basic_memory-0.2.0/src/basic_memory/repository/entity_repository.py +92 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/repository/relation_repository.py +0 -7
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/repository/repository.py +2 -39
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/repository/search_repository.py +20 -25
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/__init__.py +4 -4
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/base.py +21 -62
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/delete.py +2 -3
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/discovery.py +4 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/memory.py +12 -13
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/request.py +4 -23
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/response.py +10 -9
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/schemas/search.py +4 -7
- basic_memory-0.2.0/src/basic_memory/services/__init__.py +7 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/services/context_service.py +116 -110
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/services/entity_service.py +25 -62
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/services/exceptions.py +1 -0
- basic_memory-0.2.0/src/basic_memory/services/file_service.py +176 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/services/link_resolver.py +9 -9
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/services/search_service.py +22 -15
- basic_memory-0.2.0/src/basic_memory/services/service.py +15 -0
- basic_memory-0.2.0/src/basic_memory/sync/__init__.py +5 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/sync/file_change_scanner.py +3 -7
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/sync/sync_service.py +35 -40
- basic_memory-0.2.0/src/basic_memory/sync/utils.py +34 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/sync/watch_service.py +26 -5
- basic_memory-0.2.0/src/basic_memory/utils.py +87 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/api/test_knowledge_router.py +18 -6
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/api/test_memory_router.py +1 -10
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/api/test_resource_router.py +1 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/api/test_search_router.py +8 -8
- basic_memory-0.2.0/tests/cli/test_import_memory_json.py +134 -0
- basic_memory-0.2.0/tests/cli/test_status.py +160 -0
- basic_memory-0.2.0/tests/cli/test_sync.py +109 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/conftest.py +113 -161
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/edit_file_test.py +5 -3
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/markdown/test_entity_parser.py +67 -14
- basic_memory-0.2.0/tests/markdown/test_markdown_plugins.py +165 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/markdown/test_markdown_processor.py +3 -3
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/markdown/test_observation_edge_cases.py +0 -1
- basic_memory-0.2.0/tests/markdown/test_task_detection.py +17 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/mcp/conftest.py +2 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/mcp/test_tool_get_entity.py +2 -5
- basic_memory-0.2.0/tests/mcp/test_tool_knowledge.py +87 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/mcp/test_tool_notes.py +14 -9
- basic_memory-0.2.0/tests/mcp/test_tool_search.py +65 -0
- basic_memory-0.2.0/tests/mcp/test_tool_utils.py +140 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/repository/test_entity_repository.py +0 -150
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/repository/test_repository.py +37 -45
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/schemas/test_memory_url.py +3 -5
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/schemas/test_schemas.py +2 -2
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/schemas/test_search.py +19 -14
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/services/test_context_service.py +15 -42
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/services/test_entity_service.py +55 -23
- basic_memory-0.2.0/tests/services/test_file_service.py +164 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/services/test_link_resolver.py +32 -39
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/services/test_search_service.py +10 -6
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/sync/test_sync_service.py +42 -48
- basic_memory-0.2.0/tests/sync/test_watch_service.py +121 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/test_basic_memory.py +1 -1
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/utils/test_file_utils.py +22 -14
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/utils/test_permalink_formatting.py +10 -5
- {basic_memory-0.1.1 → basic_memory-0.2.0}/uv.lock +399 -123
- basic_memory-0.1.1/.github/workflows/release.yml +0 -46
- basic_memory-0.1.1/Makefile +0 -39
- basic_memory-0.1.1/src/basic_memory/cli/__init__.py +0 -1
- basic_memory-0.1.1/src/basic_memory/cli/commands/__init__.py +0 -5
- basic_memory-0.1.1/src/basic_memory/cli/main.py +0 -47
- basic_memory-0.1.1/src/basic_memory/markdown/plugins.py +0 -236
- basic_memory-0.1.1/src/basic_memory/markdown/utils.py +0 -144
- basic_memory-0.1.1/src/basic_memory/mcp/__init__.py +0 -1
- basic_memory-0.1.1/src/basic_memory/mcp/main.py +0 -21
- basic_memory-0.1.1/src/basic_memory/mcp/server.py +0 -39
- basic_memory-0.1.1/src/basic_memory/mcp/tools/ai_edit.py +0 -84
- basic_memory-0.1.1/src/basic_memory/repository/entity_repository.py +0 -156
- basic_memory-0.1.1/src/basic_memory/services/__init__.py +0 -12
- basic_memory-0.1.1/src/basic_memory/services/database_service.py +0 -159
- basic_memory-0.1.1/src/basic_memory/services/file_service.py +0 -212
- basic_memory-0.1.1/src/basic_memory/services/service.py +0 -36
- basic_memory-0.1.1/src/basic_memory/sync/__init__.py +0 -5
- basic_memory-0.1.1/src/basic_memory/sync/utils.py +0 -66
- basic_memory-0.1.1/src/basic_memory/utils.py +0 -78
- basic_memory-0.1.1/tests/cli/test_import_memory_json.py +0 -175
- basic_memory-0.1.1/tests/markdown/test_markdown_plugins.py +0 -163
- basic_memory-0.1.1/tests/mcp/test_tool_ai_edit.py +0 -95
- basic_memory-0.1.1/tests/services/test_database_service.py +0 -158
- basic_memory-0.1.1/tests/services/test_file_service.py +0 -372
- basic_memory-0.1.1/tests/sync/test_watch_service.py +0 -154
- {basic_memory-0.1.1 → basic_memory-0.2.0}/.python-version +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/CITATION.cff +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/CODE_OF_CONDUCT.md +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/CONTRIBUTING.md +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/LICENSE +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/README.md +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/basic-memory.md +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/memory.json +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/routers/__init__.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/api/routers/resource_router.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/markdown/__init__.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/mcp/tools/notes.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/src/basic_memory/repository/observation_repository.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tasks.md +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/api/conftest.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/markdown/__init__.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/markdown/test_parser_edge_cases.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/markdown/test_relation_edge_cases.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/mcp/test_tool_memory.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/repository/test_observation_repository.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/repository/test_relation_repository.py +0 -0
- {basic_memory-0.1.1 → basic_memory-0.2.0}/tests/sync/test_file_change_scanner.py +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: "Pull Request Title"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
- edited
|
|
8
|
+
- synchronize
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
main:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: amannn/action-semantic-pull-request@v5
|
|
15
|
+
env:
|
|
16
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
17
|
+
with:
|
|
18
|
+
# Configure allowed types based on what we want in our changelog
|
|
19
|
+
types: |
|
|
20
|
+
feat
|
|
21
|
+
fix
|
|
22
|
+
chore
|
|
23
|
+
docs
|
|
24
|
+
style
|
|
25
|
+
refactor
|
|
26
|
+
perf
|
|
27
|
+
test
|
|
28
|
+
build
|
|
29
|
+
ci
|
|
30
|
+
# Require at least one from scope list (optional)
|
|
31
|
+
scopes: |
|
|
32
|
+
core
|
|
33
|
+
cli
|
|
34
|
+
api
|
|
35
|
+
mcp
|
|
36
|
+
sync
|
|
37
|
+
ui
|
|
38
|
+
deps
|
|
39
|
+
installer
|
|
40
|
+
# Allow breaking changes (needs "!" after type/scope)
|
|
41
|
+
requireScopeForBreakingChange: true
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version_type:
|
|
7
|
+
description: 'Type of version bump (major, minor, patch)'
|
|
8
|
+
required: true
|
|
9
|
+
default: 'patch'
|
|
10
|
+
type: choice
|
|
11
|
+
options:
|
|
12
|
+
- patch
|
|
13
|
+
- minor
|
|
14
|
+
- major
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
release:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
concurrency: release
|
|
20
|
+
permissions:
|
|
21
|
+
id-token: write
|
|
22
|
+
contents: write
|
|
23
|
+
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
|
|
29
|
+
- name: Python Semantic Release
|
|
30
|
+
id: release
|
|
31
|
+
uses: python-semantic-release/python-semantic-release@master
|
|
32
|
+
with:
|
|
33
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
34
|
+
|
|
35
|
+
- name: Publish to PyPI
|
|
36
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
37
|
+
if: steps.release.outputs.released == 'true'
|
|
38
|
+
with:
|
|
39
|
+
password: ${{ secrets.PYPI_TOKEN }}
|
|
40
|
+
|
|
41
|
+
- name: Publish to GitHub Release Assets
|
|
42
|
+
uses: python-semantic-release/publish-action@v9.8.9
|
|
43
|
+
if: steps.release.outputs.released == 'true'
|
|
44
|
+
with:
|
|
45
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
46
|
+
tag: ${{ steps.release.outputs.tag }}
|
|
47
|
+
|
|
48
|
+
build-macos:
|
|
49
|
+
needs: release
|
|
50
|
+
if: needs.release.outputs.released == 'true'
|
|
51
|
+
runs-on: macos-latest
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v4
|
|
54
|
+
with:
|
|
55
|
+
ref: ${{ needs.release.outputs.tag }}
|
|
56
|
+
|
|
57
|
+
- name: Set up Python
|
|
58
|
+
uses: actions/setup-python@v5
|
|
59
|
+
with:
|
|
60
|
+
python-version: '3.12'
|
|
61
|
+
|
|
62
|
+
- name: Install uv
|
|
63
|
+
run: |
|
|
64
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
65
|
+
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
|
66
|
+
|
|
67
|
+
- name: Build macOS installer
|
|
68
|
+
run: |
|
|
69
|
+
uv pip install -e ".[dev]"
|
|
70
|
+
cd installer
|
|
71
|
+
uv run python setup.py bdist_mac
|
|
72
|
+
|
|
73
|
+
- name: Zip macOS installer
|
|
74
|
+
run: |
|
|
75
|
+
cd installer/dist
|
|
76
|
+
zip -r "Basic-Memory-Installer-${{ needs.release.outputs.tag }}.zip" "Basic Memory Installer.app"
|
|
77
|
+
|
|
78
|
+
- name: Upload macOS installer
|
|
79
|
+
uses: softprops/action-gh-release@v1
|
|
80
|
+
with:
|
|
81
|
+
files: installer/dist/Basic-Memory-Installer-${{ needs.release.outputs.tag }}.zip
|
|
82
|
+
tag_name: ${{ needs.release.outputs.tag }}
|
|
83
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
# Python
|
|
2
|
-
__pycache__/
|
|
3
1
|
*.py[cod]
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
__pycache__/
|
|
3
|
+
.pytest_cache/
|
|
4
|
+
.coverage
|
|
5
|
+
htmlcov/
|
|
6
|
+
|
|
7
|
+
# Distribution / packaging
|
|
6
8
|
.Python
|
|
7
9
|
build/
|
|
8
10
|
develop-eggs/
|
|
@@ -20,7 +22,12 @@ wheels/
|
|
|
20
22
|
.installed.cfg
|
|
21
23
|
*.egg
|
|
22
24
|
|
|
23
|
-
#
|
|
25
|
+
# Installer artifacts
|
|
26
|
+
installer/build/
|
|
27
|
+
installer/dist/
|
|
28
|
+
rw.*.dmg # Temporary disk images
|
|
29
|
+
|
|
30
|
+
# Virtual environments
|
|
24
31
|
.env
|
|
25
32
|
.venv
|
|
26
33
|
env/
|
|
@@ -30,13 +37,8 @@ ENV/
|
|
|
30
37
|
# IDE
|
|
31
38
|
.idea/
|
|
32
39
|
.vscode/
|
|
40
|
+
*.swp
|
|
41
|
+
*.swo
|
|
33
42
|
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
projects/*.db-journal
|
|
37
|
-
/.coverage
|
|
38
|
-
|
|
39
|
-
**/.DS_Store
|
|
40
|
-
|
|
41
|
-
*.log
|
|
42
|
-
/.coverage.*
|
|
43
|
+
# macOS
|
|
44
|
+
.DS_Store
|
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v0.2.0 (2025-02-14)
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
- Build installer via github action ([#7](https://github.com/basicmachines-co/basic-memory/pull/7),
|
|
9
|
+
[`7c381a5`](https://github.com/basicmachines-co/basic-memory/commit/7c381a59c962053c78da096172e484f28ab47e96))
|
|
10
|
+
|
|
11
|
+
* feat(ci): build installer via github action
|
|
12
|
+
|
|
13
|
+
* enforce conventional commits in PR titles
|
|
14
|
+
|
|
15
|
+
* feat: add icon to installer
|
|
16
|
+
|
|
17
|
+
---------
|
|
18
|
+
|
|
19
|
+
Co-authored-by: phernandez <phernandez@basicmachines.co>
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## v0.1.2 (2025-02-14)
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
- Fix installer for mac
|
|
27
|
+
([`dde9ff2`](https://github.com/basicmachines-co/basic-memory/commit/dde9ff228b72852b5abc58faa1b5e7c6f8d2c477))
|
|
28
|
+
|
|
29
|
+
- Remove unused FileChange dataclass
|
|
30
|
+
([`eb3360c`](https://github.com/basicmachines-co/basic-memory/commit/eb3360cc221f892b12a17137ae740819d48248e8))
|
|
31
|
+
|
|
32
|
+
- Update uv installer url
|
|
33
|
+
([`2f9178b`](https://github.com/basicmachines-co/basic-memory/commit/2f9178b0507b3b69207d5c80799f2d2f573c9a04))
|
|
34
|
+
|
|
35
|
+
|
|
4
36
|
## v0.1.1 (2025-02-07)
|
|
5
37
|
|
|
6
38
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
.PHONY: install test lint clean format type-check installer-mac installer-win
|
|
2
|
+
|
|
3
|
+
install:
|
|
4
|
+
pip install -e ".[dev]"
|
|
5
|
+
|
|
6
|
+
test:
|
|
7
|
+
pytest -p pytest_mock -v
|
|
8
|
+
|
|
9
|
+
lint:
|
|
10
|
+
ruff check . --fix
|
|
11
|
+
|
|
12
|
+
type-check:
|
|
13
|
+
uv run pyright
|
|
14
|
+
|
|
15
|
+
clean:
|
|
16
|
+
find . -type f -name '*.pyc' -delete
|
|
17
|
+
find . -type d -name '__pycache__' -exec rm -r {} +
|
|
18
|
+
rm -rf installer/build/
|
|
19
|
+
rm -rf installer/dist/
|
|
20
|
+
rm -f rw.*.dmg
|
|
21
|
+
rm -rf dist
|
|
22
|
+
rm -rf installer/build
|
|
23
|
+
rm -rf installer/dist
|
|
24
|
+
rm -f .coverage.*
|
|
25
|
+
|
|
26
|
+
format:
|
|
27
|
+
uv run ruff format .
|
|
28
|
+
|
|
29
|
+
# run inspector tool
|
|
30
|
+
run-dev:
|
|
31
|
+
uv run mcp dev src/basic_memory/mcp/main.py
|
|
32
|
+
|
|
33
|
+
# Build app installer
|
|
34
|
+
installer-mac:
|
|
35
|
+
cd installer && uv run python setup.py bdist_mac
|
|
36
|
+
|
|
37
|
+
installer-win:
|
|
38
|
+
cd installer && uv run python setup.py bdist_win32
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
update-deps:
|
|
42
|
+
uv lock f--upgrade
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basic-memory
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
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
|
|
@@ -23,17 +23,12 @@ Requires-Dist: pydantic[email,timezone]>=2.10.3
|
|
|
23
23
|
Requires-Dist: pyright>=1.1.390
|
|
24
24
|
Requires-Dist: python-frontmatter>=1.1.0
|
|
25
25
|
Requires-Dist: pyyaml>=6.0.1
|
|
26
|
+
Requires-Dist: qasync>=0.27.1
|
|
26
27
|
Requires-Dist: rich>=13.9.4
|
|
27
28
|
Requires-Dist: sqlalchemy>=2.0.0
|
|
28
29
|
Requires-Dist: typer>=0.9.0
|
|
29
30
|
Requires-Dist: unidecode>=1.3.8
|
|
30
31
|
Requires-Dist: watchfiles>=1.0.4
|
|
31
|
-
Provides-Extra: dev
|
|
32
|
-
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
33
|
-
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
34
|
-
Requires-Dist: pytest-mock>=3.12.0; extra == 'dev'
|
|
35
|
-
Requires-Dist: pytest>=8.3.4; extra == 'dev'
|
|
36
|
-
Requires-Dist: ruff>=0.1.6; extra == 'dev'
|
|
37
32
|
Description-Content-Type: text/markdown
|
|
38
33
|
|
|
39
34
|
# Basic Memory
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# A generic, single database configuration.
|
|
2
|
+
|
|
3
|
+
[alembic]
|
|
4
|
+
# path to migration scripts
|
|
5
|
+
# Use forward slashes (/) also on windows to provide an os agnostic path
|
|
6
|
+
script_location = src/basic_memory/alembic
|
|
7
|
+
|
|
8
|
+
# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
|
|
9
|
+
# Uncomment the line below if you want the files to be prepended with date and time
|
|
10
|
+
# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file
|
|
11
|
+
# for all available tokens
|
|
12
|
+
# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s
|
|
13
|
+
|
|
14
|
+
# sys.path path, will be prepended to sys.path if present.
|
|
15
|
+
# defaults to the current working directory.
|
|
16
|
+
prepend_sys_path = .
|
|
17
|
+
|
|
18
|
+
# timezone to use when rendering the date within the migration file
|
|
19
|
+
# as well as the filename.
|
|
20
|
+
# If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
|
|
21
|
+
# Any required deps can installed by adding `alembic[tz]` to the pip requirements
|
|
22
|
+
# string value is passed to ZoneInfo()
|
|
23
|
+
# leave blank for localtime
|
|
24
|
+
# timezone =
|
|
25
|
+
|
|
26
|
+
# max length of characters to apply to the "slug" field
|
|
27
|
+
# truncate_slug_length = 40
|
|
28
|
+
|
|
29
|
+
# set to 'true' to run the environment during
|
|
30
|
+
# the 'revision' command, regardless of autogenerate
|
|
31
|
+
# revision_environment = false
|
|
32
|
+
|
|
33
|
+
# set to 'true' to allow .pyc and .pyo files without
|
|
34
|
+
# a source .py file to be detected as revisions in the
|
|
35
|
+
# versions/ directory
|
|
36
|
+
# sourceless = false
|
|
37
|
+
|
|
38
|
+
# version location specification; This defaults
|
|
39
|
+
# to migrations/versions. When using multiple version
|
|
40
|
+
# directories, initial revisions must be specified with --version-path.
|
|
41
|
+
# The path separator used here should be the separator specified by "version_path_separator" below.
|
|
42
|
+
# version_locations = %(here)s/bar:%(here)s/bat:migrations/versions
|
|
43
|
+
|
|
44
|
+
# version path separator; As mentioned above, this is the character used to split
|
|
45
|
+
# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep.
|
|
46
|
+
# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas.
|
|
47
|
+
# Valid values for version_path_separator are:
|
|
48
|
+
#
|
|
49
|
+
# version_path_separator = :
|
|
50
|
+
# version_path_separator = ;
|
|
51
|
+
# version_path_separator = space
|
|
52
|
+
# version_path_separator = newline
|
|
53
|
+
#
|
|
54
|
+
# Use os.pathsep. Default configuration used for new projects.
|
|
55
|
+
version_path_separator = os
|
|
56
|
+
|
|
57
|
+
# set to 'true' to search source files recursively
|
|
58
|
+
# in each "version_locations" directory
|
|
59
|
+
# new in Alembic version 1.10
|
|
60
|
+
# recursive_version_locations = false
|
|
61
|
+
|
|
62
|
+
# the output encoding used when revision files
|
|
63
|
+
# are written from script.py.mako
|
|
64
|
+
# output_encoding = utf-8
|
|
65
|
+
|
|
66
|
+
sqlalchemy.url = driver://user:pass@localhost/dbname
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
[post_write_hooks]
|
|
70
|
+
# post_write_hooks defines scripts or Python functions that are run
|
|
71
|
+
# on newly generated revision scripts. See the documentation for further
|
|
72
|
+
# detail and examples
|
|
73
|
+
|
|
74
|
+
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
|
75
|
+
# hooks = black
|
|
76
|
+
# black.type = console_scripts
|
|
77
|
+
# black.entrypoint = black
|
|
78
|
+
# black.options = -l 79 REVISION_SCRIPT_FILENAME
|
|
79
|
+
|
|
80
|
+
# lint with attempts to fix using "ruff" - use the exec runner, execute a binary
|
|
81
|
+
# hooks = ruff
|
|
82
|
+
# ruff.type = exec
|
|
83
|
+
# ruff.executable = %(here)s/.venv/bin/ruff
|
|
84
|
+
# ruff.options = --fix REVISION_SCRIPT_FILENAME
|
|
85
|
+
|
|
86
|
+
# Logging configuration
|
|
87
|
+
[loggers]
|
|
88
|
+
keys = root,sqlalchemy,alembic
|
|
89
|
+
|
|
90
|
+
[handlers]
|
|
91
|
+
keys = console
|
|
92
|
+
|
|
93
|
+
[formatters]
|
|
94
|
+
keys = generic
|
|
95
|
+
|
|
96
|
+
[logger_root]
|
|
97
|
+
level = WARNING
|
|
98
|
+
handlers = console
|
|
99
|
+
qualname =
|
|
100
|
+
|
|
101
|
+
[logger_sqlalchemy]
|
|
102
|
+
level = WARNING
|
|
103
|
+
handlers =
|
|
104
|
+
qualname = sqlalchemy.engine
|
|
105
|
+
|
|
106
|
+
[logger_alembic]
|
|
107
|
+
level = INFO
|
|
108
|
+
handlers =
|
|
109
|
+
qualname = alembic
|
|
110
|
+
|
|
111
|
+
[handler_console]
|
|
112
|
+
class = StreamHandler
|
|
113
|
+
args = (sys.stderr,)
|
|
114
|
+
level = NOTSET
|
|
115
|
+
formatter = generic
|
|
116
|
+
|
|
117
|
+
[formatter_generic]
|
|
118
|
+
format = %(levelname)-5.5s [%(name)s] %(message)s
|
|
119
|
+
datefmt = %H:%M:%S
|
|
Binary file
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<!-- Background -->
|
|
4
|
+
<rect x="0" y="0" width="512" height="512" rx="64" fill="#111111"/>
|
|
5
|
+
|
|
6
|
+
<!-- Define arrowhead marker -->
|
|
7
|
+
<defs>
|
|
8
|
+
<marker id="arrowhead"
|
|
9
|
+
markerWidth="10"
|
|
10
|
+
markerHeight="10"
|
|
11
|
+
refX="8"
|
|
12
|
+
refY="5"
|
|
13
|
+
orient="auto">
|
|
14
|
+
<path d="M 0 0 L 10 5 L 0 10 Z"
|
|
15
|
+
fill="#00cc00"/>
|
|
16
|
+
</marker>
|
|
17
|
+
</defs>
|
|
18
|
+
|
|
19
|
+
<!-- State 1 (initial) -->
|
|
20
|
+
<circle cx="156" cy="256" r="30" fill="none" stroke="#00cc00" stroke-width="3"/>
|
|
21
|
+
|
|
22
|
+
<!-- State 2 (accept) -->
|
|
23
|
+
<circle cx="356" cy="176" r="34" fill="none" stroke="#00cc00" stroke-width="3"/>
|
|
24
|
+
<circle cx="356" cy="176" r="28" fill="none" stroke="#00cc00" stroke-width="3"/>
|
|
25
|
+
|
|
26
|
+
<!-- State 3 (accept) -->
|
|
27
|
+
<circle cx="356" cy="336" r="34" fill="none" stroke="#00cc00" stroke-width="3"/>
|
|
28
|
+
<circle cx="356" cy="336" r="28" fill="none" stroke="#00cc00" stroke-width="3"/>
|
|
29
|
+
|
|
30
|
+
<!-- Initial arrow -->
|
|
31
|
+
<path d="M 96 256 L 126 256"
|
|
32
|
+
stroke="#00cc00" stroke-width="3" fill="none"
|
|
33
|
+
marker-end="url(#arrowhead)"/>
|
|
34
|
+
|
|
35
|
+
<!-- State transitions -->
|
|
36
|
+
<!-- 1 -> 2 -->
|
|
37
|
+
<path d="M 180 240
|
|
38
|
+
Q 260 200, 320 176"
|
|
39
|
+
stroke="#00cc00" stroke-width="3" fill="none"
|
|
40
|
+
marker-end="url(#arrowhead)"/>
|
|
41
|
+
|
|
42
|
+
<!-- 1 -> 3 -->
|
|
43
|
+
<path d="M 180 272
|
|
44
|
+
Q 260 312, 320 336"
|
|
45
|
+
stroke="#00cc00" stroke-width="3" fill="none"
|
|
46
|
+
marker-end="url(#arrowhead)"/>
|
|
47
|
+
|
|
48
|
+
<!-- Self loops -->
|
|
49
|
+
<path d="M 356 142
|
|
50
|
+
Q 396 142, 396 176
|
|
51
|
+
Q 396 210, 356 210
|
|
52
|
+
Q 316 210, 316 176
|
|
53
|
+
Q 316 142, 356 142"
|
|
54
|
+
stroke="#00cc00" stroke-width="2" fill="none"
|
|
55
|
+
marker-end="url(#arrowhead)"/>
|
|
56
|
+
|
|
57
|
+
<path d="M 356 302
|
|
58
|
+
Q 396 302, 396 336
|
|
59
|
+
Q 396 370, 356 370
|
|
60
|
+
Q 316 370, 316 336
|
|
61
|
+
Q 316 302, 356 302"
|
|
62
|
+
stroke="#00cc00" stroke-width="2" fill="none"
|
|
63
|
+
marker-end="url(#arrowhead)"/>
|
|
64
|
+
</svg>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import subprocess
|
|
3
|
+
import sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
# Use tkinter for GUI alerts on macOS
|
|
7
|
+
if sys.platform == "darwin":
|
|
8
|
+
import tkinter as tk
|
|
9
|
+
from tkinter import messagebox
|
|
10
|
+
|
|
11
|
+
def ensure_uv_installed():
|
|
12
|
+
"""Check if uv is installed, install if not."""
|
|
13
|
+
try:
|
|
14
|
+
subprocess.run(["uv", "--version"], capture_output=True, check=True)
|
|
15
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
16
|
+
print("Installing uv package manager...")
|
|
17
|
+
subprocess.run(
|
|
18
|
+
[
|
|
19
|
+
"curl",
|
|
20
|
+
"-LsSf",
|
|
21
|
+
"https://astral.sh/uv/install.sh",
|
|
22
|
+
"|",
|
|
23
|
+
"sh",
|
|
24
|
+
],
|
|
25
|
+
shell=True,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def get_config_path():
|
|
30
|
+
"""Get Claude Desktop config path for current platform."""
|
|
31
|
+
if sys.platform == "darwin":
|
|
32
|
+
return Path.home() / "Library/Application Support/Claude/claude_desktop_config.json"
|
|
33
|
+
elif sys.platform == "win32":
|
|
34
|
+
return Path.home() / "AppData/Roaming/Claude/claude_desktop_config.json"
|
|
35
|
+
else:
|
|
36
|
+
raise RuntimeError(f"Unsupported platform: {sys.platform}")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def update_claude_config():
|
|
40
|
+
"""Update Claude Desktop config to include basic-memory."""
|
|
41
|
+
config_path = get_config_path()
|
|
42
|
+
config_path.parent.mkdir(parents=True, exist_ok=True)
|
|
43
|
+
|
|
44
|
+
# Load existing config or create new
|
|
45
|
+
if config_path.exists():
|
|
46
|
+
config = json.loads(config_path.read_text())
|
|
47
|
+
else:
|
|
48
|
+
config = {"mcpServers": {}}
|
|
49
|
+
|
|
50
|
+
# Add/update basic-memory config
|
|
51
|
+
config["mcpServers"]["basic-memory"] = {"command": "uvx", "args": ["basic-memory", "mcp"]}
|
|
52
|
+
|
|
53
|
+
# Write back config
|
|
54
|
+
config_path.write_text(json.dumps(config, indent=2))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def print_completion_message():
|
|
58
|
+
"""Show completion message with helpful tips."""
|
|
59
|
+
message = """Installation complete! Basic Memory is now available in Claude Desktop.
|
|
60
|
+
|
|
61
|
+
Please restart Claude Desktop for changes to take effect.
|
|
62
|
+
|
|
63
|
+
Quick Start:
|
|
64
|
+
1. You can run sync directly using: uvx basic-memory sync
|
|
65
|
+
2. Optionally, install globally with: uv pip install basic-memory
|
|
66
|
+
|
|
67
|
+
Built with ♥️ by Basic Machines."""
|
|
68
|
+
|
|
69
|
+
if sys.platform == "darwin":
|
|
70
|
+
# Show GUI message on macOS
|
|
71
|
+
root = tk.Tk()
|
|
72
|
+
root.withdraw() # Hide the main window
|
|
73
|
+
messagebox.showinfo("Basic Memory", message)
|
|
74
|
+
root.destroy()
|
|
75
|
+
else:
|
|
76
|
+
# Fallback to console output
|
|
77
|
+
print(message)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def main():
|
|
81
|
+
print("Welcome to Basic Memory installer")
|
|
82
|
+
ensure_uv_installed()
|
|
83
|
+
print("Configuring Claude Desktop...")
|
|
84
|
+
update_claude_config()
|
|
85
|
+
print_completion_message()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
main()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Convert SVG to PNG at various required sizes
|
|
4
|
+
rsvg-convert -h 16 -w 16 icon.svg > icon_16x16.png
|
|
5
|
+
rsvg-convert -h 32 -w 32 icon.svg > icon_32x32.png
|
|
6
|
+
rsvg-convert -h 128 -w 128 icon.svg > icon_128x128.png
|
|
7
|
+
rsvg-convert -h 256 -w 256 icon.svg > icon_256x256.png
|
|
8
|
+
rsvg-convert -h 512 -w 512 icon.svg > icon_512x512.png
|
|
9
|
+
|
|
10
|
+
# Create iconset directory
|
|
11
|
+
mkdir -p Basic.iconset
|
|
12
|
+
|
|
13
|
+
# Move files into iconset with Mac-specific names
|
|
14
|
+
cp icon_16x16.png Basic.iconset/icon_16x16.png
|
|
15
|
+
cp icon_32x32.png Basic.iconset/icon_16x16@2x.png
|
|
16
|
+
cp icon_32x32.png Basic.iconset/icon_32x32.png
|
|
17
|
+
cp icon_128x128.png Basic.iconset/icon_32x32@2x.png
|
|
18
|
+
cp icon_256x256.png Basic.iconset/icon_128x128.png
|
|
19
|
+
cp icon_512x512.png Basic.iconset/icon_256x256.png
|
|
20
|
+
cp icon_512x512.png Basic.iconset/icon_512x512.png
|
|
21
|
+
|
|
22
|
+
# Convert iconset to icns
|
|
23
|
+
iconutil -c icns Basic.iconset
|
|
24
|
+
|
|
25
|
+
# Clean up
|
|
26
|
+
rm -rf Basic.iconset
|
|
27
|
+
rm icon_*.png
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from cx_Freeze import setup, Executable
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
# Build options for all platforms
|
|
5
|
+
build_exe_options = {
|
|
6
|
+
"packages": ["json", "pathlib"],
|
|
7
|
+
"excludes": [],
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
# Platform-specific options
|
|
11
|
+
if sys.platform == "win32":
|
|
12
|
+
base = "Win32GUI" # Use GUI base for Windows
|
|
13
|
+
build_exe_options.update({
|
|
14
|
+
"include_msvcr": True, # Include Visual C++ runtime
|
|
15
|
+
})
|
|
16
|
+
target_name = "Basic Memory Installer.exe"
|
|
17
|
+
icon = None # We'll add Windows icon later
|
|
18
|
+
else: # darwin
|
|
19
|
+
base = None # Don't use GUI base for macOS
|
|
20
|
+
target_name = "Basic Memory Installer"
|
|
21
|
+
icon = "Basic.icns"
|
|
22
|
+
|
|
23
|
+
executables = [
|
|
24
|
+
Executable(
|
|
25
|
+
script="installer.py",
|
|
26
|
+
target_name=target_name,
|
|
27
|
+
base=base,
|
|
28
|
+
icon=icon
|
|
29
|
+
)
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
setup(
|
|
33
|
+
name="basic-memory",
|
|
34
|
+
version=open("../pyproject.toml").read().split('version = "', 1)[1].split('"', 1)[0],
|
|
35
|
+
description="Basic Memory - Local-first knowledge management",
|
|
36
|
+
options={
|
|
37
|
+
"build_exe": build_exe_options,
|
|
38
|
+
"bdist_mac": {
|
|
39
|
+
"bundle_name": "Basic Memory Installer",
|
|
40
|
+
"iconfile": icon if sys.platform == "darwin" else None
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
executables=executables,
|
|
44
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "basic-memory"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.2.0"
|
|
4
4
|
description = "Local-first knowledge management combining Zettelkasten with knowledge graphs"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12.1"
|
|
@@ -28,16 +28,9 @@ dependencies = [
|
|
|
28
28
|
"watchfiles>=1.0.4",
|
|
29
29
|
"fastapi[standard]>=0.115.8",
|
|
30
30
|
"alembic>=1.14.1",
|
|
31
|
+
"qasync>=0.27.1",
|
|
31
32
|
]
|
|
32
33
|
|
|
33
|
-
[project.optional-dependencies]
|
|
34
|
-
dev = [
|
|
35
|
-
"pytest>=8.3.4",
|
|
36
|
-
"pytest-cov>=4.1.0",
|
|
37
|
-
"pytest-mock>=3.12.0",
|
|
38
|
-
"pytest-asyncio>=0.24.0",
|
|
39
|
-
"ruff>=0.1.6",
|
|
40
|
-
]
|
|
41
34
|
|
|
42
35
|
[project.urls]
|
|
43
36
|
Homepage = "https://github.com/basicmachines-co/basic-memory"
|
|
@@ -64,10 +57,22 @@ target-version = "py312"
|
|
|
64
57
|
|
|
65
58
|
[tool.uv]
|
|
66
59
|
dev-dependencies = [
|
|
60
|
+
"gevent>=24.11.1",
|
|
67
61
|
"icecream>=2.1.3",
|
|
62
|
+
"pytest>=8.3.4",
|
|
63
|
+
"pytest-cov>=4.1.0",
|
|
64
|
+
"pytest-mock>=3.12.0",
|
|
65
|
+
"pytest-asyncio>=0.24.0",
|
|
66
|
+
"ruff>=0.1.6",
|
|
67
|
+
"pytest>=8.3.4",
|
|
68
|
+
"pytest-cov>=4.1.0",
|
|
69
|
+
"pytest-mock>=3.12.0",
|
|
70
|
+
"pytest-asyncio>=0.24.0",
|
|
71
|
+
"ruff>=0.1.6",
|
|
72
|
+
"cx-freeze>=7.2.10",
|
|
73
|
+
"pyqt6>=6.8.1",
|
|
68
74
|
]
|
|
69
75
|
|
|
70
|
-
|
|
71
76
|
[tool.pyright]
|
|
72
77
|
include = ["src/"]
|
|
73
78
|
exclude = ["**/__pycache__"]
|
|
@@ -91,3 +96,5 @@ dist_path = "dist/"
|
|
|
91
96
|
upload_to_pypi = true
|
|
92
97
|
commit_message = "chore(release): {version} [skip ci]"
|
|
93
98
|
|
|
99
|
+
[tool.coverage.run]
|
|
100
|
+
concurrency = ["thread", "gevent"]
|