hippo-memory 1.72.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/README.md +6 -4
- 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 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- 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 +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- 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} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- 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} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- 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 -7
- 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 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- 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 +35 -20
- package/dist/api/prompt-hook.js +66 -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} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- 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 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- 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} +54 -45
- 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 +27 -12
- 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 +34 -15
- 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 +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- 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 +58 -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 +33 -33
- package/dist/cli/auth.js +23 -31
- 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 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- 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 +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- 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 +5 -5
- package/dist/cli/object-verbs.js +13 -16
- 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 +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- 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 +16 -8
- 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 +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- 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 -4
- 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 -5
- 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 -5
- 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 +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- 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 -5
- 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 -4
- 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 -5
- 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 +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- 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 +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- 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 +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- 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 +38 -29
- 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 +22 -17
- 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 +87 -30
- package/dist/core/memory.js +82 -33
- 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 +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- 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.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- 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 -2
- package/dist/db/connect.js +8 -2
- 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 +40 -20
- 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/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- 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 -8
- package/dist/db/physics-state.js +17 -50
- 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 +20 -5
- package/dist/db/request-stores.js +15 -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 +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- 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 +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- 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 +17 -7
- 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 +72 -33
- 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 +11 -10
- 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 +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- 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 +17 -10
- 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 -6
- package/dist/learn/invalidation.js +62 -28
- 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 +21 -20
- 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 +61 -77
- 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 +59 -23
- 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 +19 -9
- 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 +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- 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 +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- 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 +550 -97
- 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 -17
- 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 +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- 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 +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -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 +90 -41
- 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 +97 -63
- 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 +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- 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 +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- 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 +11 -12
- 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 +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- 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 +4 -2
- package/dist/store/index.js +2 -1
- 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 +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- 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 +261 -219
- 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 +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- 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 +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- 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 +12 -5
- 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 +9 -6
- 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 +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- 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.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- 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 +97 -38
- 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 -18
- package/dist/store/sqlite/store.js +95 -33
- 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 +25 -11
- package/dist/store/summaries.js +84 -27
- 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 +8 -4
- 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 +28 -11
- 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 +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- 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 +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- 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 +16 -4
- package/dist/util/request-scope.js +19 -6
- 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 +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- 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 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- 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 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- 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 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { confirmedOutcomeTimes } from '../store/audit.js';
|
|
3
|
-
import { loadAllEntries, loadEntriesByIds, loadEntriesMentioning, readEntry } from '../store/entry-reads.js';
|
|
1
|
+
import { localFilesAt } from './roots.js';
|
|
4
2
|
import { chunked } from '../util/chunked.js';
|
|
5
3
|
import { CHURN_STALE_TAG } from '../core/memory.js';
|
|
6
4
|
import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
|
|
7
5
|
const HEADLINE_CHARS = 60;
|
|
6
|
+
const TRIVIAL_REMOVAL_WORDS = new Set([
|
|
7
|
+
'extra', 'unused', 'empty', 'old', 'whitespace', 'spaces', 'blank', 'dead', 'commented',
|
|
8
|
+
]);
|
|
8
9
|
/** Extract what was replaced/removed from a commit message.
|
|
9
10
|
* Returns null if the commit isn't a breaking/migration change. */
|
|
10
11
|
export function extractInvalidationTarget(message) {
|
|
@@ -35,35 +36,47 @@ export function extractInvalidationTarget(message) {
|
|
|
35
36
|
if (removeMatch) {
|
|
36
37
|
const target = removeMatch[1].trim();
|
|
37
38
|
const words = target.split(/\s+/);
|
|
38
|
-
const
|
|
39
|
-
const isTrivial = words.length <= 2 && words.some(w => trivialWords.has(w.toLowerCase()));
|
|
39
|
+
const isTrivial = words.length <= 2 && words.some(w => TRIVIAL_REMOVAL_WORDS.has(w.toLowerCase()));
|
|
40
40
|
if (isTrivial)
|
|
41
41
|
return null;
|
|
42
42
|
return { from: target, to: null, type: 'removal' };
|
|
43
43
|
}
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
|
-
/** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add
|
|
47
|
-
*
|
|
46
|
+
/** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add
|
|
47
|
+
* 'invalidated' tag; pinned are skipped).
|
|
48
|
+
* Tag matching is EXACT: the FULL pattern must equal a tag, so a pattern merely containing a common tag word cannot
|
|
49
|
+
* mass-weaken every memory with that tag. */
|
|
48
50
|
export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
51
|
+
return invalidateIn(localFilesAt(hippoRoot).learning, target, tenantId, options);
|
|
52
|
+
}
|
|
53
|
+
/** invalidateMatching on the memories `learning` holds. */
|
|
54
|
+
function invalidateIn(learning, target, tenantId, options) {
|
|
49
55
|
// tenantId opt-in: when set, only that tenant's memories are weakened; undefined is host-wide.
|
|
50
56
|
// The onlyId read is tenant-scoped too, so another tenant's id is invisible here.
|
|
51
57
|
const entries = options?.onlyId === undefined
|
|
52
|
-
?
|
|
53
|
-
: [readEntry(
|
|
58
|
+
? learning.entriesMentioning(invalidationTokenize(target.from), target.from.toLowerCase().trim(), tenantId)
|
|
59
|
+
: [learning.readEntry(options.onlyId, tenantId)].filter((entry) => entry !== null);
|
|
54
60
|
const { result, weakened } = weakenMatches(entries, target, options);
|
|
55
|
-
writeEntriesTogether(
|
|
61
|
+
learning.writeEntriesTogether(weakened);
|
|
56
62
|
return result;
|
|
57
63
|
}
|
|
58
|
-
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it
|
|
59
|
-
*
|
|
60
|
-
|
|
64
|
+
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it
|
|
65
|
+
* current.
|
|
66
|
+
* Each match is read again before it is weakened, so a row another writer changed since the list was read is never
|
|
67
|
+
* written back stale. */
|
|
68
|
+
export async function invalidateMatchingAmong(store, live, target, tenantId) {
|
|
61
69
|
const seen = weakenMatches(live, target, { dryRun: true }).result;
|
|
62
70
|
const ids = [...seen.targets, ...seen.skippedPinned];
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
const fresh = new Map();
|
|
72
|
+
// The port reads at most 500 ids a call.
|
|
73
|
+
for (const chunk of chunked(ids, 500)) {
|
|
74
|
+
for (const entry of await store.entriesByIds(chunk, tenantId))
|
|
75
|
+
fresh.set(entry.id, entry);
|
|
76
|
+
}
|
|
65
77
|
const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
|
|
66
|
-
|
|
78
|
+
if (weakened.length > 0)
|
|
79
|
+
await store.lessonWrites.writeTogether(weakened);
|
|
67
80
|
const byId = new Map(weakened.map((entry) => [entry.id, entry]));
|
|
68
81
|
for (let i = 0; i < live.length; i++)
|
|
69
82
|
live[i] = byId.get(live[i].id) ?? live[i];
|
|
@@ -149,7 +162,8 @@ const CHURN_PATH_RE = new RegExp(
|
|
|
149
162
|
`[A-Za-z0-9_./\\\\:-]+\\.(?:${CHURN_PATH_EXTENSIONS.join('|')})(?![A-Za-z0-9_])(?::\\d+(?:-\\d+)?)?`, 'g');
|
|
150
163
|
const CHURN_SYMBOL_RE = /`([A-Za-z_$][A-Za-z0-9_$]*)(?:\(\))?`/g;
|
|
151
164
|
const CHURN_SCRIPT_RE = /npm run(?:-script)?\s+([A-Za-z0-9:_-]+)/g;
|
|
152
|
-
/** Pure syntactic extraction; repo-aware resolution (trackedness, path relativization) happens only in
|
|
165
|
+
/** Pure syntactic extraction; repo-aware resolution (trackedness, path relativization) happens only in
|
|
166
|
+
* detectChurnStale. */
|
|
153
167
|
export function extractChurnRefs(content) {
|
|
154
168
|
const paths = new Set();
|
|
155
169
|
for (const m of content.matchAll(CHURN_PATH_RE)) {
|
|
@@ -222,8 +236,10 @@ function collectChurnCandidates(entries, opts) {
|
|
|
222
236
|
const skippedPinned = [];
|
|
223
237
|
const candidates = [];
|
|
224
238
|
for (const entry of entries) {
|
|
225
|
-
if (!entry.origin_project ||
|
|
239
|
+
if (!entry.origin_project ||
|
|
240
|
+
(entry.origin_project !== opts.projectName && entry.origin_project !== opts.legacyName)) {
|
|
226
241
|
continue;
|
|
242
|
+
}
|
|
227
243
|
if (entry.superseded_by)
|
|
228
244
|
continue;
|
|
229
245
|
if (entry.kind === 'raw' || entry.kind === 'archived')
|
|
@@ -288,7 +304,16 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
|
288
304
|
? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
|
|
289
305
|
: new Set();
|
|
290
306
|
const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
|
|
291
|
-
return {
|
|
307
|
+
return {
|
|
308
|
+
repoRoot,
|
|
309
|
+
projectName,
|
|
310
|
+
windowLog,
|
|
311
|
+
trackedIndex,
|
|
312
|
+
headIndex,
|
|
313
|
+
presentAtHeadSymbols,
|
|
314
|
+
headScripts,
|
|
315
|
+
...churnCommitLookups(repoRoot),
|
|
316
|
+
};
|
|
292
317
|
}
|
|
293
318
|
function pathEvidence(git, paths, anchorTime) {
|
|
294
319
|
for (const rawPath of paths) {
|
|
@@ -331,7 +356,8 @@ function scriptEvidence(git, scripts, anchor, headScripts) {
|
|
|
331
356
|
: undefined;
|
|
332
357
|
return hit ? `script-gone: ${hit}` : null;
|
|
333
358
|
}
|
|
334
|
-
/** The first churn evidence against one candidate: a changed or deleted file, then a gone symbol, then a gone
|
|
359
|
+
/** The first churn evidence against one candidate: a changed or deleted file, then a gone symbol, then a gone
|
|
360
|
+
* script. */
|
|
335
361
|
function churnEvidence(git, refs, anchor) {
|
|
336
362
|
let evidence = pathEvidence(git, refs.paths, new Date(anchor).getTime());
|
|
337
363
|
if (!evidence && refs.symbols.length > 0)
|
|
@@ -341,13 +367,13 @@ function churnEvidence(git, refs, anchor) {
|
|
|
341
367
|
}
|
|
342
368
|
return evidence;
|
|
343
369
|
}
|
|
344
|
-
function tagChurnStale(
|
|
370
|
+
function tagChurnStale(learning, tenantId, toTag, confirmedAt) {
|
|
345
371
|
// The git calls above can take seconds; a good outcome landing meanwhile moves the anchor past the evidence.
|
|
346
|
-
const confirmedNow = confirmedOutcomeTimes(
|
|
372
|
+
const confirmedNow = learning.confirmedOutcomeTimes(tenantId);
|
|
347
373
|
const unconfirmed = toTag.filter((stale) => confirmedNow.get(stale.id) === confirmedAt.get(stale.id));
|
|
348
374
|
if (unconfirmed.length === 0)
|
|
349
375
|
return;
|
|
350
|
-
addTagToEntries(
|
|
376
|
+
learning.addTagToEntries(tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
|
|
351
377
|
}
|
|
352
378
|
/** Counts every candidate's evidence into `result` and returns the rows still to tag, writing nothing. */
|
|
353
379
|
function recordChurnEvidence(git, candidates, anchorOf, result) {
|
|
@@ -372,19 +398,26 @@ function recordChurnEvidence(git, candidates, anchorOf, result) {
|
|
|
372
398
|
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
373
399
|
* confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
|
|
374
400
|
export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
401
|
+
return detectChurnIn(localFilesAt(hippoRoot).learning, repoRoot, opts);
|
|
402
|
+
}
|
|
403
|
+
/** detectChurnStale on the memories `learning` holds. */
|
|
404
|
+
function detectChurnIn(learning, repoRoot, opts) {
|
|
375
405
|
const dryRun = opts.dryRun === true;
|
|
376
406
|
if (!opts.projectName)
|
|
377
407
|
return emptyChurnResult(dryRun);
|
|
378
|
-
const
|
|
408
|
+
const origins = [opts.projectName, opts.legacyName].filter((name) => !!name);
|
|
409
|
+
const entries = learning.currentEntriesFromOrigins(opts.tenantId, origins);
|
|
379
410
|
const { candidates, skippedPinned } = collectChurnCandidates(entries, opts);
|
|
380
411
|
if (candidates.length === 0)
|
|
381
412
|
return emptyChurnResult(dryRun, skippedPinned);
|
|
382
|
-
const confirmedAt = confirmedOutcomeTimes(
|
|
413
|
+
const confirmedAt = learning.confirmedOutcomeTimes(opts.tenantId);
|
|
383
414
|
// Compared as epoch ms, not strings: imported rows may carry offsets or other ISO forms.
|
|
384
415
|
const anchorOf = (entry) => {
|
|
385
416
|
const confirmed = confirmedAt.get(entry.id);
|
|
386
417
|
const confirmedMs = confirmed ? Date.parse(confirmed) : NaN;
|
|
387
|
-
return confirmedMs > Date.parse(entry.created)
|
|
418
|
+
return confirmedMs > Date.parse(entry.created)
|
|
419
|
+
? new Date(confirmedMs).toISOString()
|
|
420
|
+
: new Date(entry.created).toISOString();
|
|
388
421
|
};
|
|
389
422
|
const needs = {
|
|
390
423
|
paths: candidates.some((c) => c.refs.paths.length > 0),
|
|
@@ -397,10 +430,11 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
|
397
430
|
const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
|
|
398
431
|
try {
|
|
399
432
|
const git = loadChurnGitView(repoRoot, opts.legacyName ?? opts.projectName, candidates, anchorOf, needs);
|
|
400
|
-
// Collected here and written only after every candidate's evidence is computed, so a GitReadError mid-loop cannot
|
|
433
|
+
// Collected here and written only after every candidate's evidence is computed, so a GitReadError mid-loop cannot
|
|
434
|
+
// leave an earlier candidate tagged.
|
|
401
435
|
const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
|
|
402
436
|
if (!dryRun && toTag.length > 0)
|
|
403
|
-
tagChurnStale(
|
|
437
|
+
tagChurnStale(learning, opts.tenantId, toTag, confirmedAt);
|
|
404
438
|
}
|
|
405
439
|
catch (err) {
|
|
406
440
|
if (err instanceof GitReadError)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ToolCall } from './protocol.js';
|
|
2
|
-
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
3
|
-
export declare function runStatusTool({ ctx, hippoRoot, config, tenantId }: ToolCall): string
|
|
4
|
-
export declare function runConflictsTool(call: ToolCall): string
|
|
5
|
-
export declare function runResolveTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string
|
|
6
|
-
export declare function runShareTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
2
|
+
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'predictions'>): Promise<string>;
|
|
3
|
+
export declare function runStatusTool({ ctx, hippoRoot, config, tenantId, store }: ToolCall<'reports'>): Promise<string>;
|
|
4
|
+
export declare function runConflictsTool(call: ToolCall<'conflicts'>): Promise<string>;
|
|
5
|
+
export declare function runResolveTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'conflicts'>): Promise<string>;
|
|
6
|
+
export declare function runShareTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall): Promise<string>;
|
|
7
7
|
export declare function runPeersTool({ tenantId }: ToolCall): string;
|
|
8
8
|
//# sourceMappingURL=admin-tools.d.ts.map
|
package/dist/mcp/admin-tools.js
CHANGED
|
@@ -2,30 +2,32 @@
|
|
|
2
2
|
import { evalNow } from '../core/ablation.js';
|
|
3
3
|
import { shareMemory, listPeers } from '../sharing/share.js';
|
|
4
4
|
import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
5
|
-
import { predictionBaserate } from '../api/predictions.js';
|
|
6
|
-
import { listOpenConflicts, resolveMemoryConflict } from '../api/conflicts.js';
|
|
7
|
-
import { getMemoryStatus, getTouchableMemory } from '../api/memories.js';
|
|
5
|
+
import { predictionBaserate } from '../api/objects/predictions.js';
|
|
6
|
+
import { listOpenConflicts, resolveMemoryConflict } from '../api/memories/conflicts.js';
|
|
7
|
+
import { getMemoryStatus, getTouchableMemory } from '../api/memories/memories.js';
|
|
8
8
|
import { mcpActor } from './protocol.js';
|
|
9
9
|
import { isJsonString } from '../util/json.js';
|
|
10
10
|
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
11
11
|
const BASERATE_DECIMALS = 3;
|
|
12
12
|
const NOT_RESOLVED = 'Could not resolve. Check the conflict ID and --keep value.';
|
|
13
|
-
export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
13
|
+
export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
14
14
|
// Text-only reply, matching the other MCP tools; the group's read writes the audit row, so no surface can skip it.
|
|
15
15
|
const classTag = String(args.class_tag || '').trim();
|
|
16
|
-
if (!classTag)
|
|
16
|
+
if (!classTag) {
|
|
17
17
|
return 'No class_tag provided. Usage: pass class_tag matching a class used in past predictions (e.g. "migration-effort").';
|
|
18
|
-
|
|
18
|
+
}
|
|
19
|
+
const baserate = await predictionBaserate({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, classTag);
|
|
19
20
|
if (baserate.nClosed === 0) {
|
|
20
|
-
return `No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) ` +
|
|
21
|
+
return (`No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) ` +
|
|
21
22
|
`and close it with hippo_predict_close once the actual outcome is known. ` +
|
|
22
|
-
`Base rates need closed predictions with numeric actual_value to compute
|
|
23
|
+
`Base rates need closed predictions with numeric actual_value to compute.`);
|
|
23
24
|
}
|
|
24
25
|
const lines = [baserate.summary, ''];
|
|
25
26
|
lines.push(`n_closed: ${baserate.nClosed}`);
|
|
26
27
|
lines.push(`n_ratio_eligible: ${baserate.nRatioEligible}`);
|
|
27
|
-
if (baserate.meanEstimate !== null)
|
|
28
|
+
if (baserate.meanEstimate !== null) {
|
|
28
29
|
lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
|
|
30
|
+
}
|
|
29
31
|
if (baserate.meanActual !== null)
|
|
30
32
|
lines.push(`mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
|
|
31
33
|
if (baserate.meanRatio !== null)
|
|
@@ -36,9 +38,9 @@ export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId })
|
|
|
36
38
|
lines.push(`mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
|
|
37
39
|
return lines.join('\n');
|
|
38
40
|
}
|
|
39
|
-
export function runStatusTool({ ctx, hippoRoot, config, tenantId }) {
|
|
41
|
+
export async function runStatusTool({ ctx, hippoRoot, config, tenantId, store }) {
|
|
40
42
|
// honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
41
|
-
const tallies = getMemoryStatus({ hippoRoot, tenantId, actor: mcpActor(ctx), store
|
|
43
|
+
const tallies = await getMemoryStatus({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, evalNow(), 0.1);
|
|
42
44
|
const avgStrength = tallies.total > 0 ? (tallies.strengthSum / tallies.total).toFixed(2) : '0';
|
|
43
45
|
return [
|
|
44
46
|
`Memories: ${tallies.total} (${tallies.pinned} pinned, ${tallies.errors} errors)`,
|
|
@@ -48,14 +50,14 @@ export function runStatusTool({ ctx, hippoRoot, config, tenantId }) {
|
|
|
48
50
|
`Half-life default: ${config.defaultHalfLifeDays}d`,
|
|
49
51
|
].join('\n');
|
|
50
52
|
}
|
|
51
|
-
export function runConflictsTool(call) {
|
|
52
|
-
const { ctx, hippoRoot, tenantId } = call;
|
|
53
|
-
const conflicts = listOpenConflicts({ hippoRoot, tenantId, actor: mcpActor(ctx), store
|
|
53
|
+
export async function runConflictsTool(call) {
|
|
54
|
+
const { ctx, hippoRoot, tenantId, store } = call;
|
|
55
|
+
const conflicts = await listOpenConflicts({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, ctx?.project);
|
|
54
56
|
if (conflicts.length === 0)
|
|
55
57
|
return 'No open conflicts.';
|
|
56
58
|
return conflicts.map((c) => `conflict_${c.id}: ${c.memory_a_id} <-> ${c.memory_b_id} (score=${c.score.toFixed(2)}) — ${c.reason}`).join('\n');
|
|
57
59
|
}
|
|
58
|
-
export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
|
|
60
|
+
export async function runResolveTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
59
61
|
const conflictId = Number(args.conflict_id);
|
|
60
62
|
const keepId = String(args.keep || '');
|
|
61
63
|
const forget = Boolean(args.forget);
|
|
@@ -65,11 +67,12 @@ export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
65
67
|
return 'Required: conflict_id and keep.';
|
|
66
68
|
let loserId;
|
|
67
69
|
try {
|
|
68
|
-
const apiCtx = { hippoRoot, tenantId, actor: mcpActor(ctx), store
|
|
69
|
-
({ loserId } = resolveMemoryConflict(apiCtx, conflictId, { keepId, forget, rejectLoser, reason }));
|
|
70
|
+
const apiCtx = { hippoRoot, tenantId, actor: mcpActor(ctx), store };
|
|
71
|
+
({ loserId } = await resolveMemoryConflict(apiCtx, conflictId, { keepId, forget, rejectLoser, reason }));
|
|
70
72
|
}
|
|
71
73
|
catch (err) {
|
|
72
|
-
// A missing, unreachable or settled conflict answers alike, so
|
|
74
|
+
// A missing, unreachable or settled conflict answers alike, so
|
|
75
|
+
// the reply says nothing of a pair the caller cannot touch.
|
|
73
76
|
if (err instanceof NotFoundError || err instanceof ConflictError)
|
|
74
77
|
return NOT_RESOLVED;
|
|
75
78
|
throw err;
|
|
@@ -77,16 +80,16 @@ export function runResolveTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
77
80
|
const action = rejectLoser ? 'rejected (tombstoned) and removed' : forget ? 'deleted' : 'weakened';
|
|
78
81
|
return `Resolved conflict ${conflictId}: kept ${keepId}, ${action} ${loserId}`;
|
|
79
82
|
}
|
|
80
|
-
export async function runShareTool({ args, ctx, hippoRoot, tenantId }) {
|
|
83
|
+
export async function runShareTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
81
84
|
const shareId = String(args.id || '');
|
|
82
85
|
if (!shareId)
|
|
83
86
|
return 'Required: id (memory ID to share).';
|
|
84
87
|
const force = Boolean(args.force);
|
|
85
88
|
const actor = mcpActor(ctx);
|
|
86
89
|
// Checked before shareMemory, whose personal-row refusal would tell another person the id exists.
|
|
87
|
-
await getTouchableMemory({ hippoRoot, tenantId, actor, store
|
|
88
|
-
// Pass tenantId so shareMemory's readEntry filters by tenant; otherwise a Bearer for tenant A could share tenant B's
|
|
89
|
-
// The 'Memory not found' error matches the cross-tenant deny shape elsewhere.
|
|
90
|
+
await getTouchableMemory({ hippoRoot, tenantId, actor, store }, shareId);
|
|
91
|
+
// Pass tenantId so shareMemory's readEntry filters by tenant; otherwise a Bearer for tenant A could share tenant B's
|
|
92
|
+
// id to the global store. The 'Memory not found' error matches the cross-tenant deny shape elsewhere.
|
|
90
93
|
const shared = shareMemory(hippoRoot, shareId, { force, tenantId });
|
|
91
94
|
if (!shared)
|
|
92
95
|
return 'Transfer score too low. Use force=true to override.';
|
|
@@ -97,6 +100,8 @@ export function runPeersTool({ tenantId }) {
|
|
|
97
100
|
const peers = listPeers(undefined, tenantId);
|
|
98
101
|
if (peers.length === 0)
|
|
99
102
|
return 'No peers found.';
|
|
100
|
-
return peers
|
|
103
|
+
return peers
|
|
104
|
+
.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`)
|
|
105
|
+
.join('\n');
|
|
101
106
|
}
|
|
102
107
|
//# sourceMappingURL=admin-tools.js.map
|
package/dist/mcp/format.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { SearchResult } from '../core/search-types.js';
|
|
|
2
2
|
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
3
3
|
import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api/index.js';
|
|
4
4
|
import { type SessionHandoff } from '../core/handoff.js';
|
|
5
|
-
import { detectAnchoring } from '../api/recall
|
|
5
|
+
import { detectAnchoring } from '../api/recall/finish.js';
|
|
6
6
|
import { detectAvailabilityBias } from '../api/availability.js';
|
|
7
7
|
export declare function formatContinuityBlock(block: ContinuityBlock): string;
|
|
8
8
|
export declare function formatMemories(results: ReadonlyArray<Pick<SearchResult, 'entry'>>): string;
|
package/dist/mcp/format.js
CHANGED
|
@@ -126,11 +126,13 @@ export function tailSection(rows) {
|
|
|
126
126
|
export function planningSection(r) {
|
|
127
127
|
if (r.planningFallacyHint) {
|
|
128
128
|
const h = r.planningFallacyHint;
|
|
129
|
-
return `## Planning fallacy hint\nClass: ${h.classTag}\n${h.baserateSummary}\n(detected:
|
|
129
|
+
return `## Planning fallacy hint\nClass: ${h.classTag}\n${h.baserateSummary}\n(detected: ` +
|
|
130
|
+
`${JSON.stringify(h.detectedPhrase)})\n\n---\n\n`;
|
|
130
131
|
}
|
|
131
132
|
if (r.planningFallacyWatching) {
|
|
132
133
|
const w = r.planningFallacyWatching;
|
|
133
|
-
return `## Planning fallacy watch\nReason: ${w.reason}\n${w.suggestion}\n(detected:
|
|
134
|
+
return `## Planning fallacy watch\nReason: ${w.reason}\n${w.suggestion}\n(detected: ` +
|
|
135
|
+
`${JSON.stringify(w.detectedPhrase)})\n\n---\n\n`;
|
|
134
136
|
}
|
|
135
137
|
return '';
|
|
136
138
|
}
|
package/dist/mcp/framing.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* What of a refused frame has not arrived yet: a byte count when its header declared one, else the rest of its line.
|
|
3
|
+
*/
|
|
2
4
|
export type FrameRemainder = number | 'line';
|
|
3
5
|
export type FrameResult = {
|
|
4
6
|
kind: 'message';
|
package/dist/mcp/framing.js
CHANGED
|
@@ -4,14 +4,21 @@
|
|
|
4
4
|
import { MAX_BODY_BYTES } from '../util/http-util.js';
|
|
5
5
|
const HEADER_DELIM = Buffer.from('\r\n\r\n');
|
|
6
6
|
const EMPTY = Buffer.alloc(0);
|
|
7
|
-
|
|
8
|
-
// Strip leading whitespace/newlines between messages.
|
|
7
|
+
function skipWhitespace(buffer) {
|
|
9
8
|
let start = 0;
|
|
10
9
|
while (start < buffer.length &&
|
|
11
|
-
(buffer[start] === 0x0a || buffer[start] === 0x0d ||
|
|
12
|
-
buffer[start] === 0x20 || buffer[start] === 0x09)) {
|
|
10
|
+
(buffer[start] === 0x0a || buffer[start] === 0x0d || buffer[start] === 0x20 || buffer[start] === 0x09)) {
|
|
13
11
|
start++;
|
|
14
12
|
}
|
|
13
|
+
return start;
|
|
14
|
+
}
|
|
15
|
+
function incompleteOrOversize(trimmed) {
|
|
16
|
+
return trimmed.length > MAX_BODY_BYTES
|
|
17
|
+
? { kind: 'oversize', rest: EMPTY, remainder: 'line' }
|
|
18
|
+
: { kind: 'incomplete' };
|
|
19
|
+
}
|
|
20
|
+
export function parseFrame(buffer) {
|
|
21
|
+
const start = skipWhitespace(buffer);
|
|
15
22
|
if (start === buffer.length)
|
|
16
23
|
return { kind: 'incomplete' };
|
|
17
24
|
const trimmed = buffer.subarray(start);
|
|
@@ -19,7 +26,7 @@ export function parseFrame(buffer) {
|
|
|
19
26
|
if (trimmed[0] === 0x43 /* 'C' */ || trimmed[0] === 0x63 /* 'c' */) {
|
|
20
27
|
const headerEnd = trimmed.indexOf(HEADER_DELIM);
|
|
21
28
|
if (headerEnd === -1)
|
|
22
|
-
return trimmed
|
|
29
|
+
return incompleteOrOversize(trimmed);
|
|
23
30
|
const header = trimmed.subarray(0, headerEnd).toString('utf-8');
|
|
24
31
|
const match = header.match(/Content-Length:\s*(\d+)/i);
|
|
25
32
|
if (!match)
|
|
@@ -28,17 +35,22 @@ export function parseFrame(buffer) {
|
|
|
28
35
|
const bodyStart = headerEnd + 4;
|
|
29
36
|
if (contentLength > MAX_BODY_BYTES) {
|
|
30
37
|
const end = bodyStart + contentLength;
|
|
31
|
-
return {
|
|
38
|
+
return {
|
|
39
|
+
kind: 'oversize',
|
|
40
|
+
rest: Buffer.from(trimmed.subarray(Math.min(end, trimmed.length))),
|
|
41
|
+
remainder: Math.max(0, end - trimmed.length),
|
|
42
|
+
};
|
|
32
43
|
}
|
|
33
|
-
if (trimmed.length < bodyStart + contentLength)
|
|
44
|
+
if (trimmed.length < bodyStart + contentLength) {
|
|
34
45
|
return { kind: 'incomplete', needs: start + bodyStart + contentLength };
|
|
46
|
+
}
|
|
35
47
|
const body = trimmed.subarray(bodyStart, bodyStart + contentLength).toString('utf-8');
|
|
36
48
|
return { kind: 'message', body, rest: Buffer.from(trimmed.subarray(bodyStart + contentLength)) };
|
|
37
49
|
}
|
|
38
50
|
// Newline-delimited JSON (MCP spec).
|
|
39
51
|
const newlineIdx = trimmed.indexOf(0x0a);
|
|
40
52
|
if (newlineIdx === -1)
|
|
41
|
-
return trimmed
|
|
53
|
+
return incompleteOrOversize(trimmed);
|
|
42
54
|
const rest = Buffer.from(trimmed.subarray(newlineIdx + 1));
|
|
43
55
|
if (newlineIdx > MAX_BODY_BYTES)
|
|
44
56
|
return { kind: 'oversize', rest, remainder: 0 };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ToolCall } from './protocol.js';
|
|
2
|
-
export declare function runRememberTool({ args, ctx, hippoRoot, config, tenantId }: ToolCall): Promise<string>;
|
|
3
|
-
export declare function runOutcomeTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
4
|
-
export declare function runLearnTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string
|
|
2
|
+
export declare function runRememberTool({ args, ctx, hippoRoot, config, tenantId, store }: ToolCall<'entryWrites'>): Promise<string>;
|
|
3
|
+
export declare function runOutcomeTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'entryWrites'>): Promise<string>;
|
|
4
|
+
export declare function runLearnTool({ args, ctx, hippoRoot, tenantId, store }: ToolCall<'lessonWrites'>): Promise<string>;
|
|
5
5
|
//# sourceMappingURL=memory-tools.d.ts.map
|
package/dist/mcp/memory-tools.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Write-side tool handlers: hippo_remember, hippo_outcome and hippo_learn.
|
|
2
|
-
import {
|
|
3
|
-
import { startAutoSleepIfDue } from '../api/auto-sleep.js';
|
|
4
|
-
import { remember as apiRemember, outcome as apiOutcome, learn as apiLearn, MCP_LEARN } from '../api/index.js';
|
|
2
|
+
import { hasGroup } from '../store/index.js';
|
|
3
|
+
import { startAutoSleepIfDue } from '../api/sleep/auto-sleep.js';
|
|
4
|
+
import { remember as apiRemember, outcome as apiOutcome, learn as apiLearn, MCP_LEARN, } from '../api/index.js';
|
|
5
5
|
import { mcpActor } from './protocol.js';
|
|
6
6
|
import { lastRecalledIds, resolveClientKey } from './session-state.js';
|
|
7
|
-
export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }) {
|
|
7
|
+
export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId, store }) {
|
|
8
8
|
const text = String(args.text || '');
|
|
9
9
|
if (!text)
|
|
10
10
|
return 'No text provided.';
|
|
@@ -13,13 +13,13 @@ export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }
|
|
|
13
13
|
tags.push('error');
|
|
14
14
|
if (args.tag)
|
|
15
15
|
tags.push(String(args.tag));
|
|
16
|
-
// Route through api/index.ts so audit_log captures the caller identity like CLI/REST: the auth-resolved ctx.actor
|
|
17
|
-
//
|
|
16
|
+
// Route through api/index.ts so audit_log captures the caller identity like CLI/REST: the auth-resolved ctx.actor
|
|
17
|
+
// under HTTP-MCP, 'mcp' for stdio.
|
|
18
18
|
const apiCtx = {
|
|
19
19
|
hippoRoot,
|
|
20
20
|
tenantId,
|
|
21
21
|
actor: mcpActor(ctx),
|
|
22
|
-
store
|
|
22
|
+
store,
|
|
23
23
|
};
|
|
24
24
|
const result = await apiRemember(apiCtx, {
|
|
25
25
|
content: text,
|
|
@@ -27,36 +27,37 @@ export async function runRememberTool({ args, ctx, hippoRoot, config, tenantId }
|
|
|
27
27
|
personal: args.personal === true,
|
|
28
28
|
project: ctx?.project,
|
|
29
29
|
});
|
|
30
|
-
const [entry] = await storeFor(apiCtx).entriesByIds([result.id], tenantId);
|
|
31
30
|
// Auto-sleep runs on hippo.db, so another store skips it.
|
|
32
|
-
const allowed = (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const allowed = hasGroup(store, 'localFiles') && ctx.autoSleep !== false;
|
|
32
|
+
const run = ctx.autoSleepRunner;
|
|
33
|
+
if (run !== undefined)
|
|
34
|
+
startAutoSleepIfDue(hippoRoot, tenantId, config.autoSleep, allowed, run);
|
|
35
|
+
const tagStr = result.tags.join(', ') || 'none';
|
|
36
36
|
const warnings = (result.warnings ?? []).map((w) => `\nWarning: ${w}`).join('');
|
|
37
|
-
return `Remembered [${result.id}] (half-life: ${
|
|
37
|
+
return `Remembered [${result.id}] (half-life: ${result.halfLifeDays}d, tags: ${tagStr})${warnings}`;
|
|
38
38
|
}
|
|
39
|
-
export async function runOutcomeTool({ args, ctx, hippoRoot, tenantId }) {
|
|
39
|
+
export async function runOutcomeTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
40
40
|
const good = Boolean(args.good);
|
|
41
41
|
const clientKey = resolveClientKey(ctx);
|
|
42
42
|
const ids = lastRecalledIds.get(clientKey) ?? [];
|
|
43
43
|
if (ids.length === 0)
|
|
44
44
|
return 'No recent recalls to apply outcome to.';
|
|
45
|
-
// Route through src/api/index.ts so audit_log captures the caller identity (auth-resolved ctx.actor under HTTP-MCP,
|
|
46
|
-
// uniform; outcome() also skips cross-tenant ids silently.
|
|
45
|
+
// Route through src/api/index.ts so audit_log captures the caller identity (auth-resolved ctx.actor under HTTP-MCP,
|
|
46
|
+
// 'mcp' for stdio) and tenant scoping is uniform; outcome() also skips cross-tenant ids silently.
|
|
47
47
|
const apiCtx = {
|
|
48
48
|
hippoRoot,
|
|
49
49
|
tenantId,
|
|
50
50
|
actor: mcpActor(ctx),
|
|
51
|
-
store
|
|
51
|
+
store,
|
|
52
52
|
};
|
|
53
53
|
const { applied } = await apiOutcome(apiCtx, ids, good);
|
|
54
54
|
return `Applied ${good ? 'positive' : 'negative'} outcome to ${applied} memories`;
|
|
55
55
|
}
|
|
56
|
-
export function runLearnTool({ args, ctx, hippoRoot, tenantId }) {
|
|
56
|
+
export async function runLearnTool({ args, ctx, hippoRoot, tenantId, store }) {
|
|
57
57
|
const days = Number(args.days) || 7;
|
|
58
|
-
// process.cwd() is the server's repo, not a remote caller's, so api learn refuses all but stdio and a host admin
|
|
59
|
-
|
|
58
|
+
// process.cwd() is the server's repo, not a remote caller's, so api learn refuses all but stdio and a host admin
|
|
59
|
+
// (mcpActor fails closed).
|
|
60
|
+
const result = await apiLearn({ hippoRoot, tenantId, actor: mcpActor(ctx), store }, { repoPath: process.cwd(), days, profile: MCP_LEARN });
|
|
60
61
|
if (result.status === 'not-a-repo')
|
|
61
62
|
return 'No git history found.';
|
|
62
63
|
if (result.status === 'no-commits')
|
package/dist/mcp/protocol.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ import type { Actor as ApiActor } from '../api/index.js';
|
|
|
3
3
|
import { type ResolveProjectIdentityOpts } from '../core/project-identity.js';
|
|
4
4
|
import { type JsonValue } from '../util/json.js';
|
|
5
5
|
import type { CallerProject } from '../api/prompt-hook.js';
|
|
6
|
-
import type { HippoStore } from '../store/index.js';
|
|
7
|
-
import type {
|
|
6
|
+
import type { HippoStore, StoreGroup, StoreWith } from '../store/index.js';
|
|
7
|
+
import type { StoreReach } from '../store/port.js';
|
|
8
|
+
import type { AutoSleepRunner } from '../api/sleep/auto-sleep.js';
|
|
8
9
|
/** Same bounded walk as the CLI (ends at home, so HIPPO_HOME wins over ~/.hippo); cwd/opts are the test seam. */
|
|
9
10
|
export declare function findHippoRoot(cwd?: string, opts?: ResolveProjectIdentityOpts): string | null;
|
|
10
11
|
interface McpRequest {
|
|
@@ -25,16 +26,18 @@ interface McpResponse {
|
|
|
25
26
|
};
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
|
-
/** JSON-RPC reply for a request that threw: typed API errors keep
|
|
29
|
+
/** JSON-RPC reply for a request that threw: typed API errors keep
|
|
30
|
+
* their text; anything else is logged and answered generically. */
|
|
29
31
|
export declare function mcpErrorResponse<E>(id: McpResponse['id'], err: E, requestId?: string, call?: string): McpResponse;
|
|
30
32
|
export type { McpRequest, McpResponse };
|
|
31
|
-
/** Optional context from a non-stdio transport (the HTTP server's bound hippoRoot and auth-resolved tenantId/actor), so
|
|
32
|
-
* findHippoRoot() walk and the env-based
|
|
33
|
+
/** Optional context from a non-stdio transport (the HTTP server's bound hippoRoot and auth-resolved tenantId/actor), so
|
|
34
|
+
* executeTool skips the findHippoRoot() walk and the env-based tenant fallback, which would pick the wrong store. */
|
|
33
35
|
export interface McpContext {
|
|
34
36
|
hippoRoot: string;
|
|
35
37
|
tenantId: string;
|
|
36
38
|
actor: string;
|
|
37
|
-
/** The caller's authenticated role. Required so no transport can forget it; only stdio, which passes no context,
|
|
39
|
+
/** The caller's authenticated role. Required so no transport can forget it; only stdio, which passes no context,
|
|
40
|
+
* is admin without one. */
|
|
38
41
|
role: 'admin' | 'member';
|
|
39
42
|
/** Scope grants for the HTTP-MCP caller's key. Absent for stdio (admin, needs none). */
|
|
40
43
|
scopes?: readonly string[];
|
|
@@ -43,26 +46,39 @@ export interface McpContext {
|
|
|
43
46
|
hostAdmin?: true;
|
|
44
47
|
owner?: string;
|
|
45
48
|
project?: CallerProject;
|
|
46
|
-
store
|
|
49
|
+
/** The store this transport's calls run on. */
|
|
50
|
+
store: HippoStore;
|
|
51
|
+
/** Set by the stdio host: the operator's own process, so no shared-store gate applies. */
|
|
52
|
+
stdio?: true;
|
|
53
|
+
reach?: StoreReach;
|
|
47
54
|
autoSleep?: false;
|
|
48
|
-
/**
|
|
55
|
+
/** How an auto-sleep runs: the HTTP transport runs it off the server's event loop, stdio in its own process.
|
|
56
|
+
* Without one, no auto-sleep starts. */
|
|
49
57
|
autoSleepRunner?: AutoSleepRunner;
|
|
50
|
-
/** Per-client key for state isolation under HTTP-MCP: 'stdio-${pid}' for stdio, hash(bearer + remoteAddr) for HTTP
|
|
51
|
-
* defaults to `${tenantId}:default`. */
|
|
58
|
+
/** Per-client key for state isolation under HTTP-MCP: 'stdio-${pid}' for stdio, hash(bearer + remoteAddr) for HTTP
|
|
59
|
+
* (built in src/server/mcp-http.ts); defaults to `${tenantId}:default`. */
|
|
52
60
|
clientKey?: string;
|
|
53
61
|
}
|
|
54
|
-
/** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context
|
|
55
|
-
* untyped caller that sends none runs as a member, so a missing role fails closed. */
|
|
62
|
+
/** The api-layer actor for a tool call. Only stdio passes no context: it is the local operator, host admin. Any context
|
|
63
|
+
* runs as its own role, and an untyped caller that sends none runs as a member, so a missing role fails closed. */
|
|
56
64
|
export declare function mcpActor(ctx: McpContext | undefined): ApiActor;
|
|
57
65
|
/** Stdio or a host admin: the only callers whose server cwd and git history are their own to read. */
|
|
58
66
|
export declare function ownsServerCwd(ctx: McpContext | undefined): boolean;
|
|
59
|
-
/**
|
|
60
|
-
|
|
67
|
+
/** What the stdio transport takes from its composition root: the context for a folder, and the scope each frame runs
|
|
68
|
+
* in. The root names the store adapter and the scope plumbing, so src/mcp names neither. */
|
|
69
|
+
export interface McpHost {
|
|
70
|
+
contextFor(hippoRoot: string, tenantId: string): McpContext;
|
|
71
|
+
runRequest<T>(run: () => Promise<T>): Promise<T>;
|
|
72
|
+
}
|
|
73
|
+
/** One tool call after the store, config and tenant are resolved; every handler reads the same five. `G` is the group
|
|
74
|
+
* the dispatch gate proved on the store. */
|
|
75
|
+
export interface ToolCall<G extends StoreGroup = 'base'> {
|
|
61
76
|
args: Record<string, JsonValue>;
|
|
62
|
-
ctx
|
|
77
|
+
ctx: McpContext;
|
|
63
78
|
hippoRoot: string;
|
|
79
|
+
store: StoreWith<G>;
|
|
64
80
|
config: ReturnType<typeof loadConfig>;
|
|
65
81
|
tenantId: string;
|
|
66
82
|
}
|
|
67
|
-
export type ToolHandler = (call: ToolCall) => string | Promise<string>;
|
|
83
|
+
export type ToolHandler<G extends StoreGroup = 'base'> = (call: ToolCall<G>) => string | Promise<string>;
|
|
68
84
|
//# sourceMappingURL=protocol.d.ts.map
|