hippo-memory 1.69.0 → 1.71.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { biasHintEnabled } from './recall-history.js';
|
|
2
|
+
import { anchorSkippedRows, callerOf, noteRecall, peekSessionRing, sessionRing } from './recall-record.js';
|
|
3
|
+
import { recordTokens } from './tokens.js';
|
|
4
|
+
/** The surfaces `retrieve` records in full. MCP is pending: src/mcp still feeds its own ring and books its own ledger row, and counts no stats. */
|
|
5
|
+
export const RECALL_RECORDING = {
|
|
6
|
+
http: { ring: 'http', ledger: 'http_recall', stats: 'every' },
|
|
7
|
+
cli: { ring: 'cli', ledger: 'recall', stats: 'shown' },
|
|
8
|
+
};
|
|
9
|
+
/** For a surface whose hint `retrieve` judges: the session's history, or the row saying the recall named no session. */
|
|
10
|
+
export function recallLead(ctx, how, query, sessionId) {
|
|
11
|
+
return {
|
|
12
|
+
// Peeked, never created: a recall that then fails must not LRU-evict a live session.
|
|
13
|
+
recallHistory: sessionId && biasHintEnabled('anchoring') ? peekSessionRing(how.ring, ctx.tenantId, sessionId) : undefined,
|
|
14
|
+
// Written first in the recall's own write, so a recall that fails leaves no row.
|
|
15
|
+
leadingAudit: sessionId ? [] : anchorSkippedRows(callerOf(ctx), query),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Runs after the recall's own write, in this order: the ring, then the counter, then the ledger. */
|
|
19
|
+
export async function recordShownRecall(ctx, store, how, shown) {
|
|
20
|
+
// A surface that only peeked has its ring created here, after the write, so a recall that fails cannot LRU-evict a live session.
|
|
21
|
+
const ring = sessionRing(how.ring, ctx.tenantId, shown.sessionId);
|
|
22
|
+
if (ring)
|
|
23
|
+
noteRecall(ring, shown.query, shown.topId, shown.anchoredOn);
|
|
24
|
+
// A recall with no audit row counts nothing, as it strengthens and traces nothing.
|
|
25
|
+
if (shown.written && (how.stats === 'every' || shown.items > 0))
|
|
26
|
+
await store.bumpRecallStats(shown.items);
|
|
27
|
+
// The ledger books text that was sent, so its row does not wait on the audit write.
|
|
28
|
+
await recordTokens(ctx, how.ledger, { items: shown.items, tokens: shown.tokens, sessionId: shown.ledgerSessionId });
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=recall-finish.js.map
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Anchoring detector (recall-recurrence), pure module: `query_repeat` (a queryHash re-asked within the window returns the same topMemoryId) and
|
|
2
|
+
* `memory_dominance` (the same topMemoryId across >= minDominance distinct queryHashes). Each pipeline keeps its OWN ring Map keyed by (tenant, session),
|
|
3
|
+
* because its top-1 ranking differs. AnchoringHint and PlanningFallacyHint are independent signals. */
|
|
4
|
+
export type AnchoringReason = 'query_repeat' | 'memory_dominance';
|
|
5
|
+
export interface AnchoringHint {
|
|
6
|
+
reason: AnchoringReason;
|
|
7
|
+
/** The memory ID that is anchoring the agent's reasoning. */
|
|
8
|
+
memoryId: string;
|
|
9
|
+
/** For 'memory_dominance': how many distinct queries in the recent window
|
|
10
|
+
* had this memory as their top-1 result. Always >= 3 when emitted. */
|
|
11
|
+
queryCount?: number;
|
|
12
|
+
/** Human-readable summary surfaced to the agent. */
|
|
13
|
+
summary: string;
|
|
14
|
+
/** Discriminator for hint origin; reserved for future variants. */
|
|
15
|
+
source: 'j1-recurrence';
|
|
16
|
+
}
|
|
17
|
+
export interface RecallHistoryEntry {
|
|
18
|
+
/** Hash of the queryText that produced this entry (see hashQueryText). */
|
|
19
|
+
queryHash: number;
|
|
20
|
+
/** Top-1 memory id this recall surfaced; null if zero results. */
|
|
21
|
+
topMemoryId: string | null;
|
|
22
|
+
/** ISO-8601 timestamp; advisory, not used by the detection rules. */
|
|
23
|
+
ts: string;
|
|
24
|
+
/** Memory id of the AnchoringHint that fired on this recall, if any; the caller writes it after detectAnchoring returns, and the cooldown reads it next
|
|
25
|
+
* time. */
|
|
26
|
+
anchoredOn?: string;
|
|
27
|
+
}
|
|
28
|
+
export type RecallHistorySnapshot = readonly RecallHistoryEntry[];
|
|
29
|
+
export interface DetectAnchoringOpts {
|
|
30
|
+
/** memory_dominance threshold: number of distinct queryHashes that must have returned
|
|
31
|
+
* the same topMemoryId. Default 3. */
|
|
32
|
+
minDominance?: number;
|
|
33
|
+
/** query_repeat window: how many recent history entries to scan for query repeat.
|
|
34
|
+
* Default 5. */
|
|
35
|
+
recentRepeatWindow?: number;
|
|
36
|
+
/** Cooldown: suppress when the prior fire (per `anchoredOn`) was for the same topMemoryId within this many history entries. Default 3. */
|
|
37
|
+
cooldown?: number;
|
|
38
|
+
}
|
|
39
|
+
/** Normalizes a query (lowercase, strip non-alphanumerics, drop short tokens, sort, dedup, join) and hashes it with 32-bit FNV-1a.
|
|
40
|
+
* Reordered words collide intentionally; deterministic across processes and V8 versions. */
|
|
41
|
+
export declare function hashQueryText(query: string): number;
|
|
42
|
+
/** Detects anchoring against the current (queryHash, topMemoryId); memory_dominance wins when both rules fire, since it spans DIFFERENT queries.
|
|
43
|
+
* Cooldown is per memory: a hint on the SAME topMemoryId within `cooldown=3` history entries is suppressed. Returns an AnchoringHint or null. */
|
|
44
|
+
export declare function detectAnchoring(history: RecallHistorySnapshot, currentQueryHash: number, currentTopMemoryId: string | null, opts?: DetectAnchoringOpts): AnchoringHint | null;
|
|
45
|
+
/** Bounded FIFO ring of RecallHistoryEntry (oldest evicted when full); a thin array wrapper so snapshotRing returns a readonly view without copying. */
|
|
46
|
+
export declare class RingBuffer {
|
|
47
|
+
private entries;
|
|
48
|
+
append(entry: RecallHistoryEntry): void;
|
|
49
|
+
snapshot(): RecallHistorySnapshot;
|
|
50
|
+
size(): number;
|
|
51
|
+
}
|
|
52
|
+
/** Builds the (tenant, session) key with a NUL delimiter: tenant and session ids are validated elsewhere to reject NUL,
|
|
53
|
+
* so concatenation cannot collide even though API-key-derived subjects can contain `:`. */
|
|
54
|
+
export declare function buildSessionKey(tenantId: string, sessionId: string): string;
|
|
55
|
+
/** Get-or-create a RingBuffer per session key, capped at `maxSessions` (default 1000); at the cap the oldest-inserted key (first from Map.keys()) is
|
|
56
|
+
* evicted. */
|
|
57
|
+
export declare function getOrCreateRing(map: Map<string, RingBuffer>, key: string, maxSessions?: number): RingBuffer;
|
|
58
|
+
/** Appends a recall to a ring; `anchoredOn` is the memoryId of the hint that fired on THIS recall (or undefined), read by detectAnchoring for cooldown. */
|
|
59
|
+
export declare function appendRecall(ring: RingBuffer, queryHash: number, topMemoryId: string | null, anchoredOn?: string): void;
|
|
60
|
+
/** Snapshot a ring as a readonly RecallHistorySnapshot. */
|
|
61
|
+
export declare function snapshotRing(ring: RingBuffer): RecallHistorySnapshot;
|
|
62
|
+
/** Whether a recall bias hint is enabled; reads env at call time, so `HIPPO_ANCHORING=off` or `HIPPO_AVAILABILITY=off` disables only that kind. */
|
|
63
|
+
export declare function biasHintEnabled(kind: 'anchoring' | 'availability'): boolean;
|
|
64
|
+
//# sourceMappingURL=recall-history.d.ts.map
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/** Anchoring detector (recall-recurrence), pure module: `query_repeat` (a queryHash re-asked within the window returns the same topMemoryId) and
|
|
2
|
+
* `memory_dominance` (the same topMemoryId across >= minDominance distinct queryHashes). Each pipeline keeps its OWN ring Map keyed by (tenant, session),
|
|
3
|
+
* because its top-1 ranking differs. AnchoringHint and PlanningFallacyHint are independent signals. */
|
|
4
|
+
import { envAnchoringOff, envAvailabilityOff } from '../util/env.js';
|
|
5
|
+
const DEFAULT_MIN_DOMINANCE = 3;
|
|
6
|
+
const DEFAULT_RECENT_REPEAT_WINDOW = 5;
|
|
7
|
+
const DEFAULT_COOLDOWN = 3;
|
|
8
|
+
/** Normalizes a query (lowercase, strip non-alphanumerics, drop short tokens, sort, dedup, join) and hashes it with 32-bit FNV-1a.
|
|
9
|
+
* Reordered words collide intentionally; deterministic across processes and V8 versions. */
|
|
10
|
+
export function hashQueryText(query) {
|
|
11
|
+
if (!query)
|
|
12
|
+
return 0;
|
|
13
|
+
// Tokens are deduped before join so `foo foo bar` and `foo bar` count as one query for memory_dominance.
|
|
14
|
+
// Unicode classes (\p{L}, \p{N}, \p{M}; need /u) keep non-Latin queries from collapsing to an empty token set and colliding at hash 0.
|
|
15
|
+
const normalized = query
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.replace(/[^\p{L}\p{N}\p{M}\s]/gu, ' ')
|
|
18
|
+
.split(/\s+/)
|
|
19
|
+
.filter((t) => t.length > 0);
|
|
20
|
+
// Drop tokens under 3 chars (filler words) so `a login bug` and `login bug` hash
|
|
21
|
+
// alike; matches the >=3 filter in src/learn/forward-claim-detector.ts.
|
|
22
|
+
const filtered = normalized.filter((t) => t.length >= 3);
|
|
23
|
+
// Fall back to all tokens when the filter empties the query (CJK 2-char words,
|
|
24
|
+
// acronyms like `AI`) so distinct short queries do not all hash to fnv1a32('').
|
|
25
|
+
const tokens = filtered.length > 0 ? filtered : normalized;
|
|
26
|
+
const deduped = Array.from(new Set(tokens)).sort();
|
|
27
|
+
return fnv1a32(deduped.join(' '));
|
|
28
|
+
}
|
|
29
|
+
function fnv1a32(text) {
|
|
30
|
+
// FNV-1a 32-bit. Offset basis 2166136261, prime 16777619.
|
|
31
|
+
let hash = 2166136261;
|
|
32
|
+
for (let i = 0; i < text.length; i++) {
|
|
33
|
+
hash ^= text.charCodeAt(i);
|
|
34
|
+
// 32-bit multiply via Math.imul — handles overflow correctly.
|
|
35
|
+
hash = Math.imul(hash, 16777619);
|
|
36
|
+
}
|
|
37
|
+
// Coerce to unsigned 32-bit for stable comparison.
|
|
38
|
+
return hash >>> 0;
|
|
39
|
+
}
|
|
40
|
+
/** Detects anchoring against the current (queryHash, topMemoryId); memory_dominance wins when both rules fire, since it spans DIFFERENT queries.
|
|
41
|
+
* Cooldown is per memory: a hint on the SAME topMemoryId within `cooldown=3` history entries is suppressed. Returns an AnchoringHint or null. */
|
|
42
|
+
export function detectAnchoring(history, currentQueryHash, currentTopMemoryId, opts = {}) {
|
|
43
|
+
if (currentTopMemoryId === null)
|
|
44
|
+
return null;
|
|
45
|
+
const minDominance = opts.minDominance ?? DEFAULT_MIN_DOMINANCE;
|
|
46
|
+
const recentRepeatWindow = opts.recentRepeatWindow ?? DEFAULT_RECENT_REPEAT_WINDOW;
|
|
47
|
+
const cooldown = opts.cooldown ?? DEFAULT_COOLDOWN;
|
|
48
|
+
// Cooldown gate: was the most-recent hint (across the last `cooldown`
|
|
49
|
+
// entries) for THIS memory? If yes, suppress regardless of rule.
|
|
50
|
+
const cooldownSlice = history.slice(-cooldown);
|
|
51
|
+
for (const entry of cooldownSlice) {
|
|
52
|
+
if (entry.anchoredOn === currentTopMemoryId) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// memory_dominance check FIRST (wins on tie).
|
|
57
|
+
const queryCount = countDistinctQueries(history, currentQueryHash, currentTopMemoryId);
|
|
58
|
+
if (queryCount >= minDominance) {
|
|
59
|
+
return {
|
|
60
|
+
reason: 'memory_dominance',
|
|
61
|
+
memoryId: currentTopMemoryId,
|
|
62
|
+
queryCount,
|
|
63
|
+
summary: `Memory ${currentTopMemoryId} has been the top result for ${queryCount} distinct queries in this session and may be anchoring your reasoning.`,
|
|
64
|
+
source: 'j1-recurrence',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (isRecentRepeat(history, recentRepeatWindow, currentQueryHash, currentTopMemoryId)) {
|
|
68
|
+
return {
|
|
69
|
+
reason: 'query_repeat',
|
|
70
|
+
memoryId: currentTopMemoryId,
|
|
71
|
+
summary: `Same query phrasing as a recent recall returned the same top result (${currentTopMemoryId}); you may be re-asking the same question.`,
|
|
72
|
+
source: 'j1-recurrence',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Count distinct queryHashes in history where topMemoryId === the current top
|
|
78
|
+
// (excluding null tops), plus the current query itself.
|
|
79
|
+
function countDistinctQueries(history, currentQueryHash, currentTopMemoryId) {
|
|
80
|
+
const matchingQueryHashes = new Set();
|
|
81
|
+
for (const entry of history) {
|
|
82
|
+
if (entry.topMemoryId === currentTopMemoryId) {
|
|
83
|
+
matchingQueryHashes.add(entry.queryHash);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
matchingQueryHashes.add(currentQueryHash);
|
|
87
|
+
return matchingQueryHashes.size;
|
|
88
|
+
}
|
|
89
|
+
// query_repeat check: is currentQueryHash present in the last `recentRepeatWindow`
|
|
90
|
+
// entries AND was that entry's topMemoryId === currentTopMemoryId?
|
|
91
|
+
function isRecentRepeat(history, recentRepeatWindow, currentQueryHash, currentTopMemoryId) {
|
|
92
|
+
return history
|
|
93
|
+
.slice(-recentRepeatWindow)
|
|
94
|
+
.some((entry) => entry.queryHash === currentQueryHash && entry.topMemoryId === currentTopMemoryId);
|
|
95
|
+
}
|
|
96
|
+
const MAX_HISTORY = 10;
|
|
97
|
+
const DEFAULT_MAX_SESSIONS = 1000;
|
|
98
|
+
/** Bounded FIFO ring of RecallHistoryEntry (oldest evicted when full); a thin array wrapper so snapshotRing returns a readonly view without copying. */
|
|
99
|
+
export class RingBuffer {
|
|
100
|
+
entries = [];
|
|
101
|
+
append(entry) {
|
|
102
|
+
this.entries.push(entry);
|
|
103
|
+
if (this.entries.length > MAX_HISTORY) {
|
|
104
|
+
this.entries.shift();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
snapshot() {
|
|
108
|
+
return this.entries;
|
|
109
|
+
}
|
|
110
|
+
size() {
|
|
111
|
+
return this.entries.length;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Builds the (tenant, session) key with a NUL delimiter: tenant and session ids are validated elsewhere to reject NUL,
|
|
115
|
+
* so concatenation cannot collide even though API-key-derived subjects can contain `:`. */
|
|
116
|
+
export function buildSessionKey(tenantId, sessionId) {
|
|
117
|
+
return `${tenantId}\x00${sessionId}`;
|
|
118
|
+
}
|
|
119
|
+
/** Get-or-create a RingBuffer per session key, capped at `maxSessions` (default 1000); at the cap the oldest-inserted key (first from Map.keys()) is
|
|
120
|
+
* evicted. */
|
|
121
|
+
export function getOrCreateRing(map, key, maxSessions = DEFAULT_MAX_SESSIONS) {
|
|
122
|
+
const existing = map.get(key);
|
|
123
|
+
if (existing) {
|
|
124
|
+
// LRU touch: delete + re-insert to move to back of iteration order.
|
|
125
|
+
map.delete(key);
|
|
126
|
+
map.set(key, existing);
|
|
127
|
+
return existing;
|
|
128
|
+
}
|
|
129
|
+
if (map.size >= maxSessions) {
|
|
130
|
+
const oldest = map.keys().next().value;
|
|
131
|
+
if (oldest !== undefined)
|
|
132
|
+
map.delete(oldest);
|
|
133
|
+
}
|
|
134
|
+
const ring = new RingBuffer();
|
|
135
|
+
map.set(key, ring);
|
|
136
|
+
return ring;
|
|
137
|
+
}
|
|
138
|
+
/** Appends a recall to a ring; `anchoredOn` is the memoryId of the hint that fired on THIS recall (or undefined), read by detectAnchoring for cooldown. */
|
|
139
|
+
export function appendRecall(ring, queryHash, topMemoryId, anchoredOn) {
|
|
140
|
+
const entry = {
|
|
141
|
+
queryHash,
|
|
142
|
+
topMemoryId,
|
|
143
|
+
ts: new Date().toISOString(),
|
|
144
|
+
};
|
|
145
|
+
if (anchoredOn !== undefined)
|
|
146
|
+
entry.anchoredOn = anchoredOn;
|
|
147
|
+
ring.append(entry);
|
|
148
|
+
}
|
|
149
|
+
/** Snapshot a ring as a readonly RecallHistorySnapshot. */
|
|
150
|
+
export function snapshotRing(ring) {
|
|
151
|
+
return ring.snapshot();
|
|
152
|
+
}
|
|
153
|
+
/** Whether a recall bias hint is enabled; reads env at call time, so `HIPPO_ANCHORING=off` or `HIPPO_AVAILABILITY=off` disables only that kind. */
|
|
154
|
+
export function biasHintEnabled(kind) {
|
|
155
|
+
return kind === 'anchoring'
|
|
156
|
+
? !envAnchoringOff()
|
|
157
|
+
: !envAvailabilityOff();
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=recall-history.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 { ResultCost, SearchResult } from '
|
|
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, 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,8 +94,7 @@ export interface RankRecallResult {
|
|
|
94
94
|
/** True when ranking stopped at `haltBefore`. */
|
|
95
95
|
halted: boolean;
|
|
96
96
|
}
|
|
97
|
-
/** Ranks memories for a query as `hippo recall` does, through the `limit` slice. Reads stores, embeddings and
|
|
98
|
-
*
|
|
99
|
-
* function and reranker in `opts`, and persists the returned goal-log rows. */
|
|
97
|
+
/** Ranks memories for a query as `hippo recall` does, through the `limit` slice. Reads stores, embeddings and physics state; writes and prints nothing
|
|
98
|
+
* (notes go to `ctx.note`). The caller supplies the cost function and reranker in `opts` and persists the returned goal-log rows. */
|
|
100
99
|
export declare function rankRecall(ctx: RankRecallCtx, opts: RankRecallOpts): Promise<RankRecallResult>;
|
|
101
100
|
//# sourceMappingURL=recall-pipeline.d.ts.map
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
// Ranking core shared by `hippo recall` and `hippo explain`: load, search, expand, re-rank and filter, with no
|
|
2
2
|
// writes and no direct output. Callers own flag parsing, printing, budget fitting and persistence.
|
|
3
|
-
import { evalNow } from '
|
|
4
|
-
import { oneCopyPerMemory } from './
|
|
5
|
-
import { compareEntryIdentity } from '
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { graphExpandRecall } from '
|
|
10
|
-
import { DEFAULT_GRAPH_STREAM_WEIGHT } from '
|
|
11
|
-
import { Layer } from '
|
|
12
|
-
import { multihopSearch } from '
|
|
13
|
-
import { passesCliRecallScopeFilter } from '
|
|
14
|
-
import { currentEntries } from '
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
3
|
+
import { evalNow } from '../core/ablation.js';
|
|
4
|
+
import { oneCopyPerMemory } from './context-select.js';
|
|
5
|
+
import { compareEntryIdentity, compareScoresDesc } from '../core/compare.js';
|
|
6
|
+
import { isEmbeddingAvailable } from '../store/embeddings/local.js';
|
|
7
|
+
import { activeGoalsWithPolicies } from '../store/goals.js';
|
|
8
|
+
import { boostByGoals } from '../search/goal-boost.js';
|
|
9
|
+
import { graphExpandRecall } from '../graph/recall.js';
|
|
10
|
+
import { DEFAULT_GRAPH_STREAM_WEIGHT } from '../graph/stream.js';
|
|
11
|
+
import { Layer } from '../core/memory.js';
|
|
12
|
+
import { multihopSearch } from '../search/multihop.js';
|
|
13
|
+
import { passesCliRecallScopeFilter } from '../store/recall-scope.js';
|
|
14
|
+
import { currentEntries } from '../search/as-of.js';
|
|
15
|
+
import { STRENGTH_RANK_FLOOR, STRENGTH_RANK_SPAN } from '../search/boosts.js';
|
|
16
|
+
import { hybridSearch } from '../search/hybrid.js';
|
|
17
|
+
import { physicsSearch } from '../search/physics-search.js';
|
|
18
|
+
import { searchBothHybrid } from '../sharing/search-both.js';
|
|
19
|
+
import { loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
|
|
20
|
+
import { isJsonNumber } from '../util/json.js';
|
|
21
|
+
import { textOverlap, tokenize as tokenizeQuery } from '../util/tokenize.js';
|
|
22
|
+
/** Ranks memories for a query as `hippo recall` does, through the `limit` slice. Reads stores, embeddings and physics state; writes and prints nothing
|
|
23
|
+
* (notes go to `ctx.note`). The caller supplies the cost function and reranker in `opts` and persists the returned goal-log rows. */
|
|
23
24
|
export async function rankRecall(ctx, opts) {
|
|
24
25
|
const pool = loadRecallPool(ctx, opts);
|
|
25
26
|
const state = { results: [], droppedPreRank: pool.dropped, graphAdded: 0, goalRecallLog: [] };
|
|
@@ -111,7 +112,9 @@ async function searchPool(ctx, opts, pool) {
|
|
|
111
112
|
if (search.usePhysics && !globalRoot) {
|
|
112
113
|
// Explain leaves minResults and includeSuperseded out to hold its output steady; asOf must reach physics or later rows leak.
|
|
113
114
|
const temporal = explain ? { asOf } : { minResults, includeSuperseded, asOf };
|
|
114
|
-
return physicsSearch(query, pool.local, {
|
|
115
|
+
return physicsSearch(query, pool.local, {
|
|
116
|
+
budget, cost, hippoRoot: ctx.hippoRoot, physicsConfig: search.physicsConfig, scope, explain, vectorCandidates, ...temporal
|
|
117
|
+
});
|
|
115
118
|
}
|
|
116
119
|
if (globalRoot) {
|
|
117
120
|
// searchBothHybrid reloads candidates itself, so the scope rule is passed in rather than inherited from the pool.
|
|
@@ -121,7 +124,9 @@ async function searchPool(ctx, opts, pool) {
|
|
|
121
124
|
recallScope: opts.explicitScope ? { requested: opts.explicitScope, additive: true } : {},
|
|
122
125
|
});
|
|
123
126
|
}
|
|
124
|
-
return hybridSearch(query, pool.local, {
|
|
127
|
+
return hybridSearch(query, pool.local, {
|
|
128
|
+
budget, cost, hippoRoot: ctx.hippoRoot, explain, mmr, mmrLambda, minResults, scope, includeSuperseded, asOf, vectorCandidates
|
|
129
|
+
});
|
|
125
130
|
}
|
|
126
131
|
/** Adds memories reached by walking the entity graph out from the lexical seeds. */
|
|
127
132
|
function expandGraph(ctx, opts, graph, state) {
|
|
@@ -155,7 +160,7 @@ function traced(opts, prev, next, step) {
|
|
|
155
160
|
}
|
|
156
161
|
/** Re-sort after a score change. Plain and stable on purpose: ties keep the prior rank, not a content order. */
|
|
157
162
|
function byScore(results) {
|
|
158
|
-
return results.sort((a, b) =>
|
|
163
|
+
return results.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
159
164
|
}
|
|
160
165
|
function applyPfcRerankers(opts, state) {
|
|
161
166
|
if (opts.evcAdaptive && state.results.length >= 2)
|
|
@@ -168,8 +173,8 @@ function applyPfcRerankers(opts, state) {
|
|
|
168
173
|
const hasPeerInResults = (r.entry.conflicts_with || []).some((peerId) => presentIds.has(peerId));
|
|
169
174
|
if (!hasPeerInResults)
|
|
170
175
|
return r;
|
|
171
|
-
const next = { ...r, score: r.score *
|
|
172
|
-
return traced(opts, r, next, { stage: 'interference', multiplier:
|
|
176
|
+
const next = { ...r, score: r.score * CONFLICT_PEER_MULTIPLIER };
|
|
177
|
+
return traced(opts, r, next, { stage: 'interference', multiplier: CONFLICT_PEER_MULTIPLIER, scoreBefore: r.score, scoreAfter: next.score });
|
|
173
178
|
}));
|
|
174
179
|
}
|
|
175
180
|
if (opts.valueAware && state.results.length >= 1) {
|
|
@@ -179,7 +184,7 @@ function applyPfcRerankers(opts, state) {
|
|
|
179
184
|
const neg = r.entry.outcome_negative ?? 0;
|
|
180
185
|
if (pos === 0 && neg === 0)
|
|
181
186
|
return r;
|
|
182
|
-
const valueMult = Math.max(
|
|
187
|
+
const valueMult = Math.max(VALUE_MULT_MIN, Math.min(VALUE_MULT_MAX, 1 + VALUE_MULT_SLOPE * Math.tanh(pos - neg)));
|
|
183
188
|
const next = { ...r, score: r.score * valueMult };
|
|
184
189
|
return traced(opts, r, next, { stage: 'value', multiplier: valueMult, scoreBefore: r.score, scoreAfter: next.score });
|
|
185
190
|
}));
|
|
@@ -187,13 +192,27 @@ function applyPfcRerankers(opts, state) {
|
|
|
187
192
|
if (opts.rerankUtility) {
|
|
188
193
|
// utility = score * (0.5 + 0.5 * strength) * (1 - min(0.3, tokens / 10000)); long evidence-rich rows pay for length.
|
|
189
194
|
state.results = byScore(state.results.map((r) => {
|
|
190
|
-
const strength =
|
|
191
|
-
const utilityMult = (
|
|
195
|
+
const strength = isJsonNumber(r.entry.strength) ? r.entry.strength : 1.0;
|
|
196
|
+
const utilityMult = (STRENGTH_RANK_FLOOR + STRENGTH_RANK_SPAN * strength) * (1 - Math.min(UTILITY_LENGTH_PENALTY_CAP, (r.tokens || 0) / UTILITY_LENGTH_TOKENS));
|
|
192
197
|
const utility = r.score * utilityMult;
|
|
193
198
|
return traced(opts, r, { ...r, score: utility }, { stage: 'utility', multiplier: utilityMult, scoreBefore: r.score, scoreAfter: utility });
|
|
194
199
|
}));
|
|
195
200
|
}
|
|
196
201
|
}
|
|
202
|
+
// A recorded conflict peer in the same result list is cut to this share of its score.
|
|
203
|
+
const CONFLICT_PEER_MULTIPLIER = 0.3;
|
|
204
|
+
// The value-aware clamp is wider than the always-on outcome nudge, so outcome history can decide the order.
|
|
205
|
+
const VALUE_MULT_SLOPE = 0.3;
|
|
206
|
+
const VALUE_MULT_MIN = 0.7;
|
|
207
|
+
const VALUE_MULT_MAX = 1.3;
|
|
208
|
+
const UTILITY_LENGTH_PENALTY_CAP = 0.3;
|
|
209
|
+
const UTILITY_LENGTH_TOKENS = 10000;
|
|
210
|
+
// evcAdaptive acts when the top hits overlap this much; it keeps rows near the best score or covering the query.
|
|
211
|
+
const NEAR_DUPLICATE_OVERLAP_MIN = 0.4;
|
|
212
|
+
const SCORE_FLOOR_FRACTION = 0.5;
|
|
213
|
+
const QUERY_COVERAGE_MIN = 0.6;
|
|
214
|
+
const GOAL_TAG_BOOST = 1.5;
|
|
215
|
+
const SALIENCE_MIN_MULTIPLIER = 0.5;
|
|
197
216
|
/** When the top hits are near-duplicates (same topic, different facts), surface the newest on-topic row first. */
|
|
198
217
|
function evcAdaptive(query, results) {
|
|
199
218
|
const slice = results.slice(0, Math.min(3, results.length));
|
|
@@ -205,11 +224,11 @@ function evcAdaptive(query, results) {
|
|
|
205
224
|
pairs++;
|
|
206
225
|
}
|
|
207
226
|
}
|
|
208
|
-
if ((pairs > 0 ? overlapSum / pairs : 0) <
|
|
227
|
+
if ((pairs > 0 ? overlapSum / pairs : 0) < NEAR_DUPLICATE_OVERLAP_MIN)
|
|
209
228
|
return results;
|
|
210
229
|
const poolSize = Math.min(results.length, Math.max(slice.length * 3, 9));
|
|
211
230
|
const pool = results.slice(0, poolSize);
|
|
212
|
-
const scoreFloor = pool.reduce((m, r) => Math.max(m, r.score), 0) *
|
|
231
|
+
const scoreFloor = pool.reduce((m, r) => Math.max(m, r.score), 0) * SCORE_FLOOR_FRACTION;
|
|
213
232
|
// Query coverage catches the differently phrased update a score floor alone would miss.
|
|
214
233
|
const queryTokens = new Set(tokenizeQuery(query));
|
|
215
234
|
const onTopic = [];
|
|
@@ -223,7 +242,7 @@ function evcAdaptive(query, results) {
|
|
|
223
242
|
hits++;
|
|
224
243
|
}
|
|
225
244
|
const queryCoverage = queryTokens.size > 0 ? hits / queryTokens.size : 0;
|
|
226
|
-
(r.score >= scoreFloor || queryCoverage >=
|
|
245
|
+
(r.score >= scoreFloor || queryCoverage >= QUERY_COVERAGE_MIN ? onTopic : offTopic).push(r);
|
|
227
246
|
}
|
|
228
247
|
// Recency is the primary key; identity only breaks exact-timestamp ties.
|
|
229
248
|
onTopic.sort((a, b) => {
|
|
@@ -248,29 +267,22 @@ function applyGoalBoosts(ctx, opts, state) {
|
|
|
248
267
|
state.results = byScore(state.results.map((r) => {
|
|
249
268
|
if (!r.entry.tags?.includes(goalTag))
|
|
250
269
|
return r;
|
|
251
|
-
const boosted = { ...r, score: r.score *
|
|
252
|
-
return traced(opts, r, boosted, {
|
|
270
|
+
const boosted = { ...r, score: r.score * GOAL_TAG_BOOST };
|
|
271
|
+
return traced(opts, r, boosted, {
|
|
272
|
+
stage: 'goal', multiplier: GOAL_TAG_BOOST, scoreBefore: r.score, scoreAfter: r.score * GOAL_TAG_BOOST, note: `--goal ${goalTag}`
|
|
273
|
+
});
|
|
253
274
|
}));
|
|
254
275
|
return;
|
|
255
276
|
}
|
|
256
277
|
if (!opts.sessionId)
|
|
257
278
|
return;
|
|
258
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
259
279
|
// The helper re-spreads rows, so its steps come back in a map keyed by entry id.
|
|
260
280
|
const goalBoostTrace = opts.why ? new Map() : undefined;
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
trace: goalBoostTrace,
|
|
267
|
-
});
|
|
268
|
-
state.results = boost.results;
|
|
269
|
-
state.goalRecallLog = boost.log;
|
|
270
|
-
}
|
|
271
|
-
finally {
|
|
272
|
-
closeHippoDb(db);
|
|
273
|
-
}
|
|
281
|
+
const session = { sessionId: opts.sessionId, tenantId: ctx.tenantId };
|
|
282
|
+
// The log may name global rows; the store drops those when it writes, as it does for api.recall.
|
|
283
|
+
const boost = boostByGoals(state.results, activeGoalsWithPolicies(ctx.hippoRoot, session), { ...session, limit: opts.limit, trace: goalBoostTrace });
|
|
284
|
+
state.results = boost.results;
|
|
285
|
+
state.goalRecallLog = boost.log;
|
|
274
286
|
if (goalBoostTrace && goalBoostTrace.size > 0) {
|
|
275
287
|
state.results = state.results.map((r) => {
|
|
276
288
|
const step = goalBoostTrace.get(r.entry.id);
|
|
@@ -284,7 +296,7 @@ function applySalience(opts, threshold, results) {
|
|
|
284
296
|
const count = r.entry.retrieval_count ?? 0;
|
|
285
297
|
if (count >= threshold)
|
|
286
298
|
return r;
|
|
287
|
-
const mult = Math.max(
|
|
299
|
+
const mult = Math.max(SALIENCE_MIN_MULTIPLIER, count / threshold);
|
|
288
300
|
const next = { ...r, score: r.score * mult };
|
|
289
301
|
return traced(opts, r, next, { stage: 'retrieval-count-downweight', multiplier: mult, scoreBefore: r.score, scoreAfter: next.score });
|
|
290
302
|
}));
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { type AppendAuditOpts, type AuditOp } from '../audit.js';
|
|
2
|
-
import type { AvailabilityHint } from '
|
|
3
|
-
import { RingBuffer, type AnchoringHint, type RecallHistorySnapshot } from '
|
|
1
|
+
import { type AppendAuditOpts, type AuditOp } from '../store/audit.js';
|
|
2
|
+
import type { AvailabilityHint } from './availability.js';
|
|
3
|
+
import { RingBuffer, type AnchoringHint, type RecallHistorySnapshot } from './recall-history.js';
|
|
4
|
+
import type { RecallWrites } from '../store/index.js';
|
|
5
|
+
import type { Context } from './types.js';
|
|
4
6
|
export type RecallSurface = 'cli' | 'mcp' | 'http';
|
|
5
7
|
/** The session's ring, created on first use; null when anchoring is off or the call has no session. */
|
|
6
8
|
export declare function sessionRing(surface: RecallSurface, tenantId: string, sessionId: string | undefined): RingBuffer | null;
|
|
@@ -9,19 +11,16 @@ export declare function peekSessionRing(surface: RecallSurface, tenantId: string
|
|
|
9
11
|
/** Records this recall's top row and hint, which the next recall's cooldown reads. */
|
|
10
12
|
export declare function noteRecall(ring: RingBuffer, query: string, topId: string | null, anchoredOn: string | undefined): void;
|
|
11
13
|
export declare function resetSessionRings(surface: RecallSurface): void;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
/** Whom a recall audit row names. */
|
|
15
|
+
export interface RecallAuditCaller {
|
|
14
16
|
readonly tenantId: string;
|
|
15
17
|
readonly actor: string;
|
|
16
|
-
/** Log and count a failed write instead of throwing, for a CLI command that has already done its work. */
|
|
17
|
-
readonly bestEffort?: boolean;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
export declare function callerOf(ctx: Context): RecallAuditCaller;
|
|
20
|
+
/** The strengthen every ranker of `retrieve` hands to the recall's write: the shown ids, in the caller's tenant. */
|
|
21
|
+
export declare function strengthenOf(ctx: Context, ids: readonly string[]): NonNullable<RecallWrites['strengthen']>;
|
|
21
22
|
type RecallAuditMetadata = Readonly<Record<string, string | number | null>>;
|
|
22
23
|
export declare function recallAuditRow(who: RecallAuditCaller, op: AuditOp, targetId?: string, metadata?: RecallAuditMetadata): AppendAuditOpts;
|
|
23
|
-
/** One audit row on its own short-lived handle. */
|
|
24
|
-
export declare function appendRecallAudit(who: RecallAuditor, op: AuditOp, targetId?: string, metadata?: RecallAuditMetadata): void;
|
|
25
24
|
export declare function recallAuditMetadata(query: string, results: number): {
|
|
26
25
|
results: number;
|
|
27
26
|
query_hash: string;
|
|
@@ -40,7 +39,5 @@ export interface ShownRecall {
|
|
|
40
39
|
}
|
|
41
40
|
/** 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. */
|
|
42
41
|
export declare function shownRecallRows(who: RecallAuditCaller, shown: ShownRecall): AppendAuditOpts[];
|
|
43
|
-
/** For a surface that computes its hints over the list it shows: feeds the ring after the final detect, then audits the hints. */
|
|
44
|
-
export declare function recordShownRecall(who: RecallAuditor, shown: ShownRecall): void;
|
|
45
42
|
export {};
|
|
46
43
|
//# sourceMappingURL=recall-record.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The recall session rings and the recall audit rows, in one place for the CLI, MCP and HTTP surfaces.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { appendRecall, biasHintEnabled, buildSessionKey, getOrCreateRing, hashQueryText, snapshotRing, } from '
|
|
2
|
+
import { isRecallBoostAblated } from '../core/ablation.js';
|
|
3
|
+
import { auditQueryFields } from '../store/audit.js';
|
|
4
|
+
import { appendRecall, biasHintEnabled, buildSessionKey, getOrCreateRing, hashQueryText, snapshotRing, } from './recall-history.js';
|
|
5
5
|
// One map per surface, each with its own LRU cap, so a repeat on one surface is a first recall on another.
|
|
6
6
|
const rings = {
|
|
7
7
|
cli: new Map(),
|
|
@@ -26,28 +26,15 @@ export function noteRecall(ring, query, topId, anchoredOn) {
|
|
|
26
26
|
export function resetSessionRings(surface) {
|
|
27
27
|
rings[surface].clear();
|
|
28
28
|
}
|
|
29
|
-
export function
|
|
30
|
-
return { tenantId:
|
|
29
|
+
export function callerOf(ctx) {
|
|
30
|
+
return { tenantId: ctx.tenantId, actor: ctx.actor.subject };
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
appendAuditEvent(db, row);
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
closeHippoDb(db);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
if (!who.bestEffort)
|
|
44
|
-
throw err;
|
|
45
|
-
reportAuditWriteFailure(row.op, String(err), row.targetId);
|
|
46
|
-
}
|
|
32
|
+
/** The strengthen every ranker of `retrieve` hands to the recall's write: the shown ids, in the caller's tenant. */
|
|
33
|
+
export function strengthenOf(ctx, ids) {
|
|
34
|
+
return { ids, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
|
|
47
35
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
writeRecallAudit(who, recallAuditRow(who, op, targetId, metadata));
|
|
36
|
+
export function recallAuditRow(who, op, targetId, metadata) {
|
|
37
|
+
return { tenantId: who.tenantId, actor: who.actor, op, targetId, metadata };
|
|
51
38
|
}
|
|
52
39
|
// The row stores a hash of the query, never its text, so an archived memory's words cannot persist there.
|
|
53
40
|
export function recallAuditMetadata(query, results) {
|
|
@@ -88,11 +75,4 @@ export function shownRecallRows(who, shown) {
|
|
|
88
75
|
...availabilityRows(who, shown.availability),
|
|
89
76
|
];
|
|
90
77
|
}
|
|
91
|
-
/** For a surface that computes its hints over the list it shows: feeds the ring after the final detect, then audits the hints. */
|
|
92
|
-
export function recordShownRecall(who, shown) {
|
|
93
|
-
if (shown.ring)
|
|
94
|
-
noteRecall(shown.ring, shown.query, shown.topId, shown.anchoring?.memoryId);
|
|
95
|
-
for (const row of shownRecallRows(who, shown))
|
|
96
|
-
writeRecallAudit(who, row);
|
|
97
|
-
}
|
|
98
78
|
//# sourceMappingURL=recall-record.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BadRequestError } from '../api-errors.js';
|
|
2
|
-
import { type JsonValue } from '../json.js';
|
|
1
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
2
|
+
import { type JsonValue } from '../util/json.js';
|
|
3
3
|
import type { ContextOpts } from './context-types.js';
|
|
4
4
|
import type { RecallOpts } from './recall-types.js';
|
|
5
5
|
/** A recall or context input the caller must fix; MCP answers it with an isError result, HTTP with a 400. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The recall and context input rules in one copy, so MCP and HTTP reject the same inputs with the same messages.
|
|
2
|
-
import { BadRequestError } from '../api-errors.js';
|
|
3
|
-
import { MAX_ID_LEN } from '../http-util.js';
|
|
4
|
-
import { isJsonString } from '../json.js';
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
|
+
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
4
|
+
import { isJsonString } from '../util/json.js';
|
|
5
5
|
const MAX_RECALL_LIMIT = 1000;
|
|
6
6
|
// recall() owns the shape rule for scorer_window (invalid_scorer_window); this cap bounds remote cost.
|
|
7
7
|
const MAX_SCORER_WINDOW = 1000;
|