hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- 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 +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- 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/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- 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} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- 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/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- 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 +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- 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 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- 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 +1 -1
- package/dist/capture/command.js +54 -41
- 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 +4 -1
- package/dist/capture/compact.js +59 -22
- 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} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- 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.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- 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} +5 -5
- 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} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -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 +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- 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/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- 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} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- 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 +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- 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} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- 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 +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- 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 +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -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/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- 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 -1
- package/dist/search/boosts.js +34 -13
- 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/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -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} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- 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/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- 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 +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- 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 +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- 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 +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- 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/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- 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 +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -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 +28 -0
- package/dist/store/sqlite/executor.js +286 -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 +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -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 +26 -0
- package/dist/store/sqlite/store.js +295 -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 +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- 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} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- 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 +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- 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 +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- 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} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- 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 +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- 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/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- 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/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{recall-history.d.ts → api/recall-history.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/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +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/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +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/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.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.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +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/{secret-detect.d.ts → util/secret-detect.d.ts} +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/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.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
|
@@ -1,22 +1,22 @@
|
|
|
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 {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { hybridSearch } from '
|
|
16
|
-
import { physicsSearch } from '
|
|
17
|
-
import { searchBothHybrid } from '
|
|
18
|
-
import { loadRecallSearchEntries, recallScopeFilter } from '
|
|
19
|
-
import { textOverlap, tokenize as tokenizeQuery } from '
|
|
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, boostByGoals } from '../store/goals.js';
|
|
8
|
+
import { graphExpandRecall } from '../graph/recall.js';
|
|
9
|
+
import { DEFAULT_GRAPH_STREAM_WEIGHT } from '../graph/stream.js';
|
|
10
|
+
import { Layer } from '../core/memory.js';
|
|
11
|
+
import { multihopSearch } from '../search/multihop.js';
|
|
12
|
+
import { passesCliRecallScopeFilter } from '../store/recall-scope.js';
|
|
13
|
+
import { currentEntries } from '../search/as-of.js';
|
|
14
|
+
import { STRENGTH_RANK_FLOOR, STRENGTH_RANK_SPAN } from '../search/boosts.js';
|
|
15
|
+
import { hybridSearch } from '../search/hybrid.js';
|
|
16
|
+
import { physicsSearch } from '../search/physics-search.js';
|
|
17
|
+
import { searchBothHybrid } from '../sharing/shared.js';
|
|
18
|
+
import { loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
|
|
19
|
+
import { textOverlap, tokenize as tokenizeQuery } from '../util/tokenize.js';
|
|
20
20
|
/** Ranks memories for a query as `hippo recall` does, through the `limit` slice. Reads stores, embeddings and
|
|
21
21
|
* physics state; writes nothing and prints nothing (notes go to `ctx.note`). The caller supplies the cost
|
|
22
22
|
* function and reranker in `opts`, and persists the returned goal-log rows. */
|
|
@@ -155,7 +155,7 @@ function traced(opts, prev, next, step) {
|
|
|
155
155
|
}
|
|
156
156
|
/** Re-sort after a score change. Plain and stable on purpose: ties keep the prior rank, not a content order. */
|
|
157
157
|
function byScore(results) {
|
|
158
|
-
return results.sort((a, b) =>
|
|
158
|
+
return results.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
159
159
|
}
|
|
160
160
|
function applyPfcRerankers(opts, state) {
|
|
161
161
|
if (opts.evcAdaptive && state.results.length >= 2)
|
|
@@ -168,8 +168,8 @@ function applyPfcRerankers(opts, state) {
|
|
|
168
168
|
const hasPeerInResults = (r.entry.conflicts_with || []).some((peerId) => presentIds.has(peerId));
|
|
169
169
|
if (!hasPeerInResults)
|
|
170
170
|
return r;
|
|
171
|
-
const next = { ...r, score: r.score *
|
|
172
|
-
return traced(opts, r, next, { stage: 'interference', multiplier:
|
|
171
|
+
const next = { ...r, score: r.score * CONFLICT_PEER_MULTIPLIER };
|
|
172
|
+
return traced(opts, r, next, { stage: 'interference', multiplier: CONFLICT_PEER_MULTIPLIER, scoreBefore: r.score, scoreAfter: next.score });
|
|
173
173
|
}));
|
|
174
174
|
}
|
|
175
175
|
if (opts.valueAware && state.results.length >= 1) {
|
|
@@ -179,7 +179,7 @@ function applyPfcRerankers(opts, state) {
|
|
|
179
179
|
const neg = r.entry.outcome_negative ?? 0;
|
|
180
180
|
if (pos === 0 && neg === 0)
|
|
181
181
|
return r;
|
|
182
|
-
const valueMult = Math.max(
|
|
182
|
+
const valueMult = Math.max(VALUE_MULT_MIN, Math.min(VALUE_MULT_MAX, 1 + VALUE_MULT_SLOPE * Math.tanh(pos - neg)));
|
|
183
183
|
const next = { ...r, score: r.score * valueMult };
|
|
184
184
|
return traced(opts, r, next, { stage: 'value', multiplier: valueMult, scoreBefore: r.score, scoreAfter: next.score });
|
|
185
185
|
}));
|
|
@@ -188,12 +188,26 @@ function applyPfcRerankers(opts, state) {
|
|
|
188
188
|
// utility = score * (0.5 + 0.5 * strength) * (1 - min(0.3, tokens / 10000)); long evidence-rich rows pay for length.
|
|
189
189
|
state.results = byScore(state.results.map((r) => {
|
|
190
190
|
const strength = typeof r.entry.strength === 'number' ? r.entry.strength : 1.0;
|
|
191
|
-
const utilityMult = (
|
|
191
|
+
const utilityMult = (STRENGTH_RANK_FLOOR + STRENGTH_RANK_SPAN * strength) * (1 - Math.min(UTILITY_LENGTH_PENALTY_CAP, (r.tokens || 0) / UTILITY_LENGTH_TOKENS));
|
|
192
192
|
const utility = r.score * utilityMult;
|
|
193
193
|
return traced(opts, r, { ...r, score: utility }, { stage: 'utility', multiplier: utilityMult, scoreBefore: r.score, scoreAfter: utility });
|
|
194
194
|
}));
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
|
+
// A recorded conflict peer in the same result list is cut to this share of its score.
|
|
198
|
+
const CONFLICT_PEER_MULTIPLIER = 0.3;
|
|
199
|
+
// The value-aware clamp is wider than the always-on outcome nudge, so outcome history can decide the order.
|
|
200
|
+
const VALUE_MULT_SLOPE = 0.3;
|
|
201
|
+
const VALUE_MULT_MIN = 0.7;
|
|
202
|
+
const VALUE_MULT_MAX = 1.3;
|
|
203
|
+
const UTILITY_LENGTH_PENALTY_CAP = 0.3;
|
|
204
|
+
const UTILITY_LENGTH_TOKENS = 10000;
|
|
205
|
+
// evcAdaptive acts when the top hits overlap this much; it keeps rows near the best score or covering the query.
|
|
206
|
+
const NEAR_DUPLICATE_OVERLAP_MIN = 0.4;
|
|
207
|
+
const SCORE_FLOOR_FRACTION = 0.5;
|
|
208
|
+
const QUERY_COVERAGE_MIN = 0.6;
|
|
209
|
+
const GOAL_TAG_BOOST = 1.5;
|
|
210
|
+
const SALIENCE_MIN_MULTIPLIER = 0.5;
|
|
197
211
|
/** When the top hits are near-duplicates (same topic, different facts), surface the newest on-topic row first. */
|
|
198
212
|
function evcAdaptive(query, results) {
|
|
199
213
|
const slice = results.slice(0, Math.min(3, results.length));
|
|
@@ -205,11 +219,11 @@ function evcAdaptive(query, results) {
|
|
|
205
219
|
pairs++;
|
|
206
220
|
}
|
|
207
221
|
}
|
|
208
|
-
if ((pairs > 0 ? overlapSum / pairs : 0) <
|
|
222
|
+
if ((pairs > 0 ? overlapSum / pairs : 0) < NEAR_DUPLICATE_OVERLAP_MIN)
|
|
209
223
|
return results;
|
|
210
224
|
const poolSize = Math.min(results.length, Math.max(slice.length * 3, 9));
|
|
211
225
|
const pool = results.slice(0, poolSize);
|
|
212
|
-
const scoreFloor = pool.reduce((m, r) => Math.max(m, r.score), 0) *
|
|
226
|
+
const scoreFloor = pool.reduce((m, r) => Math.max(m, r.score), 0) * SCORE_FLOOR_FRACTION;
|
|
213
227
|
// Query coverage catches the differently phrased update a score floor alone would miss.
|
|
214
228
|
const queryTokens = new Set(tokenizeQuery(query));
|
|
215
229
|
const onTopic = [];
|
|
@@ -223,7 +237,7 @@ function evcAdaptive(query, results) {
|
|
|
223
237
|
hits++;
|
|
224
238
|
}
|
|
225
239
|
const queryCoverage = queryTokens.size > 0 ? hits / queryTokens.size : 0;
|
|
226
|
-
(r.score >= scoreFloor || queryCoverage >=
|
|
240
|
+
(r.score >= scoreFloor || queryCoverage >= QUERY_COVERAGE_MIN ? onTopic : offTopic).push(r);
|
|
227
241
|
}
|
|
228
242
|
// Recency is the primary key; identity only breaks exact-timestamp ties.
|
|
229
243
|
onTopic.sort((a, b) => {
|
|
@@ -248,29 +262,20 @@ function applyGoalBoosts(ctx, opts, state) {
|
|
|
248
262
|
state.results = byScore(state.results.map((r) => {
|
|
249
263
|
if (!r.entry.tags?.includes(goalTag))
|
|
250
264
|
return r;
|
|
251
|
-
const boosted = { ...r, score: r.score *
|
|
252
|
-
return traced(opts, r, boosted, { stage: 'goal', multiplier:
|
|
265
|
+
const boosted = { ...r, score: r.score * GOAL_TAG_BOOST };
|
|
266
|
+
return traced(opts, r, boosted, { stage: 'goal', multiplier: GOAL_TAG_BOOST, scoreBefore: r.score, scoreAfter: r.score * GOAL_TAG_BOOST, note: `--goal ${goalTag}` });
|
|
253
267
|
}));
|
|
254
268
|
return;
|
|
255
269
|
}
|
|
256
270
|
if (!opts.sessionId)
|
|
257
271
|
return;
|
|
258
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
259
272
|
// The helper re-spreads rows, so its steps come back in a map keyed by entry id.
|
|
260
273
|
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
|
-
}
|
|
274
|
+
const session = { sessionId: opts.sessionId, tenantId: ctx.tenantId };
|
|
275
|
+
// The log may name global rows; the store drops those when it writes, as it does for api.recall.
|
|
276
|
+
const boost = boostByGoals(state.results, activeGoalsWithPolicies(ctx.hippoRoot, session), { ...session, limit: opts.limit, trace: goalBoostTrace });
|
|
277
|
+
state.results = boost.results;
|
|
278
|
+
state.goalRecallLog = boost.log;
|
|
274
279
|
if (goalBoostTrace && goalBoostTrace.size > 0) {
|
|
275
280
|
state.results = state.results.map((r) => {
|
|
276
281
|
const step = goalBoostTrace.get(r.entry.id);
|
|
@@ -284,7 +289,7 @@ function applySalience(opts, threshold, results) {
|
|
|
284
289
|
const count = r.entry.retrieval_count ?? 0;
|
|
285
290
|
if (count >= threshold)
|
|
286
291
|
return r;
|
|
287
|
-
const mult = Math.max(
|
|
292
|
+
const mult = Math.max(SALIENCE_MIN_MULTIPLIER, count / threshold);
|
|
288
293
|
const next = { ...r, score: r.score * mult };
|
|
289
294
|
return traced(opts, r, next, { stage: 'retrieval-count-downweight', multiplier: mult, scoreBefore: r.score, scoreAfter: next.score });
|
|
290
295
|
}));
|
|
@@ -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;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
1
|
+
import type { ContinuityBlock } from '../store/port.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
3
|
+
import type { RerankStep, SearchResult } from '../core/search-types.js';
|
|
4
|
+
import type { PlanningFallacyHint, PlanningFallacyOutput, PlanningFallacyWatching } from '../predictions/planning-fallacy.js';
|
|
5
|
+
import type { AnchoringHint, RecallHistorySnapshot } from './recall-history.js';
|
|
6
|
+
import type { AvailabilityHint } from './availability.js';
|
|
7
|
+
import type { AppendAuditOpts } from '../store/audit.js';
|
|
8
|
+
import type { CallerProject } from './prompt-hook.js';
|
|
9
|
+
import type { RankRecallOpts, RankRecallResult } from './recall-pipeline.js';
|
|
10
10
|
export interface RecallOpts {
|
|
11
11
|
query: string;
|
|
12
12
|
limit?: number;
|
|
@@ -155,6 +155,35 @@ export interface RecallOpts {
|
|
|
155
155
|
leadingAudit?: readonly AppendAuditOpts[];
|
|
156
156
|
/** MCP recall only: `retrieve` ranks the whole scoped store and strengthens and traces (pipeline 'mcp') just the ids this returns; `results` stays the window band. */
|
|
157
157
|
showRanked?: (ranking: StoreRanking, result: RecallResult) => ShownRanking;
|
|
158
|
+
/** Named ranker: `retrieve` ranks with the CLI ranking core. Unset, it ranks the SQL BM25 band, or the wide hybrid list under `showRanked`. */
|
|
159
|
+
cliCore?: CliCoreRanker;
|
|
160
|
+
}
|
|
161
|
+
interface CliCoreRanking {
|
|
162
|
+
rank: Omit<RankRecallOpts, 'query' | 'sessionId' | 'goalTag'>;
|
|
163
|
+
/** A second store searched beside `ctx.hippoRoot`. */
|
|
164
|
+
sources?: {
|
|
165
|
+
globalRoot?: string;
|
|
166
|
+
};
|
|
167
|
+
/** Receives each operator note when ranking reaches it. */
|
|
168
|
+
note?: (line: string) => void;
|
|
169
|
+
}
|
|
170
|
+
/** A recall the caller prints. `show` runs once ranking ends, unless it halted; `retrieve` then records the list it returns. */
|
|
171
|
+
export interface CliCoreRecall extends CliCoreRanking {
|
|
172
|
+
/** The host agent's session: it stamps the token ledger row, and the trace when the recall names no session. */
|
|
173
|
+
hostSessionId?: string;
|
|
174
|
+
show: (ranking: RankRecallResult, planning: PlanningFallacyOutput) => ShownCliCore;
|
|
175
|
+
}
|
|
176
|
+
/** A read-only look at the ranking (`hippo explain`): no hint is evaluated and nothing is written. */
|
|
177
|
+
export interface CliCoreInspection extends CliCoreRanking {
|
|
178
|
+
inspect: (ranking: RankRecallResult) => void;
|
|
179
|
+
}
|
|
180
|
+
/** The CLI ranking core (`rankRecall`) as a ranker of `retrieve`: host admin only, on hippo.db. Of the other RecallOpts it reads `query`, `sessionId` and `goalTag`. */
|
|
181
|
+
export type CliCoreRanker = CliCoreRecall | CliCoreInspection;
|
|
182
|
+
/** `results`: the rows the caller shows, best first; `audit`: its hint rows, written ahead of the 'recall' row; `tokens`: the text it prints, for the ledger. */
|
|
183
|
+
export interface ShownCliCore {
|
|
184
|
+
results: readonly SearchResult[];
|
|
185
|
+
audit: readonly AppendAuditOpts[];
|
|
186
|
+
tokens: number;
|
|
158
187
|
}
|
|
159
188
|
/** `ids`: what the caller showed; `audit`: its own rows, written after the recall's and in the same transaction, so all land or none. */
|
|
160
189
|
export interface ShownRanking {
|
|
@@ -167,11 +196,7 @@ export interface StoreRanking {
|
|
|
167
196
|
pool: MemoryEntry[];
|
|
168
197
|
droppedByScope: number;
|
|
169
198
|
}
|
|
170
|
-
export
|
|
171
|
-
activeSnapshot: TaskSnapshot | null;
|
|
172
|
-
sessionHandoff: SessionHandoff | null;
|
|
173
|
-
recentSessionEvents: SessionEvent[];
|
|
174
|
-
}
|
|
199
|
+
export type { ContinuityBlock } from '../store/port.js';
|
|
175
200
|
export interface RecallResultItem {
|
|
176
201
|
id: string;
|
|
177
202
|
content: string;
|
|
@@ -263,7 +288,7 @@ export interface RecallResult {
|
|
|
263
288
|
* the calling agent sees its track record at the moment of forecasting
|
|
264
289
|
* (Lovallo-Kahneman 2003 inside-vs-outside view).
|
|
265
290
|
*
|
|
266
|
-
* Populated by `api.recall` itself via `
|
|
291
|
+
* Populated by `api.recall` itself via `decidePlanningFallacy`.
|
|
267
292
|
* Pipeline-invariant: the value depends only on (queryText, tenantId,
|
|
268
293
|
* predictions table state) — all three are identical regardless of
|
|
269
294
|
* which downstream search pipeline produces the memory list, so MCP
|
|
@@ -372,7 +397,7 @@ export interface RecallSuppressionSummary {
|
|
|
372
397
|
/** Counter of memories suppressed by detected interference patterns.
|
|
373
398
|
* Incremented by 1 PER PIPELINE when that
|
|
374
399
|
* pipeline's own memory_dominance verdict fires (via the
|
|
375
|
-
* anchoring detector, see `detectAnchoring()` in src/recall-history.ts).
|
|
400
|
+
* anchoring detector, see `detectAnchoring()` in src/api/recall-history.ts).
|
|
376
401
|
* Each pipeline (api.recall, cmdRecall, MCP physics/hybrid) bumps its
|
|
377
402
|
* OWN suppressionSummary independently because each runs its own
|
|
378
403
|
* detector against its own top-1 + its own per-(tenant, session) ring
|
package/dist/api/recall.d.ts
CHANGED
|
@@ -32,6 +32,6 @@ export declare function buildSuppressionSummary(counts: {
|
|
|
32
32
|
* `tests/api-recall-no-side-effects.test.ts`.
|
|
33
33
|
*/
|
|
34
34
|
export declare function recall(ctx: Context, opts: RecallOpts): RecallResult;
|
|
35
|
-
/**
|
|
35
|
+
/** The one recall entry: ranks with the ranker `opts` names, then writes the recall. Only the CLI core ranker writes last_retrieval_ids (contract lock). */
|
|
36
36
|
export declare function retrieve(ctx: Context, opts: RecallOpts): Promise<RecallResult>;
|
|
37
37
|
//# sourceMappingURL=recall.d.ts.map
|
package/dist/api/recall.js
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
// Read path: recall (sync) and retrieve (async, adds the vector arm).
|
|
2
|
-
import { envRequireSessionScopedFreshTail } from '../env.js';
|
|
2
|
+
import { envRequireSessionScopedFreshTail } from '../util/env.js';
|
|
3
3
|
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
4
|
-
import { isRecallBoostAblated } from '../ablation.js';
|
|
5
4
|
import { loadEntriesByIds, loadFreshRawMemories } from '../store/entry-reads.js';
|
|
6
5
|
import { loadRecallSearchEntries, recallScopeFilter } from '../store/search-rows.js';
|
|
7
|
-
import { estimateTokens } from '../token-
|
|
8
|
-
import { formatHandoffEvidenceLine } from '../handoff.js';
|
|
9
|
-
import { activeGoalsWithPolicies, boostByGoals } from '../goals.js';
|
|
10
|
-
import { continuityAt, finishRecallAt, storeFor } from '../store
|
|
6
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
7
|
+
import { formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
8
|
+
import { activeGoalsWithPolicies, boostByGoals } from '../store/goals.js';
|
|
9
|
+
import { continuityAt, finishRecallAt, storeFor } from '../store/index.js';
|
|
11
10
|
import { hybridSearch } from '../search/hybrid.js';
|
|
12
11
|
import { physicsSearch } from '../search/physics-search.js';
|
|
13
12
|
import { churnStaleFactor } from '../search/boosts.js';
|
|
14
|
-
import { compareEntryIdentity } from '../compare.js';
|
|
15
|
-
import { dropHeldCopies, duplicateKey, storedTextKeys } from '../same-text.js';
|
|
16
|
-
import { isSharedStore, loadConfig } from '../config.js';
|
|
17
|
-
import { classifyOriginProject, projectNames } from '../project-identity.js';
|
|
18
|
-
import { decidePlanningFallacy, detectPlanningClaim
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
13
|
+
import { compareEntryIdentity } from '../core/compare.js';
|
|
14
|
+
import { dropHeldCopies, duplicateKey, storedTextKeys } from '../util/same-text.js';
|
|
15
|
+
import { isSharedStore, loadConfig } from '../core/config.js';
|
|
16
|
+
import { classifyOriginProject, projectNames } from '../core/project-identity.js';
|
|
17
|
+
import { decidePlanningFallacy, detectPlanningClaim } from '../predictions/planning-fallacy.js';
|
|
18
|
+
import { planningFallacyEvidenceAt } from '../store/planning-fallacy-evidence.js';
|
|
19
|
+
import { detectAnchoring, hashQueryText, biasHintEnabled } from './recall-history.js';
|
|
20
|
+
import { detectAvailabilityBias } from './availability.js';
|
|
21
|
+
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
|
|
22
22
|
import { ownerOrSubject, RecallContractError } from './types.js';
|
|
23
|
-
import { anchoringRows, availabilityRows, recallAuditMetadata, recallAuditRow } from './recall-record.js';
|
|
23
|
+
import { anchoringRows, availabilityRows, callerOf, recallAuditMetadata, recallAuditRow, strengthenOf } from './recall-record.js';
|
|
24
|
+
import { retrieveWithCliCore } from './recall-core.js';
|
|
25
|
+
const DEFAULT_RECALL_LIMIT = 10;
|
|
24
26
|
/**
|
|
25
27
|
* Shared construction helper for `RecallSuppressionSummary`. Used by
|
|
26
28
|
* `api.recall`, `cmdRecall`, and the MCP `hippo_recall` handler so all three
|
|
@@ -61,7 +63,7 @@ export function recall(ctx, opts) {
|
|
|
61
63
|
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
62
64
|
const all = loadRecallSearchEntries(ctx.hippoRoot, opts.query, windowSize, ctx.tenantId, opts.scope, 'exact', false, recallOrigin(opts), own);
|
|
63
65
|
const plan = planRecall(ctx, opts, all, own);
|
|
64
|
-
const { result, writes } = composeRecall(ctx, opts, windowSize, all, plan, readRecallSync(ctx, opts, plan));
|
|
66
|
+
const { result, writes } = composeRecall(ctx, opts, { windowSize, all, plan, reads: readRecallSync(ctx, opts, plan) });
|
|
65
67
|
finishRecallAt(ctx.hippoRoot, { ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit] });
|
|
66
68
|
return result;
|
|
67
69
|
}
|
|
@@ -71,9 +73,11 @@ function recallOrigin(opts) {
|
|
|
71
73
|
function inCallerProject(entry, opts) {
|
|
72
74
|
return !opts.project || classifyOriginProject(entry.origin_project, opts.project) !== 'cross-project';
|
|
73
75
|
}
|
|
74
|
-
/**
|
|
76
|
+
/** The one recall entry: ranks with the ranker `opts` names, then writes the recall. Only the CLI core ranker writes last_retrieval_ids (contract lock). */
|
|
75
77
|
export async function retrieve(ctx, opts) {
|
|
76
78
|
assertScopeRequestAllowed(ctx.actor, opts.scope);
|
|
79
|
+
if (opts.cliCore)
|
|
80
|
+
return retrieveWithCliCore(ctx, opts, opts.cliCore);
|
|
77
81
|
const windowSize = recallWindowSize(opts);
|
|
78
82
|
// From the authenticated actor, never from RecallOpts, which a caller fills in.
|
|
79
83
|
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
@@ -90,7 +94,7 @@ export async function retrieve(ctx, opts) {
|
|
|
90
94
|
candidates = [...ranked.map((r) => r.entry), ...candidates.filter((e) => !rankedIds.has(e.id))];
|
|
91
95
|
}
|
|
92
96
|
const plan = planRecall(ctx, opts, candidates, own);
|
|
93
|
-
const { result, writes } = composeRecall(ctx, opts, windowSize, candidates, plan, await readRecall(store, ctx, opts, plan));
|
|
97
|
+
const { result, writes } = composeRecall(ctx, opts, { windowSize, all: candidates, plan, reads: await readRecall(store, ctx, opts, plan) });
|
|
94
98
|
await store.finishRecall({ ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit], strengthen: strengthenOf(ctx, result.results.map((r) => r.id)) });
|
|
95
99
|
return result;
|
|
96
100
|
}
|
|
@@ -106,9 +110,6 @@ function recallSearchArgs(ctx, opts, limit, own) {
|
|
|
106
110
|
ownScope: own,
|
|
107
111
|
};
|
|
108
112
|
}
|
|
109
|
-
function strengthenOf(ctx, ids) {
|
|
110
|
-
return { ids, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
|
|
111
|
-
}
|
|
112
113
|
/** api.retrieve's vector arm: the recall load's exact-scope rule, current rows only. */
|
|
113
114
|
function recallVectorSpec(ctx, opts, own) {
|
|
114
115
|
return {
|
|
@@ -142,7 +143,7 @@ async function retrieveFromStore(ctx, opts, windowSize, show, own) {
|
|
|
142
143
|
const window = ranked.slice(0, windowSize).map((r) => r.entry);
|
|
143
144
|
const bandOpts = { ...opts, suppressRecallTrace: true };
|
|
144
145
|
const plan = planRecall(ctx, bandOpts, window, own);
|
|
145
|
-
const { result, writes } = composeRecall(ctx, bandOpts, windowSize, window, plan, await readRecall(store, ctx, bandOpts, plan, goals), false);
|
|
146
|
+
const { result, writes } = composeRecall(ctx, bandOpts, { windowSize, all: window, plan, reads: await readRecall(store, ctx, bandOpts, plan, goals), auditBand: false });
|
|
146
147
|
// Rows the vector arm added count as candidates too.
|
|
147
148
|
const inPool = new Set(pool.map((e) => e.id));
|
|
148
149
|
const candidates = [...pool, ...ranked.map((r) => r.entry).filter((e) => !inPool.has(e.id))];
|
|
@@ -187,7 +188,7 @@ function recallWindowSize(opts) {
|
|
|
187
188
|
}
|
|
188
189
|
const CONTINUITY_EVENT_LIMIT = 5;
|
|
189
190
|
function planRecall(ctx, opts, all, own) {
|
|
190
|
-
const limit = opts.limit ??
|
|
191
|
+
const limit = opts.limit ?? DEFAULT_RECALL_LIMIT;
|
|
191
192
|
const window = admitCandidates(opts, all, limit, own);
|
|
192
193
|
return {
|
|
193
194
|
limit,
|
|
@@ -228,9 +229,8 @@ function continuityKey(ctx, opts) {
|
|
|
228
229
|
return null;
|
|
229
230
|
return { owner: ownerOrSubject(ctx.actor), project: opts.project ? projectNames(opts.project) : [] };
|
|
230
231
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
function composeRecall(ctx, opts, windowSize, all, plan, reads, auditBand = true) {
|
|
232
|
+
function composeRecall(ctx, opts, options) {
|
|
233
|
+
const { windowSize, all, plan, reads, auditBand = true } = options;
|
|
234
234
|
const { window } = plan;
|
|
235
235
|
const bands = rankBands(opts, plan, reads);
|
|
236
236
|
const rankedOut = bands.rankedOut;
|
|
@@ -319,7 +319,9 @@ function rankBands(opts, plan, reads) {
|
|
|
319
319
|
const baseRanked = baseScored.map((r) => baseItem(r, opts, explainTrace));
|
|
320
320
|
const summaryRanked = substituted.map((s) => summaryItem(s, opts));
|
|
321
321
|
const freshRanked = (opts.freshTailCount ?? 0) > 0
|
|
322
|
-
? freshTailBand(opts,
|
|
322
|
+
? freshTailBand(opts, {
|
|
323
|
+
recent: reads.freshRaws, baseRanked, summaryRanked, shownEntries: opts.keepHeldCopies ? [] : [...baseSlice, ...substituted.map((s) => s.entry)], own,
|
|
324
|
+
})
|
|
323
325
|
: [];
|
|
324
326
|
return {
|
|
325
327
|
rankedOut: [...freshRanked, ...baseRanked, ...summaryRanked],
|
|
@@ -334,7 +336,7 @@ function rankBands(opts, plan, reads) {
|
|
|
334
336
|
// `limit`. Each one is tenant-scoped and re-checked against the scope filter; drillDown recovers the children.
|
|
335
337
|
function substituteOverflow(opts, overflowByParent, parents, limit, own) {
|
|
336
338
|
const eligibleParents = parents.filter((p) => (p.dag_level ?? 0) === 2 && !p.superseded_by && passesScopeFilterForRecall(p.scope ?? null, opts.scope, own) && inCallerProject(p, opts));
|
|
337
|
-
const maxSub = Math.max(1, Math.ceil(limit *
|
|
339
|
+
const maxSub = Math.max(1, Math.ceil(limit * SUMMARY_SUB_FRACTION));
|
|
338
340
|
// Most overflowed children first; compareEntryIdentity only breaks a tie, which used to fall to scan order.
|
|
339
341
|
eligibleParents.sort((a, b) => {
|
|
340
342
|
const ac = overflowByParent.get(a.id)?.length ?? 0;
|
|
@@ -380,12 +382,16 @@ function baseItem(r, opts, explainTrace) {
|
|
|
380
382
|
}
|
|
381
383
|
return item;
|
|
382
384
|
}
|
|
383
|
-
//
|
|
385
|
+
// A summary scores below the strong top-N matches but above the weakest leaves.
|
|
386
|
+
const SUMMARY_ITEM_SCORE = 0.5;
|
|
387
|
+
const FRESH_TAIL_ITEM_SCORE = 1.0;
|
|
388
|
+
// Summaries may take this share of the limit.
|
|
389
|
+
const SUMMARY_SUB_FRACTION = 0.3;
|
|
384
390
|
function summaryItem(s, opts) {
|
|
385
391
|
const item = {
|
|
386
392
|
id: s.entry.id,
|
|
387
393
|
content: s.entry.content,
|
|
388
|
-
score:
|
|
394
|
+
score: SUMMARY_ITEM_SCORE,
|
|
389
395
|
layer: s.entry.layer,
|
|
390
396
|
strength: s.entry.strength,
|
|
391
397
|
isSummary: true,
|
|
@@ -396,9 +402,8 @@ function summaryItem(s, opts) {
|
|
|
396
402
|
item.rerankPipeline = 'api';
|
|
397
403
|
return item;
|
|
398
404
|
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, own) {
|
|
405
|
+
function freshTailBand(opts, options) {
|
|
406
|
+
const { recent, baseRanked, summaryRanked, shownEntries, own } = options;
|
|
402
407
|
const recentScoped = recent.filter((m) => passesScopeFilterForRecall(m.scope ?? null, opts.scope, own) && inCallerProject(m, opts));
|
|
403
408
|
const recentIdSet = new Set(recentScoped.map((m) => m.id));
|
|
404
409
|
for (const r of baseRanked) {
|
|
@@ -415,7 +420,7 @@ function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, ow
|
|
|
415
420
|
const item = {
|
|
416
421
|
id: m.id,
|
|
417
422
|
content: m.content,
|
|
418
|
-
score:
|
|
423
|
+
score: FRESH_TAIL_ITEM_SCORE,
|
|
419
424
|
layer: m.layer,
|
|
420
425
|
strength: m.strength,
|
|
421
426
|
isFreshTail: true,
|
|
@@ -471,9 +476,6 @@ function continuityTokensOf(c) {
|
|
|
471
476
|
tokenize(filteredHandoff?.cardId) +
|
|
472
477
|
c.recentSessionEvents.reduce((acc, e) => acc + tokenize(e.content), 0);
|
|
473
478
|
}
|
|
474
|
-
function callerOf(ctx) {
|
|
475
|
-
return { tenantId: ctx.tenantId, actor: ctx.actor.subject };
|
|
476
|
-
}
|
|
477
479
|
// A pure read of the caller's recallHistory snapshot against this top-1. HIPPO_ANCHORING=off skips even the detect
|
|
478
480
|
// call; CLI paths pass no history (cmdRecall computes its own hint), so the hint stays absent there.
|
|
479
481
|
function detectRecallAnchoring(opts, topMemoryId) {
|
package/dist/api/remember.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type MemoryKind } from '../memory.js';
|
|
3
|
-
import type { Context } from './types.js';
|
|
1
|
+
import type { ConnectorEvent } from '../store/port.js';
|
|
2
|
+
import { type MemoryKind } from '../core/memory.js';
|
|
3
|
+
import type { Context, StoreReply } from './types.js';
|
|
4
4
|
export interface RememberOpts {
|
|
5
5
|
content: string;
|
|
6
6
|
kind?: MemoryKind;
|
|
@@ -8,15 +8,8 @@ export interface RememberOpts {
|
|
|
8
8
|
owner?: string;
|
|
9
9
|
artifactRef?: string;
|
|
10
10
|
tags?: string[];
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
* memories INSERT. Used by ingestion connectors to stamp
|
|
14
|
-
* idempotency / cursor rows atomically with the memory row, so a crash
|
|
15
|
-
* mid-write cannot produce a memory without its corresponding side-effect
|
|
16
|
-
* log row (or vice versa). If the callback throws, the INSERT is rolled
|
|
17
|
-
* back and the error is rethrown.
|
|
18
|
-
*/
|
|
19
|
-
afterWrite?: (db: DatabaseSyncLike, memoryId: string) => void;
|
|
11
|
+
/** The connector event this write answers. The store logs it in the memory's own transaction; an event logged before stores nothing and answers `duplicate`. */
|
|
12
|
+
event?: ConnectorEvent;
|
|
20
13
|
/** Connector-ingested content an agent doesn't control; gates detectInstruction. CLI/HTTP/MCP never set this. */
|
|
21
14
|
untrusted?: boolean;
|
|
22
15
|
/** The caller's project: its name becomes the row's origin. Without it the store's fallback applies (NULL on a shared store). */
|
|
@@ -37,6 +30,12 @@ export interface RememberResult {
|
|
|
37
30
|
};
|
|
38
31
|
/** Set only when the content held secret material: untrusted text had it redacted, typed text was stored as sent. */
|
|
39
32
|
warnings?: string[];
|
|
33
|
+
/** Set only when the write's event was logged before: nothing was stored, so `id` names no row; `memoryId` is the id the first write logged. */
|
|
34
|
+
duplicate?: {
|
|
35
|
+
memoryId: string | null;
|
|
36
|
+
};
|
|
40
37
|
}
|
|
41
|
-
|
|
38
|
+
/** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
|
|
39
|
+
* A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
|
|
40
|
+
export declare function remember<C extends Context>(ctx: C, opts: RememberOpts): StoreReply<C, RememberResult>;
|
|
42
41
|
//# sourceMappingURL=remember.d.ts.map
|