hippo-memory 2.0.0 → 2.1.0
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.
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
package/dist/mcp/protocol.js
CHANGED
|
@@ -7,8 +7,6 @@ import { errorFields, errorMessage, log } from '../util/log.js';
|
|
|
7
7
|
import { currentRequestId } from '../util/request-scope.js';
|
|
8
8
|
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
9
9
|
import { findHippoStoreDir } from '../core/project-identity.js';
|
|
10
|
-
import { STORE_BUSY_MESSAGE } from '../store/port.js';
|
|
11
|
-
import { isStoreBusy } from '../store/sqlite/busy.js';
|
|
12
10
|
// ── Find hippo root ──
|
|
13
11
|
/** Same bounded walk as the CLI (ends at home, so HIPPO_HOME wins over ~/.hippo); cwd/opts are the test seam. */
|
|
14
12
|
export function findHippoRoot(cwd = process.cwd(), opts) {
|
|
@@ -19,14 +17,15 @@ export function findHippoRoot(cwd = process.cwd(), opts) {
|
|
|
19
17
|
const global = getGlobalRoot();
|
|
20
18
|
return fs.existsSync(global) ? global : null;
|
|
21
19
|
}
|
|
22
|
-
/** JSON-RPC reply for a request that threw: typed API errors keep
|
|
20
|
+
/** JSON-RPC reply for a request that threw: typed API errors keep
|
|
21
|
+
* their text; anything else is logged and answered generically. */
|
|
23
22
|
export function mcpErrorResponse(id, err, requestId = currentRequestId() ?? randomUUID(), call) {
|
|
24
23
|
const where = call === undefined ? '' : ` (${call})`;
|
|
25
|
-
|
|
24
|
+
const { status, message } = mapApiError(err);
|
|
25
|
+
if (status === 503) {
|
|
26
26
|
log.warn(`mcp request${where} failed: ${errorMessage(err)}`, { requestId });
|
|
27
|
-
return { jsonrpc: '2.0', id, error: { code: -32603, message
|
|
27
|
+
return { jsonrpc: '2.0', id, error: { code: -32603, message } };
|
|
28
28
|
}
|
|
29
|
-
const { status, message } = mapApiError(err);
|
|
30
29
|
if (status !== 500) {
|
|
31
30
|
log.info(`mcp request${where} failed: ${errorMessage(err)}`, { requestId, status });
|
|
32
31
|
return { jsonrpc: '2.0', id, error: { code: -32603, message } };
|
|
@@ -38,12 +37,16 @@ export function mcpErrorResponse(id, err, requestId = currentRequestId() ?? rand
|
|
|
38
37
|
error: { code: -32603, message: `${INTERNAL_ERROR_MESSAGE} (request id ${requestId})`, data: { requestId } },
|
|
39
38
|
};
|
|
40
39
|
}
|
|
41
|
-
/** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context
|
|
42
|
-
* untyped caller that sends none runs as a member, so a missing role fails closed. */
|
|
40
|
+
/** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context
|
|
41
|
+
* runs as its own role, and an untyped caller that sends none runs as a member, so a missing role fails closed. */
|
|
43
42
|
export function mcpActor(ctx) {
|
|
44
43
|
if (ctx === undefined)
|
|
45
44
|
return { subject: 'mcp', role: 'admin', hostAdmin: true };
|
|
46
|
-
const actor = {
|
|
45
|
+
const actor = {
|
|
46
|
+
subject: ctx.actor ?? 'mcp',
|
|
47
|
+
role: ctx.role === 'admin' ? 'admin' : 'member',
|
|
48
|
+
scopes: ctx.scopes,
|
|
49
|
+
};
|
|
47
50
|
if (ctx.viaAuthResolver)
|
|
48
51
|
actor.viaAuthResolver = true;
|
|
49
52
|
if (ctx.hostAdmin)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ToolCall } from './protocol.js';
|
|
2
2
|
export declare function runRecallTool(call: ToolCall): Promise<string>;
|
|
3
|
-
export declare function runAssembleTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
4
|
-
export declare function runDrillTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
5
|
-
export declare function runContextTool({ args, ctx, hippoRoot, config, tenantId }: ToolCall): Promise<string>;
|
|
3
|
+
export declare function runAssembleTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'dagReads'>): Promise<string>;
|
|
4
|
+
export declare function runDrillTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'dagReads'>): Promise<string>;
|
|
5
|
+
export declare function runContextTool({ args, ctx, hippoRoot, config, tenantId, store }: ToolCall<'contextReads'>): Promise<string>;
|
|
6
6
|
//# sourceMappingURL=recall-tools.d.ts.map
|
package/dist/mcp/recall-tools.js
CHANGED
|
@@ -6,72 +6,58 @@ import { retrieve as apiRetrieve, drillDown as apiDrillDown, assemble as apiAsse
|
|
|
6
6
|
import { autoDetectContext } from '../api/context-auto.js';
|
|
7
7
|
import { resolveProjectIdentity } from '../core/project-identity.js';
|
|
8
8
|
import { isSharedStore } from '../core/config.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { hashQueryText } from '../api/recall/finish.js';
|
|
10
|
+
import { availabilityPool, cutoffClauses, detectRecallHints, shrinkToFit, suppressionSummary, tokenPurse, } from '../api/recall/render.js';
|
|
11
11
|
import { estimateTokens } from '../util/token-text.js';
|
|
12
12
|
import { assembleCost, assembleText, drillCost, drillText } from '../api/context-render.js';
|
|
13
13
|
import { mcpActor, ownsServerCwd } from './protocol.js';
|
|
14
14
|
import { lastRecalledIds, resolveClientKey } from './session-state.js';
|
|
15
15
|
import { formatContinuityBlock, formatMemories, memoryCost, memoriesReserve, snapshotPiece, handoffPiece, trailPiece, contextCost, tailSection, planningSection, } from './format.js';
|
|
16
16
|
import { isJsonString } from '../util/json.js';
|
|
17
|
-
import { parseContextRequest, parseRecallRequest, toolParams } from '../api/recall
|
|
18
|
-
import { noteRecall, sessionRing, shownRecallRows } from '../api/recall
|
|
17
|
+
import { parseContextRequest, parseRecallRequest, toolParams } from '../api/recall/request.js';
|
|
18
|
+
import { noteRecall, sessionRing, shownRecallRows } from '../api/recall/finish.js';
|
|
19
19
|
// Candidate pool the MCP recall ranks before the token budget trims what is shown.
|
|
20
20
|
const MCP_RECALL_LIMIT = 50;
|
|
21
|
-
function detectBiasHints(list, pool, anchorRing, queryHash) {
|
|
22
|
-
const anchoring = anchorRing ? detectAnchoring(snapshotRing(anchorRing), queryHash, list[0]?.entry.id ?? null) : null;
|
|
23
|
-
const availability = biasHintEnabled('availability')
|
|
24
|
-
? detectAvailabilityBias({
|
|
25
|
-
topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })),
|
|
26
|
-
pool: pool.map((e) => ({ id: e.id, created: e.created })),
|
|
27
|
-
})
|
|
28
|
-
: null;
|
|
29
|
-
return { anchoring, availability };
|
|
30
|
-
}
|
|
31
21
|
function biasHintSections(anchoring, availability) {
|
|
32
|
-
let text = anchoring
|
|
22
|
+
let text = anchoring
|
|
23
|
+
? `## Anchoring hint\n${anchoring.summary}\n[anchored_on: ${anchoring.memoryId}]\n\n---\n\n`
|
|
24
|
+
: '';
|
|
33
25
|
if (availability)
|
|
34
26
|
text += `## Availability bias\n${availability.summary}\n\n---\n\n`;
|
|
35
27
|
return text;
|
|
36
28
|
}
|
|
37
29
|
function cutoffSection(s, shown) {
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
40
|
-
cutoffClauses.push(`${s.droppedByBudget} dropped to fit limit`);
|
|
41
|
-
if (s.droppedPreRank > 0)
|
|
42
|
-
cutoffClauses.push(`${s.droppedPreRank} filtered pre-rank`);
|
|
43
|
-
if (s.summarySubstitutionsAdded > 0)
|
|
44
|
-
cutoffClauses.push(`${s.summarySubstitutionsAdded} summary substitutions added`);
|
|
45
|
-
if (s.freshTailAdded > 0)
|
|
46
|
-
cutoffClauses.push(`${s.freshTailAdded} fresh-tail added`);
|
|
47
|
-
if (s.suppressedByInterference > 0)
|
|
48
|
-
cutoffClauses.push(`${s.suppressedByInterference} suppressed by interference`);
|
|
49
|
-
if (cutoffClauses.length === 0)
|
|
30
|
+
const clauses = cutoffClauses(s);
|
|
31
|
+
if (clauses.length === 0)
|
|
50
32
|
return '';
|
|
51
|
-
return `## Cutoff
|
|
33
|
+
return `## Cutoff
|
|
34
|
+
Showing ${shown} of ${s.totalCandidates} candidates; ${clauses.join('; ')}.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
`;
|
|
52
39
|
}
|
|
53
|
-
function
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
40
|
+
function suppressionCounts(i) {
|
|
41
|
+
return {
|
|
42
|
+
totalCandidates: i.poolSize + i.droppedByScope,
|
|
43
|
+
droppedPreRank: i.droppedByScope + i.cut.length - i.list.length, // the bucket CLI and API recall use for copies
|
|
44
|
+
droppedByBudget: Math.max(0, i.poolSize - i.cut.length), // an upper bound: rows that never matched count too
|
|
45
|
+
summarySubstitutionsAdded: i.tail.filter((r) => r.isSummary).length,
|
|
46
|
+
freshTailAdded: i.tail.filter((r) => r.isFreshTail && !r.isSummary).length,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function fitMcpRecall(ranked, limits, render) {
|
|
50
|
+
const fitted = fitBudget(ranked, Math.max(0, limits.room), 1, memoryCost);
|
|
51
|
+
return shrinkToFit(fitted.length, 1, limits.budget, (n) => render(fitted.slice(0, n)), (r) => r.text);
|
|
62
52
|
}
|
|
63
53
|
function recallPresenter(budget, options) {
|
|
64
54
|
const { includeContinuity, anchorRing, queryHash, out, hintRows } = options;
|
|
65
55
|
return ({ ranked, pool, droppedByScope }, apiResult) => {
|
|
66
|
-
// Sections are paid in print order, ahead of the memories and
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return false;
|
|
72
|
-
left -= tokens;
|
|
73
|
-
return true;
|
|
74
|
-
};
|
|
56
|
+
// Sections are paid in print order, ahead of the memories and
|
|
57
|
+
// after the heading; one that does not fit is dropped whole.
|
|
58
|
+
const purse = tokenPurse(budget - memoriesReserve(budget));
|
|
59
|
+
const pays = (piece) => purse.pays(estimateTokens(piece));
|
|
60
|
+
const hintPool = availabilityPool(() => pool);
|
|
75
61
|
const planPiece = planningSection(apiResult);
|
|
76
62
|
const showPlan = planPiece !== '' && pays(planPiece);
|
|
77
63
|
const tailRows = apiResult.results.filter((r) => r.isFreshTail || r.isSummary);
|
|
@@ -80,22 +66,18 @@ function recallPresenter(budget, options) {
|
|
|
80
66
|
const showContinuity = continuityPiece !== '' && pays(continuityPiece);
|
|
81
67
|
// The hints and Cutoff block describe the list MCP shows, not the window band in apiResult.
|
|
82
68
|
const render = (cut) => {
|
|
83
|
-
|
|
84
|
-
const
|
|
69
|
+
// After every cut, so a merged row cut here never hides its sources.
|
|
70
|
+
const list = dropHeldCopies(cut, (r) => r.entry);
|
|
71
|
+
const { anchoring, availability } = detectRecallHints({ list, pool: hintPool, anchorRing, queryHash });
|
|
85
72
|
const shownIds = new Set(list.map((r) => r.entry.id));
|
|
86
73
|
const shownKeys = storedTextKeys(list.map((r) => r.entry));
|
|
87
74
|
const tail = showTail
|
|
88
75
|
? dropHeldCopies(tailRows.filter((r) => !shownIds.has(r.id) && !shownKeys.has(duplicateKey(r.content))), (r) => r)
|
|
89
76
|
: [];
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
summarySubstitutionsAdded: tail.filter((r) => r.isSummary).length,
|
|
95
|
-
freshTailAdded: tail.filter((r) => r.isFreshTail && !r.isSummary).length,
|
|
96
|
-
suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0,
|
|
97
|
-
};
|
|
98
|
-
// Anchoring is the stronger pull, so it prints first; the Cutoff block sits above the list, where the agent reads it.
|
|
77
|
+
const counts = suppressionCounts({ poolSize: pool.length, droppedByScope, cut, list, tail });
|
|
78
|
+
const s = suppressionSummary(counts, anchoring);
|
|
79
|
+
// Anchoring is the stronger pull, so it prints first; the
|
|
80
|
+
// Cutoff block sits above the list, where the agent reads it.
|
|
99
81
|
let text = biasHintSections(anchoring, availability);
|
|
100
82
|
if (showPlan)
|
|
101
83
|
text += planPiece;
|
|
@@ -104,13 +86,13 @@ function recallPresenter(budget, options) {
|
|
|
104
86
|
text += formatMemories(list) + tailSection(tail) + (showContinuity ? continuityPiece : '');
|
|
105
87
|
return { anchoring, availability, text, list };
|
|
106
88
|
};
|
|
107
|
-
const rendered =
|
|
89
|
+
const rendered = fitMcpRecall(ranked, { room: purse.left(), budget }, render);
|
|
108
90
|
out.rendered = rendered;
|
|
109
91
|
return { ids: rendered.list.map((r) => r.entry.id), audit: hintRows(rendered) };
|
|
110
92
|
};
|
|
111
93
|
}
|
|
112
94
|
export async function runRecallTool(call) {
|
|
113
|
-
const { ctx, hippoRoot, config, tenantId, args } = call;
|
|
95
|
+
const { ctx, hippoRoot, config, tenantId, args, store } = call;
|
|
114
96
|
// MCP keeps its own band size and search mode, so limit, mode and explain are checked but not passed on.
|
|
115
97
|
const { opts: recallOpts } = parseRecallRequest(toolParams(args));
|
|
116
98
|
const { query, includeContinuity, sessionId } = recallOpts;
|
|
@@ -119,7 +101,8 @@ export async function runRecallTool(call) {
|
|
|
119
101
|
hippoRoot,
|
|
120
102
|
tenantId,
|
|
121
103
|
actor: mcpActor(ctx),
|
|
122
|
-
store
|
|
104
|
+
store,
|
|
105
|
+
reach: ctx?.reach,
|
|
123
106
|
};
|
|
124
107
|
const anchorRing = sessionRing('mcp', tenantId, sessionId);
|
|
125
108
|
const who = { tenantId, actor: ctx?.actor ?? 'mcp' };
|
|
@@ -135,22 +118,24 @@ export async function runRecallTool(call) {
|
|
|
135
118
|
keepHeldCopies: true,
|
|
136
119
|
project: ctx?.project,
|
|
137
120
|
showRanked: recallPresenter(budget, {
|
|
138
|
-
includeContinuity,
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
121
|
+
includeContinuity,
|
|
122
|
+
anchorRing,
|
|
123
|
+
queryHash,
|
|
124
|
+
out,
|
|
125
|
+
hintRows: ({ list, anchoring, availability }) => shownRecallRows(who, { query, ring: anchorRing, topId: list[0]?.entry.id ?? null, anchoring, availability }),
|
|
142
126
|
}),
|
|
143
127
|
});
|
|
144
128
|
const { rendered } = out;
|
|
145
129
|
if (!rendered)
|
|
146
130
|
throw new Error('hippo_recall: api.retrieve returned without calling showRanked');
|
|
147
131
|
lastRecalledIds.set(resolveClientKey(ctx), rendered.list.map((r) => r.entry.id));
|
|
148
|
-
// Fed once the recall's rows are written, after the final detect: anchoredOn feeds the cooldown for the next recall
|
|
132
|
+
// Fed once the recall's rows are written, after the final detect: anchoredOn feeds the cooldown for the next recall
|
|
133
|
+
// on this session.
|
|
149
134
|
if (anchorRing)
|
|
150
135
|
noteRecall(anchorRing, query, rendered.list[0]?.entry.id ?? null, rendered.anchoring?.memoryId);
|
|
151
136
|
return rendered.text;
|
|
152
137
|
}
|
|
153
|
-
export async function runAssembleTool({ args, ctx, hippoRoot, tenantId }) {
|
|
138
|
+
export async function runAssembleTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
154
139
|
const sessionId = String(args.session_id || '');
|
|
155
140
|
if (!sessionId)
|
|
156
141
|
return 'No session_id provided.';
|
|
@@ -161,7 +146,7 @@ export async function runAssembleTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
161
146
|
hippoRoot,
|
|
162
147
|
tenantId,
|
|
163
148
|
actor: mcpActor(ctx),
|
|
164
|
-
store
|
|
149
|
+
store,
|
|
165
150
|
};
|
|
166
151
|
const explicitScope = isJsonString(args.scope) && args.scope.length > 0
|
|
167
152
|
? args.scope
|
|
@@ -181,7 +166,7 @@ export async function runAssembleTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
181
166
|
});
|
|
182
167
|
return assembleText(r);
|
|
183
168
|
}
|
|
184
|
-
export async function runDrillTool({ args, ctx, hippoRoot, tenantId }) {
|
|
169
|
+
export async function runDrillTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
185
170
|
const summaryId = String(args.summary_id || '');
|
|
186
171
|
if (!summaryId)
|
|
187
172
|
return 'No summary_id provided.';
|
|
@@ -193,7 +178,7 @@ export async function runDrillTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
193
178
|
hippoRoot,
|
|
194
179
|
tenantId,
|
|
195
180
|
actor: mcpActor(ctx),
|
|
196
|
-
store
|
|
181
|
+
store,
|
|
197
182
|
};
|
|
198
183
|
const drillExtra = {};
|
|
199
184
|
if (Number.isFinite(limit) && limit > 0)
|
|
@@ -213,15 +198,17 @@ export async function runDrillTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
213
198
|
}
|
|
214
199
|
return drillText(r);
|
|
215
200
|
}
|
|
216
|
-
// The served store names the project (an HTTP daemon runs from anywhere); the global root names none, so only an owner
|
|
201
|
+
// The served store names the project (an HTTP daemon runs from anywhere); the global root names none, so only an owner
|
|
202
|
+
// of the server cwd falls back to it.
|
|
217
203
|
function localProject(hippoRoot, ownsCwd) {
|
|
218
204
|
const storeProject = resolveProjectIdentity(path.dirname(path.resolve(hippoRoot)));
|
|
219
205
|
return storeProject.name !== '' || !ownsCwd ? storeProject : resolveProjectIdentity(process.cwd());
|
|
220
206
|
}
|
|
221
|
-
export async function runContextTool({ args, ctx, hippoRoot, config, tenantId }) {
|
|
207
|
+
export async function runContextTool({ args, ctx, hippoRoot, config, tenantId, store }) {
|
|
222
208
|
// Stdio names no project, and the store's folder or the launch cwd is no caller's; HTTP sends X-Hippo-Project.
|
|
223
|
-
if (isSharedStore(hippoRoot) && ctx?.project === undefined)
|
|
209
|
+
if ((ctx?.reach ? ctx.reach.shared : isSharedStore(hippoRoot)) && ctx?.project === undefined) {
|
|
224
210
|
return 'hippo_context needs a project on a shared store; use hippo_recall';
|
|
211
|
+
}
|
|
225
212
|
const { budget: budgetArg, scope: exactScope } = parseContextRequest(toolParams(args));
|
|
226
213
|
const budget = budgetArg ?? config.defaultContextBudget;
|
|
227
214
|
if (budget === 0)
|
|
@@ -229,8 +216,9 @@ export async function runContextTool({ args, ctx, hippoRoot, config, tenantId })
|
|
|
229
216
|
if (budget < memoriesReserve(budget))
|
|
230
217
|
return ''; // not even the heading fits, so nothing prints, as at budget 0
|
|
231
218
|
const ownsCwd = ownsServerCwd(ctx);
|
|
232
|
-
const result = await apiGetContext({ hippoRoot, tenantId, actor: mcpActor(ctx), store: ctx?.
|
|
233
|
-
// The server's git state is no remote caller's, so a project
|
|
219
|
+
const result = await apiGetContext({ hippoRoot, tenantId, actor: mcpActor(ctx), store, reach: ctx?.reach }, {
|
|
220
|
+
// The server's git state is no remote caller's, so a project
|
|
221
|
+
// or remote caller gets rows by strength without a query.
|
|
234
222
|
q: ctx?.project || !ownsCwd ? undefined : autoDetectContext(),
|
|
235
223
|
budget,
|
|
236
224
|
exactScope,
|
package/dist/mcp/request.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type McpContext, type McpRequest, type McpResponse } from './protocol.js';
|
|
2
|
-
/** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call),
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
/** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call),
|
|
3
|
+
* other tools are not recorded. */
|
|
4
|
+
export declare function recordMcpTokens(toolName: string, output: string, ctx: McpContext): Promise<void>;
|
|
5
|
+
/** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through
|
|
6
|
+
* it. Returns null for notifications. `executeTool` errors are the caller's problem: wrap with try/catch in the
|
|
7
|
+
* transport. Only `tools/call` needs the context, so stdio builds one for that method alone. */
|
|
8
|
+
export declare function handleMcpRequest(req: McpRequest, ctx: McpContext | undefined): Promise<McpResponse | null>;
|
|
7
9
|
//# sourceMappingURL=request.d.ts.map
|
package/dist/mcp/request.js
CHANGED
|
@@ -1,92 +1,70 @@
|
|
|
1
1
|
// Transport-agnostic request handling: tool dispatch table, tool execution and the JSON-RPC method switch.
|
|
2
|
-
import { errorMessage, log } from '../util/log.js';
|
|
3
2
|
import { currentSignal } from '../util/request-scope.js';
|
|
4
3
|
import { STORE_NOT_PORTED_MESSAGE } from '../util/http-util.js';
|
|
5
|
-
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
6
4
|
import { loadConfig } from '../core/config.js';
|
|
7
|
-
import {
|
|
8
|
-
import { runWithRequestStores } from '../db/index.js';
|
|
9
|
-
import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
|
|
10
|
-
import { hasGroup } from '../store/index.js';
|
|
11
|
-
import { storeFor } from '../store/sqlite/store.js';
|
|
5
|
+
import { hasGroup, narrowStore } from '../store/index.js';
|
|
12
6
|
import { estimateTokens } from '../util/token-text.js';
|
|
13
7
|
import { PACKAGE_VERSION } from '../util/version.js';
|
|
14
8
|
import { validateToolArgs } from './tool-args.js';
|
|
15
|
-
import { RecallRequestError } from '../api/recall
|
|
16
|
-
import {
|
|
9
|
+
import { RecallRequestError } from '../api/recall/request.js';
|
|
10
|
+
import { recordTokens } from '../api/tokens.js';
|
|
11
|
+
import { mcpActor, } from './protocol.js';
|
|
17
12
|
import { TOOLS, TOOLS_BY_NAME, ARGS_CHECKED_BY_API } from './tools.js';
|
|
18
13
|
import { runRecallTool, runAssembleTool, runDrillTool, runContextTool } from './recall-tools.js';
|
|
19
14
|
import { runRememberTool, runOutcomeTool, runLearnTool } from './memory-tools.js';
|
|
20
|
-
import { runPredictBaserateTool, runStatusTool, runConflictsTool, runResolveTool, runShareTool, runPeersTool } from './admin-tools.js';
|
|
15
|
+
import { runPredictBaserateTool, runStatusTool, runConflictsTool, runResolveTool, runShareTool, runPeersTool, } from './admin-tools.js';
|
|
21
16
|
import { sharedStoreRefusal } from './shared-gate.js';
|
|
22
17
|
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
23
|
-
/** Zero-install first run (`npx -y hippo-memory mcp`, no store anywhere): create the global store instead of failing every tool call, and say so on stderr
|
|
24
|
-
* (stdout carries the protocol). A later `hippo init` project store takes precedence. */
|
|
25
|
-
function createGlobalStoreOnFirstRun() {
|
|
26
|
-
initGlobal();
|
|
27
|
-
const root = getGlobalRoot();
|
|
28
|
-
log.warn(`no memory store found; created the global store at ${root}. Run \`hippo init\` in a project for a project store.`);
|
|
29
|
-
return root;
|
|
30
|
-
}
|
|
31
18
|
// ── Token ledger ──
|
|
32
19
|
const MCP_TOKEN_SURFACES = new Map([
|
|
33
20
|
['hippo_recall', 'mcp_recall'],
|
|
34
21
|
['hippo_context', 'mcp_context'],
|
|
35
22
|
]);
|
|
36
|
-
/** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call),
|
|
23
|
+
/** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call),
|
|
24
|
+
* other tools are not recorded. */
|
|
37
25
|
export async function recordMcpTokens(toolName, output, ctx) {
|
|
38
26
|
const surface = MCP_TOKEN_SURFACES.get(toolName);
|
|
39
27
|
if (!surface || !output)
|
|
40
28
|
return;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
tokens: estimateTokens(output),
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
rethrowIfSqliteBlocked(err);
|
|
55
|
-
log.warnThenDebug('mcp-token-ledger', `token ledger write failed; the tool reply is unaffected: ${errorMessage(err)}`);
|
|
56
|
-
}
|
|
29
|
+
const apiCtx = { hippoRoot: ctx.hippoRoot, tenantId: ctx.tenantId, actor: mcpActor(ctx), store: ctx.store };
|
|
30
|
+
await recordTokens(apiCtx, surface, { items: 0, tokens: estimateTokens(output) });
|
|
31
|
+
}
|
|
32
|
+
/** A tool that reaches its store through `group`: the call it gets carries the store narrowed to it. */
|
|
33
|
+
function toolOn(group, handler) {
|
|
34
|
+
return {
|
|
35
|
+
storeReady: group,
|
|
36
|
+
run: (call) => handler({ ...call, store: narrowStore(call.store, group) }),
|
|
37
|
+
};
|
|
57
38
|
}
|
|
58
39
|
const TOOL_HANDLERS = new Map([
|
|
59
|
-
['hippo_recall',
|
|
60
|
-
['hippo_assemble',
|
|
61
|
-
['hippo_drill',
|
|
62
|
-
['hippo_predict_baserate',
|
|
63
|
-
['hippo_remember',
|
|
64
|
-
['hippo_outcome',
|
|
65
|
-
['hippo_context',
|
|
66
|
-
['hippo_status',
|
|
67
|
-
['hippo_learn',
|
|
68
|
-
['hippo_conflicts',
|
|
69
|
-
['hippo_resolve',
|
|
70
|
-
['hippo_share', {
|
|
71
|
-
['hippo_peers', {
|
|
40
|
+
['hippo_recall', toolOn('base', runRecallTool)],
|
|
41
|
+
['hippo_assemble', toolOn('dagReads', runAssembleTool)],
|
|
42
|
+
['hippo_drill', toolOn('dagReads', runDrillTool)],
|
|
43
|
+
['hippo_predict_baserate', toolOn('predictions', runPredictBaserateTool)],
|
|
44
|
+
['hippo_remember', toolOn('entryWrites', runRememberTool)],
|
|
45
|
+
['hippo_outcome', toolOn('entryWrites', runOutcomeTool)],
|
|
46
|
+
['hippo_context', toolOn('contextReads', runContextTool)],
|
|
47
|
+
['hippo_status', toolOn('reports', runStatusTool)],
|
|
48
|
+
['hippo_learn', toolOn('lessonWrites', runLearnTool)],
|
|
49
|
+
['hippo_conflicts', toolOn('conflicts', runConflictsTool)],
|
|
50
|
+
['hippo_resolve', toolOn('conflicts', runResolveTool)],
|
|
51
|
+
['hippo_share', { run: runShareTool }],
|
|
52
|
+
['hippo_peers', { run: runPeersTool }],
|
|
72
53
|
]);
|
|
73
|
-
/**
|
|
54
|
+
/** A call with no context yet (tools/list on stdio) lists every tool. */
|
|
74
55
|
function runsOn(store, toolName) {
|
|
75
56
|
return store === undefined || hasGroup(store, TOOL_HANDLERS.get(toolName)?.storeReady ?? 'localFiles');
|
|
76
57
|
}
|
|
77
58
|
async function executeTool(name, args, ctx) {
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
const
|
|
59
|
+
// The transport's context is trusted: its hippoRoot, store and tenantId were bound by the host (the HTTP server's
|
|
60
|
+
// Bearer, or the stdio host's folder walk and HIPPO_TENANT).
|
|
61
|
+
const { hippoRoot, tenantId } = ctx;
|
|
81
62
|
const config = loadConfig(hippoRoot);
|
|
82
|
-
|
|
83
|
-
// does not drop to HIPPO_TENANT.
|
|
84
|
-
const tenantId = ctx?.tenantId ?? resolveTenantId({});
|
|
85
|
-
const handler = TOOL_HANDLERS.get(name)?.handler;
|
|
63
|
+
const run = TOOL_HANDLERS.get(name)?.run;
|
|
86
64
|
// handleMcpRequest rejects names missing from TOOLS, so reaching here means TOOLS and this table drifted apart.
|
|
87
|
-
if (!
|
|
65
|
+
if (!run)
|
|
88
66
|
throw new Error(`hippo-mcp: tool ${name} is declared but has no handler`);
|
|
89
|
-
return
|
|
67
|
+
return run({ args, ctx, hippoRoot, store: ctx.store, config, tenantId });
|
|
90
68
|
}
|
|
91
69
|
// ── Request handling ──
|
|
92
70
|
// The MCP spec reports input validation as a tool result with isError, so the model can read it and retry.
|
|
@@ -94,19 +72,20 @@ function invalidArgs(id, toolName, problems) {
|
|
|
94
72
|
return {
|
|
95
73
|
jsonrpc: '2.0',
|
|
96
74
|
id,
|
|
97
|
-
result: {
|
|
75
|
+
result: {
|
|
76
|
+
content: [{ type: 'text', text: `Invalid arguments for ${toolName}: ${problems.join('; ')}` }],
|
|
77
|
+
isError: true,
|
|
78
|
+
},
|
|
98
79
|
};
|
|
99
80
|
}
|
|
100
|
-
/**
|
|
101
|
-
*
|
|
102
|
-
function
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return text;
|
|
109
|
-
});
|
|
81
|
+
/** The tool and its ledger row run in the caller's request scope, which the host (server or stdio) opens.
|
|
82
|
+
* SHORTCUT: the deadline stops a call only between these steps, not a running store read or fetch; thread the signal */
|
|
83
|
+
async function runTool(toolName, args, ctx) {
|
|
84
|
+
currentSignal()?.throwIfAborted();
|
|
85
|
+
const text = await executeTool(toolName, args, ctx);
|
|
86
|
+
currentSignal()?.throwIfAborted();
|
|
87
|
+
await recordMcpTokens(toolName, text, ctx);
|
|
88
|
+
return text;
|
|
110
89
|
}
|
|
111
90
|
async function callTool(id, params, ctx) {
|
|
112
91
|
const nameValue = params?.name;
|
|
@@ -116,12 +95,13 @@ async function callTool(id, params, ctx) {
|
|
|
116
95
|
return { jsonrpc: '2.0', id, error: { code: -32602, message: `Unknown tool: ${toolName.slice(0, 128)}` } };
|
|
117
96
|
}
|
|
118
97
|
// The same refusal a ported tool gives when it reaches hippo.db, so a client handles one shape.
|
|
119
|
-
if (!runsOn(ctx
|
|
98
|
+
if (!runsOn(ctx.store, toolName)) {
|
|
120
99
|
return { jsonrpc: '2.0', id, error: { code: -32603, message: STORE_NOT_PORTED_MESSAGE } };
|
|
121
100
|
}
|
|
122
101
|
const refusal = sharedStoreRefusal(toolName, ctx);
|
|
123
|
-
if (refusal !== undefined)
|
|
102
|
+
if (refusal !== undefined) {
|
|
124
103
|
return { jsonrpc: '2.0', id, result: { content: [{ type: 'text', text: refusal }], isError: true } };
|
|
104
|
+
}
|
|
125
105
|
const argumentsValue = params?.arguments;
|
|
126
106
|
if (argumentsValue !== undefined && argumentsValue !== null && !isJsonObject(argumentsValue)) {
|
|
127
107
|
return { jsonrpc: '2.0', id, error: { code: -32602, message: `${toolName}: arguments must be an object` } };
|
|
@@ -132,7 +112,7 @@ async function callTool(id, params, ctx) {
|
|
|
132
112
|
return invalidArgs(id, toolName, problems);
|
|
133
113
|
let output;
|
|
134
114
|
try {
|
|
135
|
-
output = await
|
|
115
|
+
output = await runTool(toolName, toolArgs, ctx);
|
|
136
116
|
}
|
|
137
117
|
catch (err) {
|
|
138
118
|
if (!(err instanceof RecallRequestError))
|
|
@@ -147,8 +127,9 @@ async function callTool(id, params, ctx) {
|
|
|
147
127
|
},
|
|
148
128
|
};
|
|
149
129
|
}
|
|
150
|
-
/** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through
|
|
151
|
-
*
|
|
130
|
+
/** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through
|
|
131
|
+
* it. Returns null for notifications. `executeTool` errors are the caller's problem: wrap with try/catch in the
|
|
132
|
+
* transport. Only `tools/call` needs the context, so stdio builds one for that method alone. */
|
|
152
133
|
export async function handleMcpRequest(req, ctx) {
|
|
153
134
|
const { id, method, params } = req;
|
|
154
135
|
switch (method) {
|
|
@@ -168,6 +149,8 @@ export async function handleMcpRequest(req, ctx) {
|
|
|
168
149
|
return { jsonrpc: '2.0', id, result: { tools: TOOLS.filter((t) => runsOn(ctx?.store, t.name)) } };
|
|
169
150
|
}
|
|
170
151
|
case 'tools/call':
|
|
152
|
+
if (ctx === undefined)
|
|
153
|
+
throw new Error('hippo-mcp: tools/call needs a context');
|
|
171
154
|
return callTool(id, params, ctx);
|
|
172
155
|
default:
|
|
173
156
|
// Notifications (no id) must not receive a response
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process).
|
|
4
|
+
* Usage: hippo mcp (or npx hippo-memory
|
|
3
5
|
* mcp). */
|
|
4
6
|
export { _resetSessionRecallHistoryMcpForTests } from './session-state.js';
|
|
5
7
|
export { findHippoRoot, mcpErrorResponse, type McpRequest, type McpResponse, type McpContext } from './protocol.js';
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process).
|
|
4
|
+
* Usage: hippo mcp (or npx hippo-memory
|
|
3
5
|
* mcp). */
|
|
4
6
|
export { _resetSessionRecallHistoryMcpForTests } from './session-state.js';
|
|
5
7
|
export { findHippoRoot, mcpErrorResponse } from './protocol.js';
|
|
@@ -7,7 +9,8 @@ export { handleMcpRequest } from './request.js';
|
|
|
7
9
|
export { startStdioLoop } from './stdio.js';
|
|
8
10
|
import { envMcpStdio } from '../util/env.js';
|
|
9
11
|
import { startStdioLoop } from './stdio.js';
|
|
10
|
-
// Auto-start only as the main module (node dist/mcp/server.js or the cli's import('./mcp/server.js')); importing it
|
|
12
|
+
// Auto-start only as the main module (node dist/mcp/server.js or the cli's import('./mcp/server.js')); importing it
|
|
13
|
+
// elsewhere (the HTTP/SSE wiring) must not
|
|
11
14
|
// start stdio. Fallback: HIPPO_MCP_STDIO=1 or argv1 ending in /mcp/server.js also starts it.
|
|
12
15
|
const isMainModule = (() => {
|
|
13
16
|
try {
|
|
@@ -25,6 +28,8 @@ const isMainModule = (() => {
|
|
|
25
28
|
}
|
|
26
29
|
})();
|
|
27
30
|
if (isMainModule) {
|
|
28
|
-
|
|
31
|
+
// The CLI owns the store build, so running this file directly opens the same store `hippo mcp` does.
|
|
32
|
+
const { cliStdioHost } = await import('../cli/api-context.js');
|
|
33
|
+
startStdioLoop(cliStdioHost);
|
|
29
34
|
}
|
|
30
35
|
//# sourceMappingURL=server.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Test-only: reset the MCP recall rings. Call from beforeEach. */
|
|
2
2
|
export declare function _resetSessionRecallHistoryMcpForTests(): void;
|
|
3
3
|
export declare const lastRecalledIds: Map<string, string[]>;
|
|
4
|
-
export { autoSleepInFlight } from '../api/auto-sleep.js';
|
|
4
|
+
export { autoSleepInFlight } from '../api/sleep/auto-sleep.js';
|
|
5
5
|
export declare function resolveClientKey(ctx: {
|
|
6
6
|
clientKey?: string;
|
|
7
7
|
tenantId: string;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// Per-process state the MCP tools share across calls: recall rings, last recalled ids, auto-sleep runs.
|
|
2
2
|
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
3
|
-
import { resetSessionRings } from '../api/recall
|
|
3
|
+
import { resetSessionRings } from '../api/recall/finish.js';
|
|
4
4
|
/** Test-only: reset the MCP recall rings. Call from beforeEach. */
|
|
5
5
|
export function _resetSessionRecallHistoryMcpForTests() {
|
|
6
6
|
resetSessionRings('mcp');
|
|
7
7
|
}
|
|
8
|
-
// Last recalled IDs per client for outcome feedback, so two HTTP-MCP clients on one tenant cannot poison each other:
|
|
8
|
+
// Last recalled IDs per client for outcome feedback, so two HTTP-MCP clients on one tenant cannot poison each other:
|
|
9
|
+
// key is `ctx.clientKey` (hash of
|
|
9
10
|
// bearer+remoteAddr over HTTP), else 'stdio-${pid}', else `${tenantId}:default` for a McpContext built in tests.
|
|
10
11
|
const MAX_RECALL_CLIENTS = 4096;
|
|
11
12
|
// The caller names the project half of each key, so a set past the cap drops the client that recalled longest ago.
|
|
@@ -20,7 +21,7 @@ class RecentRecalls extends Map {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
export const lastRecalledIds = new RecentRecalls();
|
|
23
|
-
export { autoSleepInFlight } from '../api/auto-sleep.js';
|
|
24
|
+
export { autoSleepInFlight } from '../api/sleep/auto-sleep.js';
|
|
24
25
|
export function resolveClientKey(ctx) {
|
|
25
26
|
const base = ctx?.clientKey ? ctx.clientKey : `stdio-${process.pid}:${ctx?.tenantId || DEFAULT_TENANT_ID}`;
|
|
26
27
|
return ctx?.project ? `${base}:${ctx.project.name}` : base;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { McpContext } from './protocol.js';
|
|
2
|
-
/** The refusal text for this call, or undefined when it may run; stdio
|
|
3
|
-
|
|
2
|
+
/** The refusal text for this call, or undefined when it may run; the stdio host is the operator's own process and is
|
|
3
|
+
* never gated. */
|
|
4
|
+
export declare function sharedStoreRefusal(name: string, ctx: McpContext): string | undefined;
|
|
4
5
|
//# sourceMappingURL=shared-gate.d.ts.map
|