luminary-memory 0.3.2__tar.gz → 0.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/workflows/ci.yml +1 -1
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/workflows/publish.yml +56 -2
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.gitignore +3 -0
- luminary_memory-0.3.3/AGENTS.md +6 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/CHANGELOG.md +234 -7
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/CONTRIBUTING.md +70 -13
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/PKG-INFO +20 -9
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/README.md +19 -8
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/README.md +26 -23
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/RESULTS.md +30 -9
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/baselines/README.md +12 -5
- luminary_memory-0.3.3/benchmarks/baselines/gold-real-v3.json +243 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/run_benchmarks.py +20 -7
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/docs/agent-integrations.md +204 -32
- luminary_memory-0.3.3/hatch_build.py +32 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/SKILL.md +4 -4
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/install.sh +3 -4
- luminary_memory-0.3.3/opencode/SKILL.md +247 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/package-lock.json +2401 -264
- luminary_memory-0.3.3/package.json +42 -0
- luminary_memory-0.3.3/plugins/hermes/__init__.py +11 -0
- luminary_memory-0.3.3/plugins/hermes/dashboard/manifest.json +10 -0
- luminary_memory-0.3.3/plugins/hermes/dashboard/plugin_api.py +177 -0
- luminary_memory-0.3.3/plugins/hermes/desktop/plugin.js +722 -0
- luminary_memory-0.3.3/plugins/hermes/plugin.yaml +2 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/plugins/omp/README.md +19 -7
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/plugins/omp/package.json +11 -2
- luminary_memory-0.3.3/plugins/opencode/README.md +182 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/plugins/opencode/package.json +19 -5
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/plugins/pi/README.md +19 -7
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/plugins/pi/package.json +5 -1
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/pyproject.toml +7 -1
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/scripts/build-plugins.mjs +49 -2
- luminary_memory-0.3.3/scripts/build-uis.mjs +37 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/scripts/bump-version.sh +50 -29
- luminary_memory-0.3.3/scripts/check-opencode-types.mjs +15 -0
- luminary_memory-0.3.3/scripts/opencode-gui.vite.mjs +13 -0
- luminary_memory-0.3.3/scripts/test-hermes-sdk.py +32 -0
- luminary_memory-0.3.3/scripts/test-installed-inspector.mjs +63 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/__init__.py +1 -1
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/api.py +186 -86
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/backends/base.py +26 -3
- luminary_memory-0.3.3/src/luminary_memory/backends/inspector.py +341 -0
- luminary_memory-0.3.3/src/luminary_memory/backends/inspector_features.py +93 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/backends/pgvector.py +69 -73
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/backends/sqlite.py +39 -38
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/cli.py +3 -1
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/config.py +154 -18
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/export.py +134 -72
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/hermes/activation.py +4 -38
- luminary_memory-0.3.3/src/luminary_memory/hermes/activity.py +39 -0
- luminary_memory-0.3.3/src/luminary_memory/hermes/cli.py +113 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/hermes/config.py +33 -2
- luminary_memory-0.3.3/src/luminary_memory/hermes/config_schema.py +50 -0
- luminary_memory-0.3.3/src/luminary_memory/hermes/inspector.py +139 -0
- luminary_memory-0.3.3/src/luminary_memory/hermes/inspector_settings.py +64 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/hermes/plugin.yaml +2 -2
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/hermes/provider.py +100 -103
- luminary_memory-0.3.3/src/luminary_memory/inspector/__init__.py +6 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/activity.py +64 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/assets/browser/app.js +831 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/assets/browser/index.html +19 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/assets/browser/style.css +1 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/authorization.py +96 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/contracts.py +104 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/explanations.py +98 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/features.py +42 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/identity.py +91 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/mutations.py +355 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/queries.py +274 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/service.py +120 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/settings.py +98 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/summary.py +20 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/transfer.py +234 -0
- luminary_memory-0.3.3/src/luminary_memory/inspector/web.py +237 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/integrations/__init__.py +134 -40
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/common/bridge-source.ts +16 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/common/console-actions.ts +202 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/common/console-contract.ts +17 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/common/console-controller.ts +99 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/common/inspector-transport.ts +120 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/common/terminal-view.ts +94 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/hermes/__init__.py +11 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/hermes/dashboard/dist/index.js +700 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/hermes/dashboard/manifest.json +10 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/hermes/dashboard/plugin_api.py +177 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/hermes/desktop/plugin.js +722 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/hermes/plugin.yaml +2 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/omp/index.js +3 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/opencode/gui-experimental.cjs +58 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/opencode/index.js +1 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/opencode/rpc.js +1 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/opencode/tui.js +1 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/compiled/pi/index.js +3 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/omp/inspector.ts +83 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/integrations/assets/omp/luminary.ts +39 -34
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/opencode/dialogs.tsx +59 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/opencode/gui.tsx +203 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/integrations/assets/opencode/luminary-memory.ts +101 -17
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/integrations/assets/opencode/package.json +2 -1
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/opencode/rpc.ts +14 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/opencode/tui.tsx +117 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/assets/pi/inspector.ts +81 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/integrations/assets/pi/luminary.ts +31 -28
- luminary_memory-0.3.3/src/luminary_memory/integrations/cli.py +275 -0
- luminary_memory-0.3.3/src/luminary_memory/integrations/inspector_cli.py +159 -0
- luminary_memory-0.3.3/src/luminary_memory/lifecycle/cleanup.py +67 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/lifecycle/prune.py +19 -18
- luminary_memory-0.3.3/src/luminary_memory/recall/filters.py +20 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/graph.py +2 -2
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/semantic.py +43 -5
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/schema.py +26 -8
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/types.py +16 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/conftest.py +16 -0
- luminary_memory-0.3.3/tests/hermes/conftest.py +14 -0
- luminary_memory-0.3.3/tests/hermes/test_cli_owner_commands.py +176 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_config.py +9 -27
- luminary_memory-0.3.3/tests/hermes/test_inspector_api.py +89 -0
- luminary_memory-0.3.3/tests/hermes/test_inspector_settings.py +100 -0
- luminary_memory-0.3.3/tests/hermes/test_native_contract.py +384 -0
- luminary_memory-0.3.3/tests/hermes/test_native_execution.py +81 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_provider_context.py +8 -25
- luminary_memory-0.3.3/tests/hermes/test_session_resolution.py +174 -0
- luminary_memory-0.3.3/tests/hermes/ui.test.mjs +115 -0
- luminary_memory-0.3.3/tests/inspector/conftest.py +112 -0
- luminary_memory-0.3.3/tests/inspector/test_activity.py +142 -0
- luminary_memory-0.3.3/tests/inspector/test_embedded_service.py +46 -0
- luminary_memory-0.3.3/tests/inspector/test_explanations.py +188 -0
- luminary_memory-0.3.3/tests/inspector/test_identity.py +52 -0
- luminary_memory-0.3.3/tests/inspector/test_inspector_process.py +342 -0
- luminary_memory-0.3.3/tests/inspector/test_mutations.py +321 -0
- luminary_memory-0.3.3/tests/inspector/test_permissions.py +123 -0
- luminary_memory-0.3.3/tests/inspector/test_queries.py +64 -0
- luminary_memory-0.3.3/tests/inspector/test_relations.py +74 -0
- luminary_memory-0.3.3/tests/inspector/test_settings.py +93 -0
- luminary_memory-0.3.3/tests/inspector/test_summary.py +77 -0
- luminary_memory-0.3.3/tests/inspector/test_transfer.py +280 -0
- luminary_memory-0.3.3/tests/inspector/test_transport.py +146 -0
- luminary_memory-0.3.3/tests/inspector/test_web.py +72 -0
- luminary_memory-0.3.3/tests/inspector/test_web_transport.py +275 -0
- luminary_memory-0.3.3/tests/plugins/context.test.mjs +123 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/plugins/packages.test.mjs +29 -6
- luminary_memory-0.3.3/tests/test_agent_integrations.py +448 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_api_extended.py +13 -12
- luminary_memory-0.3.3/tests/test_backend_contract.py +121 -0
- luminary_memory-0.3.3/tests/test_backend_pgvector.py +248 -0
- luminary_memory-0.3.3/tests/test_config_file.py +152 -0
- luminary_memory-0.3.3/tests/test_integration_cli.py +94 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_query_expansion.py +68 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_schema.py +42 -9
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_soak_behaviour.py +0 -1
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_strict_recall_calibration.py +7 -5
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t10_export.py +131 -0
- luminary_memory-0.3.3/tests/ui/controller.test.mjs +175 -0
- luminary_memory-0.3.3/tests/ui/installed-consumer.ts +69 -0
- luminary_memory-0.3.3/ui/browser/app.ts +235 -0
- luminary_memory-0.3.3/ui/hermes/console.mjs +382 -0
- luminary_memory-0.3.3/ui/hermes/dashboard.mjs +51 -0
- luminary_memory-0.3.3/ui/hermes/desktop.mjs +64 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/docs.html +2 -2
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/index.html +3 -3
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/js/docs-guides.js +12 -10
- luminary_memory-0.3.2/package.json +0 -19
- luminary_memory-0.3.2/plugins/opencode/README.md +0 -118
- luminary_memory-0.3.2/src/luminary_memory/hermes/config_schema.py +0 -61
- luminary_memory-0.3.2/src/luminary_memory/integrations/cli.py +0 -130
- luminary_memory-0.3.2/src/luminary_memory/lifecycle/cleanup.py +0 -65
- luminary_memory-0.3.2/tests/test_agent_integrations.py +0 -160
- luminary_memory-0.3.2/tests/test_backend_pgvector.py +0 -416
- luminary_memory-0.3.2/tests/test_t1_hnsw.py +0 -54
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/workflows/contributor-check.yml +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/workflows/pages.yml +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/workflows/stale.yml +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/.github/workflows/triage.yml +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/CODE_OF_CONDUCT.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/DESIGN.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/LICENSE +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/PRODUCT.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/SECURITY.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/baselines/gold-real-v1.json +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/baselines/gold-real-v2.json +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/build_gold_extended.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/gold.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/gold_extended.jsonl +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/gold_micro.jsonl +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/hermes_provider_bench.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/metrics.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/benchmarks/synthetic.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/README.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/hooks/luminary-activity/HOOK.yaml +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/hooks/luminary-activity/README.md +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/hooks/luminary-activity/handler.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/hermes/test.sh +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/scripts/pack-plugins.mjs +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/scripts/repair_memory_authority.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/scripts/smoke-real-model.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/scripts/soak-test.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/backends/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/budget.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/embeddings/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/embeddings/fastembed.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/hermes/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/ingest/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/ingest/llm.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/ingest/rules.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/ingest/whitelist.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/integrations/__main__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/lifecycle/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/lifecycle/consolidate.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/lifecycle/importance.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/lifecycle/runner.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/dedup.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/fusion.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/keyword.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/planner.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/snippets.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/recall/temporal.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/src/luminary_memory/scope.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/__init__.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_activation.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_activity_hook.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_authority_lifecycle.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_autonomous_review.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_backup_paths.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_context_continuity.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_core_memory.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_entrypoint.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_hooks.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_lifecycle.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_long_term_stability.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_pre_compress.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_provider_import.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_recall.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_recall_smartness.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_session_boundaries.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_sync_turn.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_system_prompt.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_tools.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes/test_transparency_log.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/hermes_stubs/agent/memory_provider.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_accuracy_safety.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_api.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_backend_sqlite.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_budget.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_cli.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_dedup_jaccard.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_embeddings.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_fusion.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_fusion_rrf.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_gold_benchmark.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_importance.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_ingest_llm.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_ingest_whitelist.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_lifecycle.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_llm_enricher.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_long_term_stability.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_memory_authority_migration.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_recall_adaptive.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_recall_graph.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_recall_keyword.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_recall_orchestrator.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_recall_semantic.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_recall_temporal.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_scope_boundaries.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t11_limit_zero.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t3_planner.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t4_batch.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t5_enricher.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t6_tag_scoped.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t7_updated_at.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t8_snippets.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_t9_cli_json.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/tests/test_validity_window.py +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/.nojekyll +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/assets/full-moon.jpg +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/css/docs.css +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/css/luminary.css +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/js/docs-content.js +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/js/docs-page.js +0 -0
- {luminary_memory-0.3.2 → luminary_memory-0.3.3}/website/js/luminary.js +0 -0
|
@@ -82,7 +82,7 @@ jobs:
|
|
|
82
82
|
run: ruff check src tests hermes/hooks
|
|
83
83
|
- name: Run pgvector integration tests
|
|
84
84
|
env:
|
|
85
|
-
|
|
85
|
+
PG_DSN: postgresql://luminary:luminary@localhost:5432/luminary
|
|
86
86
|
run: >-
|
|
87
87
|
python -m coverage run --source=src/luminary_memory/backends
|
|
88
88
|
-m pytest -q tests/test_backend_pgvector.py
|
|
@@ -45,7 +45,9 @@ jobs:
|
|
|
45
45
|
node-version: "22"
|
|
46
46
|
check-latest: true
|
|
47
47
|
- run: npm ci --ignore-scripts
|
|
48
|
-
- run: npm run build
|
|
48
|
+
- run: npm run build
|
|
49
|
+
- run: npm run check:opencode
|
|
50
|
+
- run: npm run test:ui-contracts
|
|
49
51
|
- run: npm run test:plugins
|
|
50
52
|
- run: npm run pack:plugins
|
|
51
53
|
- name: Check complete, version-matched release tarballs
|
|
@@ -78,6 +80,53 @@ jobs:
|
|
|
78
80
|
name: native-plugin-packages
|
|
79
81
|
path: artifacts/plugins/*.tgz
|
|
80
82
|
if-no-files-found: error
|
|
83
|
+
- name: Upload complete wheel resources
|
|
84
|
+
uses: actions/upload-artifact@v4
|
|
85
|
+
with:
|
|
86
|
+
name: inspector-resources
|
|
87
|
+
path: |
|
|
88
|
+
src/luminary_memory/integrations/assets/compiled/
|
|
89
|
+
src/luminary_memory/inspector/assets/browser/
|
|
90
|
+
if-no-files-found: error
|
|
91
|
+
|
|
92
|
+
python-native-contracts:
|
|
93
|
+
name: Test Python against the official Hermes SDK
|
|
94
|
+
needs: [native-packages]
|
|
95
|
+
runs-on: ubuntu-latest
|
|
96
|
+
steps:
|
|
97
|
+
- uses: actions/checkout@v4
|
|
98
|
+
- uses: actions/checkout@v4
|
|
99
|
+
with:
|
|
100
|
+
repository: NousResearch/hermes-agent
|
|
101
|
+
ref: v0.22.5
|
|
102
|
+
path: .native-sdk/hermes-agent
|
|
103
|
+
- uses: actions/setup-python@v5
|
|
104
|
+
with:
|
|
105
|
+
python-version: "3.11"
|
|
106
|
+
cache: pip
|
|
107
|
+
- name: Install test and native HTTP dependencies
|
|
108
|
+
# Hermes 0.22.5 imports hermes_yaml, which requires ruamel.yaml.
|
|
109
|
+
run: python -m pip install -e ".[dev]" fastapi httpx python-multipart "ruamel.yaml==0.18.16"
|
|
110
|
+
- uses: actions/setup-node@v4
|
|
111
|
+
with:
|
|
112
|
+
node-version: "22"
|
|
113
|
+
check-latest: true
|
|
114
|
+
- name: Install the consumer-test build toolchain
|
|
115
|
+
run: npm ci --ignore-scripts
|
|
116
|
+
- name: Download validated native and UI resources
|
|
117
|
+
uses: actions/download-artifact@v4
|
|
118
|
+
with:
|
|
119
|
+
name: inspector-resources
|
|
120
|
+
path: src/luminary_memory
|
|
121
|
+
- name: Build and install a separate inspector consumer wheel
|
|
122
|
+
run: |
|
|
123
|
+
python -m build --wheel --outdir "$RUNNER_TEMP/inspector-wheel"
|
|
124
|
+
python -m venv "$RUNNER_TEMP/inspector-wheel-env"
|
|
125
|
+
"$RUNNER_TEMP/inspector-wheel-env/bin/python" -m pip install "$RUNNER_TEMP/inspector-wheel/"*.whl
|
|
126
|
+
- name: Require the real SDK and run the Python suite
|
|
127
|
+
env:
|
|
128
|
+
INSPECTOR_INSTALLED_PYTHON: ${{ runner.temp }}/inspector-wheel-env/bin/python
|
|
129
|
+
run: python scripts/test-hermes-sdk.py .native-sdk/hermes-agent -q
|
|
81
130
|
|
|
82
131
|
real-model:
|
|
83
132
|
# Release gate. Runs public strict recall against the real default
|
|
@@ -108,7 +157,7 @@ jobs:
|
|
|
108
157
|
if-no-files-found: ignore
|
|
109
158
|
|
|
110
159
|
pypi:
|
|
111
|
-
needs: [real-model, native-packages]
|
|
160
|
+
needs: [real-model, native-packages, python-native-contracts]
|
|
112
161
|
runs-on: ubuntu-latest
|
|
113
162
|
environment:
|
|
114
163
|
name: pypi
|
|
@@ -122,6 +171,11 @@ jobs:
|
|
|
122
171
|
with:
|
|
123
172
|
python-version: "3.11"
|
|
124
173
|
cache: pip
|
|
174
|
+
- name: Download validated native and UI resources
|
|
175
|
+
uses: actions/download-artifact@v4
|
|
176
|
+
with:
|
|
177
|
+
name: inspector-resources
|
|
178
|
+
path: src/luminary_memory
|
|
125
179
|
- name: Build sdist and wheel
|
|
126
180
|
run: |
|
|
127
181
|
python -m pip install --upgrade pip
|
|
@@ -1,6 +1,225 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [
|
|
3
|
+
## [0.3.3] - 2026-11-10
|
|
4
|
+
|
|
5
|
+
Interactive memory inspection, explicit owner controls and safer native recall.
|
|
6
|
+
This version includes only the verified native surfaces and the opt-in loopback
|
|
7
|
+
companion; the interactive UI roadmap is incomplete.
|
|
8
|
+
|
|
9
|
+
### Compatibility
|
|
10
|
+
|
|
11
|
+
- Native OpenCode Web GUI discovery remains unsupported. Server tools remain
|
|
12
|
+
separate from a client-native inspector; the companion is not a Web plugin.
|
|
13
|
+
- Hermes CLI/TUI inspector rendering remains blocked on authenticated native
|
|
14
|
+
context and scope lifecycle. Existing provider and command integrations remain
|
|
15
|
+
separate from that unfinished visual target.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Optional operator config file (`~/.luminary/luminary.env`) shared by native
|
|
20
|
+
integrations and the CLI. Env-style `LUMINARY_*` settings load before
|
|
21
|
+
`Settings` is constructed; process environment wins, `LUMINARY_CONFIG_FILE`
|
|
22
|
+
overrides the path or disables loading with `none`/`off`, and edits apply on
|
|
23
|
+
the next bridge call without restarting the host.
|
|
24
|
+
- Portable OpenCode agent skill (`opencode/SKILL.md`) covering scoped recall,
|
|
25
|
+
user-approved durable writes, ID-scoped retraction, result semantics,
|
|
26
|
+
configuration, and bridge troubleshooting. Install it under
|
|
27
|
+
`~/.config/opencode/skills/luminary-memory/` or a project's `.opencode/skills/`.
|
|
28
|
+
- Authorized memory inspector service with bounded browse/detail/history,
|
|
29
|
+
explicit project bindings and independent sharing capabilities. Confirmed
|
|
30
|
+
corrections preserve ownership and create successor versions; stale revisions
|
|
31
|
+
and revoked proposals fail closed instead of overwriting newer content.
|
|
32
|
+
- Explicit optional loopback inspector with nine views, deterministic Summary,
|
|
33
|
+
separate owner confirmations, one-use sign-in, session cookies and same-origin
|
|
34
|
+
CSRF protection. Installing or opening a UI does not enable saving or call AI.
|
|
35
|
+
- Complete compiled native-package installation instead of copying an orphaned
|
|
36
|
+
TypeScript entry. Unapproved local changes are preserved, and owned legacy
|
|
37
|
+
hooks require an explicit cutover to prevent duplicate loading.
|
|
38
|
+
- Keyboard-accessible entity neighborhoods and supporting-memory inspection.
|
|
39
|
+
Recall Activity records actual retrieval rank/score separately from returned
|
|
40
|
+
context order; unrelated core rows cannot turn native recall abstention into success.
|
|
41
|
+
- Summary includes authorized lifecycle counts and stored created/updated
|
|
42
|
+
timestamp bounds in UTC, including offset-aware ordering and microseconds.
|
|
43
|
+
Missing or invalid timestamp coverage is explicit; refresh remains offline.
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Inspector dispatch resolves storage and other settings from the same supplied
|
|
48
|
+
launcher environment and config as the authorized context, without mutating
|
|
49
|
+
the process environment. Config files cannot provide trusted inspector channels.
|
|
50
|
+
A conflicting launcher home or unavailable selected config fails closed, and
|
|
51
|
+
`~` SQLite paths resolve before the store is opened.
|
|
52
|
+
- The companion treats non-object JSON from the inspector process as a bounded,
|
|
53
|
+
redacted failure, distinguishing read failures from unknown mutation outcomes.
|
|
54
|
+
- The release workflow installs the YAML dependency required to import the
|
|
55
|
+
official Hermes SDK in a clean environment.
|
|
56
|
+
- OpenCode's compact inspector shows bounded, server-reported record permissions;
|
|
57
|
+
native session, policy and explicit-project changes discard stale snapshots.
|
|
58
|
+
Read-only shared projects no longer display the previous project's edit rights.
|
|
59
|
+
Native sharing cards identify the granting agent, recipient and capabilities.
|
|
60
|
+
- The opt-in browser companion includes scoped record permissions in compact
|
|
61
|
+
mode, limits activity rendering to five events and clears the overview when
|
|
62
|
+
its project selection changes.
|
|
63
|
+
- Hermes UI installation ignores generated Python bytecode without replacing
|
|
64
|
+
profile-owned caches or activating a provider. Wheels include only required
|
|
65
|
+
native/UI resources, so incidental `__pycache__` files cannot break installation.
|
|
66
|
+
- Hermes panels inherit native text colors and use documented host border
|
|
67
|
+
tokens; dashboard themes can no longer turn the whole inspector transparent.
|
|
68
|
+
- Hermes tab navigation and refresh select the requested backend projection.
|
|
69
|
+
Sharing displays grants instead of memory rows; memory filters stay limited
|
|
70
|
+
to the views that actually support them.
|
|
71
|
+
- Hermes session admission loads the selected view immediately, including the
|
|
72
|
+
native plugin settings page, rather than presenting browse rows as settings.
|
|
73
|
+
- Hermes REST inspectors preserve their bound scope through socket reconnects;
|
|
74
|
+
only native session, profile and gateway activation changes invalidate it.
|
|
75
|
+
- Hermes compact views now show read-only context, server-reported record
|
|
76
|
+
permissions, up to five activity events, and a full-inspector entry instead
|
|
77
|
+
of squeezing all tabs and mutation forms into a sidebar.
|
|
78
|
+
- The dashboard overview uses the rendered native `pre-main` slot, behind an
|
|
79
|
+
explicit open/close control, rather than the unmounted `sidebar` slot.
|
|
80
|
+
- omp headless RPC returns the scoped inspector state instead of silently
|
|
81
|
+
discarding it through unavailable dialogs. UI-enabled RPC keeps its native
|
|
82
|
+
dialogs; neither mode constructs terminal components. Acceptance was
|
|
83
|
+
re-verified on the currently installed omp **18.18.5** with a copy-installed
|
|
84
|
+
extension: `/luminary full` JSON state over a seeded store, headless RPC state
|
|
85
|
+
delivery, and UI-enabled RPC opening all nine native dialogs.
|
|
86
|
+
- Native OpenCode Summary keeps authorized lifecycle totals and UTC time bounds
|
|
87
|
+
visible even when recent changes are present. Activity and Relations now use
|
|
88
|
+
the same operational and supporting-memory labels as the pi/omp inspector.
|
|
89
|
+
- Sharing now lists the native actor's incoming/outgoing grants rather than
|
|
90
|
+
unrelated memory rows. Project, user and actor filtering happens before SQL
|
|
91
|
+
pagination; capability lists remain independent and browsing grants no access.
|
|
92
|
+
- Inspector headers expose secret-safe native agent/profile/store/host labels,
|
|
93
|
+
not frontend-selected identity or the native bearer. Long pi/omp terminal
|
|
94
|
+
proposals use a scrollable review and a separate Cancel-first confirmation;
|
|
95
|
+
narrow terminals no longer hide the decision below a long proposal.
|
|
96
|
+
- Terminal memory rows identify lifecycle state and revision, including deleted
|
|
97
|
+
and superseded records explicitly requested through status filters. Memory
|
|
98
|
+
search controls appear only on supported views; shared-resource selection
|
|
99
|
+
does not offer native-own-project policy mutations.
|
|
100
|
+
- Concurrent store startup now keeps inspector schema inspection and migration
|
|
101
|
+
under the existing cross-process writer transaction. Independent SQLite
|
|
102
|
+
workers no longer race to add the same audit-ownership column.
|
|
103
|
+
- Native recall preserves the engine's abstention and returns only relevant,
|
|
104
|
+
current rows, including core-tagged rows only when retrieval selects them.
|
|
105
|
+
Reference data stays outside system instructions, is request-local, and is
|
|
106
|
+
serialized once as complete records. Empty recall adds no model message or
|
|
107
|
+
transcript entry in OpenCode, pi, or omp.
|
|
108
|
+
- Native model writes require a bounded quote verified against current user
|
|
109
|
+
input by the adapter, not self-evidence or a model-supplied confirmation flag.
|
|
110
|
+
Per-call launcher provenance cannot be restored from an operator config file.
|
|
111
|
+
User-grounded paraphrases retain their original quote without invented full
|
|
112
|
+
confidence; owner-typed commands remain explicit assertions. Core/rule
|
|
113
|
+
promotion uses the owner-confirmed inspector. Existing records are not
|
|
114
|
+
retroactively re-certified or rewritten.
|
|
115
|
+
- Structural transcript-noise filtering now runs in shared API/CLI/bridge
|
|
116
|
+
retrieval as well as Hermes. Short legitimate facts remain eligible.
|
|
117
|
+
Destructive-verb suppression is not reinstated; no language keyword list
|
|
118
|
+
decides whether a live user request may recall.
|
|
119
|
+
- Precompiled OpenCode TUI binds Solid/OpenTUI imports to the host's shared
|
|
120
|
+
runtime instead of creating an independent reactive owner and a blank panel.
|
|
121
|
+
Native review dialogs keep the decision visible while complete proposals
|
|
122
|
+
scroll; cancellation is the default.
|
|
123
|
+
- OpenCode copy installation now explicitly tells the operator to install its
|
|
124
|
+
declared Node dependencies before restart. It does not silently run npm or
|
|
125
|
+
download memory models.
|
|
126
|
+
|
|
127
|
+
- Denied inspector responses now refresh their reference time and context
|
|
128
|
+
metadata while clearing inaccessible content, rather than retaining the
|
|
129
|
+
preceding successful read's timestamp.
|
|
130
|
+
- Direct npm packaging keeps compiler diagnostics on stderr, preserving valid
|
|
131
|
+
machine-readable `npm pack --json` output without hiding build warnings.
|
|
132
|
+
- Native Hermes settings include backend/model configuration and separate
|
|
133
|
+
readiness information without exposing profile credentials. Profile-local
|
|
134
|
+
changes survive restart; unrelated settings do not implicitly enable saving
|
|
135
|
+
or modify sibling profiles.
|
|
136
|
+
- Optional explanation requires a nonblank model selection before disclosure;
|
|
137
|
+
a configured URL alone is not reported as a configured explanation.
|
|
138
|
+
|
|
139
|
+
- Inspector graph reads stay in the selected PostgreSQL schema. A missing graph
|
|
140
|
+
table now reports unavailable instead of silently reading a fallback table.
|
|
141
|
+
- Hermes pagination preserves the original operation, project and filters.
|
|
142
|
+
Context/project changes discard the cursor rather than replaying an old page.
|
|
143
|
+
|
|
144
|
+
- Hermes provider Activity now separates durable saves, duplicate suppression,
|
|
145
|
+
skipped curation, session episodes and recall. Duplicate writes no longer
|
|
146
|
+
claim a new save; replaying an episode does not claim another insertion.
|
|
147
|
+
Queued retention keeps its original session. Prepared context is not reported
|
|
148
|
+
as confirmed model delivery, and operational events do not inflate Summary
|
|
149
|
+
changes or copy raw prompts into Activity.
|
|
150
|
+
|
|
151
|
+
- PostgreSQL entity expansion now groups unique authorized neighbor names and
|
|
152
|
+
ranks their strongest edges. The previous `DISTINCT`/`ORDER BY` combination
|
|
153
|
+
was rejected by PostgreSQL and silently left the query unexpanded; duplicate
|
|
154
|
+
edges no longer make ranking ambiguous.
|
|
155
|
+
- Native bridge recalls now append scoped start/result/error/cancellation events
|
|
156
|
+
without storing raw queries or exception text. Activity replay preserves the
|
|
157
|
+
same source/session/reference metadata; recall never claims a saved memory or
|
|
158
|
+
confirmed injection, and Summary excludes recall events before pagination.
|
|
159
|
+
- Activity checkpoints bind replay to the native session, project and current
|
|
160
|
+
access policy. Missing witnessed history raises a visible gap instead of a
|
|
161
|
+
healthy empty result. “Check new activity” loads only unseen events; Refresh
|
|
162
|
+
resets to a recent snapshot without replaying writes.
|
|
163
|
+
- Memory-record exports retain source IDs, and imports remap predecessor links
|
|
164
|
+
instead of treating source IDs as destination IDs. Invalid/cyclic lineage is
|
|
165
|
+
rejected; lineage imports roll back on incompatible duplicates or audit
|
|
166
|
+
failure. Independent owners and sessions are no longer collapsed by import
|
|
167
|
+
deduplication, and inspector receipts separate actual saves from duplicates.
|
|
168
|
+
Re-importing an unchanged version chain reuses its original ancestors;
|
|
169
|
+
historical source IDs and creation timestamps prevent merging distinct
|
|
170
|
+
observations.
|
|
171
|
+
- Export/native-settings failures after external persistence starts now report
|
|
172
|
+
an unknown outcome, including lost commit acknowledgements. SQL rollback is
|
|
173
|
+
not presented as proof that a selected file or profile stayed unchanged.
|
|
174
|
+
- SQLite keyword indexes now update only when content or tags change. This
|
|
175
|
+
prevents nested content-revision updates from deleting FTS entries twice;
|
|
176
|
+
existing update triggers and derived indexes migrate on the next store open.
|
|
177
|
+
- Confirmed inspector creation preserves the verified native session in both
|
|
178
|
+
the record and durable audit, and distinguishes saved records from duplicates.
|
|
179
|
+
Corrections attribute the new observation to the verified current session
|
|
180
|
+
and a distinct inspector source ID without changing the original ownership.
|
|
181
|
+
Explicit cross-session versioning updates the predecessor and keeps stale
|
|
182
|
+
editor protection; session-bound clients still cannot cross that boundary.
|
|
183
|
+
- Optional AI explanations consume disclosure consent before sending, reject
|
|
184
|
+
redirects, and release database locks during provider calls. Revocation or
|
|
185
|
+
changed facts discard stale responses; model text has no tool/write authority.
|
|
186
|
+
- Telegram activity no longer treats global new memory IDs as this turn's
|
|
187
|
+
writes. Routing, profile-local secrets, exact ownership/session cursors,
|
|
188
|
+
expiry/validity filtering, evidence/ID visibility, and acknowledgement of
|
|
189
|
+
displayed rows prevent cross-chat disclosure and silent backlog loss.
|
|
190
|
+
- Telegram cursor locking now works on Windows and POSIX, fails closed, and
|
|
191
|
+
never yields a contextmanager body twice after a delivery/state failure.
|
|
192
|
+
- **Query expansion no longer decides what answers a question.** Expanded text
|
|
193
|
+
appends entity names harvested from the graph neighbourhood of a shared
|
|
194
|
+
entity, and those names usually belong to the neighbour memory itself, so
|
|
195
|
+
scoring against them let a memory supply its own evidence: one shared entity
|
|
196
|
+
lifted an unrelated memory from `0.5436` to `0.8024` and made "what is the
|
|
197
|
+
cluster fingerprint?" return a memory about load tests. Expansion now only
|
|
198
|
+
selects candidates; every candidate is scored against the question as asked.
|
|
199
|
+
The reported documentation-URL answer for "where will Luminary go live now?"
|
|
200
|
+
is gone, and `tests/test_query_expansion.py` pins it through public
|
|
201
|
+
`MemoryClient.recall`.
|
|
202
|
+
- **Dense similarity decides support, not the loudest signal.** Keyword and
|
|
203
|
+
graph scores saturate (an FTS `bm25` of 2.6 and a graph weight of 8.0 both
|
|
204
|
+
normalise to 1.0), so `max(...)` let one shared word outrank the question.
|
|
205
|
+
They now stand in only for rows without a usable embedding. Combined with the
|
|
206
|
+
scoring change this takes micro recall@10 from `0.70` to `0.85` at
|
|
207
|
+
`wrong_hit_rate` `0.00`, and lifts extended-fixture abstention from `0.33` to
|
|
208
|
+
`1.00`.
|
|
209
|
+
- **The support floor is re-measured, not re-tuned.** `0.74` was chosen while
|
|
210
|
+
expansion could raise a score; on the raw-query scale the highest confident
|
|
211
|
+
wrong answer is `0.5991` and the lowest correct answer `0.6439`, so the floor
|
|
212
|
+
is their midpoint, `0.635`. Nothing outside that gap could be correct.
|
|
213
|
+
- **Tokenisation no longer swallows sentence-final punctuation.** `_token_set`
|
|
214
|
+
keeps `.` `:` `/` inside a token so identifiers such as `gpt-4o` and URLs
|
|
215
|
+
survive, but the same pattern absorbed the last word of every memory
|
|
216
|
+
(`production.`, `cluster.`), which could never match a query token
|
|
217
|
+
(`production`, `cluster`). Matching bug only; no benchmark metric moves.
|
|
218
|
+
- **A weakly-grounded row no longer pads a well-grounded answer.** When a
|
|
219
|
+
candidate covers at least half the question's tokens, rows that cover almost
|
|
220
|
+
none are dropped instead of being returned alongside it.
|
|
221
|
+
|
|
222
|
+
## [0.3.2] - 2026-10-25
|
|
4
223
|
|
|
5
224
|
### Added
|
|
6
225
|
|
|
@@ -181,6 +400,13 @@ Cloudflare-protected gateways.
|
|
|
181
400
|
provider/runtime boundary, hook cursor resolution, and the current `505`
|
|
182
401
|
regression baseline.
|
|
183
402
|
|
|
403
|
+
### Removed
|
|
404
|
+
|
|
405
|
+
- **Destructive-imperative recall suppression** was removed in `f303511`.
|
|
406
|
+
The old Hermes query-word heuristic introduced in 0.2.18 did not remain
|
|
407
|
+
active in 0.3.0. This entry corrects the missing removal history; it does
|
|
408
|
+
not claim an unrecorded rationale or restore that heuristic.
|
|
409
|
+
|
|
184
410
|
### Tests & documentation
|
|
185
411
|
|
|
186
412
|
- Added scope, lifecycle, hash-repair, claim-rollback, inactive-hook, and
|
|
@@ -211,12 +437,13 @@ Cloudflare-protected gateways.
|
|
|
211
437
|
|
|
212
438
|
### Added
|
|
213
439
|
|
|
214
|
-
- **
|
|
215
|
-
etc.) and near-empty content
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
440
|
+
- **Hermes recall noise filter** — shell/terminal artifacts (`&&`, `===`,
|
|
441
|
+
`echo `, etc.) and near-empty content were dropped by the provider formatter.
|
|
442
|
+
This was not yet filtering on the shared API/CLI retrieval path.
|
|
443
|
+
- **Destructive-imperative suppression (historical)** — Hermes suppressed
|
|
444
|
+
recall for destructive instructions (`hapus`, `delete`, `remove`, `stop`,
|
|
445
|
+
`disable`, ...). This query-word heuristic was removed in 0.3.0; see Removed
|
|
446
|
+
above. It is not the current recall policy.
|
|
220
447
|
- **Scoped claim/evidence schema** — ownership fields, episodes, claims,
|
|
221
448
|
claim evidence, memory evidence, conflict/supersession status, and
|
|
222
449
|
`needs_reindex` repair state are migrated idempotently for existing SQLite
|
|
@@ -76,8 +76,9 @@ separate from the package tests.
|
|
|
76
76
|
|
|
77
77
|
## Release gate
|
|
78
78
|
|
|
79
|
-
Tagging `v*` publishes to PyPI through `.github/workflows/publish.yml
|
|
80
|
-
`pypi`
|
|
79
|
+
Tagging `v*` publishes to PyPI through `.github/workflows/publish.yml`.
|
|
80
|
+
`pypi` requires the `real-model`, `native-packages`, and
|
|
81
|
+
`python-native-contracts` jobs. The real-model gate runs:
|
|
81
82
|
|
|
82
83
|
```bash
|
|
83
84
|
python scripts/smoke-real-model.py --report real-model-gate.json
|
|
@@ -119,8 +120,8 @@ before committing the release changes and creating the matching `vX.Y.Z` tag.
|
|
|
119
120
|
The publish workflow builds, tests and packs native plugins, checks that every
|
|
120
121
|
manifest matches `pyproject.toml`, and verifies the exact three nonempty
|
|
121
122
|
tarballs contain a built entry point, README and license. Tag releases must
|
|
122
|
-
also match `v<version>`.
|
|
123
|
-
must pass before PyPI publication. After PyPI succeeds, tag pushes attach the
|
|
123
|
+
also match `v<version>`. The package, real-model, and official Hermes SDK
|
|
124
|
+
contract gates must pass before PyPI publication. After PyPI succeeds, tag pushes attach the
|
|
124
125
|
Hermes skill zip and those exact `.tgz` files to the GitHub release, even when
|
|
125
126
|
npm publication is disabled. Missing or mismatched packages fail closed.
|
|
126
127
|
|
|
@@ -129,6 +130,20 @@ same gates and builds, but does not create GitHub release assets or publish to
|
|
|
129
130
|
npm, even if dispatched from a tag. A tag push, not a manual dispatch, is
|
|
130
131
|
required for those external release actions.
|
|
131
132
|
|
|
133
|
+
### Release notes style
|
|
134
|
+
|
|
135
|
+
Write structured, human-readable notes for the actual release: a descriptive
|
|
136
|
+
version title, a short summary, and readable `##` feature sections with normal
|
|
137
|
+
prose and focused bullets. These formatting rules are version-independent.
|
|
138
|
+
|
|
139
|
+
Never leave a published release empty or asset-only. Do not use small/subscript
|
|
140
|
+
HTML, wrap the whole description in a code block, or substitute a raw commit
|
|
141
|
+
dump for release notes. Reserve code blocks for short installation commands.
|
|
142
|
+
State only shipped behavior and verified registry availability.
|
|
143
|
+
|
|
144
|
+
The workflow attaching assets does not finish the release. Fill in the release
|
|
145
|
+
notes and inspect the actual GitHub rendering before reporting completion.
|
|
146
|
+
|
|
132
147
|
### Optional npm trusted publishing
|
|
133
148
|
|
|
134
149
|
npm publication is **disabled unless** the repository Actions variable
|
|
@@ -193,10 +208,11 @@ publication must continue to use the validated release tarballs.
|
|
|
193
208
|
- TDD where feasible, test first, then implement.
|
|
194
209
|
- Keep the public API (`MemoryClient`) stable; add rather than break.
|
|
195
210
|
- Full-source coverage is reported and must not regress from the current
|
|
196
|
-
evidence-backed baseline (`83%`, 5,
|
|
197
|
-
needs a targeted regression or invariant test; do not inflate
|
|
198
|
-
tests that only execute lines without checking outcomes.
|
|
199
|
-
branches are verified separately by the pgvector integration
|
|
211
|
+
evidence-backed baseline (`83%`, 5,092 statements, 876 missed). Every changed
|
|
212
|
+
behavior needs a targeted regression or invariant test; do not inflate
|
|
213
|
+
coverage with tests that only execute lines without checking outcomes.
|
|
214
|
+
PostgreSQL-only branches are verified separately by the pgvector integration
|
|
215
|
+
job.
|
|
200
216
|
|
|
201
217
|
### Long-run checks
|
|
202
218
|
|
|
@@ -247,7 +263,7 @@ contributor communication; keep it concise and in your own voice.
|
|
|
247
263
|
Run the full suite (SQLite + unit tests) locally:
|
|
248
264
|
|
|
249
265
|
```bash
|
|
250
|
-
python -m pytest
|
|
266
|
+
python -m pytest
|
|
251
267
|
python -m ruff check src tests hermes/hooks
|
|
252
268
|
```
|
|
253
269
|
|
|
@@ -257,17 +273,58 @@ Coverage (full-source baseline):
|
|
|
257
273
|
python -m pytest --cov=luminary_memory --cov-report=term
|
|
258
274
|
```
|
|
259
275
|
|
|
260
|
-
The current local baseline is `83%` (`5,
|
|
276
|
+
The current local baseline is `541 passed, 3 skipped` at `83%` (`5,092`
|
|
277
|
+
statements, `876` missed). The
|
|
261
278
|
number is intentionally reported honestly while the defensive PostgreSQL and
|
|
262
279
|
failure branches continue to receive integration coverage; the quality gate
|
|
263
280
|
is the invariant-focused test suite plus the CI/verification coverage gate
|
|
264
281
|
`--fail-under=82`.
|
|
265
282
|
|
|
283
|
+
### Official Hermes SDK contracts
|
|
284
|
+
|
|
285
|
+
Standalone tests skip native schema cases when Hermes is not installed; they
|
|
286
|
+
never install a production SDK substitute. To exercise those cases, use an
|
|
287
|
+
official source checkout matching the supported host:
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
git clone --depth 1 --branch v0.22.5 https://github.com/NousResearch/hermes-agent.git ../hermes-agent-sdk
|
|
291
|
+
python -m pip install -e ".[dev]" fastapi httpx python-multipart
|
|
292
|
+
python scripts/test-hermes-sdk.py ../hermes-agent-sdk -q
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
The runner imports the real provider/config SDK before pytest, verifies that
|
|
296
|
+
both modules came from that checkout, and uses a temporary Hermes home. Missing
|
|
297
|
+
or incompatible SDK modules fail the run before native cases can be skipped.
|
|
298
|
+
The release workflow runs this mode as a mandatory publication prerequisite.
|
|
299
|
+
|
|
300
|
+
### Installed inspector consumer
|
|
301
|
+
|
|
302
|
+
After `npm ci --ignore-scripts && npm run build`, build a wheel and install it
|
|
303
|
+
into a separate Python virtual environment. Run its real subprocess/controller
|
|
304
|
+
contract from the checkout:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
INSPECTOR_INSTALLED_PYTHON=/absolute/path/to/wheel-env/bin/python \
|
|
308
|
+
python -m pytest tests/inspector/test_transport.py -q
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
On Windows, point the environment variable at `wheel-env/Scripts/python.exe`.
|
|
312
|
+
The runner bundles the controller/transport sources shipped in that installed
|
|
313
|
+
wheel, then runs outside the checkout with repository import paths removed.
|
|
314
|
+
It checks real scoped SQLite reads, permissions, confirmed edits, stale-editor
|
|
315
|
+
conflicts and denied-result metadata. No retrieval/model-quality claim is made.
|
|
316
|
+
A missing optional interpreter skips only this case locally; a configured but
|
|
317
|
+
broken installation fails. The release SDK job always supplies a clean installed
|
|
318
|
+
wheel, making this contract a publication prerequisite.
|
|
319
|
+
|
|
320
|
+
|
|
266
321
|
### Postgres / pgvector integration tests
|
|
267
322
|
|
|
268
323
|
`tests/test_backend_pgvector.py` contains real-Postgres round-trips that are
|
|
269
|
-
**skipped unless `
|
|
270
|
-
|
|
324
|
+
**skipped unless an isolated `PG_DSN` is set**. `LUMINARY_*` operator settings
|
|
325
|
+
are cleared by test isolation; do not point tests at a production store. CI
|
|
326
|
+
provides a disposable Postgres service (see `.github/workflows/ci.yml`).
|
|
327
|
+
To run these checks locally:
|
|
271
328
|
|
|
272
329
|
```bash
|
|
273
330
|
# spin up a throwaway Postgres with the pgvector extension
|
|
@@ -276,6 +333,6 @@ docker run -d --name luminary-pg -p 5432:5432 \
|
|
|
276
333
|
pgvector/pgvector:pg16
|
|
277
334
|
|
|
278
335
|
# point the tests at it
|
|
279
|
-
export
|
|
336
|
+
export PG_DSN=postgresql://luminary:***@localhost:5432/luminary
|
|
280
337
|
python -m pytest tests/test_backend_pgvector.py -v
|
|
281
338
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: luminary-memory
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: A lightweight, self-hosted memory layer for AI agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/alertxsto/luminary-memory
|
|
6
6
|
Project-URL: Repository, https://github.com/alertxsto/luminary-memory
|
|
@@ -41,8 +41,6 @@ Description-Content-Type: text/markdown
|
|
|
41
41
|
[](https://pypi.org/project/luminary-memory)
|
|
42
42
|
[](LICENSE)
|
|
43
43
|
[](https://github.com/alertxsto/luminary-memory/actions)
|
|
44
|
-
[](https://github.com/alertxsto/luminary-memory/actions)
|
|
45
|
-
[](https://github.com/alertxsto/luminary-memory)
|
|
46
44
|
[](https://github.com/alertxsto/luminary-memory)
|
|
47
45
|
|
|
48
46
|
**Self-hosted · Private · Budget-aware · Self-maintaining**
|
|
@@ -63,7 +61,7 @@ Agents are only as good as what they remember. A stateless agent re-learns the s
|
|
|
63
61
|
|
|
64
62
|
Strategies fuse via **weighted RRF (semantic 0.4, keyword 0.3, graph 0.2, temporal 0.1)** → **scope/status/time filtering** → **conservative confidence and abstention** → **adaptive cutoff** → **Jaccard deduplication** → **token budget**. Short queries may be expanded with graph entities or stored content tokens before embedding; there is no language-specific alias classifier.
|
|
65
63
|
|
|
66
|
-
**
|
|
64
|
+
**Core and recall are different surfaces.** The Hermes provider separately loads owner-designated `core` rules (the DB-backed `MEMORY.md`) and deduplicates them against query retrieval. Native OpenCode, pi, and omp adapters return only relevant, evidence-bearing recall; a core tag cannot turn abstention into success. Their historical reference stays outside system instructions and the persistent transcript. Hermes can also expose bounded exact-session continuity without turning raw conversation into durable memory.
|
|
67
65
|
|
|
68
66
|
---
|
|
69
67
|
|
|
@@ -103,8 +101,8 @@ luminary-memory stats
|
|
|
103
101
|
## Native hooks for supported harnesses
|
|
104
102
|
|
|
105
103
|
The harness-neutral JSON bridge supports native adapters without coupling the
|
|
106
|
-
memory engine to one runner.
|
|
107
|
-
`@opencode/plugin` 2.
|
|
104
|
+
memory engine to one runner. The current source targets OpenCode V2's
|
|
105
|
+
`@opencode/plugin` 2.2.0 API, pi, and omp; Hermes keeps its provider integration.
|
|
108
106
|
|
|
109
107
|
```bash
|
|
110
108
|
luminary-memory hook install opencode # or pi / omp; project-local by default
|
|
@@ -114,7 +112,19 @@ Automatic scoped recall, opt-in user-grounded curation, explicit memory tools,
|
|
|
114
112
|
and accurate stored/duplicate/skipped/error results. pi/omp also expose
|
|
115
113
|
`/luminary` commands and native UI dialogs. Server tool results/custom messages
|
|
116
114
|
are available to compatible desktop/web clients; no universal frontend plugin
|
|
117
|
-
API or standalone desktop app is assumed.
|
|
115
|
+
API or standalone desktop app is assumed. A portable OpenCode agent skill lives
|
|
116
|
+
at [`opencode/SKILL.md`](opencode/SKILL.md); install it under
|
|
117
|
+
`~/.config/opencode/skills/luminary-memory/` or a project's `.opencode/skills/`.
|
|
118
|
+
|
|
119
|
+
The `0.3.3` source includes native interactive inspectors for the verified
|
|
120
|
+
surfaces: OpenCode CLI/Desktop, pi and omp, Hermes Desktop/dashboard and an
|
|
121
|
+
explicitly launched loopback companion. The `0.3.2` registry packages do not
|
|
122
|
+
include the inspector; see the installation guide for current availability.
|
|
123
|
+
Two native targets remain blocked on upstream
|
|
124
|
+
contracts and are recorded in the roadmap: OpenCode Web GUI contribution
|
|
125
|
+
discovery and Hermes terminal/TUI authority plus scope lifecycle. See
|
|
126
|
+
[development setup and explicit companion launch](docs/agent-integrations.md#interactive-inspectors)
|
|
127
|
+
and the [native support/acceptance roadmap](docs/ROADMAP.md).
|
|
118
128
|
|
|
119
129
|
### Luminary-maintained plugin packages
|
|
120
130
|
|
|
@@ -136,7 +146,8 @@ The three installable tarballs are written to `artifacts/plugins/`. Set
|
|
|
136
146
|
Choose the native package **or** the copied hook, never both.
|
|
137
147
|
|
|
138
148
|
Registry names are `luminary-memory-pi`, `luminary-memory-opencode`, and
|
|
139
|
-
`luminary-memory-omp`.
|
|
149
|
+
`luminary-memory-omp`. All three npm packages and the Python bridge are
|
|
150
|
+
published at `0.3.2`; npm `latest` points to that version.
|
|
140
151
|
The pi manifest includes `pi-package` for eligibility in the
|
|
141
152
|
[official package catalog](https://pi.dev/packages). OpenCode's existing
|
|
142
153
|
Ecosystem PR targets legacy V1 docs, not a verified V2 listing; no V2 website
|
|
@@ -307,7 +318,7 @@ after, and a background lifecycle keeps the store lean.
|
|
|
307
318
|
| **Abstention** | Strict provider/CLI paths can return `abstain` when support is weak or ambiguous |
|
|
308
319
|
| **Evidence** | Stored claims retain evidence quote, source, validity time, and audit provenance |
|
|
309
320
|
| **Conflict safety** | Conflicting claim keys remain versioned/conflicted until explicit supersession or resolution |
|
|
310
|
-
| **Core memory** |
|
|
321
|
+
| **Core memory** | Hermes separately loads designated `core` rows; native adapters require core-tagged rows to pass ordinary retrieval |
|
|
311
322
|
| **Weighted fusion** | Each strategy carries a tunable weight (semantic 0.4, keyword 0.3, graph 0.2, temporal 0.1), so high-signal strategies dominate the ranking |
|
|
312
323
|
| **Query expansion** | Short queries are expanded with co-occurring graph entities before embedding; when the graph is empty, content tokens from a topically related important memory may be appended (v0.2.15). No language-specific alias list is used. |
|
|
313
324
|
| **Importance boost** | Memories at importance ≥ 0.8 get a ranking bonus, lifting durable rules above weak-but-recent noise |
|