memu-cli 0.3.0__tar.gz → 0.5.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.
- {memu_cli-0.3.0 → memu_cli-0.5.0}/CHANGELOG.md +100 -0
- memu_cli-0.5.0/INSTALL-LATEST.md +134 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/PKG-INFO +50 -103
- memu_cli-0.5.0/README.md +145 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/SKILL.md +24 -6
- memu_cli-0.5.0/assets/skill-extraction.png +0 -0
- memu_cli-0.5.0/assets/structure-v2.png +0 -0
- memu_cli-0.5.0/docs/adr/0012-cloud-backed-agentic-backend.md +108 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/README.md +1 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/npm/README.md +10 -1
- {memu_cli-0.3.0 → memu_cli-0.5.0}/pyproject.toml +2 -1
- memu_cli-0.5.0/src/memu/agentic_backend.py +31 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/app/agentic.py +43 -45
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/cli.py +28 -22
- memu_cli-0.5.0/src/memu/cloud.py +286 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/__init__.py +0 -4
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/__init__.py +0 -2
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/models.py +2 -11
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/repo.py +1 -12
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/repositories/__init__.py +0 -6
- memu_cli-0.5.0/src/memu/database/inmemory/repositories/recall_file_repo.py +100 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/interfaces.py +1 -6
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/models.py +1 -10
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/migrations/versions/20260703_0001_initial_schema.py +0 -22
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/models.py +2 -15
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/postgres.py +2 -18
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/repositories/__init__.py +0 -2
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/repositories/recall_file_repo.py +32 -32
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/schema.py +0 -9
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/repositories/__init__.py +0 -2
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/repositories/recall_file.py +7 -7
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/models.py +2 -13
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/repositories/__init__.py +0 -2
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/repositories/recall_file_repo.py +40 -40
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/schema.py +2 -11
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/sqlite.py +5 -21
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/state.py +1 -3
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/http_client.py +60 -5
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/openai_sdk.py +21 -2
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/env.py +94 -8
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/layout.py +15 -2
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/manifest.py +8 -4
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/pipeline.py +30 -10
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/recall_files.py +39 -3
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/transcripts.py +14 -7
- memu_cli-0.5.0/src/memu/hosts/claude_code/BRIDGING_TASK.md +168 -0
- memu_cli-0.5.0/src/memu/hosts/claude_code/INSTALL.md +225 -0
- memu_cli-0.5.0/src/memu/hosts/claude_code/UNINSTALL.md +116 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/claude_code/cli.py +14 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/claude_code/sessions.py +11 -9
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/codex/BRIDGING_TASK.md +34 -19
- memu_cli-0.5.0/src/memu/hosts/codex/INSTALL.md +291 -0
- memu_cli-0.5.0/src/memu/hosts/codex/UNINSTALL.md +102 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/codex/cli.py +6 -3
- memu_cli-0.5.0/src/memu/hosts/codex/sessions.py +80 -0
- memu_cli-0.5.0/src/memu/hosts/cursor/BRIDGING_TASK.md +117 -0
- memu_cli-0.5.0/src/memu/hosts/cursor/INSTALL.md +189 -0
- memu_cli-0.5.0/src/memu/hosts/cursor/UNINSTALL.md +105 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/cursor/cli.py +1 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/generic/BRIDGING_TASK.md +53 -12
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/generic/INSTALL.md +73 -8
- memu_cli-0.5.0/src/memu/hosts/generic/UNINSTALL.md +108 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/generic/cli.py +1 -0
- memu_cli-0.5.0/src/memu/hosts/hermes/BRIDGING_TASK.md +119 -0
- memu_cli-0.5.0/src/memu/hosts/hermes/INSTALL.md +204 -0
- memu_cli-0.5.0/src/memu/hosts/hermes/UNINSTALL.md +114 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/hermes/cli.py +8 -1
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/hermes/sessions.py +4 -1
- memu_cli-0.5.0/src/memu/hosts/host_cli.py +403 -0
- memu_cli-0.5.0/src/memu/hosts/instruction.py +323 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/openclaw/BRIDGING_TASK.md +48 -12
- memu_cli-0.5.0/src/memu/hosts/openclaw/INSTALL.md +209 -0
- memu_cli-0.5.0/src/memu/hosts/openclaw/UNINSTALL.md +112 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/openclaw/cli.py +8 -1
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/openclaw/sessions.py +17 -1
- memu_cli-0.5.0/src/memu/hosts/retrieval.py +131 -0
- memu_cli-0.5.0/src/memu/hosts/scheduling/__init__.py +18 -0
- memu_cli-0.5.0/src/memu/hosts/scheduling/prompt.py +54 -0
- memu_cli-0.5.0/src/memu/hosts/scheduling/windows.py +353 -0
- memu_cli-0.5.0/src/memu/hosts/workbuddy/BRIDGING_TASK.md +120 -0
- memu_cli-0.5.0/src/memu/hosts/workbuddy/INSTALL.md +190 -0
- memu_cli-0.5.0/src/memu/hosts/workbuddy/UNINSTALL.md +96 -0
- memu_cli-0.5.0/src/memu/hosts/workbuddy/__init__.py +11 -0
- memu_cli-0.5.0/src/memu/hosts/workbuddy/cli.py +48 -0
- memu_cli-0.5.0/src/memu/hosts/workbuddy/sessions.py +86 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_agentic.py +62 -6
- memu_cli-0.5.0/tests/test_bridging_promotion.py +125 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_cli.py +55 -0
- memu_cli-0.5.0/tests/test_cli_stdio.py +47 -0
- memu_cli-0.5.0/tests/test_cloud.py +339 -0
- memu_cli-0.5.0/tests/test_doctor_proxy_hint.py +169 -0
- memu_cli-0.5.0/tests/test_embedding_proxy.py +200 -0
- memu_cli-0.5.0/tests/test_env_passthrough.py +72 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_host_generic.py +7 -6
- memu_cli-0.5.0/tests/test_host_instruction.py +294 -0
- memu_cli-0.5.0/tests/test_host_retrieval.py +102 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_host_sessions.py +199 -2
- memu_cli-0.5.0/tests/test_scheduling_windows.py +220 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/uv.lock +2 -2
- memu_cli-0.3.0/README.md +0 -198
- memu_cli-0.3.0/assets/structure-v2.png +0 -0
- memu_cli-0.3.0/src/memu/database/inmemory/repositories/recall_file_repo.py +0 -94
- memu_cli-0.3.0/src/memu/database/inmemory/repositories/recall_file_resource_repo.py +0 -67
- memu_cli-0.3.0/src/memu/database/postgres/repositories/recall_file_resource_repo.py +0 -149
- memu_cli-0.3.0/src/memu/database/repositories/recall_file_resource.py +0 -33
- memu_cli-0.3.0/src/memu/database/sqlite/repositories/recall_file_resource_repo.py +0 -215
- memu_cli-0.3.0/src/memu/hosts/claude_code/BRIDGING_TASK.md +0 -85
- memu_cli-0.3.0/src/memu/hosts/claude_code/INSTALL.md +0 -153
- memu_cli-0.3.0/src/memu/hosts/codex/INSTALL.md +0 -212
- memu_cli-0.3.0/src/memu/hosts/codex/sessions.py +0 -52
- memu_cli-0.3.0/src/memu/hosts/cursor/BRIDGING_TASK.md +0 -80
- memu_cli-0.3.0/src/memu/hosts/cursor/INSTALL.md +0 -126
- memu_cli-0.3.0/src/memu/hosts/hermes/BRIDGING_TASK.md +0 -83
- memu_cli-0.3.0/src/memu/hosts/hermes/INSTALL.md +0 -128
- memu_cli-0.3.0/src/memu/hosts/host_cli.py +0 -221
- memu_cli-0.3.0/src/memu/hosts/instruction.py +0 -167
- memu_cli-0.3.0/src/memu/hosts/openclaw/INSTALL.md +0 -129
- memu_cli-0.3.0/src/memu/hosts/retrieval.py +0 -49
- memu_cli-0.3.0/tests/test_host_instruction.py +0 -107
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/ISSUE_TEMPLATE/hackathon_task.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/ISSUE_TEMPLATE/improvement_suggestion.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/workflows/build.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/workflows/pr-title.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/workflows/publish-memu-cli.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.github/workflows/release-please.yml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.gitignore +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.pre-commit-config.yaml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/.python-version +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/AGENTS.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/CONTRIBUTING.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/Cargo.lock +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/Cargo.toml +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/LICENSE.txt +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/MANIFEST.in +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/Makefile +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/banner.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/benchmark.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/memUbot.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/memorize.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/Clawdchat.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/LazyLLM.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/buddie.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/bytebase.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/jazz.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/openagents.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/partners/xroute.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/qrcode.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/retrieve.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/star.gif +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/structure.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_companion-0000.jpg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_creation-0000.jpg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_edu-0000.jpg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_ip-0000.png +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_robot-0000.jpg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_role_play-0000.jpg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/assets/usecase/ai_therapy-0000.jpg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0001-workflow-pipeline-architecture.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0002-pluggable-storage-and-vector-strategy.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0003-user-scope-in-data-model.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0004-workspace-memorize-and-memory-file-system.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0005-dedicated-embedding-package.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0006-from-memory-item-category-to-tracked-workspace-memorization.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0007-three-independent-memory-lines-wiki-graph.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0008-two-integration-surfaces-hooks-and-api.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0009-codex-packaging-cli-and-config.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0010-multi-host-adapters.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/adr/0011-generic-host-adapter.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/docs/sqlite.md +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/npm/bin/memu.js +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/npm/package.json +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/scripts/db.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/setup.cfg +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/lib.rs +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/__main__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/_core.pyi +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/app/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/app/client_pool.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/app/service.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/app/settings.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/factory.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/repositories/filter.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/repositories/recall_file_segment_repo.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/repositories/resource_repo.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/state.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/inmemory/vector.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/migration.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/migrations/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/migrations/env.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/migrations/script.py.mako +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/repositories/base.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/repositories/recall_file_segment_repo.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/repositories/resource_repo.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/postgres/session.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/repositories/recall_file_segment.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/repositories/resource.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/repositories/base.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/repositories/recall_file_segment_repo.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/repositories/resource_repo.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/database/sqlite/session.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/base.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/doubao.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/jina.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/openai.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/openrouter.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/backends/voyage.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/base.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/defaults.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/embedding/gateway.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/base.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/instructions.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/bridging/resources.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/claude_code/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/codex/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/cursor/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/cursor/sessions.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/generic/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/generic/detect.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/generic/sessions.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/hermes/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/hosts/openclaw/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/src/memu/vector.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/__init__.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/rust_entry_test.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_embedding.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_postgres_migration_config.py +0 -0
- {memu_cli-0.3.0 → memu_cli-0.5.0}/tests/test_vector.py +0 -0
|
@@ -1,5 +1,105 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.0.0-beta.0](https://github.com/NevaMind-AI/memU/compare/v1.5.1...v2.0.0-beta.0) (2026-07-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **blob:** ingest rich documents (PDF/Office/HTML) via MarkItDown ([#447](https://github.com/NevaMind-AI/memU/issues/447)) ([1e16341](https://github.com/NevaMind-AI/memU/commit/1e1634131f84ceb023d03cd87bcf062317abd5ba))
|
|
9
|
+
* Codex session-bridging pipeline and scheduled-task skill ([#477](https://github.com/NevaMind-AI/memU/issues/477)) ([1a8edb5](https://github.com/NevaMind-AI/memU/commit/1a8edb57110ebfd208b2fe1f52e3998058fed408))
|
|
10
|
+
* **doctor:** diagnose proxy hijacking instead of printing a bare 502 ([7c41eec](https://github.com/NevaMind-AI/memU/commit/7c41eecd53e4c13b1a5c25b01b70f484147295fb))
|
|
11
|
+
* **env:** config.env carries NO_PROXY; MEMU_HTTP_PROXY works from the file ([5265945](https://github.com/NevaMind-AI/memU/commit/5265945e3063529819415194e79c46b7614d6081))
|
|
12
|
+
* from memory item/category to tracked entry/file for workspace memorization (ADR 0006) ([#456](https://github.com/NevaMind-AI/memU/issues/456)) ([68877da](https://github.com/NevaMind-AI/memU/commit/68877da10a1a18be5c708ec1ab7eb6c45b80ae50))
|
|
13
|
+
* **hermes:** install retrieval as a skill ([#536](https://github.com/NevaMind-AI/memU/issues/536)) ([8766d3d](https://github.com/NevaMind-AI/memU/commit/8766d3d3903383a3d4ff38d0f0d620cdf97418ec))
|
|
14
|
+
* **hosts:** add Claude Code, Cursor, OpenClaw, and Hermes host adapters ([#494](https://github.com/NevaMind-AI/memU/issues/494)) ([24d1b3b](https://github.com/NevaMind-AI/memU/commit/24d1b3b4f345106f07f1262dc2756b49fb7102cf))
|
|
15
|
+
* **hosts:** add memu-agent, a generic adapter for any other agent ([#496](https://github.com/NevaMind-AI/memU/issues/496)) ([e46a1f0](https://github.com/NevaMind-AI/memU/commit/e46a1f04a216a80b3a38064866420c79205fbe22))
|
|
16
|
+
* **hosts:** agent-driven uninstall — remove-instruction, docs uninstall, per-host guides ([#509](https://github.com/NevaMind-AI/memU/issues/509)) ([f51673e](https://github.com/NevaMind-AI/memU/commit/f51673e6e80b23c570a7364b415bf61481956971))
|
|
17
|
+
* **hosts:** install retrieval as a skill on Codex and Claude Code ([#535](https://github.com/NevaMind-AI/memU/issues/535)) ([2ed480e](https://github.com/NevaMind-AI/memU/commit/2ed480ebe462fe4008fdb4315cf5ab9e0316dba4))
|
|
18
|
+
* layered, track-aware workspace memorize & retrieve ([#466](https://github.com/NevaMind-AI/memU/issues/466)) ([094e22f](https://github.com/NevaMind-AI/memU/commit/094e22f0e10e7fe71c079608407b6a01b4d67e55))
|
|
19
|
+
* **llm,vlm:** multi-provider LLM gateway, modular preprocessing, and VLM package ([#442](https://github.com/NevaMind-AI/memU/issues/442)) ([6f1b0bc](https://github.com/NevaMind-AI/memU/commit/6f1b0bc19d600e77abe7d6ec82d4196d1efe1516))
|
|
20
|
+
* **memory_fs:** workspace memorize + markdown memory file system ([#439](https://github.com/NevaMind-AI/memU/issues/439)) ([1b1ad61](https://github.com/NevaMind-AI/memU/commit/1b1ad61bdb96030f00e169b14d7864c1f6adb931))
|
|
21
|
+
* memu CLI, npm launcher, and agent skills for the workspace pair ([#467](https://github.com/NevaMind-AI/memU/issues/467)) ([c861974](https://github.com/NevaMind-AI/memU/commit/c8619744b13c67f7efc3322c060e6090255a8522))
|
|
22
|
+
* **npm:** point the launcher at the memu-cli PyPI channel ([#483](https://github.com/NevaMind-AI/memU/issues/483)) ([5056389](https://github.com/NevaMind-AI/memU/commit/505638905f279e0b2fac61572ea551f819007aa1))
|
|
23
|
+
* **openclaw:** install retrieval as a skill ([#537](https://github.com/NevaMind-AI/memU/issues/537)) ([3cef5ae](https://github.com/NevaMind-AI/memU/commit/3cef5ae2610ce9227de6471a63cc139ff09cf63c))
|
|
24
|
+
* **preprocess:** classify audio type and add an overview on ingest ([#448](https://github.com/NevaMind-AI/memU/issues/448)) ([f7601da](https://github.com/NevaMind-AI/memU/commit/f7601daf4ed89815af5c1c1c9011db6af63c1fa5))
|
|
25
|
+
* **vlm,preprocess:** native whole-video understanding via OpenRouter ([#450](https://github.com/NevaMind-AI/memU/issues/450)) ([1de5784](https://github.com/NevaMind-AI/memU/commit/1de57847e0ffc430cbf5d6dc17183f33d08be8fe))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* **app:** unpack the (vectors, raw_response) tuple embed() returns ([#504](https://github.com/NevaMind-AI/memU/issues/504)) ([9b2a70c](https://github.com/NevaMind-AI/memU/commit/9b2a70ca214cd3a5b22e902cad0dc19ad07bfeb9))
|
|
31
|
+
* **bridging:** advance the cursor and snapshot at commit, not prepare ([#531](https://github.com/NevaMind-AI/memU/issues/531)) ([0ceaa19](https://github.com/NevaMind-AI/memU/commit/0ceaa190d92f8c7c6705db0dcfd6628581d10213))
|
|
32
|
+
* **ci:** sort workbuddy cli imports so make check passes ([#522](https://github.com/NevaMind-AI/memU/issues/522)) ([151298c](https://github.com/NevaMind-AI/memU/commit/151298c3c03a6b3cc9ef371d8211b469fffc2469))
|
|
33
|
+
* **cli:** force UTF-8 stdio so piped output survives non-UTF-8 Windows code pages ([#513](https://github.com/NevaMind-AI/memU/issues/513)) ([b521453](https://github.com/NevaMind-AI/memU/commit/b5214536c5fce628c174c9c074b9c1d0a53da2ca))
|
|
34
|
+
* **codex:** drop harness-injected user records from the conversation seam ([#511](https://github.com/NevaMind-AI/memU/issues/511)) ([c827157](https://github.com/NevaMind-AI/memU/commit/c827157ead066f0a859cb2f1e5deac62ffbe63a5))
|
|
35
|
+
* **embedding:** never route loopback embedding calls through a proxy ([#519](https://github.com/NevaMind-AI/memU/issues/519)) ([df6cfba](https://github.com/NevaMind-AI/memU/commit/df6cfba6b9741cc062b7d219af042ddddffcbb5c))
|
|
36
|
+
* handle multiple root-level XML elements from non-conformant LLMs ([#409](https://github.com/NevaMind-AI/memU/issues/409)) ([fed42b6](https://github.com/NevaMind-AI/memU/commit/fed42b6142ec1e9f9820e46d8899823d68de8276))
|
|
37
|
+
* **hermes:** escape the state.db path when building the SQLite URI ([#503](https://github.com/NevaMind-AI/memU/issues/503)) ([3135132](https://github.com/NevaMind-AI/memU/commit/313513204d87e7156d6a7d459df1bcac64469044))
|
|
38
|
+
* **llm/vlm:** correct OpenAI token-limit param and simplify conversation preprocess ([#449](https://github.com/NevaMind-AI/memU/issues/449)) ([ff3c2be](https://github.com/NevaMind-AI/memU/commit/ff3c2bee2ec96ebd303f3e22dae1977ff6388120))
|
|
39
|
+
* make lazyllm an optional dependency (fixes [#373](https://github.com/NevaMind-AI/memU/issues/373)) ([#402](https://github.com/NevaMind-AI/memU/issues/402)) ([7652982](https://github.com/NevaMind-AI/memU/commit/7652982a016b2a2426d20bc11c46491d909704d0))
|
|
40
|
+
* **memory_fs:** restore LLM-free skill bypass and unify synthesis paths ([#444](https://github.com/NevaMind-AI/memU/issues/444)) ([bc13bd4](https://github.com/NevaMind-AI/memU/commit/bc13bd43c6ed3d480b671736bab987434675c717))
|
|
41
|
+
* **openclaw:** scan only main session transcripts, not trajectory/checkpoint sidecars ([0245de9](https://github.com/NevaMind-AI/memU/commit/0245de9710f8f73a8b21361442ac3dfd6c7829c7))
|
|
42
|
+
* optimize category initialization to avoid unnecessary embedding ([#388](https://github.com/NevaMind-AI/memU/issues/388)) ([a92f266](https://github.com/NevaMind-AI/memU/commit/a92f2666bf94336f8c6bf950088249e611915e7d))
|
|
43
|
+
* remove broken memu-server entry point (fixes [#354](https://github.com/NevaMind-AI/memU/issues/354)) ([#398](https://github.com/NevaMind-AI/memU/issues/398)) ([0672b56](https://github.com/NevaMind-AI/memU/commit/0672b56725e12c35bd46061bb23ccd93690a5fbb))
|
|
44
|
+
* remove duplicate document text from preprocess prompt ([#420](https://github.com/NevaMind-AI/memU/issues/420)) ([44aa5ff](https://github.com/NevaMind-AI/memU/commit/44aa5ff0cbceae56ab283848e722a9d4bd8eddd0))
|
|
45
|
+
* remove stale memu-server script entry point (fixes [#393](https://github.com/NevaMind-AI/memU/issues/393)) ([#403](https://github.com/NevaMind-AI/memU/issues/403)) ([c5fe493](https://github.com/NevaMind-AI/memU/commit/c5fe493b0596d68479b0ce6c6d83e362ffb04e90))
|
|
46
|
+
* resolve SQLite embedding TypeError by using sa_column=False ([#401](https://github.com/NevaMind-AI/memU/issues/401)) ([7e198f3](https://github.com/NevaMind-AI/memU/commit/7e198f3718fa6028c809ba7d816a96541fe7e13f))
|
|
47
|
+
* return empty list for non-positive top_k in cosine_topk ([#423](https://github.com/NevaMind-AI/memU/issues/423)) ([39023a8](https://github.com/NevaMind-AI/memU/commit/39023a81d758eb4447ed7d88503b8d782aecaf73))
|
|
48
|
+
* **tests:** pin UTF-8 on test file I/O so the suite passes on non-UTF-8-locale Windows ([#501](https://github.com/NevaMind-AI/memU/issues/501)) ([dda515a](https://github.com/NevaMind-AI/memU/commit/dda515a4eb3117ff804cd7ce1ae66e03c23028b6))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### Documentation
|
|
52
|
+
|
|
53
|
+
* add ADR 0008 — trajectory as the source, hooks over API ([#476](https://github.com/NevaMind-AI/memU/issues/476)) ([ff90dac](https://github.com/NevaMind-AI/memU/commit/ff90dac6976bc920667e03d295a75d5da8626f75))
|
|
54
|
+
* add INSTALL-LATEST.md and register the WorkBuddy adapter ([#527](https://github.com/NevaMind-AI/memU/issues/527)) ([4871c55](https://github.com/NevaMind-AI/memU/commit/4871c558d5b84c7649d822015dab617a095d678f))
|
|
55
|
+
* add SKILL.md, one routing entry point for agent-driven install ([#497](https://github.com/NevaMind-AI/memU/issues/497)) ([bf7aaf3](https://github.com/NevaMind-AI/memU/commit/bf7aaf3bf95cb37f723e7a81b6d5bcdaf35a0f2e))
|
|
56
|
+
* add the architecture image the README references ([#492](https://github.com/NevaMind-AI/memU/issues/492)) ([c07b905](https://github.com/NevaMind-AI/memU/commit/c07b9055dc245680c67df02199d4c95cd7a9a62f))
|
|
57
|
+
* add under-construction notice, stabilizing ~July 15 ([#472](https://github.com/NevaMind-AI/memU/issues/472)) ([6426ff0](https://github.com/NevaMind-AI/memU/commit/6426ff02aacca12e9d4efbcfc89f53eeed2ae55b))
|
|
58
|
+
* ADR 0007 — drop the graph, retrieval is hybrid (embedding + BM25) ([#464](https://github.com/NevaMind-AI/memU/issues/464)) ([3dd7d5c](https://github.com/NevaMind-AI/memU/commit/3dd7d5c055fc6a3244d4c2390f7b8e6bc4321857))
|
|
59
|
+
* ADR 0007 — invert L1/L2 (L1 = coarse doc, L2 = item slices) ([#465](https://github.com/NevaMind-AI/memU/issues/465)) ([0afbcc5](https://github.com/NevaMind-AI/memU/commit/0afbcc550ac5b816e5ae9ad309e62adbdf4b80b4))
|
|
60
|
+
* ADR 0007 — replace the explicit item graph with entity linking ([#463](https://github.com/NevaMind-AI/memU/issues/463)) ([0bd3c77](https://github.com/NevaMind-AI/memU/commit/0bd3c7765ac791020941de8791ba5b7c50ecc5e0))
|
|
61
|
+
* ADR 0007 — three independent memory lines on a layered wiki-graph kernel ([#461](https://github.com/NevaMind-AI/memU/issues/461)) ([a6cf62e](https://github.com/NevaMind-AI/memU/commit/a6cf62e069765b7b234597e537ec170d169d751c))
|
|
62
|
+
* align architecture.md and READMEs with ADR 0006 data model ([#460](https://github.com/NevaMind-AI/memU/issues/460)) ([8062b91](https://github.com/NevaMind-AI/memU/commit/8062b91776e69757fd467e79e56cd72eba62c72c))
|
|
63
|
+
* consolidate agent skills into one memu SKILL.md, link it atop README ([#469](https://github.com/NevaMind-AI/memU/issues/469)) ([6f0ae82](https://github.com/NevaMind-AI/memU/commit/6f0ae82aaf9d1193841b8e082a2f9fed8753ed70))
|
|
64
|
+
* drop the API and CLI reference sections from the README ([#489](https://github.com/NevaMind-AI/memU/issues/489)) ([94a1111](https://github.com/NevaMind-AI/memU/commit/94a11117cf5684888fb7858356c51203c903e9bb))
|
|
65
|
+
* expand the README; rename provider var to MEMU_EMBED_PROVIDER ([#486](https://github.com/NevaMind-AI/memU/issues/486)) ([96da89b](https://github.com/NevaMind-AI/memU/commit/96da89bfe048b86516faa4b86f69b508fb4c4c3c))
|
|
66
|
+
* focus readme on workspace APIs ([9241f31](https://github.com/NevaMind-AI/memU/commit/9241f3112e912bd47add2fabe6dc2611a4bdac8c))
|
|
67
|
+
* **grok:** fix MemoryService initialization example ([#405](https://github.com/NevaMind-AI/memU/issues/405)) ([96e693a](https://github.com/NevaMind-AI/memU/commit/96e693aa09add032f67b342e21b86fa96078611b))
|
|
68
|
+
* highlight self-evolving skills in README and description ([#452](https://github.com/NevaMind-AI/memU/issues/452)) ([fb68d22](https://github.com/NevaMind-AI/memU/commit/fb68d22c3caa4a9b6f5cb2a57d185bb9b5e22a5f))
|
|
69
|
+
* **hosts:** bind the session cursor's lifecycle to the store's ([75959a6](https://github.com/NevaMind-AI/memU/commit/75959a6e72727c35929f4296c087ed00c97971bf))
|
|
70
|
+
* **hosts:** correct the Claude Code multi-block claim and pin it with tests ([#502](https://github.com/NevaMind-AI/memU/issues/502)) ([5995e05](https://github.com/NevaMind-AI/memU/commit/5995e05f27c7d90231468bcb062713af30813b08))
|
|
71
|
+
* **hosts:** default bridging schedule to hourly ([#516](https://github.com/NevaMind-AI/memU/issues/516)) ([c1046bb](https://github.com/NevaMind-AI/memU/commit/c1046bb1954c3dd7b16ced769da030d8a02c8d32))
|
|
72
|
+
* **hosts:** name the OS system-wide proxy as a 502 source ([#523](https://github.com/NevaMind-AI/memU/issues/523)) ([2b79803](https://github.com/NevaMind-AI/memU/commit/2b79803612872e65201a40dde95ac00541f93fae))
|
|
73
|
+
* **hosts:** no-key local fallback hint; default bridging schedule to cron ([#508](https://github.com/NevaMind-AI/memU/issues/508)) ([d155c48](https://github.com/NevaMind-AI/memU/commit/d155c48ac6a35465ad47848927b271f34e2dc4d0))
|
|
74
|
+
* **hosts:** scheduled runs drain leftover jobs first; config repairs stay at the connection layer ([9195d14](https://github.com/NevaMind-AI/memU/commit/9195d14cef2d308cff3fcb853a6274e1f0db9d31))
|
|
75
|
+
* **hosts:** the scheduler's PATH is not your shell's — fix and honest verify for the bridging guides ([#530](https://github.com/NevaMind-AI/memU/issues/530)) ([19302d2](https://github.com/NevaMind-AI/memU/commit/19302d24260c7b941bdfee66bba8f16b6b47c8c2))
|
|
76
|
+
* lead the README with the one-message agent-driven install ([#498](https://github.com/NevaMind-AI/memU/issues/498)) ([aae3d44](https://github.com/NevaMind-AI/memU/commit/aae3d44b0a4332981c4459e7da9258298bcc0fb1))
|
|
77
|
+
* make the workspace pair primary, mark memorize/retrieve as legacy ([#470](https://github.com/NevaMind-AI/memU/issues/470)) ([6f3c1be](https://github.com/NevaMind-AI/memU/commit/6f3c1beb36bba21a7d640b0dbdead9361a90a811))
|
|
78
|
+
* never fall back to legacy memorize/retrieve ([#471](https://github.com/NevaMind-AI/memU/issues/471)) ([28ee09d](https://github.com/NevaMind-AI/memU/commit/28ee09de54de5bd74f4f6bb1e0185c854ecf1053))
|
|
79
|
+
* pitch memU as a 500-line memory system ([#488](https://github.com/NevaMind-AI/memU/issues/488)) ([2a8f8b3](https://github.com/NevaMind-AI/memU/commit/2a8f8b3403548a8d8917a19d5ac0015adf4eab17))
|
|
80
|
+
* point the README at the memu-cli package ([#491](https://github.com/NevaMind-AI/memU/issues/491)) ([9ceea5b](https://github.com/NevaMind-AI/memU/commit/9ceea5b32a2694cf4ab5e5f0069b029ac13800b3))
|
|
81
|
+
* **readme:** readme accuracy updates ([#430](https://github.com/NevaMind-AI/memU/issues/430)) ([5f17725](https://github.com/NevaMind-AI/memU/commit/5f1772579c8d0881ec1c9ab071404aea6b3bfadc))
|
|
82
|
+
* **readme:** reframe intro around MEMORY.md, SKILL.md, and INDEX.md ([#434](https://github.com/NevaMind-AI/memU/issues/434)) ([ca0c755](https://github.com/NevaMind-AI/memU/commit/ca0c755dcc06874c227df811d6b7a3ca972f6be2))
|
|
83
|
+
* **readme:** reframe README around file-system-as-memory narrative ([#432](https://github.com/NevaMind-AI/memU/issues/432)) ([cd8150a](https://github.com/NevaMind-AI/memU/commit/cd8150ac7d68f4972d9a9e8268e3169da9b4cfc3))
|
|
84
|
+
* **readme:** reframe README around workspace-runtime narrative ([#438](https://github.com/NevaMind-AI/memU/issues/438)) ([7c104b1](https://github.com/NevaMind-AI/memU/commit/7c104b1eb0883437d49bea0edae3a24eea12f275))
|
|
85
|
+
* **readme:** sync translated READMEs to file-system-as-memory narrative ([#433](https://github.com/NevaMind-AI/memU/issues/433)) ([f4e82ce](https://github.com/NevaMind-AI/memU/commit/f4e82cec1898e34f82612ec3628f8de1faedf701))
|
|
86
|
+
* refine ADR 0007 with the L0/L1/L2 layer model ([#462](https://github.com/NevaMind-AI/memU/issues/462)) ([6456c35](https://github.com/NevaMind-AI/memU/commit/6456c357b22039a3b12ba2f2bc0294a8693bceb5))
|
|
87
|
+
* Refine OpenClaw reference and feature descriptions ([#410](https://github.com/NevaMind-AI/memU/issues/410)) ([707b80e](https://github.com/NevaMind-AI/memU/commit/707b80e5f4394b8e4aafff1ef23fd331a8b557f8))
|
|
88
|
+
* refine README memory filesystem positioning ([#429](https://github.com/NevaMind-AI/memU/issues/429)) ([dda0374](https://github.com/NevaMind-AI/memU/commit/dda03743b007c0863c7fe7237592f7e4a0de32b6))
|
|
89
|
+
* refine README positioning around personal memory as files ([#455](https://github.com/NevaMind-AI/memU/issues/455)) ([88982d3](https://github.com/NevaMind-AI/memU/commit/88982d3d22640501be09ced1876520e95d956312))
|
|
90
|
+
* reframe README and description around personal-information memory ([#451](https://github.com/NevaMind-AI/memU/issues/451)) ([6b5b11c](https://github.com/NevaMind-AI/memU/commit/6b5b11c0787704c119b8d2e2d3c779bd56ee66fa))
|
|
91
|
+
* refresh memory diagrams ([#473](https://github.com/NevaMind-AI/memU/issues/473)) ([0d8770f](https://github.com/NevaMind-AI/memU/commit/0d8770f0c9d49f3a09e6ac33ca72b34c8128a855))
|
|
92
|
+
* retitle around file-based memory and trim README ([#453](https://github.com/NevaMind-AI/memU/issues/453)) ([2c1cc86](https://github.com/NevaMind-AI/memU/commit/2c1cc86ba66f31ffb7c6afcd0717f7e1880c0fd0))
|
|
93
|
+
* rewrite README — raw data → memory → agent ([#426](https://github.com/NevaMind-AI/memU/issues/426)) ([c2a2aac](https://github.com/NevaMind-AI/memU/commit/c2a2aac52b4424583955f85f5a35776e76beb68a))
|
|
94
|
+
* swap the tagline to lead with Across Agents ([#490](https://github.com/NevaMind-AI/memU/issues/490)) ([6e0fc06](https://github.com/NevaMind-AI/memU/commit/6e0fc068a1e3a2212dfea52f52438b438dae88f3))
|
|
95
|
+
* tagline across sessions/agents/devices, lowercase memU in banner alt ([#515](https://github.com/NevaMind-AI/memU/issues/515)) ([1f4f831](https://github.com/NevaMind-AI/memU/commit/1f4f8315bc0a68a6d2c2fa8018d64e7f22e5b164))
|
|
96
|
+
* tighten the README intro to two sentences ([#487](https://github.com/NevaMind-AI/memU/issues/487)) ([da160f2](https://github.com/NevaMind-AI/memU/commit/da160f2155439923bfe744ac770733c1c9824cd9))
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
### Miscellaneous Chores
|
|
100
|
+
|
|
101
|
+
* release 2.0.0-beta.0 ([#541](https://github.com/NevaMind-AI/memU/issues/541)) ([3dc60ce](https://github.com/NevaMind-AI/memU/commit/3dc60cea094e29f86ead2fad148ea0fbeab198c3))
|
|
102
|
+
|
|
3
103
|
## [1.5.1](https://github.com/NevaMind-AI/memU/compare/v1.5.0...v1.5.1) (2026-03-23)
|
|
4
104
|
|
|
5
105
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: install-memu-latest
|
|
3
|
+
description: Install the latest development build of memU-cli from git (main HEAD). Use when the user wants the newest unreleased code — clean any old install, install from git, verify, then set up.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Install the latest (development) memU
|
|
7
|
+
|
|
8
|
+
> **Audience: the agent.** A user pointed you here ("read this and install the
|
|
9
|
+
> latest memU"). Do the install yourself — the user should not run commands by
|
|
10
|
+
> hand. This installs memU-cli from **git `main`**, the latest source.
|
|
11
|
+
|
|
12
|
+
## Step 1 — remove any existing memU install
|
|
13
|
+
|
|
14
|
+
An older memU already on the machine can stay on `PATH` and **shadow the one you
|
|
15
|
+
are about to install**, so the version that actually runs would not be the
|
|
16
|
+
latest. Remove it first — try each installer, ignore "not installed":
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
uv tool uninstall memu-cli
|
|
20
|
+
pipx uninstall memu-cli
|
|
21
|
+
pip uninstall -y memu-cli
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Tell the user what you removed** — the name and version, or "no previous
|
|
25
|
+
install found" — so they know their old version is gone before you continue.
|
|
26
|
+
|
|
27
|
+
This removes only the memU **package** (the binaries). The store and
|
|
28
|
+
`~/.memu/config.env` live under `~/.memu/` and are **not** touched, so the
|
|
29
|
+
user's memories and settings carry straight over — Step 4 reuses the existing
|
|
30
|
+
`config.env` instead of asking again. (If this newer build needs a config value
|
|
31
|
+
the old file lacks, Step 4's `doctor` gate names exactly what to add.)
|
|
32
|
+
|
|
33
|
+
## Step 2 — install from git, persistently
|
|
34
|
+
|
|
35
|
+
The install **must persist on `PATH`**: the scheduled bridging task will call
|
|
36
|
+
these binaries later from a bare, non-interactive shell. So install as a durable
|
|
37
|
+
tool — **never** with an ephemeral runner (`uvx`, `npx`), which vanish after one
|
|
38
|
+
command and leave nothing for the task to find.
|
|
39
|
+
|
|
40
|
+
Requirement: `git` on `PATH`. Then take the first option that fits the machine:
|
|
41
|
+
|
|
42
|
+
- **uv (preferred — isolated, global, on `PATH`):**
|
|
43
|
+
```
|
|
44
|
+
uv tool install "git+https://github.com/NevaMind-AI/memU"
|
|
45
|
+
```
|
|
46
|
+
- **no uv, but you can install it:** install uv, then run the command above.
|
|
47
|
+
```
|
|
48
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
|
|
49
|
+
powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
|
|
50
|
+
```
|
|
51
|
+
- **pip fallback (only into a stable, on-`PATH` environment):**
|
|
52
|
+
```
|
|
53
|
+
pip install "git+https://github.com/NevaMind-AI/memU"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
To pin an exact commit instead of the moving `main`, append `@<sha>` to the URL.
|
|
57
|
+
|
|
58
|
+
The installer prints the exact commit it resolved — with uv, a line like
|
|
59
|
+
`Building memu-cli @ git+…@<sha>`. Note that SHA; you confirm it to the user in
|
|
60
|
+
Step 3, before the setup.
|
|
61
|
+
|
|
62
|
+
## Step 3 — verify, then confirm the version with the user
|
|
63
|
+
|
|
64
|
+
From a **fresh** shell (not the one that ran the installer, whose `PATH` may be
|
|
65
|
+
stale):
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
memu --help
|
|
69
|
+
memu-<your-host> --help # e.g. memu-claude-code, memu-codex
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Both must print usage. If they do not, the install's bin directory is not on
|
|
73
|
+
`PATH` (with uv it is `~/.local/bin`) — fix that before continuing, since the
|
|
74
|
+
scheduled task depends on the same resolution.
|
|
75
|
+
|
|
76
|
+
Then confirm the version with the user — **before the setup below**, since setup
|
|
77
|
+
is the long part and a wrong or stale build is painful to discover afterward. A
|
|
78
|
+
bare SHA is hard to judge, so report what the commit actually **is**:
|
|
79
|
+
|
|
80
|
+
- the SHA (from Step 2),
|
|
81
|
+
- its **subject line and date**, and
|
|
82
|
+
- the link to inspect it: `https://github.com/NevaMind-AI/memU/commit/<sha>`.
|
|
83
|
+
|
|
84
|
+
Fetch the subject and date from the GitHub API — no clone needed:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
curl -s https://api.github.com/repos/NevaMind-AI/memU/commits/<sha>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
read `.commit.message` (first line) and `.commit.author.date`. Then offer a
|
|
91
|
+
**one-tap choice** — not an open question the user has to answer in a sentence.
|
|
92
|
+
If your host can render selectable options, present exactly these two; otherwise
|
|
93
|
+
accept a plain "yes":
|
|
94
|
+
|
|
95
|
+
- **Use this version** → continue straight into Step 4 and run it to completion
|
|
96
|
+
**yourself**; do not make the user run `docs install` or any setup command.
|
|
97
|
+
Pause again only if you genuinely need them (e.g. an embedding API key).
|
|
98
|
+
- **Pick a different commit** → ask which, reinstall it (Step 2 with `@<sha>`),
|
|
99
|
+
then confirm again here.
|
|
100
|
+
|
|
101
|
+
A bare "yes" / "ok" means **Use this version** — default to proceeding.
|
|
102
|
+
|
|
103
|
+
## Step 4 — set up memU
|
|
104
|
+
|
|
105
|
+
You now have the latest binaries. Identify **which agent you are** and use its
|
|
106
|
+
binary — memU has seven host adapters:
|
|
107
|
+
|
|
108
|
+
| You are | Your binary |
|
|
109
|
+
| --- | --- |
|
|
110
|
+
| Codex | `memu-codex` |
|
|
111
|
+
| Claude Code | `memu-claude-code` |
|
|
112
|
+
| Cursor | `memu-cursor` |
|
|
113
|
+
| OpenClaw | `memu-openclaw` |
|
|
114
|
+
| Hermes | `memu-hermes` |
|
|
115
|
+
| WorkBuddy | `memu-workbuddy` |
|
|
116
|
+
| anything else | `memu-agent` — run `memu-agent detect` if unsure |
|
|
117
|
+
|
|
118
|
+
Then print your host's packaged guide and follow it to the letter:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
memu-<your-host> docs install
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
It walks you through selecting the local or cloud backend in `~/.memu/config.env`, registering
|
|
125
|
+
the scheduled bridging task, and patching your instruction file, each behind a
|
|
126
|
+
verify gate.
|
|
127
|
+
|
|
128
|
+
Because the existing `config.env` is reused, also **check it against the settings
|
|
129
|
+
this build documents** (the guide lists them): if this version recognizes any
|
|
130
|
+
`MEMU_*` option the user's file does not set, tell the user its name and what it
|
|
131
|
+
does — that is configuration this newer build introduces. Optional ones keep
|
|
132
|
+
working on their defaults; a required one is caught by the `doctor` gate.
|
|
133
|
+
|
|
134
|
+
When done, report which seams (memorization / retrieval) are now active.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memu-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Operating System :: OS Independent
|
|
@@ -26,15 +26,15 @@ Project-URL: Bug Tracker, https://github.com/NevaMind-AI/MemU/issues
|
|
|
26
26
|
Project-URL: Documentation, https://github.com/NevaMind-AI/MemU#readme
|
|
27
27
|
Project-URL: Homepage, https://github.com/NevaMind-AI/MemU
|
|
28
28
|
|
|
29
|
-

|
|
30
30
|
|
|
31
31
|
<div align="center">
|
|
32
32
|
|
|
33
33
|
# memU
|
|
34
34
|
|
|
35
|
-
### Personal memory, stored as
|
|
35
|
+
### Personal memory, stored as Wiki
|
|
36
36
|
|
|
37
|
-
**Across
|
|
37
|
+
**Across Sessions. Across Agents. Across Devices.**
|
|
38
38
|
|
|
39
39
|
[](https://badge.fury.io/py/memu-cli)
|
|
40
40
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
@@ -48,86 +48,44 @@ Project-URL: Homepage, https://github.com/NevaMind-AI/MemU
|
|
|
48
48
|
|
|
49
49
|
---
|
|
50
50
|
|
|
51
|
-
memU is a
|
|
52
|
-
|
|
53
|
-
**Installation is agent-driven.** The guides are written for the agent, not for you. One message is the whole setup — tell your agent:
|
|
54
|
-
|
|
55
|
-
> Read https://raw.githubusercontent.com/NevaMind-AI/MemU/main/SKILL.md and follow it to install memU.
|
|
56
|
-
|
|
57
|
-
It works for Codex, Claude Code, Cursor, OpenClaw, Hermes — and any other agent, via detection. Details in [Host adapters](#host-adapters-memory-for-desktop-coding-agents).
|
|
51
|
+
memU is a lightweight, agent-driven memory system that gives users a shared LLM wiki across sessions, agents, and devices. It automatically distills your own reusable skills from your agent history. Its core memory logic is only 500 lines — compact enough to inspect, understand, and adapt.
|
|
58
52
|
|
|
59
53
|
## Quick start
|
|
60
54
|
|
|
61
|
-
|
|
62
|
-
from memu.app import MemoryService
|
|
63
|
-
|
|
64
|
-
service = MemoryService(
|
|
65
|
-
database_config={"metadata_store": {"provider": "sqlite", "dsn": "sqlite:///memu.sqlite3"}},
|
|
66
|
-
)
|
|
55
|
+
memU works with Codex, Claude Code, Cursor, OpenClaw, Hermes, WorkBuddy, and more. See [Host adapters](#host-adapters-memory-for-desktop-coding-agents).
|
|
67
56
|
|
|
68
|
-
|
|
69
|
-
await service.commit_results(
|
|
70
|
-
recall_files=[
|
|
71
|
-
{
|
|
72
|
-
"name": "Profile",
|
|
73
|
-
"track": "memory",
|
|
74
|
-
"description": "who the user is",
|
|
75
|
-
"content": "# Profile\n- prefers dark roast coffee\n- ships on Fridays",
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"name": "deploy-checklist",
|
|
79
|
-
"track": "skill",
|
|
80
|
-
"description": "how to deploy this repo",
|
|
81
|
-
"content": "1. run tests\n2. tag\n3. push",
|
|
82
|
-
},
|
|
83
|
-
],
|
|
84
|
-
resource=[{"path": "/abs/path/notes.md", "description": "meeting notes from the launch review"}],
|
|
85
|
-
)
|
|
57
|
+
Choose Cloud or Local, then send the corresponding message to your agent.
|
|
86
58
|
|
|
87
|
-
|
|
88
|
-
files = await service.list_all_recall_files()
|
|
59
|
+
### Cloud (coming soon)
|
|
89
60
|
|
|
90
|
-
|
|
91
|
-
context = await service.progressive_retrieve("What should I know about this user's launch preferences?")
|
|
92
|
-
```
|
|
61
|
+
**Cross-device · Free · Unlimited · [View online](https://memu.so)**
|
|
93
62
|
|
|
94
|
-
|
|
63
|
+
> Read [https://memu.pro/SKILL.md](https://memu.pro/SKILL.md) and follow it to install memU.
|
|
95
64
|
|
|
96
|
-
|
|
97
|
-
export OPENAI_API_KEY=sk-... # embedding API key — the only model calls memU makes
|
|
65
|
+
### Local / self-hosted
|
|
98
66
|
|
|
99
|
-
|
|
100
|
-
npx memu-cli list-files
|
|
101
|
-
npx memu-cli retrieve "What should I know about this user's launch preferences?"
|
|
102
|
-
```
|
|
67
|
+
**Private · Single-device · Embedding key required**
|
|
103
68
|
|
|
104
|
-
|
|
69
|
+
> Read [https://raw.githubusercontent.com/NevaMind-AI/MemU/main/SKILL.md](https://raw.githubusercontent.com/NevaMind-AI/MemU/main/SKILL.md) and follow it to install memU.
|
|
105
70
|
|
|
106
71
|
## How it works
|
|
107
72
|
|
|
108
73
|

|
|
109
74
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
Memory is a set of **recall files** — one Markdown document per topic (`track="memory"`) or per learned skill (`track="skill"`). Committing a file also writes its search index:
|
|
113
|
-
|
|
114
|
-
| Record | What it is | How it's embedded |
|
|
115
|
-
|---|---|---|
|
|
116
|
-
| **RecallFile** | The Markdown document itself (`name`, `track`, `description`, `content`) | `name: description`, once at creation |
|
|
117
|
-
| **RecallFileSegment** | Searchable slices of a file | memory track: one per content line (headings skipped); skill track: one `name: description` segment per skill |
|
|
118
|
-
| **Resource** | A raw source on disk (`url`, `caption`) | its one-line caption |
|
|
119
|
-
|
|
120
|
-
Segments are reconciled on every commit: lines that disappeared are deleted, only genuinely new lines are embedded, unchanged lines keep their vectors — so re-committing a lightly edited file is nearly free.
|
|
75
|
+
## Automatic skill extraction
|
|
121
76
|
|
|
122
|
-
|
|
77
|
+
Once the scheduled bridging task is installed, memU can turn useful agent history into reusable Markdown skills automatically.
|
|
123
78
|
|
|
124
|
-
|
|
79
|
+

|
|
125
80
|
|
|
126
|
-
|
|
127
|
-
- `
|
|
128
|
-
|
|
81
|
+
1. **Capture new sessions.** The host adapter reads new session history, including messages and tool calls.
|
|
82
|
+
2. **Prepare self-evolve jobs.** `prepare` slices each session into a self-contained job with the paths and context the agent needs.
|
|
83
|
+
3. **Let the agent decide.** The agent reads related existing skills, then chooses to do nothing, patch an existing skill, or create a new one.
|
|
84
|
+
4. **Write readable skill Markdown.** Each skill has a name, description, and reusable workflow, including useful branches, edge cases, and pitfalls.
|
|
85
|
+
5. **Commit and index.** `commit` submits changed skill files through `commit_results`; memU embeds the skill name and description and stores it under the `skill` track.
|
|
86
|
+
6. **Retrieve it later.** On a similar future task, memU returns the relevant skill so any connected agent can use the learned workflow.
|
|
129
87
|
|
|
130
|
-
|
|
88
|
+
The judgment and synthesis stay inside the agent. `MemoryService` makes no LLM or chat calls; it stores, embeds, and retrieves the skill Markdown the agent prepared.
|
|
131
89
|
|
|
132
90
|
## Host adapters: memory for desktop coding agents
|
|
133
91
|
|
|
@@ -143,19 +101,33 @@ memU runs as a sidecar to a desktop agent (ADR 0008/0009/0010), one binary per h
|
|
|
143
101
|
| Cursor (Agent/CLI) | `memu-cursor` | `~/.cursor/projects/<project>/agent-transcripts/**.jsonl` | `./AGENTS.md` (per project) |
|
|
144
102
|
| OpenClaw | `memu-openclaw` | `~/.openclaw/agents/<agentId>/sessions/*.jsonl` | `~/.openclaw/workspace/AGENTS.md` |
|
|
145
103
|
| Hermes Agent | `memu-hermes` | `~/.hermes/state.db` (SQLite, read-only) | `~/.hermes/SOUL.md` |
|
|
104
|
+
| WorkBuddy | `memu-workbuddy` | `~/.workbuddy/projects/<project>/<session>.jsonl` | `~/.workbuddy/MEMORY.md` |
|
|
146
105
|
| **any other agent** | `memu-agent` | found by `memu-agent detect` (JSONL dialect sniffed) | found by `detect` (AGENTS.md / CLAUDE.md / SOUL.md / …) |
|
|
147
106
|
|
|
148
107
|
For agents without a dedicated binary, `memu-agent detect` probes the machine and reports per agent whether **memorization** works (a recognizable session log exists) and whether **retrieval** works (an instruction file exists to patch) — then the same verbs run against what it found.
|
|
149
108
|
|
|
150
|
-
All hosts share one
|
|
109
|
+
All hosts share one configured memory backend via `~/.memu/config.env` — local
|
|
110
|
+
or MemU Cloud. What one host's sessions taught memU, another host retrieves.
|
|
151
111
|
|
|
152
|
-
Installation is the one-message setup at the top of this README. [SKILL.md](SKILL.md) is the routing skill it hands your agent: install the package, identify which host you are (falling back to `memu-agent detect` for anything without a dedicated adapter), print that host's packaged install guide (`<binary> docs install`), and follow it — configure the
|
|
112
|
+
Installation is the one-message setup at the top of this README. [SKILL.md](SKILL.md) is the routing skill it hands your agent: install the package, identify which host you are (falling back to `memu-agent detect` for anything without a dedicated adapter), print that host's packaged install guide (`<binary> docs install`), and follow it — configure the memory backend, register the scheduled bridging task, patch the instruction file, each step behind a verify gate — then report which seams (memorization / retrieval) are now active.
|
|
153
113
|
|
|
154
|
-
Afterwards `<binary> doctor` proves the whole loop resolves: config,
|
|
114
|
+
Afterwards `<binary> doctor` proves the whole loop resolves: config, selected
|
|
115
|
+
mode, and a live retrieval.
|
|
155
116
|
|
|
156
|
-
Adding another host means implementing one `TranscriptSource` (where its session logs live, how its records are shaped) plus a `HostSpec`-sized CLI — the pipeline, verbs, and instruction text are shared
|
|
117
|
+
Adding another host means implementing one `TranscriptSource` (where its session logs live, how its records are shaped) plus a `HostSpec`-sized CLI — the pipeline, verbs, and instruction text are shared.
|
|
118
|
+
|
|
119
|
+
## CLI
|
|
120
|
+
|
|
121
|
+
With memU Cloud, sign in at [memu.so](https://memu.so) to view your memory files. With a local installation, memory lives in the shared store configured by `MEMU_DB` in `~/.memu/config.env` — typically `~/.memu/memu.sqlite3` for local SQLite, or a Postgres DSN.
|
|
122
|
+
|
|
123
|
+
Once installed, your agent retrieves relevant memory automatically before answering. To retrieve manually, run the adapter for your host:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
memu-codex retrieve "What should I remember about this project?"
|
|
127
|
+
# or: memu-claude-code / memu-cursor / memu-openclaw / memu-hermes / memu-workbuddy / memu-agent
|
|
128
|
+
```
|
|
157
129
|
|
|
158
|
-
|
|
130
|
+
Install or invoke the CLI directly:
|
|
159
131
|
|
|
160
132
|
```bash
|
|
161
133
|
pip install memu-cli # library + memu + memu-codex CLIs
|
|
@@ -165,7 +137,11 @@ uvx --from memu-cli memu # CLI via uv, no install
|
|
|
165
137
|
|
|
166
138
|
## Configuration
|
|
167
139
|
|
|
168
|
-
Values resolve in order: process env → `~/.memu/config.env` → default.
|
|
140
|
+
Values resolve in order: process env → `~/.memu/config.env` → default. memU
|
|
141
|
+
supports Local and Cloud memory backends, selected by `MEMU_MEMORY_MODE`; an
|
|
142
|
+
unset mode remains Local for backward compatibility.
|
|
143
|
+
|
|
144
|
+
For Local / self-hosted installations, every CLI flag has a matching variable:
|
|
169
145
|
|
|
170
146
|
| Setting | Env var | Default |
|
|
171
147
|
|---|---|---|
|
|
@@ -175,6 +151,9 @@ Values resolve in order: process env → `~/.memu/config.env` → default. Every
|
|
|
175
151
|
| Embedding model | `MEMU_EMBED_MODEL` | the provider's default |
|
|
176
152
|
| Base URL | `MEMU_BASE_URL` | the provider's default |
|
|
177
153
|
|
|
154
|
+
Run `<binary> doctor` to display the resolved mode and verify the same retrieval
|
|
155
|
+
path the host uses.
|
|
156
|
+
|
|
178
157
|
### Storage backends
|
|
179
158
|
|
|
180
159
|
| Provider | DSN | Vector search | Use for |
|
|
@@ -189,38 +168,6 @@ service = MemoryService(
|
|
|
189
168
|
embedding_profiles={"default": {"provider": "jina"}},
|
|
190
169
|
)
|
|
191
170
|
```
|
|
192
|
-
|
|
193
|
-
### Multi-tenancy
|
|
194
|
-
|
|
195
|
-
Every record carries optional scope fields (`user_id`, `agent_id` by default). Pass `user=` on writes and `where=` on reads to partition one store:
|
|
196
|
-
|
|
197
|
-
```python
|
|
198
|
-
await service.commit_results(recall_files=[...], user={"user_id": "alice"})
|
|
199
|
-
await service.progressive_retrieve("launch preferences", where={"user_id": "alice"})
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
Need different scope fields? Supply your own model — filters are validated against it, unknown fields raise:
|
|
203
|
-
|
|
204
|
-
```python
|
|
205
|
-
from pydantic import BaseModel
|
|
206
|
-
|
|
207
|
-
class TeamScope(BaseModel):
|
|
208
|
-
team_id: str | None = None
|
|
209
|
-
user_id: str | None = None
|
|
210
|
-
|
|
211
|
-
service = MemoryService(user_config={"model": TeamScope})
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
## Development
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
make install # uv sync + pre-commit hooks
|
|
218
|
-
make test # pytest with coverage
|
|
219
|
-
make check # lock check, pre-commit, mypy, deptry
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
Architecture decisions live in [`docs/adr/`](docs/adr/) — notably tracked workspace memorization (ADR 0006), the segment/file/resource retrieval lines (ADR 0007), and the host-adapter seams (ADR 0008/0009).
|
|
223
|
-
|
|
224
171
|
## License
|
|
225
172
|
|
|
226
173
|
Apache-2.0
|