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
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { type AppendAuditOpts, type AuditOp } from '../../store/audit.js';
|
|
2
|
+
import type { HippoStore, RecallWrites } from '../../store/index.js';
|
|
3
|
+
import type { TokenSurface } from '../../store/token-ledger.js';
|
|
4
|
+
import type { AvailabilityHint } from '../availability.js';
|
|
5
|
+
import type { Context, StoreContext } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Anchoring detector (recall-recurrence), pure module: `query_repeat` (a queryHash re-asked within the window returns
|
|
8
|
+
* the same topMemoryId) and
|
|
9
|
+
* `memory_dominance` (the same topMemoryId across >= minDominance distinct queryHashes). Each pipeline keeps its OWN
|
|
10
|
+
* ring Map keyed by (tenant, session),
|
|
11
|
+
* because its top-1 ranking differs. AnchoringHint and PlanningFallacyHint are independent signals. */
|
|
12
|
+
export type AnchoringReason = 'query_repeat' | 'memory_dominance';
|
|
13
|
+
export interface AnchoringHint {
|
|
14
|
+
reason: AnchoringReason;
|
|
15
|
+
/** The memory ID that is anchoring the agent's reasoning. */
|
|
16
|
+
memoryId: string;
|
|
17
|
+
/** For 'memory_dominance': how many distinct queries in the recent window
|
|
18
|
+
* had this memory as their top-1 result. Always >= 3 when emitted. */
|
|
19
|
+
queryCount?: number;
|
|
20
|
+
/** Human-readable summary surfaced to the agent. */
|
|
21
|
+
summary: string;
|
|
22
|
+
/** Discriminator for hint origin; reserved for future variants. */
|
|
23
|
+
source: 'j1-recurrence';
|
|
24
|
+
}
|
|
25
|
+
export interface RecallHistoryEntry {
|
|
26
|
+
/** Hash of the queryText that produced this entry (see hashQueryText). */
|
|
27
|
+
queryHash: number;
|
|
28
|
+
/** Top-1 memory id this recall surfaced; null if zero results. */
|
|
29
|
+
topMemoryId: string | null;
|
|
30
|
+
/** ISO-8601 timestamp; advisory, not used by the detection rules. */
|
|
31
|
+
ts: string;
|
|
32
|
+
/**
|
|
33
|
+
* Memory id of the AnchoringHint that fired on this recall, if any; the caller writes it after detectAnchoring
|
|
34
|
+
* returns, and the cooldown reads it next
|
|
35
|
+
* time. */
|
|
36
|
+
anchoredOn?: string;
|
|
37
|
+
}
|
|
38
|
+
export type RecallHistorySnapshot = readonly RecallHistoryEntry[];
|
|
39
|
+
export interface DetectAnchoringOpts {
|
|
40
|
+
/** memory_dominance threshold: number of distinct queryHashes that must have returned
|
|
41
|
+
* the same topMemoryId. Default 3. */
|
|
42
|
+
minDominance?: number;
|
|
43
|
+
/** query_repeat window: how many recent history entries to scan for query repeat.
|
|
44
|
+
* Default 5. */
|
|
45
|
+
recentRepeatWindow?: number;
|
|
46
|
+
/**
|
|
47
|
+
* Cooldown: suppress when the prior fire (per `anchoredOn`) was for the same topMemoryId within this many history
|
|
48
|
+
* entries. Default 3.
|
|
49
|
+
*/
|
|
50
|
+
cooldown?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Normalizes a query (lowercase, strip non-alphanumerics, drop short tokens, sort, dedup, join) and hashes it with
|
|
54
|
+
* 32-bit FNV-1a.
|
|
55
|
+
* Reordered words collide intentionally; deterministic across processes and V8 versions. */
|
|
56
|
+
export declare function hashQueryText(query: string): number;
|
|
57
|
+
/**
|
|
58
|
+
* Detects anchoring against the current (queryHash, topMemoryId); memory_dominance wins when both rules fire, since it
|
|
59
|
+
* spans DIFFERENT queries.
|
|
60
|
+
* Cooldown is per memory: a hint on the SAME topMemoryId within `cooldown=3` history entries is suppressed. Returns an
|
|
61
|
+
* AnchoringHint or null.
|
|
62
|
+
*/
|
|
63
|
+
export declare function detectAnchoring(history: RecallHistorySnapshot, currentQueryHash: number, currentTopMemoryId: string | null, opts?: DetectAnchoringOpts): AnchoringHint | null;
|
|
64
|
+
/**
|
|
65
|
+
* Bounded FIFO ring of RecallHistoryEntry (oldest evicted when full); a thin array wrapper so snapshotRing returns a
|
|
66
|
+
* readonly view without copying.
|
|
67
|
+
*/
|
|
68
|
+
export declare class RingBuffer {
|
|
69
|
+
private entries;
|
|
70
|
+
append(entry: RecallHistoryEntry): void;
|
|
71
|
+
snapshot(): RecallHistorySnapshot;
|
|
72
|
+
size(): number;
|
|
73
|
+
}
|
|
74
|
+
/** Builds the (tenant, session) key with a NUL delimiter: tenant and session ids are validated elsewhere to reject NUL,
|
|
75
|
+
* so concatenation cannot collide even though API-key-derived subjects can contain `:`. */
|
|
76
|
+
export declare function buildSessionKey(tenantId: string, sessionId: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* Get-or-create a RingBuffer per session key, capped at `maxSessions` (default 1000); at the cap the oldest-inserted
|
|
79
|
+
* key (first from Map.keys()) is
|
|
80
|
+
* evicted. */
|
|
81
|
+
export declare function getOrCreateRing(map: Map<string, RingBuffer>, key: string, maxSessions?: number): RingBuffer;
|
|
82
|
+
/**
|
|
83
|
+
* Appends a recall to a ring; `anchoredOn` is the memoryId of the hint that fired on THIS recall (or undefined), read
|
|
84
|
+
* by detectAnchoring for cooldown.
|
|
85
|
+
*/
|
|
86
|
+
export declare function appendRecall(ring: RingBuffer, queryHash: number, topMemoryId: string | null, anchoredOn?: string): void;
|
|
87
|
+
/** Snapshot a ring as a readonly RecallHistorySnapshot. */
|
|
88
|
+
export declare function snapshotRing(ring: RingBuffer): RecallHistorySnapshot;
|
|
89
|
+
/**
|
|
90
|
+
* Whether a recall bias hint is enabled; reads env at call time, so `HIPPO_ANCHORING=off` or `HIPPO_AVAILABILITY=off`
|
|
91
|
+
* disables only that kind.
|
|
92
|
+
*/
|
|
93
|
+
export declare function biasHintEnabled(kind: 'anchoring' | 'availability'): boolean;
|
|
94
|
+
/** The ids among `ids` that a tenant's rows in `store` hold. */
|
|
95
|
+
export declare function heldIds(store: HippoStore, ids: readonly string[], tenantId: string): Promise<Set<string>>;
|
|
96
|
+
export type RecallSurface = 'cli' | 'mcp' | 'http';
|
|
97
|
+
/** The session's ring, created on first use; null when anchoring is off or the call has no session. */
|
|
98
|
+
export declare function sessionRing(surface: RecallSurface, tenantId: string, sessionId: string | undefined): RingBuffer | null;
|
|
99
|
+
/** Records this recall's top row and hint, which the next recall's cooldown reads. */
|
|
100
|
+
export declare function noteRecall(ring: RingBuffer, query: string, topId: string | null, anchoredOn: string | undefined): void;
|
|
101
|
+
export declare function resetSessionRings(surface: RecallSurface): void;
|
|
102
|
+
/** Whom a recall audit row names. */
|
|
103
|
+
export interface RecallAuditCaller {
|
|
104
|
+
readonly tenantId: string;
|
|
105
|
+
readonly actor: string;
|
|
106
|
+
}
|
|
107
|
+
export declare function callerOf(ctx: Context): RecallAuditCaller;
|
|
108
|
+
/** The strengthen every ranker of `retrieve` hands to the recall's write: the shown ids, in the caller's tenant. */
|
|
109
|
+
export declare function strengthenOf(ctx: Context, ids: readonly string[]): NonNullable<RecallWrites['strengthen']>;
|
|
110
|
+
type RecallAuditMetadata = Readonly<Record<string, string | number | null>>;
|
|
111
|
+
export declare function recallAuditRow(who: RecallAuditCaller, op: AuditOp, targetId?: string, metadata?: RecallAuditMetadata): AppendAuditOpts;
|
|
112
|
+
export declare function recallAuditMetadata(query: string, results: number): {
|
|
113
|
+
results: number;
|
|
114
|
+
query_hash: string;
|
|
115
|
+
query_length: number;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* No session means no ring; the row hashes with SHA-256/16, since hashQueryText is FNV-1a and easy to reverse on short
|
|
119
|
+
* queries.
|
|
120
|
+
*/
|
|
121
|
+
export declare function anchorSkippedRows(who: RecallAuditCaller, query: string): AppendAuditOpts[];
|
|
122
|
+
export declare function anchoringRows(who: RecallAuditCaller, hint: AnchoringHint | null): AppendAuditOpts[];
|
|
123
|
+
export declare function availabilityRows(who: RecallAuditCaller, hint: AvailabilityHint | null): AppendAuditOpts[];
|
|
124
|
+
export interface ShownRecall {
|
|
125
|
+
readonly query: string;
|
|
126
|
+
readonly ring: RingBuffer | null;
|
|
127
|
+
readonly topId: string | null;
|
|
128
|
+
readonly anchoring: AnchoringHint | null;
|
|
129
|
+
readonly availability: AvailabilityHint | null;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The hint rows for a list a surface showed, so a surface on the store port can hand them to the recall's one write.
|
|
133
|
+
*/
|
|
134
|
+
export declare function shownRecallRows(who: RecallAuditCaller, shown: ShownRecall): AppendAuditOpts[];
|
|
135
|
+
/** How one surface's recall is recorded. The surfaces differ in
|
|
136
|
+
* these three values and in the list they hand over, nowhere else. */
|
|
137
|
+
export interface RecallRecording {
|
|
138
|
+
/** Whose session rings the recall reads and feeds. */
|
|
139
|
+
readonly ring: RecallSurface;
|
|
140
|
+
/** The label of its token ledger row. */
|
|
141
|
+
readonly ledger: TokenSurface;
|
|
142
|
+
/** 'every': an empty list still reaches the stats write, which
|
|
143
|
+
* then only rewrites stats.json; 'shown': an empty list skips it. */
|
|
144
|
+
readonly stats: 'every' | 'shown';
|
|
145
|
+
}
|
|
146
|
+
/** The surfaces `retrieve` records in full. MCP is pending: src/mcp still feeds its own ring and books its own ledger
|
|
147
|
+
* row, and counts no stats. */
|
|
148
|
+
export declare const RECALL_RECORDING: {
|
|
149
|
+
readonly http: {
|
|
150
|
+
readonly ring: "http";
|
|
151
|
+
readonly ledger: "http_recall";
|
|
152
|
+
readonly stats: "every";
|
|
153
|
+
};
|
|
154
|
+
readonly cli: {
|
|
155
|
+
readonly ring: "cli";
|
|
156
|
+
readonly ledger: "recall";
|
|
157
|
+
readonly stats: "shown";
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
/** What a recorded recall takes into ranking. */
|
|
161
|
+
export interface RecallLead {
|
|
162
|
+
readonly recallHistory: RecallHistorySnapshot | undefined;
|
|
163
|
+
readonly leadingAudit: readonly AppendAuditOpts[];
|
|
164
|
+
}
|
|
165
|
+
/** For a surface whose hint `retrieve` judges: the session's history, or the row saying the recall named no session. */
|
|
166
|
+
export declare function recallLead(ctx: Context, how: RecallRecording, query: string, sessionId: string | undefined): RecallLead;
|
|
167
|
+
/** The list a recall showed, as its ranker counted and priced it. */
|
|
168
|
+
export interface ShownList {
|
|
169
|
+
readonly query: string;
|
|
170
|
+
/** The recall's session, which keys the ring. */
|
|
171
|
+
readonly sessionId: string | undefined;
|
|
172
|
+
readonly topId: string | null;
|
|
173
|
+
/** The memory this recall's anchoring hint named; the next recall's cooldown reads it. */
|
|
174
|
+
readonly anchoredOn: string | undefined;
|
|
175
|
+
readonly items: number;
|
|
176
|
+
readonly tokens: number;
|
|
177
|
+
/** The session the ledger row names: the recall's own on HTTP, the host agent's on the CLI. */
|
|
178
|
+
readonly ledgerSessionId: string | null;
|
|
179
|
+
/** False when the audit rows could not be written and the caller answers anyway. */
|
|
180
|
+
readonly written: boolean;
|
|
181
|
+
}
|
|
182
|
+
/** Runs after the recall's own write, in this order: the ring, then the counter, then the ledger. */
|
|
183
|
+
export declare function recordShownRecall(ctx: StoreContext, store: HippoStore, how: RecallRecording, shown: ShownList): Promise<void>;
|
|
184
|
+
export {};
|
|
185
|
+
//# sourceMappingURL=finish.d.ts.map
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
// What a recall remembers and records: the anchoring detector and query history, the session rings and audit rows, then
|
|
2
|
+
// the write around one recall (history, ring, recalled counter and token ledger row).
|
|
3
|
+
import { isRecallBoostAblated } from '../../core/ablation.js';
|
|
4
|
+
import { auditQueryFields } from '../../store/audit.js';
|
|
5
|
+
import { envAnchoringOff, envAvailabilityOff } from '../../util/env.js';
|
|
6
|
+
import { recordTokens } from '../tokens.js';
|
|
7
|
+
const DEFAULT_MIN_DOMINANCE = 3;
|
|
8
|
+
const DEFAULT_RECENT_REPEAT_WINDOW = 5;
|
|
9
|
+
const DEFAULT_COOLDOWN = 3;
|
|
10
|
+
/**
|
|
11
|
+
* Normalizes a query (lowercase, strip non-alphanumerics, drop short tokens, sort, dedup, join) and hashes it with
|
|
12
|
+
* 32-bit FNV-1a.
|
|
13
|
+
* Reordered words collide intentionally; deterministic across processes and V8 versions. */
|
|
14
|
+
export function hashQueryText(query) {
|
|
15
|
+
if (!query)
|
|
16
|
+
return 0;
|
|
17
|
+
// Tokens are deduped before join so `foo foo bar` and `foo bar` count as one query for memory_dominance.
|
|
18
|
+
// Unicode classes (\p{L}, \p{N}, \p{M}; need /u) keep non-Latin queries from collapsing to an empty token set and
|
|
19
|
+
// colliding at hash 0.
|
|
20
|
+
const normalized = query
|
|
21
|
+
.toLowerCase()
|
|
22
|
+
.replace(/[^\p{L}\p{N}\p{M}\s]/gu, ' ')
|
|
23
|
+
.split(/\s+/)
|
|
24
|
+
.filter((t) => t.length > 0);
|
|
25
|
+
// Drop tokens under 3 chars (filler words) so `a login bug` and `login bug` hash
|
|
26
|
+
// alike; matches the >=3 filter in src/learn/forward-claim-detector.ts.
|
|
27
|
+
const filtered = normalized.filter((t) => t.length >= 3);
|
|
28
|
+
// Fall back to all tokens when the filter empties the query (CJK 2-char words,
|
|
29
|
+
// acronyms like `AI`) so distinct short queries do not all hash to fnv1a32('').
|
|
30
|
+
const tokens = filtered.length > 0 ? filtered : normalized;
|
|
31
|
+
const deduped = Array.from(new Set(tokens)).sort();
|
|
32
|
+
return fnv1a32(deduped.join(' '));
|
|
33
|
+
}
|
|
34
|
+
function fnv1a32(text) {
|
|
35
|
+
// FNV-1a 32-bit. Offset basis 2166136261, prime 16777619.
|
|
36
|
+
let hash = 2166136261;
|
|
37
|
+
for (let i = 0; i < text.length; i++) {
|
|
38
|
+
hash ^= text.charCodeAt(i);
|
|
39
|
+
// 32-bit multiply via Math.imul — handles overflow correctly.
|
|
40
|
+
hash = Math.imul(hash, 16777619);
|
|
41
|
+
}
|
|
42
|
+
// Coerce to unsigned 32-bit for stable comparison.
|
|
43
|
+
return hash >>> 0;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Detects anchoring against the current (queryHash, topMemoryId); memory_dominance wins when both rules fire, since it
|
|
47
|
+
* spans DIFFERENT queries.
|
|
48
|
+
* Cooldown is per memory: a hint on the SAME topMemoryId within `cooldown=3` history entries is suppressed. Returns an
|
|
49
|
+
* AnchoringHint or null.
|
|
50
|
+
*/
|
|
51
|
+
export function detectAnchoring(history, currentQueryHash, currentTopMemoryId, opts = {}) {
|
|
52
|
+
if (currentTopMemoryId === null)
|
|
53
|
+
return null;
|
|
54
|
+
const minDominance = opts.minDominance ?? DEFAULT_MIN_DOMINANCE;
|
|
55
|
+
const recentRepeatWindow = opts.recentRepeatWindow ?? DEFAULT_RECENT_REPEAT_WINDOW;
|
|
56
|
+
const cooldown = opts.cooldown ?? DEFAULT_COOLDOWN;
|
|
57
|
+
// Cooldown gate: was the most-recent hint (across the last `cooldown`
|
|
58
|
+
// entries) for THIS memory? If yes, suppress regardless of rule.
|
|
59
|
+
const cooldownSlice = history.slice(-cooldown);
|
|
60
|
+
for (const entry of cooldownSlice) {
|
|
61
|
+
if (entry.anchoredOn === currentTopMemoryId) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// memory_dominance check FIRST (wins on tie).
|
|
66
|
+
const queryCount = countDistinctQueries(history, currentQueryHash, currentTopMemoryId);
|
|
67
|
+
if (queryCount >= minDominance) {
|
|
68
|
+
return {
|
|
69
|
+
reason: 'memory_dominance',
|
|
70
|
+
memoryId: currentTopMemoryId,
|
|
71
|
+
queryCount,
|
|
72
|
+
summary: `Memory ${currentTopMemoryId} has been the top result for ${queryCount} distinct queries in this ` +
|
|
73
|
+
`session and may be anchoring your reasoning.`,
|
|
74
|
+
source: 'j1-recurrence',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (isRecentRepeat(history, recentRepeatWindow, currentQueryHash, currentTopMemoryId)) {
|
|
78
|
+
return {
|
|
79
|
+
reason: 'query_repeat',
|
|
80
|
+
memoryId: currentTopMemoryId,
|
|
81
|
+
summary: `Same query phrasing as a recent recall returned the same top result (${currentTopMemoryId}); you may ` +
|
|
82
|
+
`be re-asking the same question.`,
|
|
83
|
+
source: 'j1-recurrence',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
// Count distinct queryHashes in history where topMemoryId === the current top
|
|
89
|
+
// (excluding null tops), plus the current query itself.
|
|
90
|
+
function countDistinctQueries(history, currentQueryHash, currentTopMemoryId) {
|
|
91
|
+
const matchingQueryHashes = new Set();
|
|
92
|
+
for (const entry of history) {
|
|
93
|
+
if (entry.topMemoryId === currentTopMemoryId) {
|
|
94
|
+
matchingQueryHashes.add(entry.queryHash);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
matchingQueryHashes.add(currentQueryHash);
|
|
98
|
+
return matchingQueryHashes.size;
|
|
99
|
+
}
|
|
100
|
+
// query_repeat check: is currentQueryHash present in the last `recentRepeatWindow`
|
|
101
|
+
// entries AND was that entry's topMemoryId === currentTopMemoryId?
|
|
102
|
+
function isRecentRepeat(history, recentRepeatWindow, currentQueryHash, currentTopMemoryId) {
|
|
103
|
+
return history
|
|
104
|
+
.slice(-recentRepeatWindow)
|
|
105
|
+
.some((entry) => entry.queryHash === currentQueryHash && entry.topMemoryId === currentTopMemoryId);
|
|
106
|
+
}
|
|
107
|
+
const MAX_HISTORY = 10;
|
|
108
|
+
const DEFAULT_MAX_SESSIONS = 1000;
|
|
109
|
+
/**
|
|
110
|
+
* Bounded FIFO ring of RecallHistoryEntry (oldest evicted when full); a thin array wrapper so snapshotRing returns a
|
|
111
|
+
* readonly view without copying.
|
|
112
|
+
*/
|
|
113
|
+
export class RingBuffer {
|
|
114
|
+
entries = [];
|
|
115
|
+
append(entry) {
|
|
116
|
+
this.entries.push(entry);
|
|
117
|
+
if (this.entries.length > MAX_HISTORY) {
|
|
118
|
+
this.entries.shift();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
snapshot() {
|
|
122
|
+
return this.entries;
|
|
123
|
+
}
|
|
124
|
+
size() {
|
|
125
|
+
return this.entries.length;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Builds the (tenant, session) key with a NUL delimiter: tenant and session ids are validated elsewhere to reject NUL,
|
|
129
|
+
* so concatenation cannot collide even though API-key-derived subjects can contain `:`. */
|
|
130
|
+
export function buildSessionKey(tenantId, sessionId) {
|
|
131
|
+
return `${tenantId}\x00${sessionId}`;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get-or-create a RingBuffer per session key, capped at `maxSessions` (default 1000); at the cap the oldest-inserted
|
|
135
|
+
* key (first from Map.keys()) is
|
|
136
|
+
* evicted. */
|
|
137
|
+
export function getOrCreateRing(map, key, maxSessions = DEFAULT_MAX_SESSIONS) {
|
|
138
|
+
const existing = map.get(key);
|
|
139
|
+
if (existing) {
|
|
140
|
+
// LRU touch: delete + re-insert to move to back of iteration order.
|
|
141
|
+
map.delete(key);
|
|
142
|
+
map.set(key, existing);
|
|
143
|
+
return existing;
|
|
144
|
+
}
|
|
145
|
+
if (map.size >= maxSessions) {
|
|
146
|
+
const oldest = map.keys().next().value;
|
|
147
|
+
if (oldest !== undefined)
|
|
148
|
+
map.delete(oldest);
|
|
149
|
+
}
|
|
150
|
+
const ring = new RingBuffer();
|
|
151
|
+
map.set(key, ring);
|
|
152
|
+
return ring;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Appends a recall to a ring; `anchoredOn` is the memoryId of the hint that fired on THIS recall (or undefined), read
|
|
156
|
+
* by detectAnchoring for cooldown.
|
|
157
|
+
*/
|
|
158
|
+
export function appendRecall(ring, queryHash, topMemoryId, anchoredOn) {
|
|
159
|
+
const entry = {
|
|
160
|
+
queryHash,
|
|
161
|
+
topMemoryId,
|
|
162
|
+
ts: new Date().toISOString(),
|
|
163
|
+
};
|
|
164
|
+
if (anchoredOn !== undefined)
|
|
165
|
+
entry.anchoredOn = anchoredOn;
|
|
166
|
+
ring.append(entry);
|
|
167
|
+
}
|
|
168
|
+
/** Snapshot a ring as a readonly RecallHistorySnapshot. */
|
|
169
|
+
export function snapshotRing(ring) {
|
|
170
|
+
return ring.snapshot();
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Whether a recall bias hint is enabled; reads env at call time, so `HIPPO_ANCHORING=off` or `HIPPO_AVAILABILITY=off`
|
|
174
|
+
* disables only that kind.
|
|
175
|
+
*/
|
|
176
|
+
export function biasHintEnabled(kind) {
|
|
177
|
+
return kind === 'anchoring'
|
|
178
|
+
? !envAnchoringOff()
|
|
179
|
+
: !envAvailabilityOff();
|
|
180
|
+
}
|
|
181
|
+
// entriesByIds reads at most this many ids a call.
|
|
182
|
+
const ID_READ_CHUNK = 500;
|
|
183
|
+
/** The ids among `ids` that a tenant's rows in `store` hold. */
|
|
184
|
+
export async function heldIds(store, ids, tenantId) {
|
|
185
|
+
const held = new Set();
|
|
186
|
+
for (let i = 0; i < ids.length; i += ID_READ_CHUNK) {
|
|
187
|
+
for (const entry of await store.entriesByIds(ids.slice(i, i + ID_READ_CHUNK), tenantId))
|
|
188
|
+
held.add(entry.id);
|
|
189
|
+
}
|
|
190
|
+
return held;
|
|
191
|
+
}
|
|
192
|
+
// One map per surface, each with its own LRU cap, so a repeat on one surface is a first recall on another.
|
|
193
|
+
const rings = {
|
|
194
|
+
cli: new Map(),
|
|
195
|
+
mcp: new Map(),
|
|
196
|
+
http: new Map(),
|
|
197
|
+
};
|
|
198
|
+
/** The session's ring, created on first use; null when anchoring is off or the call has no session. */
|
|
199
|
+
export function sessionRing(surface, tenantId, sessionId) {
|
|
200
|
+
if (!biasHintEnabled('anchoring') || !sessionId)
|
|
201
|
+
return null;
|
|
202
|
+
return getOrCreateRing(rings[surface], buildSessionKey(tenantId, sessionId));
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The session's history, read without creating or touching its ring, so a request that then fails evicts no live
|
|
206
|
+
* session.
|
|
207
|
+
*/
|
|
208
|
+
function peekSessionRing(surface, tenantId, sessionId) {
|
|
209
|
+
const ring = rings[surface].get(buildSessionKey(tenantId, sessionId));
|
|
210
|
+
return ring ? snapshotRing(ring) : [];
|
|
211
|
+
}
|
|
212
|
+
/** Records this recall's top row and hint, which the next recall's cooldown reads. */
|
|
213
|
+
export function noteRecall(ring, query, topId, anchoredOn) {
|
|
214
|
+
appendRecall(ring, hashQueryText(query), topId, anchoredOn);
|
|
215
|
+
}
|
|
216
|
+
export function resetSessionRings(surface) {
|
|
217
|
+
rings[surface].clear();
|
|
218
|
+
}
|
|
219
|
+
export function callerOf(ctx) {
|
|
220
|
+
return { tenantId: ctx.tenantId, actor: ctx.actor.subject };
|
|
221
|
+
}
|
|
222
|
+
/** The strengthen every ranker of `retrieve` hands to the recall's write: the shown ids, in the caller's tenant. */
|
|
223
|
+
export function strengthenOf(ctx, ids) {
|
|
224
|
+
return { ids, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
|
|
225
|
+
}
|
|
226
|
+
export function recallAuditRow(who, op, targetId, metadata) {
|
|
227
|
+
return { tenantId: who.tenantId, actor: who.actor, op, targetId, metadata };
|
|
228
|
+
}
|
|
229
|
+
// The row stores a hash of the query, never its text, so an archived memory's words cannot persist there.
|
|
230
|
+
export function recallAuditMetadata(query, results) {
|
|
231
|
+
return { ...auditQueryFields(query), results };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* No session means no ring; the row hashes with SHA-256/16, since hashQueryText is FNV-1a and easy to reverse on short
|
|
235
|
+
* queries.
|
|
236
|
+
*/
|
|
237
|
+
export function anchorSkippedRows(who, query) {
|
|
238
|
+
if (!biasHintEnabled('anchoring'))
|
|
239
|
+
return [];
|
|
240
|
+
return [recallAuditRow(who, 'recall_anchor_skipped_no_session', undefined, auditQueryFields(query))];
|
|
241
|
+
}
|
|
242
|
+
export function anchoringRows(who, hint) {
|
|
243
|
+
if (hint?.reason === 'memory_dominance') {
|
|
244
|
+
return [recallAuditRow(who, 'recall_anchor_detected_memory_dominance', hint.memoryId, {
|
|
245
|
+
memory_id: hint.memoryId,
|
|
246
|
+
query_count: hint.queryCount ?? null,
|
|
247
|
+
})];
|
|
248
|
+
}
|
|
249
|
+
if (hint?.reason === 'query_repeat') {
|
|
250
|
+
return [recallAuditRow(who, 'recall_anchor_detected_query_repeat', hint.memoryId, { memory_id: hint.memoryId })];
|
|
251
|
+
}
|
|
252
|
+
return [];
|
|
253
|
+
}
|
|
254
|
+
export function availabilityRows(who, hint) {
|
|
255
|
+
if (!hint)
|
|
256
|
+
return [];
|
|
257
|
+
return [recallAuditRow(who, 'recall_availability_detected', undefined, {
|
|
258
|
+
recent_fraction: hint.recentFraction,
|
|
259
|
+
older_passed_over: hint.olderCandidatesPassedOver,
|
|
260
|
+
returned_count: hint.returnedCount,
|
|
261
|
+
})];
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* The hint rows for a list a surface showed, so a surface on the store port can hand them to the recall's one write.
|
|
265
|
+
*/
|
|
266
|
+
export function shownRecallRows(who, shown) {
|
|
267
|
+
return [
|
|
268
|
+
...(shown.ring ? [] : anchorSkippedRows(who, shown.query)),
|
|
269
|
+
...anchoringRows(who, shown.anchoring),
|
|
270
|
+
...availabilityRows(who, shown.availability),
|
|
271
|
+
];
|
|
272
|
+
}
|
|
273
|
+
/** The surfaces `retrieve` records in full. MCP is pending: src/mcp still feeds its own ring and books its own ledger
|
|
274
|
+
* row, and counts no stats. */
|
|
275
|
+
export const RECALL_RECORDING = {
|
|
276
|
+
http: { ring: 'http', ledger: 'http_recall', stats: 'every' },
|
|
277
|
+
cli: { ring: 'cli', ledger: 'recall', stats: 'shown' },
|
|
278
|
+
};
|
|
279
|
+
/** For a surface whose hint `retrieve` judges: the session's history, or the row saying the recall named no session. */
|
|
280
|
+
export function recallLead(ctx, how, query, sessionId) {
|
|
281
|
+
return {
|
|
282
|
+
// Peeked, never created: a recall that then fails must not LRU-evict a live session.
|
|
283
|
+
recallHistory: sessionId && biasHintEnabled('anchoring') ? peekSessionRing(how.ring, ctx.tenantId, sessionId) : undefined,
|
|
284
|
+
// Written first in the recall's own write, so a recall that fails leaves no row.
|
|
285
|
+
leadingAudit: sessionId ? [] : anchorSkippedRows(callerOf(ctx), query),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
/** Runs after the recall's own write, in this order: the ring, then the counter, then the ledger. */
|
|
289
|
+
export async function recordShownRecall(ctx, store, how, shown) {
|
|
290
|
+
// A surface that only peeked has its ring created here, after the
|
|
291
|
+
// write, so a recall that fails cannot LRU-evict a live session.
|
|
292
|
+
const ring = sessionRing(how.ring, ctx.tenantId, shown.sessionId);
|
|
293
|
+
if (ring)
|
|
294
|
+
noteRecall(ring, shown.query, shown.topId, shown.anchoredOn);
|
|
295
|
+
// A recall with no audit row counts nothing, as it strengthens and traces nothing.
|
|
296
|
+
if (shown.written && (how.stats === 'every' || shown.items > 0))
|
|
297
|
+
await store.bumpRecallStats(shown.items);
|
|
298
|
+
// The ledger books text that was sent, so its row does not wait on the audit write.
|
|
299
|
+
await recordTokens(ctx, how.ledger, { items: shown.items, tokens: shown.tokens, sessionId: shown.ledgerSessionId });
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=finish.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type GoalRecallLogRow } from '
|
|
2
|
-
import { type MemoryEntry } from '
|
|
3
|
-
import type { PhysicsConfig } from '
|
|
4
|
-
import type { RerankerFn } from '
|
|
5
|
-
import type
|
|
1
|
+
import { type GoalRecallLogRow } from '../../store/goals.js';
|
|
2
|
+
import { type MemoryEntry } from '../../core/memory.js';
|
|
3
|
+
import type { PhysicsConfig } from '../../core/physics-config.js';
|
|
4
|
+
import type { RerankerFn } from '../../rerankers/types.js';
|
|
5
|
+
import { type ResultCost, type SearchResult } from '../../core/search-types.js';
|
|
6
6
|
/** Stores rankRecall reads and where it sends operator notes. */
|
|
7
7
|
export interface RankRecallCtx {
|
|
8
8
|
hippoRoot: string;
|
|
@@ -94,7 +94,11 @@ export interface RankRecallResult {
|
|
|
94
94
|
/** True when ranking stopped at `haltBefore`. */
|
|
95
95
|
halted: boolean;
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
98
|
-
*
|
|
97
|
+
/**
|
|
98
|
+
* Ranks memories for a query as `hippo recall` does, through the `limit` slice. Reads stores, embeddings and physics
|
|
99
|
+
* state; writes and prints nothing
|
|
100
|
+
* (notes go to `ctx.note`). The caller supplies the cost function and reranker in `opts` and persists the returned
|
|
101
|
+
* goal-log rows.
|
|
102
|
+
*/
|
|
99
103
|
export declare function rankRecall(ctx: RankRecallCtx, opts: RankRecallOpts): Promise<RankRecallResult>;
|
|
100
|
-
//# sourceMappingURL=
|
|
104
|
+
//# sourceMappingURL=pipeline.d.ts.map
|