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
package/dist/api/recall.js
CHANGED
|
@@ -1,68 +1,40 @@
|
|
|
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 {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { continuityAt, finishRecallAt, storeFor } from '../store-port.js';
|
|
4
|
+
import { recallScopeFilter } from '../store/search-rows.js';
|
|
5
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
6
|
+
import { formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
7
|
+
import { boostByGoals } from '../search/goal-boost.js';
|
|
8
|
+
import { storeFor } from '../store/index.js';
|
|
9
|
+
import { sqliteSyncStore } from '../store/sqlite/store.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 { detectAnchoring, hashQueryText, biasHintEnabled } from '
|
|
20
|
-
import { detectAvailabilityBias } from '
|
|
21
|
-
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
|
|
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 { detectAnchoring, hashQueryText, biasHintEnabled } from './recall-history.js';
|
|
19
|
+
import { detectAvailabilityBias } from './availability.js';
|
|
20
|
+
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
|
|
22
21
|
import { ownerOrSubject, RecallContractError } from './types.js';
|
|
23
|
-
import { anchoringRows, availabilityRows, recallAuditMetadata, recallAuditRow } from './recall-record.js';
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
* additions land at one site.
|
|
30
|
-
*/
|
|
31
|
-
export function buildSuppressionSummary(counts) {
|
|
32
|
-
return {
|
|
33
|
-
totalCandidates: counts.totalCandidates,
|
|
34
|
-
droppedPreRank: counts.droppedPreRank,
|
|
35
|
-
droppedByBudget: counts.droppedByBudget,
|
|
36
|
-
summarySubstitutionsAdded: counts.summarySubstitutionsAdded,
|
|
37
|
-
freshTailAdded: counts.freshTailAdded,
|
|
38
|
-
suppressedByInterference: counts.suppressedByInterference,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Domain-level recall on hippo.db only, never `ctx.store`, since it is synchronous: under another store its first open throws
|
|
43
|
-
* `SqliteBlockedError`. Loads BM25-ranked candidates from SQLite scoped to
|
|
44
|
-
* `ctx.tenantId` and keeps that order whatever `mode` says; `retrieve` is the
|
|
45
|
-
* mode-aware, strengthening variant the HTTP route uses.
|
|
46
|
-
*
|
|
47
|
-
* **api.recall does NOT mutate `index.last_retrieval_ids`** (contract
|
|
48
|
-
* lock). The CLI `cmdRecall` (cli.ts) writes `last_retrieval_ids` because the
|
|
49
|
-
* CLI is interactive (user is about to run `hippo outcome --good`). SDK callers
|
|
50
|
-
* are programmatic: they either pass explicit ids to `api.outcome` or call
|
|
51
|
-
* `api.getContext` first for the context-then-outcome workflow (getContext
|
|
52
|
-
* DOES write `last_retrieval_ids`). Adding the side-effect here would change
|
|
53
|
-
* `api.recall` from a pure read into a read+write, breaking SDK callers who
|
|
54
|
-
* batch recall calls in a row. Locked by
|
|
55
|
-
* `tests/api-recall-no-side-effects.test.ts`.
|
|
56
|
-
*/
|
|
22
|
+
import { anchoringRows, availabilityRows, callerOf, recallAuditMetadata, recallAuditRow, strengthenOf } from './recall-record.js';
|
|
23
|
+
import { retrieveWithCliCore } from './recall-core.js';
|
|
24
|
+
import { recallLead, recordShownRecall } from './recall-finish.js';
|
|
25
|
+
const DEFAULT_RECALL_LIMIT = 10;
|
|
26
|
+
/** Reads hippo.db directly, never `ctx.store`, because it is synchronous (another store would throw `SqliteBlockedError`).
|
|
27
|
+
* It never writes `last_retrieval_ids` (contract lock: tests/api-recall-no-side-effects.test.ts). */
|
|
57
28
|
export function recall(ctx, opts) {
|
|
58
29
|
// A member key may not unlock a private or quarantined scope by naming it.
|
|
59
30
|
assertScopeRequestAllowed(ctx.actor, opts.scope);
|
|
60
31
|
const windowSize = recallWindowSize(opts);
|
|
61
32
|
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
62
|
-
const
|
|
33
|
+
const store = sqliteSyncStore(ctx.hippoRoot);
|
|
34
|
+
const all = store.searchRecallEntries(opts.query, recallSearchArgs(ctx, opts, windowSize, own));
|
|
63
35
|
const plan = planRecall(ctx, opts, all, own);
|
|
64
|
-
const { result, writes } = composeRecall(ctx, opts, windowSize, all, plan, readRecallSync(ctx, opts, plan));
|
|
65
|
-
|
|
36
|
+
const { result, writes } = composeRecall(ctx, opts, { windowSize, all, plan, reads: readRecallSync(store, ctx, opts, plan) });
|
|
37
|
+
store.finishRecall({ ...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit] });
|
|
66
38
|
return result;
|
|
67
39
|
}
|
|
68
40
|
function recallOrigin(opts) {
|
|
@@ -71,29 +43,60 @@ function recallOrigin(opts) {
|
|
|
71
43
|
function inCallerProject(entry, opts) {
|
|
72
44
|
return !opts.project || classifyOriginProject(entry.origin_project, opts.project) !== 'cross-project';
|
|
73
45
|
}
|
|
74
|
-
/**
|
|
46
|
+
/** The one recall entry: ranks with the ranker `opts` names, then writes the recall, and records it in full for a surface that sets `recordAs`.
|
|
47
|
+
* Only the CLI core ranker writes last_retrieval_ids (contract lock). */
|
|
75
48
|
export async function retrieve(ctx, opts) {
|
|
76
49
|
assertScopeRequestAllowed(ctx.actor, opts.scope);
|
|
50
|
+
if (opts.cliCore)
|
|
51
|
+
return retrieveWithCliCore(ctx, opts, opts.cliCore);
|
|
77
52
|
const windowSize = recallWindowSize(opts);
|
|
78
53
|
// From the authenticated actor, never from RecallOpts, which a caller fills in.
|
|
79
54
|
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
80
55
|
if (opts.showRanked)
|
|
81
56
|
return retrieveFromStore(ctx, opts, windowSize, opts.showRanked, own);
|
|
82
57
|
const store = storeFor(ctx);
|
|
58
|
+
const how = opts.recordAs;
|
|
59
|
+
if (!how)
|
|
60
|
+
return retrieveBand(ctx, store, opts, windowSize, own);
|
|
61
|
+
const result = await retrieveBand(ctx, store, { ...opts, ...recallLead(ctx, how, opts.query, opts.sessionId) }, windowSize, own);
|
|
62
|
+
await recordShownRecall(ctx, store, how, shownBand(opts, result));
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
/** What the band ranker hands to the record: the rows it returns, and the continuity block the reply carries beside them. */
|
|
66
|
+
function shownBand(opts, result) {
|
|
67
|
+
return {
|
|
68
|
+
query: opts.query,
|
|
69
|
+
sessionId: opts.sessionId,
|
|
70
|
+
topId: result.results[0]?.id ?? null,
|
|
71
|
+
anchoredOn: result.anchoringHint?.memoryId,
|
|
72
|
+
items: result.results.length,
|
|
73
|
+
tokens: result.tokens + (result.continuityTokens ?? 0),
|
|
74
|
+
ledgerSessionId: opts.sessionId ?? null,
|
|
75
|
+
written: true, // a failed audit write throws out of the band ranker, so this point is never reached without the rows
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** The default ranker: the SQL BM25 band, reordered by hybrid or physics search when `mode` asks. */
|
|
79
|
+
async function retrieveBand(ctx, store, opts, windowSize, own) {
|
|
83
80
|
let candidates = await store.searchRecallEntries(opts.query, recallSearchArgs(ctx, opts, windowSize, own));
|
|
84
81
|
if (opts.mode === 'hybrid' || opts.mode === 'physics') {
|
|
85
82
|
const searchOpts = { budget: Infinity, hippoRoot: ctx.hippoRoot, scope: opts.scope ?? null, vectorCandidates: recallVectorSpec(ctx, opts, own), store };
|
|
86
|
-
const ranked = opts
|
|
87
|
-
? await physicsSearch(opts.query, candidates, { ...searchOpts, physicsConfig: loadConfig(ctx.hippoRoot).physics })
|
|
88
|
-
: await hybridSearch(opts.query, candidates, searchOpts);
|
|
83
|
+
const ranked = await rankPool(ctx, opts, candidates, searchOpts);
|
|
89
84
|
const rankedIds = new Set(ranked.map((r) => r.entry.id));
|
|
90
85
|
candidates = [...ranked.map((r) => r.entry), ...candidates.filter((e) => !rankedIds.has(e.id))];
|
|
91
86
|
}
|
|
92
87
|
const plan = planRecall(ctx, opts, candidates, own);
|
|
93
|
-
const { result, writes } = composeRecall(ctx, opts, windowSize, candidates, plan, await readRecall(store, ctx, opts, plan));
|
|
94
|
-
await store.finishRecall({
|
|
88
|
+
const { result, writes } = composeRecall(ctx, opts, { windowSize, all: candidates, plan, reads: await readRecall(store, ctx, opts, plan) });
|
|
89
|
+
await store.finishRecall({
|
|
90
|
+
...writes, audit: [...(opts.leadingAudit ?? []), ...writes.audit], strengthen: strengthenOf(ctx, result.results.map((r) => r.id))
|
|
91
|
+
});
|
|
95
92
|
return result;
|
|
96
93
|
}
|
|
94
|
+
/** The ranked pool: physics when `mode` says so, hybrid otherwise; each caller supplies its own search options. */
|
|
95
|
+
function rankPool(ctx, opts, pool, searchOpts) {
|
|
96
|
+
return opts.mode === 'physics'
|
|
97
|
+
? physicsSearch(opts.query, pool, { ...searchOpts, physicsConfig: loadConfig(ctx.hippoRoot).physics })
|
|
98
|
+
: hybridSearch(opts.query, pool, searchOpts);
|
|
99
|
+
}
|
|
97
100
|
/** The recall load's arguments: exact scope, current rows only, the caller's project and personal scope. */
|
|
98
101
|
function recallSearchArgs(ctx, opts, limit, own) {
|
|
99
102
|
return {
|
|
@@ -106,9 +109,6 @@ function recallSearchArgs(ctx, opts, limit, own) {
|
|
|
106
109
|
ownScope: own,
|
|
107
110
|
};
|
|
108
111
|
}
|
|
109
|
-
function strengthenOf(ctx, ids) {
|
|
110
|
-
return { ids, opts: { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() } };
|
|
111
|
-
}
|
|
112
112
|
/** api.retrieve's vector arm: the recall load's exact-scope rule, current rows only. */
|
|
113
113
|
function recallVectorSpec(ctx, opts, own) {
|
|
114
114
|
return {
|
|
@@ -128,9 +128,7 @@ async function retrieveFromStore(ctx, opts, windowSize, show, own) {
|
|
|
128
128
|
const pool = loaded.filter((e) => passesScopeFilterForRecall(e.scope ?? null, opts.scope, own));
|
|
129
129
|
// No scope option: the scope boost follows HIPPO_SCOPE and the skill env, as MCP recall always ranked.
|
|
130
130
|
const searchOpts = { budget: Infinity, hippoRoot: ctx.hippoRoot, vectorCandidates: recallVectorSpec(ctx, opts, own), store };
|
|
131
|
-
let ranked = opts
|
|
132
|
-
? await physicsSearch(opts.query, pool, { ...searchOpts, physicsConfig: loadConfig(ctx.hippoRoot).physics })
|
|
133
|
-
: await hybridSearch(opts.query, pool, searchOpts);
|
|
131
|
+
let ranked = await rankPool(ctx, opts, pool, searchOpts);
|
|
134
132
|
// One goal read serves both boosts; the ranked list's log rows come first, so its scores win the log's first-write.
|
|
135
133
|
const goals = opts.sessionId && !opts.goalTag ? await store.activeGoals({ sessionId: opts.sessionId, tenantId: ctx.tenantId }) : null;
|
|
136
134
|
let rankedLog = [];
|
|
@@ -142,7 +140,9 @@ async function retrieveFromStore(ctx, opts, windowSize, show, own) {
|
|
|
142
140
|
const window = ranked.slice(0, windowSize).map((r) => r.entry);
|
|
143
141
|
const bandOpts = { ...opts, suppressRecallTrace: true };
|
|
144
142
|
const plan = planRecall(ctx, bandOpts, window, own);
|
|
145
|
-
const { result, writes } = composeRecall(ctx, bandOpts,
|
|
143
|
+
const { result, writes } = composeRecall(ctx, bandOpts, {
|
|
144
|
+
windowSize, all: window, plan, reads: await readRecall(store, ctx, bandOpts, plan, goals), auditBand: false
|
|
145
|
+
});
|
|
146
146
|
// Rows the vector arm added count as candidates too.
|
|
147
147
|
const inPool = new Set(pool.map((e) => e.id));
|
|
148
148
|
const candidates = [...pool, ...ranked.map((r) => r.entry).filter((e) => !inPool.has(e.id))];
|
|
@@ -187,7 +187,7 @@ function recallWindowSize(opts) {
|
|
|
187
187
|
}
|
|
188
188
|
const CONTINUITY_EVENT_LIMIT = 5;
|
|
189
189
|
function planRecall(ctx, opts, all, own) {
|
|
190
|
-
const limit = opts.limit ??
|
|
190
|
+
const limit = opts.limit ?? DEFAULT_RECALL_LIMIT;
|
|
191
191
|
const window = admitCandidates(opts, all, limit, own);
|
|
192
192
|
return {
|
|
193
193
|
limit,
|
|
@@ -198,16 +198,16 @@ function planRecall(ctx, opts, all, own) {
|
|
|
198
198
|
claim: detectPlanningClaim(opts.query),
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
|
-
/** The plan's reads on
|
|
202
|
-
function readRecallSync(ctx, opts, plan) {
|
|
203
|
-
const {
|
|
201
|
+
/** The plan's reads on the synchronous store, for the recall that cannot await the port. */
|
|
202
|
+
function readRecallSync(store, ctx, opts, plan) {
|
|
203
|
+
const { tenantId } = ctx;
|
|
204
204
|
const freshCount = opts.freshTailCount ?? 0;
|
|
205
205
|
return {
|
|
206
|
-
goals: plan.goalBoost ?
|
|
207
|
-
parents: plan.overflow.size > 0 ?
|
|
208
|
-
freshRaws: freshCount > 0 ?
|
|
209
|
-
continuity: opts.includeContinuity ?
|
|
210
|
-
planning: plan.claim ?
|
|
206
|
+
goals: plan.goalBoost ? store.activeGoals({ sessionId: plan.goalBoost.sessionId, tenantId }) : null,
|
|
207
|
+
parents: plan.overflow.size > 0 ? store.entriesByIds([...plan.overflow.keys()], tenantId) : [],
|
|
208
|
+
freshRaws: freshCount > 0 ? store.freshRawEntries(freshCount, tenantId, opts.freshTailSessionId, recallOrigin(opts) ?? null) : [],
|
|
209
|
+
continuity: opts.includeContinuity ? store.continuity(tenantId, CONTINUITY_EVENT_LIMIT, continuityKey(ctx, opts)) : undefined,
|
|
210
|
+
planning: plan.claim ? store.planningFallacyEvidence(tenantId, plan.claim.classQueryTokens) : null,
|
|
211
211
|
};
|
|
212
212
|
}
|
|
213
213
|
/** The plan's reads through the store; `goals` already read by the caller skips that read. */
|
|
@@ -228,9 +228,8 @@ function continuityKey(ctx, opts) {
|
|
|
228
228
|
return null;
|
|
229
229
|
return { owner: ownerOrSubject(ctx.actor), project: opts.project ? projectNames(opts.project) : [] };
|
|
230
230
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
function composeRecall(ctx, opts, windowSize, all, plan, reads, auditBand = true) {
|
|
231
|
+
function composeRecall(ctx, opts, options) {
|
|
232
|
+
const { windowSize, all, plan, reads, auditBand = true } = options;
|
|
234
233
|
const { window } = plan;
|
|
235
234
|
const bands = rankBands(opts, plan, reads);
|
|
236
235
|
const rankedOut = bands.rankedOut;
|
|
@@ -246,14 +245,14 @@ function composeRecall(ctx, opts, windowSize, all, plan, reads, auditBand = true
|
|
|
246
245
|
continuity,
|
|
247
246
|
continuityTokens: continuity ? continuityTokensOf(continuity) : undefined,
|
|
248
247
|
windowSize,
|
|
249
|
-
suppressionSummary:
|
|
248
|
+
suppressionSummary: {
|
|
250
249
|
totalCandidates: all.length,
|
|
251
250
|
droppedPreRank: window.droppedPreRank + bands.heldDropped,
|
|
252
251
|
droppedByBudget: window.droppedByBudget,
|
|
253
252
|
summarySubstitutionsAdded: bands.summarySubstitutions,
|
|
254
253
|
freshTailAdded: bands.freshTailAdded,
|
|
255
254
|
suppressedByInterference,
|
|
256
|
-
}
|
|
255
|
+
},
|
|
257
256
|
};
|
|
258
257
|
// The hint and the no-class-match / tiebreak watching variant are mutually exclusive; both go out as optional fields.
|
|
259
258
|
if (planning?.output.hint)
|
|
@@ -319,7 +318,9 @@ function rankBands(opts, plan, reads) {
|
|
|
319
318
|
const baseRanked = baseScored.map((r) => baseItem(r, opts, explainTrace));
|
|
320
319
|
const summaryRanked = substituted.map((s) => summaryItem(s, opts));
|
|
321
320
|
const freshRanked = (opts.freshTailCount ?? 0) > 0
|
|
322
|
-
? freshTailBand(opts,
|
|
321
|
+
? freshTailBand(opts, {
|
|
322
|
+
recent: reads.freshRaws, baseRanked, summaryRanked, shownEntries: opts.keepHeldCopies ? [] : [...baseSlice, ...substituted.map((s) => s.entry)], own,
|
|
323
|
+
})
|
|
323
324
|
: [];
|
|
324
325
|
return {
|
|
325
326
|
rankedOut: [...freshRanked, ...baseRanked, ...summaryRanked],
|
|
@@ -334,7 +335,7 @@ function rankBands(opts, plan, reads) {
|
|
|
334
335
|
// `limit`. Each one is tenant-scoped and re-checked against the scope filter; drillDown recovers the children.
|
|
335
336
|
function substituteOverflow(opts, overflowByParent, parents, limit, own) {
|
|
336
337
|
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 *
|
|
338
|
+
const maxSub = Math.max(1, Math.ceil(limit * SUMMARY_SUB_FRACTION));
|
|
338
339
|
// Most overflowed children first; compareEntryIdentity only breaks a tie, which used to fall to scan order.
|
|
339
340
|
eligibleParents.sort((a, b) => {
|
|
340
341
|
const ac = overflowByParent.get(a.id)?.length ?? 0;
|
|
@@ -380,12 +381,16 @@ function baseItem(r, opts, explainTrace) {
|
|
|
380
381
|
}
|
|
381
382
|
return item;
|
|
382
383
|
}
|
|
383
|
-
//
|
|
384
|
+
// A summary scores below the strong top-N matches but above the weakest leaves.
|
|
385
|
+
const SUMMARY_ITEM_SCORE = 0.5;
|
|
386
|
+
const FRESH_TAIL_ITEM_SCORE = 1.0;
|
|
387
|
+
// Summaries may take this share of the limit.
|
|
388
|
+
const SUMMARY_SUB_FRACTION = 0.3;
|
|
384
389
|
function summaryItem(s, opts) {
|
|
385
390
|
const item = {
|
|
386
391
|
id: s.entry.id,
|
|
387
392
|
content: s.entry.content,
|
|
388
|
-
score:
|
|
393
|
+
score: SUMMARY_ITEM_SCORE,
|
|
389
394
|
layer: s.entry.layer,
|
|
390
395
|
strength: s.entry.strength,
|
|
391
396
|
isSummary: true,
|
|
@@ -396,9 +401,8 @@ function summaryItem(s, opts) {
|
|
|
396
401
|
item.rerankPipeline = 'api';
|
|
397
402
|
return item;
|
|
398
403
|
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, own) {
|
|
404
|
+
function freshTailBand(opts, options) {
|
|
405
|
+
const { recent, baseRanked, summaryRanked, shownEntries, own } = options;
|
|
402
406
|
const recentScoped = recent.filter((m) => passesScopeFilterForRecall(m.scope ?? null, opts.scope, own) && inCallerProject(m, opts));
|
|
403
407
|
const recentIdSet = new Set(recentScoped.map((m) => m.id));
|
|
404
408
|
for (const r of baseRanked) {
|
|
@@ -415,7 +419,7 @@ function freshTailBand(opts, recent, baseRanked, summaryRanked, shownEntries, ow
|
|
|
415
419
|
const item = {
|
|
416
420
|
id: m.id,
|
|
417
421
|
content: m.content,
|
|
418
|
-
score:
|
|
422
|
+
score: FRESH_TAIL_ITEM_SCORE,
|
|
419
423
|
layer: m.layer,
|
|
420
424
|
strength: m.strength,
|
|
421
425
|
isFreshTail: true,
|
|
@@ -471,9 +475,6 @@ function continuityTokensOf(c) {
|
|
|
471
475
|
tokenize(filteredHandoff?.cardId) +
|
|
472
476
|
c.recentSessionEvents.reduce((acc, e) => acc + tokenize(e.content), 0);
|
|
473
477
|
}
|
|
474
|
-
function callerOf(ctx) {
|
|
475
|
-
return { tenantId: ctx.tenantId, actor: ctx.actor.subject };
|
|
476
|
-
}
|
|
477
478
|
// A pure read of the caller's recallHistory snapshot against this top-1. HIPPO_ANCHORING=off skips even the detect
|
|
478
479
|
// call; CLI paths pass no history (cmdRecall computes its own hint), so the hint stays absent there.
|
|
479
480
|
function detectRecallAnchoring(opts, topMemoryId) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { Context } from './types.js';
|
|
3
|
+
/** Marks a merged memory a model has rewritten, so a later pass skips it. */
|
|
4
|
+
export declare const REFINED_TAG = "llm-refined";
|
|
5
|
+
/** Store a model's rewrite of a merged memory: the new text replaces the old one, and the row gains the refined tag once. */
|
|
6
|
+
export declare function storeRefinement(ctx: Context, entry: MemoryEntry, refined: string): void;
|
|
7
|
+
//# sourceMappingURL=refine.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// The write half of `hippo refine`: the model call stays with the caller, the rewritten row is stored here.
|
|
2
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
3
|
+
/** Marks a merged memory a model has rewritten, so a later pass skips it. */
|
|
4
|
+
export const REFINED_TAG = 'llm-refined';
|
|
5
|
+
/** Store a model's rewrite of a merged memory: the new text replaces the old one, and the row gains the refined tag once. */
|
|
6
|
+
export function storeRefinement(ctx, entry, refined) {
|
|
7
|
+
const tags = entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG];
|
|
8
|
+
writeEntry(ctx.hippoRoot, { ...entry, content: refined, tags }, { actor: ctx.actor.subject });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=refine.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ConfidenceLevel, Layer, MemoryEntry, MemoryKind } from '../core/memory.js';
|
|
2
|
+
import type { HippoDbContext } from './types.js';
|
|
3
|
+
/** One write by a caller in this process, every field already parsed and checked by it. */
|
|
4
|
+
export interface LocalRememberInput {
|
|
5
|
+
readonly content: string;
|
|
6
|
+
/** Every tag the row stores; the salience gate reads these. */
|
|
7
|
+
readonly tags: readonly string[];
|
|
8
|
+
/** The tags schema fit is scored on, for a caller that added path and scope tags of its own to `tags`; without it, `tags`. */
|
|
9
|
+
readonly fitTags?: readonly string[];
|
|
10
|
+
readonly kind?: MemoryKind;
|
|
11
|
+
readonly scope?: string;
|
|
12
|
+
readonly owner?: string;
|
|
13
|
+
readonly artifactRef?: string;
|
|
14
|
+
readonly layer?: Layer;
|
|
15
|
+
readonly pinned?: boolean;
|
|
16
|
+
readonly confidence?: ConfidenceLevel;
|
|
17
|
+
readonly source?: string;
|
|
18
|
+
/** Store it whatever the salience gate would say, as `hippo remember --force` asks and `hippo watch` always does. */
|
|
19
|
+
readonly force?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** The gate's start-weak verdict as the stored row carries it. */
|
|
22
|
+
export interface StartedWeak {
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
readonly strength: number;
|
|
25
|
+
}
|
|
26
|
+
/** `stored` carries the row as the store holds it after the write; `skipped` is the gate dropping the write, with nothing stored or counted. */
|
|
27
|
+
export type LocalRememberOutcome = {
|
|
28
|
+
readonly status: 'stored';
|
|
29
|
+
readonly entry: MemoryEntry;
|
|
30
|
+
readonly startedWeak?: StartedWeak;
|
|
31
|
+
} | {
|
|
32
|
+
readonly status: 'skipped';
|
|
33
|
+
readonly reason: string;
|
|
34
|
+
readonly score: number;
|
|
35
|
+
};
|
|
36
|
+
/** One local write on hippo.db: gate, write, read-back, counter, then the embedding, started and never awaited. A refused value throws as `remember` does. */
|
|
37
|
+
export declare function rememberLocally(ctx: HippoDbContext, input: LocalRememberInput): LocalRememberOutcome;
|
|
38
|
+
/** What a caller asks of fact extraction. The key comes from the caller, which read it from its own environment. */
|
|
39
|
+
export interface FactExtractionRequest {
|
|
40
|
+
/** The caller asked for extraction (`--extract`); the store's config can turn it on without that. */
|
|
41
|
+
readonly requested: boolean;
|
|
42
|
+
readonly apiKey?: string;
|
|
43
|
+
readonly fetcher?: typeof fetch;
|
|
44
|
+
}
|
|
45
|
+
/** `off`: nobody asked. `no_key`: asked, with no key to call the model. `ran`: the facts the model gave and each reason it gave fewer. */
|
|
46
|
+
export type FactExtraction = {
|
|
47
|
+
readonly status: 'off';
|
|
48
|
+
} | {
|
|
49
|
+
readonly status: 'no_key';
|
|
50
|
+
} | {
|
|
51
|
+
readonly status: 'ran';
|
|
52
|
+
readonly facts: number;
|
|
53
|
+
readonly failures: readonly string[];
|
|
54
|
+
};
|
|
55
|
+
/** Extracts facts from a row just stored and stores them beside it. Best-effort: a failure is named in the result, never thrown. */
|
|
56
|
+
export declare function extractRememberedFacts(ctx: HippoDbContext, entry: MemoryEntry, request: FactExtractionRequest): Promise<FactExtraction>;
|
|
57
|
+
//# sourceMappingURL=remember-local.d.ts.map
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// The local remember pipeline for a caller in this process (`hippo remember`, `hippo watch`): schema fit, the salience gate, the
|
|
2
|
+
// write, the read-back, the `remembered` counter and the embedding kick-off, in that order. Fact extraction is a second step,
|
|
3
|
+
// which the caller runs after it has reported the write. Nothing here prints; the caller reports from what comes back.
|
|
4
|
+
import { loadConfig } from '../core/config.js';
|
|
5
|
+
import { computeSalience } from '../core/salience.js';
|
|
6
|
+
import { loadNewestEntries, schemaFitInStore } from '../store/candidates.js';
|
|
7
|
+
import { embedMemory } from '../store/embeddings/index.js';
|
|
8
|
+
import { loadAllEntries, readEntry } from '../store/entry-reads.js';
|
|
9
|
+
import { updateStats } from '../store/index-and-stats.js';
|
|
10
|
+
import { errorMessage } from '../util/log.js';
|
|
11
|
+
import { remember } from './remember.js';
|
|
12
|
+
const WEAK_HALF_LIFE_FACTOR = 0.5;
|
|
13
|
+
/** The gate's verdict on one write, or null where it does not judge: the store has it off, or the write is pinned or forced. */
|
|
14
|
+
function salienceVerdict(ctx, input) {
|
|
15
|
+
const { salience } = loadConfig(ctx.hippoRoot);
|
|
16
|
+
if (!salience.enabled || input.pinned || input.force)
|
|
17
|
+
return null;
|
|
18
|
+
// computeSalience compares against the last `recentWindow` rows only; below 1 its slice takes every row, so that case still loads them all.
|
|
19
|
+
const window = Math.trunc(salience.recentWindow);
|
|
20
|
+
const recent = Number.isSafeInteger(window) && window >= 1
|
|
21
|
+
? loadNewestEntries(ctx.hippoRoot, ctx.tenantId, window)
|
|
22
|
+
: loadAllEntries(ctx.hippoRoot, ctx.tenantId);
|
|
23
|
+
return computeSalience(input.content, [...input.tags], recent, {
|
|
24
|
+
recentWindow: salience.recentWindow,
|
|
25
|
+
overlapThreshold: salience.overlapThreshold,
|
|
26
|
+
minContentLength: salience.minContentLength,
|
|
27
|
+
maxRepeatErrors: salience.maxRepeatErrors,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/** The row `remember` just wrote, as the store holds it: the report, the embedding and the extraction all work on that. */
|
|
31
|
+
function storedEntry(ctx, id) {
|
|
32
|
+
const entry = readEntry(ctx.hippoRoot, id, ctx.tenantId);
|
|
33
|
+
if (!entry)
|
|
34
|
+
throw new Error(`memory ${id} was written but cannot be read back`);
|
|
35
|
+
return entry;
|
|
36
|
+
}
|
|
37
|
+
/** One local write on hippo.db: gate, write, read-back, counter, then the embedding, started and never awaited. A refused value throws as `remember` does. */
|
|
38
|
+
export function rememberLocally(ctx, input) {
|
|
39
|
+
const schemaFit = schemaFitInStore(ctx.hippoRoot, ctx.tenantId, input.content, input.fitTags ?? input.tags);
|
|
40
|
+
const verdict = salienceVerdict(ctx, input);
|
|
41
|
+
if (verdict?.decision === 'skip')
|
|
42
|
+
return { status: 'skipped', reason: verdict.reason, score: verdict.score };
|
|
43
|
+
const startedWeak = verdict?.decision === 'start_weak' ? { reason: verdict.reason, strength: verdict.score } : undefined;
|
|
44
|
+
const { id } = remember(ctx, {
|
|
45
|
+
content: input.content,
|
|
46
|
+
kind: input.kind,
|
|
47
|
+
scope: input.scope,
|
|
48
|
+
owner: input.owner,
|
|
49
|
+
artifactRef: input.artifactRef,
|
|
50
|
+
tags: [...input.tags],
|
|
51
|
+
local: {
|
|
52
|
+
layer: input.layer,
|
|
53
|
+
pinned: input.pinned,
|
|
54
|
+
source: input.source,
|
|
55
|
+
confidence: input.confidence,
|
|
56
|
+
schemaFit,
|
|
57
|
+
weaken: startedWeak && { strength: startedWeak.strength, halfLifeFactor: WEAK_HALF_LIFE_FACTOR },
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
const entry = storedEntry(ctx, id);
|
|
61
|
+
updateStats(ctx.hippoRoot, { remembered: 1 });
|
|
62
|
+
// Best-effort and slow (a model load or a network call), so the caller is not held for it.
|
|
63
|
+
void embedMemory(ctx.hippoRoot, entry);
|
|
64
|
+
return startedWeak ? { status: 'stored', entry, startedWeak } : { status: 'stored', entry };
|
|
65
|
+
}
|
|
66
|
+
/** Extracts facts from a row just stored and stores them beside it. Best-effort: a failure is named in the result, never thrown. */
|
|
67
|
+
export async function extractRememberedFacts(ctx, entry, request) {
|
|
68
|
+
const { extraction } = loadConfig(ctx.hippoRoot);
|
|
69
|
+
if (!request.requested && extraction.enabled !== true)
|
|
70
|
+
return { status: 'off' };
|
|
71
|
+
const { apiKey, fetcher } = request;
|
|
72
|
+
if (!apiKey)
|
|
73
|
+
return { status: 'no_key' };
|
|
74
|
+
const failures = [];
|
|
75
|
+
let facts = 0;
|
|
76
|
+
try {
|
|
77
|
+
// Loaded on demand, so a write that extracts nothing does not pay for the module.
|
|
78
|
+
const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
|
|
79
|
+
const found = await extractFacts(entry.content, { apiKey, model: extraction.model, fetcher, onError: (msg) => { failures.push(msg); } });
|
|
80
|
+
if (found.length > 0) {
|
|
81
|
+
storeExtractedFacts(ctx.hippoRoot, entry, found);
|
|
82
|
+
facts = found.length;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (cause) {
|
|
86
|
+
failures.push(errorMessage(cause));
|
|
87
|
+
}
|
|
88
|
+
return { status: 'ran', facts, failures };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=remember-local.js.map
|
package/dist/api/remember.d.ts
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type MemoryKind } from '../memory.js';
|
|
1
|
+
import type { ConnectorEvent } from '../store/port.js';
|
|
2
|
+
import { type ConfidenceLevel, type Layer, type MemoryKind, type TraceOutcome } from '../core/memory.js';
|
|
3
3
|
import type { Context, StoreReply } from './types.js';
|
|
4
|
+
/** Row fields the caller's own process decides, as the CLI does from its flags and its salience gate. */
|
|
5
|
+
export interface RememberLocal {
|
|
6
|
+
layer?: Layer;
|
|
7
|
+
pinned?: boolean;
|
|
8
|
+
confidence?: ConfidenceLevel;
|
|
9
|
+
source?: string;
|
|
10
|
+
schemaFit?: number;
|
|
11
|
+
traceOutcome?: TraceOutcome;
|
|
12
|
+
sourceSessionId?: string | null;
|
|
13
|
+
/** A salience gate's start-weak verdict: the row starts at `strength`, and its half-life is multiplied by `halfLifeFactor`, never below one day. */
|
|
14
|
+
weaken?: {
|
|
15
|
+
readonly strength: number;
|
|
16
|
+
readonly halfLifeFactor: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
4
19
|
export interface RememberOpts {
|
|
5
20
|
content: string;
|
|
6
21
|
kind?: MemoryKind;
|
|
@@ -8,15 +23,8 @@ export interface RememberOpts {
|
|
|
8
23
|
owner?: string;
|
|
9
24
|
artifactRef?: string;
|
|
10
25
|
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;
|
|
26
|
+
/** 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`. */
|
|
27
|
+
event?: ConnectorEvent;
|
|
20
28
|
/** Connector-ingested content an agent doesn't control; gates detectInstruction. CLI/HTTP/MCP never set this. */
|
|
21
29
|
untrusted?: boolean;
|
|
22
30
|
/** The caller's project: its name becomes the row's origin. Without it the store's fallback applies (NULL on a shared store). */
|
|
@@ -26,6 +34,8 @@ export interface RememberOpts {
|
|
|
26
34
|
};
|
|
27
35
|
/** Store it in the caller's own personal scope, readable by its owner alone in every project; needs an owner on the actor and no `scope`. */
|
|
28
36
|
personal?: boolean;
|
|
37
|
+
/** Never set from a request body: a route or tool that copied it would let a client pin a row or pick its layer and source. */
|
|
38
|
+
local?: RememberLocal;
|
|
29
39
|
}
|
|
30
40
|
export interface RememberResult {
|
|
31
41
|
id: string;
|
|
@@ -37,7 +47,12 @@ export interface RememberResult {
|
|
|
37
47
|
};
|
|
38
48
|
/** Set only when the content held secret material: untrusted text had it redacted, typed text was stored as sent. */
|
|
39
49
|
warnings?: string[];
|
|
50
|
+
/** 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. */
|
|
51
|
+
duplicate?: {
|
|
52
|
+
memoryId: string | null;
|
|
53
|
+
};
|
|
40
54
|
}
|
|
41
|
-
/** Store one memory
|
|
55
|
+
/** Store one memory: the store's entryWrites group writes the row and its one remember audit row, under the caller's subject.
|
|
56
|
+
* A write that carries a connector event or untrusted content goes through connectorWrites, which commits its companion rows with it. */
|
|
42
57
|
export declare function remember<C extends Context>(ctx: C, opts: RememberOpts): StoreReply<C, RememberResult>;
|
|
43
58
|
//# sourceMappingURL=remember.d.ts.map
|