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
|
@@ -1,54 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
import { BadRequestError, ForbiddenError } from './api-errors.js';
|
|
9
|
-
import { MAX_ID_LEN } from './http-util.js';
|
|
10
|
-
/**
|
|
11
|
-
* Literal scopes excluded from recall by default-deny when the
|
|
12
|
-
* caller passes no `scope`. The SQL clause in `loadSearchRows` and the JS
|
|
13
|
-
* helper `passesScopeFilterForRecall` (src/api.ts) both read from this
|
|
14
|
-
* constant. Adding a deny scope is a one-place change.
|
|
15
|
-
*
|
|
16
|
-
* Regex-based denies (e.g. `<source>:private:*`) stay in
|
|
17
|
-
* `passesScopeFilterForRecall` as a separate JS step — they don't translate
|
|
18
|
-
* cleanly to SQL.
|
|
19
|
-
*
|
|
20
|
-
* Invariant: never empty. An empty array would silently allow quarantine
|
|
21
|
-
* scopes through both paths (SQL clause omitted, JS check vacuous). The
|
|
22
|
-
* module-load assertion below pins this loudly.
|
|
23
|
-
*/
|
|
1
|
+
/** Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to searchBothHybrid's candidate loads without an
|
|
2
|
+
* import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests importing `passesScopeFilterForRecall`). */
|
|
3
|
+
import { BadRequestError, ForbiddenError } from '../core/api-errors.js';
|
|
4
|
+
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
5
|
+
/** Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in `loadSearchRows` and by
|
|
6
|
+
* `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the module-load assertion below pins this). */
|
|
24
7
|
export const RECALL_DEFAULT_DENY_SCOPES = ['unknown:legacy'];
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* load-bearing literal array. Extracted from the inline guard so the throw
|
|
28
|
-
* path is directly testable. `as const` arrays widen via `readonly T[]` at
|
|
29
|
-
* the call site so the empty case is reachable at runtime.
|
|
30
|
-
*/
|
|
8
|
+
/** @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at the call site, so the empty case
|
|
9
|
+
* is reachable and testable. */
|
|
31
10
|
export function assertNonEmpty(arr, name) {
|
|
32
11
|
if (arr.length === 0) {
|
|
33
12
|
throw new Error(`${name} cannot be empty — would silently allow quarantine scopes`);
|
|
34
13
|
}
|
|
35
14
|
}
|
|
36
15
|
assertNonEmpty(RECALL_DEFAULT_DENY_SCOPES, 'RECALL_DEFAULT_DENY_SCOPES');
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
* as private when it has the shape `<lowercase-source>:private:<rest>`.
|
|
40
|
-
*
|
|
41
|
-
* Examples that match:
|
|
42
|
-
* slack:private:Cabc, github:private:owner/repo, jira:private:PROJ-1
|
|
43
|
-
* Examples that DO NOT match:
|
|
44
|
-
* slack:public:Cgeneral, acme:public:my-private-channel, null, '',
|
|
45
|
-
* 'unknown:legacy', 'private' (alone), 'private:foo' (no source prefix).
|
|
46
|
-
*
|
|
47
|
-
* Used by api.recall, mcp/server.ts (hippo_recall + hippo_context),
|
|
48
|
-
* cli.ts (cmdRecall + cmdExplain + continuity), shared.ts (searchBothHybrid
|
|
49
|
-
* recall mode). Keep these in sync — the export is the single source of
|
|
50
|
-
* truth so connector work cannot drift.
|
|
51
|
-
*/
|
|
16
|
+
/** Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not `slack:public:x`, null, '',
|
|
17
|
+
* 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector work cannot drift. */
|
|
52
18
|
export const PRIVATE_SCOPE_RE = /^[a-z][a-z0-9_-]*:private:/;
|
|
53
19
|
function isScopeString(value) {
|
|
54
20
|
return typeof value === 'string';
|
|
@@ -89,15 +55,8 @@ export function canTouchScope(actor, scope) {
|
|
|
89
55
|
export function ownScopeTouches(ownScope, scope) {
|
|
90
56
|
return !isPersonalScope(scope) || scope === ownScope;
|
|
91
57
|
}
|
|
92
|
-
/**
|
|
93
|
-
*
|
|
94
|
-
* rule (the SQL half lives in `loadSearchRows` via `loadRecallSearchEntries`).
|
|
95
|
-
*
|
|
96
|
-
* - When `requested` is set and non-empty: exact match required.
|
|
97
|
-
* - When `requested` is undefined/empty: default-deny on any
|
|
98
|
-
* `<source>:private:*` scope and on the `RECALL_DEFAULT_DENY_SCOPES`
|
|
99
|
-
* quarantine buckets. `null` and public scopes pass, and so does `ownScope`, the caller's own personal scope.
|
|
100
|
-
*/
|
|
58
|
+
/** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
|
|
59
|
+
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the caller's `ownScope` pass. */
|
|
101
60
|
export function passesScopeFilterForRecall(scope, requested, ownScope) {
|
|
102
61
|
if (requested !== undefined && requested !== '') {
|
|
103
62
|
return scope === requested;
|
|
@@ -113,40 +72,23 @@ export function scopeAdmitSql(col, ownScope) {
|
|
|
113
72
|
// The own arm sits inside the outer parentheses so a caller's `AND ${sql}` cannot split it off.
|
|
114
73
|
return { sql: `(${admitted} OR ${col}scope = ?)`, params: [...RECALL_DEFAULT_DENY_SCOPES, ownScope] };
|
|
115
74
|
}
|
|
116
|
-
/** SQL twin of canTouchScope, which is also canReadScope for an admin: every row but
|
|
75
|
+
/** SQL twin of canTouchScope, which is also canReadScope for an admin: every row but
|
|
76
|
+
* another person's personal one. LIKE folds ASCII case as isPersonalScope's /i does. */
|
|
117
77
|
export function touchableScopeSql(col, ownScope) {
|
|
118
78
|
const notPersonal = `${col}scope IS NULL OR ${col}scope NOT LIKE '${PERSONAL_SCOPE_PREFIX}%'`;
|
|
119
79
|
if (ownScope == null)
|
|
120
80
|
return { sql: `(${notPersonal})`, params: [] };
|
|
121
81
|
return { sql: `(${notPersonal} OR ${col}scope = ?)`, params: [ownScope] };
|
|
122
82
|
}
|
|
123
|
-
/**
|
|
124
|
-
*
|
|
125
|
-
* SQL 'default-deny-or-exact' mode in loadSearchRows).
|
|
126
|
-
*
|
|
127
|
-
* The CLI flag predates the envelope column as a TAG-boost ranking hint
|
|
128
|
-
* (`scope:<v>` tags, HIPPO_SCOPE, detectScope()), so an explicit `--scope X`
|
|
129
|
-
* UNLOCKS envelope scope X in addition to the default-admitted set — it does
|
|
130
|
-
* NOT narrow the result to X (that would return zero rows for every
|
|
131
|
-
* tag-scoped workflow, whose envelope scope is NULL). api.recall keeps the
|
|
132
|
-
* narrowing 'exact' semantics via `passesScopeFilterForRecall`.
|
|
133
|
-
*
|
|
134
|
-
* Note the unlock applies to whatever scope was explicitly named — including
|
|
135
|
-
* a private scope or a quarantine bucket (`--scope unknown:legacy`). That is
|
|
136
|
-
* deliberate owner access, identical in reach to api.recall's exact-match
|
|
137
|
-
* for the same input; only NON-requested private/quarantine scopes stay
|
|
138
|
-
* denied. A named personal scope never unlocks: the CLI has no caller identity to check it against.
|
|
139
|
-
*/
|
|
83
|
+
/** CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than narrowing to X (api.recall keeps 'exact').
|
|
84
|
+
* Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller identity. */
|
|
140
85
|
export function passesCliRecallScopeFilter(scope, requested) {
|
|
141
86
|
if (requested !== undefined && requested !== '' && !isPersonalScope(requested) && scope === requested) {
|
|
142
87
|
return true;
|
|
143
88
|
}
|
|
144
89
|
return passesScopeFilterForRecall(scope, undefined);
|
|
145
90
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Thrown when a caller requests a scope its role may not read. The HTTP layer
|
|
148
|
-
* maps it to 403.
|
|
149
|
-
*/
|
|
91
|
+
/** Thrown when a caller requests a scope its role may not read; the HTTP layer maps it to 403. */
|
|
150
92
|
export class ScopeForbiddenError extends ForbiddenError {
|
|
151
93
|
scope;
|
|
152
94
|
constructor(scope) {
|
|
@@ -155,20 +97,17 @@ export class ScopeForbiddenError extends ForbiddenError {
|
|
|
155
97
|
this.scope = scope;
|
|
156
98
|
}
|
|
157
99
|
}
|
|
158
|
-
/**
|
|
159
|
-
*
|
|
160
|
-
* quarantine buckets. Naming one explicitly is what unlocks it, so naming one
|
|
161
|
-
* is the act that needs authorization.
|
|
162
|
-
*/
|
|
100
|
+
/** True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks it, so naming one needs
|
|
101
|
+
* authorization. */
|
|
163
102
|
export function isRestrictedScope(scope) {
|
|
164
103
|
if (!isScopeString(scope))
|
|
165
104
|
return false;
|
|
166
|
-
// SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string
|
|
167
|
-
//
|
|
168
|
-
// `:private:` anywhere, any case, matches the store's SQL default-deny (store/search-rows.ts) so JS never admits what SQL hides.
|
|
105
|
+
// SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take any scope.
|
|
106
|
+
// `:private:` anywhere, any case, matches the SQL default-deny in src/store/search-rows.ts so JS never admits what SQL hides.
|
|
169
107
|
return isPrivateScope(scope) || /:private:/i.test(scope) || RECALL_DEFAULT_DENY_SCOPES.includes(scope);
|
|
170
108
|
}
|
|
171
|
-
/** Personal rows answer to their owner alone: role, key grants and resolver scopes never
|
|
109
|
+
/** Personal rows answer to their owner alone: role, key grants and resolver scopes never
|
|
110
|
+
* open one. Else admin reads all; a member needs an exact grant on a restricted scope. */
|
|
172
111
|
export function canReadScope(actor, scope) {
|
|
173
112
|
if (isPersonalScope(scope))
|
|
174
113
|
return scope === personalScopeOf(actor);
|
|
@@ -1,21 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* wired paths (api.recall, api.getContext, CLI cmdRecall) writes a trace
|
|
7
|
-
* row: the ids + ranks + scores actually returned. Outcome events that
|
|
8
|
-
* resolve their targets from last-retrieval state link back to the trace
|
|
9
|
-
* they judge via `recordTraceOutcome`. This is the (query, shown, outcome)
|
|
10
|
-
* training triple every Track LC learned component needs.
|
|
11
|
-
*
|
|
12
|
-
* All writes here are fail-soft: a broken trace write must never break the
|
|
13
|
-
* surrounding recall or outcome call. Failures are logged to stderr and
|
|
14
|
-
* swallowed (matches the api.ts ~2843 "audit emit failed" precedent — no
|
|
15
|
-
* new debug env var).
|
|
16
|
-
*/
|
|
17
|
-
import { type DatabaseSyncLike } from './db.js';
|
|
18
|
-
import type { RerankStep } from './search/types.js';
|
|
1
|
+
/** Retrieval-trace persistence: the single producer for `recall_traces`, `recall_trace_results` and `recall_trace_outcomes`.
|
|
2
|
+
* One trace row per recall on api.recall, api.getContext and CLI cmdRecall: the (query, shown, outcome) triple the learned components train on.
|
|
3
|
+
* All writes are fail-soft: a failed trace write is logged to stderr and swallowed, never breaking the surrounding call. */
|
|
4
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
5
|
+
import type { RerankStep } from '../core/search-types.js';
|
|
19
6
|
import { type DeliveryEventInput } from './delivery-recorder.js';
|
|
20
7
|
/** One ranked result to persist alongside its trace row. */
|
|
21
8
|
export interface RecallTraceResultInput {
|
|
@@ -31,7 +18,7 @@ export interface RecallTraceInput {
|
|
|
31
18
|
sessionId?: string | null;
|
|
32
19
|
pipeline: 'api' | 'cli' | 'context' | 'mcp';
|
|
33
20
|
/** Raw query text. NEVER persisted — only its sha256/16 hash + length are
|
|
34
|
-
* stored (GDPR Path A / audit convention,
|
|
21
|
+
* stored (GDPR Path A / audit convention, CLI). */
|
|
35
22
|
query: string;
|
|
36
23
|
/** True when the caller ran with explain/--why (per-result rerank steps
|
|
37
24
|
* may be present). Defaults to false. */
|
|
@@ -39,40 +26,11 @@ export interface RecallTraceInput {
|
|
|
39
26
|
/** Results in returned rank order (index 0 = rank 1). */
|
|
40
27
|
results: RecallTraceResultInput[];
|
|
41
28
|
}
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
44
|
-
* transaction, on the connection handed in. Fail-soft: never throws —
|
|
45
|
-
* logs to stderr and returns null on any failure.
|
|
46
|
-
*
|
|
47
|
-
* Connection policy (per the plan): api.recall calls this directly on its
|
|
48
|
-
* own already-open handle. api.getContext and CLI cmdRecall go through
|
|
49
|
-
* `writeRecallTraceAtRoot` instead, since their audit handles are already
|
|
50
|
-
* closed by the time tracing runs.
|
|
51
|
-
*/
|
|
29
|
+
/** Insert a `recall_traces` row and its results rows in ONE transaction on the given connection. Fail-soft: logs to stderr and returns null on failure.
|
|
30
|
+
* api.recall/getContext reach this via `finishRecallAt` on their own handle; CLI cmdRecall uses `writeRecallTraceAtRoot` (its audit handle is closed). */
|
|
52
31
|
export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTraceInput): number | null;
|
|
53
|
-
/**
|
|
54
|
-
*
|
|
55
|
-
* writes the trace, and closes. Returns the new trace id, or null on any
|
|
56
|
-
* failure (fail-soft).
|
|
57
|
-
*
|
|
58
|
-
* Used at api.getContext and CLI cmdRecall — sites where the block's own
|
|
59
|
-
* convention is per-call handles (writeEntry, saveIndex) and the earlier
|
|
60
|
-
* audit handles are already closed. NOT used by api.recall, which must
|
|
61
|
-
* reuse the caller's open handle (no-side-effects contract,
|
|
62
|
-
* tests/api-recall-no-side-effects.test.ts).
|
|
63
|
-
*
|
|
64
|
-
* This function does NOT touch the `last_trace_id` meta key: its own connection
|
|
65
|
-
* would commit apart from `saveIndex`, so a crash could advance one key alone. LOCKSTEP
|
|
66
|
-
* INVARIANT: `last_trace_id` must only ever advance in the SAME write as
|
|
67
|
-
* `last_retrieval_ids`. The caller now does: call this function FIRST, set
|
|
68
|
-
* `localIndex.last_trace_id` from the returned id, THEN call `saveIndex`
|
|
69
|
-
* once — `saveIndex` persists both meta keys in one transaction
|
|
70
|
-
* (store.ts). Call sites that trace WITHOUT advancing `last_retrieval_ids`
|
|
71
|
-
* (CLI cmdRecall's zero-result path, getContext's empty-result path) simply
|
|
72
|
-
* never touch `localIndex` at all — they can't desync by construction.
|
|
73
|
-
*
|
|
74
|
-
* Fail-soft: never throws, including on connection failure.
|
|
75
|
-
*/
|
|
32
|
+
/** Short-lived connection at `root`: writes the trace, closes; returns the id or null (fail-soft). For CLI cmdRecall; api.recall must reuse its open handle.
|
|
33
|
+
* LOCKSTEP: never touches `last_trace_id`, which advances only in the same `saveIndex` write as `last_retrieval_ids`; the caller sets it from the id. */
|
|
76
34
|
export declare function writeRecallTraceAtRoot(root: string, input: RecallTraceInput): number | null;
|
|
77
35
|
/** Input to `recordTraceOutcome`. */
|
|
78
36
|
export interface RecordTraceOutcomeInput {
|
|
@@ -82,40 +40,14 @@ export interface RecordTraceOutcomeInput {
|
|
|
82
40
|
/** Ids actually credited by this outcome event (post tenant-filtering). */
|
|
83
41
|
memoryIds: string[];
|
|
84
42
|
}
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
* outcome) triple. Called ONLY where the credited ids actually come from
|
|
88
|
-
* the last-retrieval mechanism (api.outcomeForLastRecall and any outcome
|
|
89
|
-
* flow that resolves its targets from last-retrieval state) or from an
|
|
90
|
-
* SDK caller's explicit `traceId` opt — never unconditionally from
|
|
91
|
-
* api.outcome, which would mislink an explicit-id caller to a stale,
|
|
92
|
-
* unrelated trace.
|
|
93
|
-
*
|
|
94
|
-
* Lives in its own append-only table, not audit_log metadata: audit_log is
|
|
95
|
-
* pruned by `pruneAuditLog`, and pruning must never erase training data.
|
|
96
|
-
*
|
|
97
|
-
* Validation: `traceId`/`memoryIds` reach
|
|
98
|
-
* this function from caller-side state (`last_trace_id` / applied outcome
|
|
99
|
-
* ids) that can go stale relative to the trace it names — a forgotten
|
|
100
|
-
* memory, a tenant switch mid-session, or a race between two callers. Two
|
|
101
|
-
* checks run before the insert, both skip with one log.warn line
|
|
102
|
-
* rather than throw:
|
|
103
|
-
* 1. The named trace must exist and belong to `input.tenantId` — a
|
|
104
|
-
* tenant mismatch or a dangling id (deleted trace) skips.
|
|
105
|
-
* 2. `input.memoryIds` is intersected against the trace's OWN
|
|
106
|
-
* `recall_trace_results.memory_id` set — only ids that trace actually
|
|
107
|
-
* returned are recorded. An id that was never in this trace's result
|
|
108
|
-
* set (stale caller state) is silently dropped rather than recorded
|
|
109
|
-
* as a false credit. If the intersection is empty, no row is written.
|
|
110
|
-
*
|
|
111
|
-
* Fail-soft: never throws.
|
|
112
|
-
*/
|
|
43
|
+
/** Record an outcome against a trace; call ONLY with ids from last-retrieval state or an SDK `traceId`, never from api.outcome (stale-trace mislink).
|
|
44
|
+
* Skips (log.warn) unless the trace is in `input.tenantId`; keeps only memoryIds it returned. Own table so `pruneAuditLog` cannot erase training data. */
|
|
113
45
|
export declare function recordTraceOutcome(db: DatabaseSyncLike, input: RecordTraceOutcomeInput): void;
|
|
114
46
|
/** Pruned on write, counted back from the event's ts capped at the real clock, so a far-future fake time spares real rows. */
|
|
115
47
|
export declare const DELIVERY_LEDGER_RETENTION_DAYS = 90;
|
|
116
48
|
/** Lock wait for the ledger's own connection: a busy store drops the row rather than slow the hook. */
|
|
117
49
|
export declare const DELIVERY_LEDGER_WAIT_MS = 50;
|
|
118
|
-
/** Two prompt-identical events without a host turn id this close
|
|
50
|
+
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire twice. */
|
|
119
51
|
export declare const DELIVERY_DUPLICATE_WINDOW_MS = 2000;
|
|
120
52
|
/** One stored `delivery_candidates` row. */
|
|
121
53
|
export interface DeliveryCandidateRow {
|
|
@@ -1,32 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* All writes here are fail-soft: a broken trace write must never break the
|
|
13
|
-
* surrounding recall or outcome call. Failures are logged to stderr and
|
|
14
|
-
* swallowed (matches the api.ts ~2843 "audit emit failed" precedent — no
|
|
15
|
-
* new debug env var).
|
|
16
|
-
*/
|
|
17
|
-
import { createHash } from 'node:crypto';
|
|
18
|
-
import { openHippoDb, closeHippoDb, rethrowIfSqliteBlocked } from './db.js';
|
|
19
|
-
import { DELIVERY_LEDGER_VERSION } from './delivery-recorder.js';
|
|
20
|
-
import { log } from './log.js';
|
|
21
|
-
/**
|
|
22
|
-
* Strip a RerankStep down to {stage, multiplier, scoreBefore, scoreAfter}
|
|
23
|
-
* before persisting. `note` is
|
|
24
|
-
* free-form human text — the CLI's goal-boost step embeds matched goal tag
|
|
25
|
-
* text there, so persisting it verbatim would leak raw user content into
|
|
26
|
-
* training data via `rerank_json`. Only the four structured fields survive;
|
|
27
|
-
* any other/future free-form field is dropped by construction (allowlist,
|
|
28
|
-
* not a denylist).
|
|
29
|
-
*/
|
|
1
|
+
/** Retrieval-trace persistence: the single producer for `recall_traces`, `recall_trace_results` and `recall_trace_outcomes`.
|
|
2
|
+
* One trace row per recall on api.recall, api.getContext and CLI cmdRecall: the (query, shown, outcome) triple the learned components train on.
|
|
3
|
+
* All writes are fail-soft: a failed trace write is logged to stderr and swallowed, never breaking the surrounding call. */
|
|
4
|
+
import { openHippoDb, closeHippoDb, rethrowIfSqliteBlocked, withWriteScope } from '../db/index.js';
|
|
5
|
+
import { DELIVERY_LEDGER_VERSION, isBoundaryEvent } from './delivery-recorder.js';
|
|
6
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
7
|
+
import { DAY_MS } from '../util/time.js';
|
|
8
|
+
import { blockHash } from '../util/token-text.js';
|
|
9
|
+
/** Strip a RerankStep to {stage, multiplier, scoreBefore, scoreAfter}: `note` is free-form (the CLI goal-boost step embeds goal tag text) and would leak
|
|
10
|
+
* user content into `rerank_json`; an allowlist, so any future free-form field is dropped too. */
|
|
30
11
|
function sanitizeRerankSteps(steps) {
|
|
31
12
|
return steps.map((s) => ({
|
|
32
13
|
stage: s.stage,
|
|
@@ -35,22 +16,13 @@ function sanitizeRerankSteps(steps) {
|
|
|
35
16
|
scoreAfter: s.scoreAfter,
|
|
36
17
|
}));
|
|
37
18
|
}
|
|
38
|
-
/**
|
|
39
|
-
*
|
|
40
|
-
* transaction, on the connection handed in. Fail-soft: never throws —
|
|
41
|
-
* logs to stderr and returns null on any failure.
|
|
42
|
-
*
|
|
43
|
-
* Connection policy (per the plan): api.recall calls this directly on its
|
|
44
|
-
* own already-open handle. api.getContext and CLI cmdRecall go through
|
|
45
|
-
* `writeRecallTraceAtRoot` instead, since their audit handles are already
|
|
46
|
-
* closed by the time tracing runs.
|
|
47
|
-
*/
|
|
19
|
+
/** Insert a `recall_traces` row and its results rows in ONE transaction on the given connection. Fail-soft: logs to stderr and returns null on failure.
|
|
20
|
+
* api.recall/getContext reach this via `finishRecallAt` on their own handle; CLI cmdRecall uses `writeRecallTraceAtRoot` (its audit handle is closed). */
|
|
48
21
|
export function writeRecallTrace(db, input) {
|
|
49
22
|
try {
|
|
50
|
-
const queryHash =
|
|
23
|
+
const queryHash = blockHash(input.query);
|
|
51
24
|
const ts = new Date().toISOString();
|
|
52
|
-
db
|
|
53
|
-
try {
|
|
25
|
+
return withWriteScope(db, 'write_recall_trace', () => {
|
|
54
26
|
const insertTrace = db.prepare(`
|
|
55
27
|
INSERT INTO recall_traces (ts, tenant_id, session_id, pipeline, query_hash, query_length, result_count, explain_mode)
|
|
56
28
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -64,45 +36,16 @@ export function writeRecallTrace(db, input) {
|
|
|
64
36
|
input.results.forEach((r, i) => {
|
|
65
37
|
insertResult.run(traceId, input.tenantId, r.memoryId, i + 1, r.score, r.rerankSteps && r.rerankSteps.length > 0 ? JSON.stringify(sanitizeRerankSteps(r.rerankSteps)) : null);
|
|
66
38
|
});
|
|
67
|
-
db.exec('COMMIT');
|
|
68
39
|
return traceId;
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
try {
|
|
72
|
-
db.exec('ROLLBACK');
|
|
73
|
-
}
|
|
74
|
-
catch { /* already rolled back; keep the original error */ }
|
|
75
|
-
throw error;
|
|
76
|
-
}
|
|
40
|
+
});
|
|
77
41
|
}
|
|
78
42
|
catch (error) {
|
|
79
|
-
log.error(`recall trace write failed: ${error
|
|
43
|
+
log.error(`recall trace write failed: ${errorMessage(error)}`, errorFields(error));
|
|
80
44
|
return null;
|
|
81
45
|
}
|
|
82
46
|
}
|
|
83
|
-
/**
|
|
84
|
-
*
|
|
85
|
-
* writes the trace, and closes. Returns the new trace id, or null on any
|
|
86
|
-
* failure (fail-soft).
|
|
87
|
-
*
|
|
88
|
-
* Used at api.getContext and CLI cmdRecall — sites where the block's own
|
|
89
|
-
* convention is per-call handles (writeEntry, saveIndex) and the earlier
|
|
90
|
-
* audit handles are already closed. NOT used by api.recall, which must
|
|
91
|
-
* reuse the caller's open handle (no-side-effects contract,
|
|
92
|
-
* tests/api-recall-no-side-effects.test.ts).
|
|
93
|
-
*
|
|
94
|
-
* This function does NOT touch the `last_trace_id` meta key: its own connection
|
|
95
|
-
* would commit apart from `saveIndex`, so a crash could advance one key alone. LOCKSTEP
|
|
96
|
-
* INVARIANT: `last_trace_id` must only ever advance in the SAME write as
|
|
97
|
-
* `last_retrieval_ids`. The caller now does: call this function FIRST, set
|
|
98
|
-
* `localIndex.last_trace_id` from the returned id, THEN call `saveIndex`
|
|
99
|
-
* once — `saveIndex` persists both meta keys in one transaction
|
|
100
|
-
* (store.ts). Call sites that trace WITHOUT advancing `last_retrieval_ids`
|
|
101
|
-
* (CLI cmdRecall's zero-result path, getContext's empty-result path) simply
|
|
102
|
-
* never touch `localIndex` at all — they can't desync by construction.
|
|
103
|
-
*
|
|
104
|
-
* Fail-soft: never throws, including on connection failure.
|
|
105
|
-
*/
|
|
47
|
+
/** Short-lived connection at `root`: writes the trace, closes; returns the id or null (fail-soft). For CLI cmdRecall; api.recall must reuse its open handle.
|
|
48
|
+
* LOCKSTEP: never touches `last_trace_id`, which advances only in the same `saveIndex` write as `last_retrieval_ids`; the caller sets it from the id. */
|
|
106
49
|
export function writeRecallTraceAtRoot(root, input) {
|
|
107
50
|
let db;
|
|
108
51
|
try {
|
|
@@ -110,7 +53,7 @@ export function writeRecallTraceAtRoot(root, input) {
|
|
|
110
53
|
}
|
|
111
54
|
catch (error) {
|
|
112
55
|
rethrowIfSqliteBlocked(error);
|
|
113
|
-
log.error(`recall trace connection failed: ${error
|
|
56
|
+
log.error(`recall trace connection failed: ${errorMessage(error)}`, errorFields(error));
|
|
114
57
|
return null;
|
|
115
58
|
}
|
|
116
59
|
try {
|
|
@@ -120,34 +63,8 @@ export function writeRecallTraceAtRoot(root, input) {
|
|
|
120
63
|
closeHippoDb(db);
|
|
121
64
|
}
|
|
122
65
|
}
|
|
123
|
-
/**
|
|
124
|
-
*
|
|
125
|
-
* outcome) triple. Called ONLY where the credited ids actually come from
|
|
126
|
-
* the last-retrieval mechanism (api.outcomeForLastRecall and any outcome
|
|
127
|
-
* flow that resolves its targets from last-retrieval state) or from an
|
|
128
|
-
* SDK caller's explicit `traceId` opt — never unconditionally from
|
|
129
|
-
* api.outcome, which would mislink an explicit-id caller to a stale,
|
|
130
|
-
* unrelated trace.
|
|
131
|
-
*
|
|
132
|
-
* Lives in its own append-only table, not audit_log metadata: audit_log is
|
|
133
|
-
* pruned by `pruneAuditLog`, and pruning must never erase training data.
|
|
134
|
-
*
|
|
135
|
-
* Validation: `traceId`/`memoryIds` reach
|
|
136
|
-
* this function from caller-side state (`last_trace_id` / applied outcome
|
|
137
|
-
* ids) that can go stale relative to the trace it names — a forgotten
|
|
138
|
-
* memory, a tenant switch mid-session, or a race between two callers. Two
|
|
139
|
-
* checks run before the insert, both skip with one log.warn line
|
|
140
|
-
* rather than throw:
|
|
141
|
-
* 1. The named trace must exist and belong to `input.tenantId` — a
|
|
142
|
-
* tenant mismatch or a dangling id (deleted trace) skips.
|
|
143
|
-
* 2. `input.memoryIds` is intersected against the trace's OWN
|
|
144
|
-
* `recall_trace_results.memory_id` set — only ids that trace actually
|
|
145
|
-
* returned are recorded. An id that was never in this trace's result
|
|
146
|
-
* set (stale caller state) is silently dropped rather than recorded
|
|
147
|
-
* as a false credit. If the intersection is empty, no row is written.
|
|
148
|
-
*
|
|
149
|
-
* Fail-soft: never throws.
|
|
150
|
-
*/
|
|
66
|
+
/** Record an outcome against a trace; call ONLY with ids from last-retrieval state or an SDK `traceId`, never from api.outcome (stale-trace mislink).
|
|
67
|
+
* Skips (log.warn) unless the trace is in `input.tenantId`; keeps only memoryIds it returned. Own table so `pruneAuditLog` cannot erase training data. */
|
|
151
68
|
export function recordTraceOutcome(db, input) {
|
|
152
69
|
try {
|
|
153
70
|
// SAFETY: row shape matches the single `tenant_id` column named in the
|
|
@@ -174,14 +91,14 @@ export function recordTraceOutcome(db, input) {
|
|
|
174
91
|
`).run(input.traceId, new Date().toISOString(), input.tenantId, input.outcome, JSON.stringify(credited));
|
|
175
92
|
}
|
|
176
93
|
catch (error) {
|
|
177
|
-
log.error(`recall trace outcome write failed: ${error
|
|
94
|
+
log.error(`recall trace outcome write failed: ${errorMessage(error)}`, errorFields(error));
|
|
178
95
|
}
|
|
179
96
|
}
|
|
180
97
|
/** Pruned on write, counted back from the event's ts capped at the real clock, so a far-future fake time spares real rows. */
|
|
181
98
|
export const DELIVERY_LEDGER_RETENTION_DAYS = 90;
|
|
182
99
|
/** Lock wait for the ledger's own connection: a busy store drops the row rather than slow the hook. */
|
|
183
100
|
export const DELIVERY_LEDGER_WAIT_MS = 50;
|
|
184
|
-
/** Two prompt-identical events without a host turn id this close
|
|
101
|
+
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire twice. */
|
|
185
102
|
export const DELIVERY_DUPLICATE_WINDOW_MS = 2000;
|
|
186
103
|
const DELIVERY_EVENT_COLUMNS = [
|
|
187
104
|
'ts', 'ledger_version', 'tenant_id', 'runtime', 'event_type', 'surface', 'store_hash', 'write_store', 'project_hash',
|
|
@@ -190,7 +107,20 @@ const DELIVERY_EVENT_COLUMNS = [
|
|
|
190
107
|
'rejected_count', 'rejected_unlisted', 'sections_shown', 'sections_dropped', 'budget_tokens', 'selected_tokens',
|
|
191
108
|
'injected_tokens', 'static_hash', 'recall_hash', 'emitted_hash', 'elapsed_ms',
|
|
192
109
|
];
|
|
110
|
+
function findDuplicateBoundary(db, input) {
|
|
111
|
+
// SAFETY: rows carry exactly the `id` and `ts` columns selected.
|
|
112
|
+
const rows = db.prepare(`
|
|
113
|
+
SELECT id, ts FROM delivery_events
|
|
114
|
+
WHERE tenant_id = ? AND session_id = ? AND event_type = ? AND turn_seq IS NOT NULL
|
|
115
|
+
ORDER BY id
|
|
116
|
+
`).all(input.tenantId, input.sessionId, input.eventType);
|
|
117
|
+
const at = Date.parse(input.ts);
|
|
118
|
+
return rows.find((r) => Math.abs(Date.parse(r.ts) - at) <= DELIVERY_DUPLICATE_WINDOW_MS)?.id ?? null;
|
|
119
|
+
}
|
|
193
120
|
function findDuplicateTurn(db, input) {
|
|
121
|
+
// A boundary has no prompt, and two compactions of one session never start within the window, so time alone decides.
|
|
122
|
+
if (isBoundaryEvent(input.eventType))
|
|
123
|
+
return findDuplicateBoundary(db, input);
|
|
194
124
|
if (input.hostTurnId !== null) {
|
|
195
125
|
// SAFETY: a single `id` column, undefined when no row matches.
|
|
196
126
|
const row = db.prepare(`
|
|
@@ -223,8 +153,7 @@ function nextTurnSeq(db, input) {
|
|
|
223
153
|
/** One event plus its candidates in one write transaction, then prune; fail-soft. The caller must not hold a transaction on `db`. */
|
|
224
154
|
export function writeDeliveryEvent(db, input) {
|
|
225
155
|
try {
|
|
226
|
-
db
|
|
227
|
-
try {
|
|
156
|
+
return withWriteScope(db, 'write_delivery_event', () => {
|
|
228
157
|
// Missing-session and sub-agent events are not turns of a session, so they get no number and no duplicate check.
|
|
229
158
|
const isTurn = input.sessionId !== null && (input.sessionState === 'payload' || input.sessionState === 'env');
|
|
230
159
|
const duplicateOf = isTurn ? findDuplicateTurn(db, input) : null;
|
|
@@ -249,22 +178,13 @@ export function writeDeliveryEvent(db, input) {
|
|
|
249
178
|
insertCandidate.run(eventId, input.tenantId, c.memoryId, c.sourceStore, c.pool, c.stage, c.outcome, c.reason, c.rank, c.score, c.tokens);
|
|
250
179
|
}
|
|
251
180
|
const pruneFrom = Math.min(Date.parse(input.ts), Date.now());
|
|
252
|
-
const cutoff = new Date(pruneFrom - DELIVERY_LEDGER_RETENTION_DAYS *
|
|
181
|
+
const cutoff = new Date(pruneFrom - DELIVERY_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
|
|
253
182
|
db.prepare(`DELETE FROM delivery_events WHERE ts < ?`).run(cutoff);
|
|
254
|
-
db.exec('COMMIT');
|
|
255
183
|
return eventId;
|
|
256
|
-
}
|
|
257
|
-
catch (error) {
|
|
258
|
-
try {
|
|
259
|
-
db.exec('ROLLBACK');
|
|
260
|
-
}
|
|
261
|
-
catch { /* SQLite may already have rolled back (SQLITE_FULL, IOERR); keep the original error */ }
|
|
262
|
-
throw error;
|
|
263
|
-
}
|
|
184
|
+
});
|
|
264
185
|
}
|
|
265
186
|
catch (error) {
|
|
266
|
-
|
|
267
|
-
console.error(`[hippo] delivery ledger write failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
187
|
+
log.error(`delivery ledger write failed: ${errorMessage(error)}`);
|
|
268
188
|
return null;
|
|
269
189
|
}
|
|
270
190
|
}
|
|
@@ -275,8 +195,7 @@ export function writeDeliveryEventAtRoot(root, input) {
|
|
|
275
195
|
db = openHippoDb(root);
|
|
276
196
|
}
|
|
277
197
|
catch (error) {
|
|
278
|
-
|
|
279
|
-
console.error(`[hippo] delivery ledger write failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
198
|
+
log.error(`delivery ledger write failed: ${errorMessage(error)}`);
|
|
280
199
|
return null;
|
|
281
200
|
}
|
|
282
201
|
try {
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { entryRejectRowAt } from './entry-reads.js';
|
|
3
|
+
import { type RejectedValueRow } from './rejection.js';
|
|
4
|
+
type HoldsValue = (text: string) => boolean;
|
|
5
|
+
/** The text, tenant and scope of the memory a rejection names. */
|
|
6
|
+
export type RejectionSource = NonNullable<ReturnType<typeof entryRejectRowAt>>;
|
|
7
|
+
/** One rejection as the store applies it. The three functions are the caller's policy over plain rows; none is handed the handle. */
|
|
8
|
+
export interface Rejection {
|
|
9
|
+
readonly tenantId: string;
|
|
10
|
+
readonly actor: string;
|
|
11
|
+
readonly reason: string;
|
|
12
|
+
/** The memory whose row `textOf` is given; unset when the caller supplies the text itself. */
|
|
13
|
+
readonly memoryId?: string;
|
|
14
|
+
/** The text to reject. `source` is undefined when `memoryId` is unset or names no row; a throw refuses before any write. */
|
|
15
|
+
readonly textOf: (source: RejectionSource | undefined) => string;
|
|
16
|
+
/** False for a row this caller may not remove. */
|
|
17
|
+
readonly inReach: (scope: string | null | undefined) => boolean;
|
|
18
|
+
/** What replaces a merged row once the rejected text leaves it: undefined when it holds none, null when nothing else is left. */
|
|
19
|
+
readonly successorOf: (row: MemoryEntry, holdsValue: HoldsValue, removedIds: ReadonlySet<string>) => MemoryEntry | null | undefined;
|
|
20
|
+
}
|
|
21
|
+
export interface AppliedRejection {
|
|
22
|
+
digest: string;
|
|
23
|
+
/** The rejected text: the stored row keeps only its digest, so no later read can return it. */
|
|
24
|
+
content: string;
|
|
25
|
+
/** Every row removed, live or dormant: each whose digest matched, duplicates included, and each sleep-merged row holding the text. */
|
|
26
|
+
removedIds: string[];
|
|
27
|
+
/** The removedIds of kind 'raw', archived instead of deleted. */
|
|
28
|
+
removedRawIds: string[];
|
|
29
|
+
/** The rows that carry a live merged row's other texts; dormantSuccessorIds is the same for a dormant one. */
|
|
30
|
+
successorIds: string[];
|
|
31
|
+
dormantSuccessorIds: string[];
|
|
32
|
+
}
|
|
33
|
+
/** Applies one rejection on one handle and in one write scope: the rejected-value row, the removal of every row in reach that holds the
|
|
34
|
+
* text (live or dormant, whole or inside a merged row) and one reject_value audit row. Markdown mirrors follow the commit. */
|
|
35
|
+
export declare function applyRejection(hippoRoot: string, rejection: Rejection): AppliedRejection;
|
|
36
|
+
export type LiftedRejection = {
|
|
37
|
+
status: 'ok';
|
|
38
|
+
digest: string;
|
|
39
|
+
reason: string | null;
|
|
40
|
+
} | {
|
|
41
|
+
status: 'not_found';
|
|
42
|
+
} | {
|
|
43
|
+
status: 'ambiguous';
|
|
44
|
+
candidates: RejectedValueRow[];
|
|
45
|
+
};
|
|
46
|
+
/** Deletes the tenant's one rejected value whose digest starts with `digestPrefix` and writes its unreject_value audit row.
|
|
47
|
+
* No match, or more than one, writes nothing. */
|
|
48
|
+
export declare function liftRejection(hippoRoot: string, tenantId: string, digestPrefix: string, actor: string): LiftedRejection;
|
|
49
|
+
/** The tenant's rejected values, newest first. */
|
|
50
|
+
export declare function loadRejectedValues(hippoRoot: string, tenantId: string): RejectedValueRow[];
|
|
51
|
+
/** Whether the write guard would refuse `content` under `entryId`, as a write of that row would find it. Reads on a plain open
|
|
52
|
+
* and writes nothing, so a dry run counts the values a real run refuses. */
|
|
53
|
+
export declare function rejectionGuardRefuses(hippoRoot: string, tenantId: string, entryId: string, content: string): boolean;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=rejected-values.d.ts.map
|