hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
/** Retrieval-trace persistence: the single producer for `recall_traces`, `recall_trace_results` and
|
|
2
|
-
* One trace row per recall on api.recall, api.getContext and CLI cmdRecall: the (query, shown,
|
|
3
|
-
* All writes are fail-soft: a failed trace write is logged to stderr
|
|
1
|
+
/** Retrieval-trace persistence: the single producer for `recall_traces`, `recall_trace_results` and
|
|
2
|
+
* `recall_trace_outcomes`. One trace row per recall on api.recall, api.getContext and CLI cmdRecall: the (query, shown,
|
|
3
|
+
* outcome) triple the learned components train on. All writes are fail-soft: a failed trace write is logged to stderr
|
|
4
|
+
* and swallowed, never breaking the surrounding call. */
|
|
4
5
|
import { type DatabaseSyncLike } from '../db/index.js';
|
|
5
6
|
import type { RerankStep } from '../core/search-types.js';
|
|
6
7
|
import { type DeliveryEventInput } from './delivery-recorder.js';
|
|
@@ -12,7 +13,7 @@ export interface RecallTraceResultInput {
|
|
|
12
13
|
* (or empty) persists `rerank_json` as NULL. */
|
|
13
14
|
rerankSteps?: RerankStep[];
|
|
14
15
|
}
|
|
15
|
-
/** Input to `writeRecallTrace
|
|
16
|
+
/** Input to `writeRecallTrace`. */
|
|
16
17
|
export interface RecallTraceInput {
|
|
17
18
|
tenantId: string;
|
|
18
19
|
sessionId?: string | null;
|
|
@@ -26,12 +27,9 @@ export interface RecallTraceInput {
|
|
|
26
27
|
/** Results in returned rank order (index 0 = rank 1). */
|
|
27
28
|
results: RecallTraceResultInput[];
|
|
28
29
|
}
|
|
29
|
-
/** Insert a `recall_traces` row and its results rows in ONE transaction on the given connection. Fail-soft: logs to
|
|
30
|
-
* api.recall/getContext reach this via `finishRecallAt` on their own handle
|
|
30
|
+
/** Insert a `recall_traces` row and its results rows in ONE transaction on the given connection. Fail-soft: logs to
|
|
31
|
+
* stderr and returns null on failure. api.recall/getContext reach this via `finishRecallAt` on their own handle. */
|
|
31
32
|
export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTraceInput): number | null;
|
|
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. */
|
|
34
|
-
export declare function writeRecallTraceAtRoot(root: string, input: RecallTraceInput): number | null;
|
|
35
33
|
/** Input to `recordTraceOutcome`. */
|
|
36
34
|
export interface RecordTraceOutcomeInput {
|
|
37
35
|
traceId: number;
|
|
@@ -40,14 +38,17 @@ export interface RecordTraceOutcomeInput {
|
|
|
40
38
|
/** Ids actually credited by this outcome event (post tenant-filtering). */
|
|
41
39
|
memoryIds: string[];
|
|
42
40
|
}
|
|
43
|
-
/** Record an outcome against a trace; call ONLY with ids from last-retrieval state or an SDK `traceId`, never from
|
|
44
|
-
* Skips (log.warn) unless the trace is in `input.tenantId`; keeps only memoryIds it
|
|
41
|
+
/** Record an outcome against a trace; call ONLY with ids from last-retrieval state or an SDK `traceId`, never from
|
|
42
|
+
* api.outcome (stale-trace mislink). Skips (log.warn) unless the trace is in `input.tenantId`; keeps only memoryIds it
|
|
43
|
+
* returned. Own table so `pruneAuditLog` cannot erase training data. */
|
|
45
44
|
export declare function recordTraceOutcome(db: DatabaseSyncLike, input: RecordTraceOutcomeInput): void;
|
|
46
|
-
/** Pruned on write, counted back from the event's ts capped at the real clock, so a far-future fake time spares real
|
|
45
|
+
/** Pruned on write, counted back from the event's ts capped at the real clock, so a far-future fake time spares real
|
|
46
|
+
* rows. */
|
|
47
47
|
export declare const DELIVERY_LEDGER_RETENTION_DAYS = 90;
|
|
48
48
|
/** Lock wait for the ledger's own connection: a busy store drops the row rather than slow the hook. */
|
|
49
49
|
export declare const DELIVERY_LEDGER_WAIT_MS = 50;
|
|
50
|
-
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire
|
|
50
|
+
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire
|
|
51
|
+
* twice. */
|
|
51
52
|
export declare const DELIVERY_DUPLICATE_WINDOW_MS = 2000;
|
|
52
53
|
/** One stored `delivery_candidates` row. */
|
|
53
54
|
export interface DeliveryCandidateRow {
|
|
@@ -105,12 +106,16 @@ export interface DeliveryEventRow {
|
|
|
105
106
|
failure_id: number | null;
|
|
106
107
|
candidates: DeliveryCandidateRow[];
|
|
107
108
|
}
|
|
108
|
-
/** One event plus its candidates in one write transaction, then prune; fail-soft. The caller must not hold a
|
|
109
|
+
/** One event plus its candidates in one write transaction, then prune; fail-soft. The caller must not hold a
|
|
110
|
+
* transaction on `db`. */
|
|
109
111
|
export declare function writeDeliveryEvent(db: DatabaseSyncLike, input: DeliveryEventInput): number | null;
|
|
110
|
-
/** Write on the request's handle, or a short-lived one, waiting at most {@link DELIVERY_LEDGER_WAIT_MS} for the lock.
|
|
112
|
+
/** Write on the request's handle, or a short-lived one, waiting at most {@link DELIVERY_LEDGER_WAIT_MS} for the lock.
|
|
113
|
+
* Fail-soft. */
|
|
111
114
|
export declare function writeDeliveryEventAtRoot(root: string, input: DeliveryEventInput): number | null;
|
|
112
|
-
/** On a caller's open handle, which saves a second open and close per turn; the handle's own lock wait comes back
|
|
115
|
+
/** On a caller's open handle, which saves a second open and close per turn; the handle's own lock wait comes back
|
|
116
|
+
* after. */
|
|
113
117
|
export declare function writeDeliveryEventOnHandle(db: DatabaseSyncLike, input: DeliveryEventInput): number | null;
|
|
114
|
-
/** A session's delivery events in write order, each with its candidate rows; `sessionId` null reads session-less
|
|
118
|
+
/** A session's delivery events in write order, each with its candidate rows; `sessionId` null reads session-less
|
|
119
|
+
* events. */
|
|
115
120
|
export declare function readDeliveryEvents(db: DatabaseSyncLike, tenantId: string, sessionId: string | null): DeliveryEventRow[];
|
|
116
121
|
//# sourceMappingURL=recall-trace.d.ts.map
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
/** Retrieval-trace persistence: the single producer for `recall_traces`, `recall_trace_results` and
|
|
2
|
-
* One trace row per recall on api.recall, api.getContext and CLI cmdRecall: the (query, shown,
|
|
3
|
-
* All writes are fail-soft: a failed trace write is logged to stderr
|
|
1
|
+
/** Retrieval-trace persistence: the single producer for `recall_traces`, `recall_trace_results` and
|
|
2
|
+
* `recall_trace_outcomes`. One trace row per recall on api.recall, api.getContext and CLI cmdRecall: the (query, shown,
|
|
3
|
+
* outcome) triple the learned components train on. All writes are fail-soft: a failed trace write is logged to stderr
|
|
4
|
+
* and swallowed, never breaking the surrounding call. */
|
|
4
5
|
import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
|
|
5
|
-
import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
|
|
6
6
|
import { DELIVERY_LEDGER_VERSION, isBoundaryEvent } from './delivery-recorder.js';
|
|
7
7
|
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
8
8
|
import { DAY_MS } from '../util/time.js';
|
|
9
9
|
import { blockHash } from '../util/token-text.js';
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
import { placeholders } from '../util/sql.js';
|
|
11
|
+
/** Strip a RerankStep to {stage, multiplier, scoreBefore, scoreAfter}: `note` is free-form (the CLI goal-boost step
|
|
12
|
+
* embeds goal tag text) and would leak user content into `rerank_json`; an allowlist, so any future free-form field is
|
|
13
|
+
* dropped too. */
|
|
12
14
|
function sanitizeRerankSteps(steps) {
|
|
13
15
|
return steps.map((s) => ({
|
|
14
16
|
stage: s.stage,
|
|
@@ -17,15 +19,16 @@ function sanitizeRerankSteps(steps) {
|
|
|
17
19
|
scoreAfter: s.scoreAfter,
|
|
18
20
|
}));
|
|
19
21
|
}
|
|
20
|
-
/** Insert a `recall_traces` row and its results rows in ONE transaction on the given connection. Fail-soft: logs to
|
|
21
|
-
* api.recall/getContext reach this via `finishRecallAt` on their own handle
|
|
22
|
+
/** Insert a `recall_traces` row and its results rows in ONE transaction on the given connection. Fail-soft: logs to
|
|
23
|
+
* stderr and returns null on failure. api.recall/getContext reach this via `finishRecallAt` on their own handle. */
|
|
22
24
|
export function writeRecallTrace(db, input) {
|
|
23
25
|
try {
|
|
24
26
|
const queryHash = blockHash(input.query);
|
|
25
27
|
const ts = new Date().toISOString();
|
|
26
28
|
return withWriteScope(db, 'write_recall_trace', () => {
|
|
27
29
|
const insertTrace = db.prepare(`
|
|
28
|
-
INSERT INTO recall_traces (ts, tenant_id, session_id, pipeline, query_hash, query_length, result_count,
|
|
30
|
+
INSERT INTO recall_traces (ts, tenant_id, session_id, pipeline, query_hash, query_length, result_count,
|
|
31
|
+
explain_mode)
|
|
29
32
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
30
33
|
`);
|
|
31
34
|
const traceResult = insertTrace.run(ts, input.tenantId, input.sessionId ?? null, input.pipeline, queryHash, input.query.length, input.results.length, input.explainMode ? 1 : 0);
|
|
@@ -45,27 +48,9 @@ export function writeRecallTrace(db, input) {
|
|
|
45
48
|
return null;
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
/**
|
|
49
|
-
*
|
|
50
|
-
|
|
51
|
-
let db;
|
|
52
|
-
try {
|
|
53
|
-
db = openHippoDb(root);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
rethrowIfSqliteBlocked(error);
|
|
57
|
-
log.error(`recall trace connection failed: ${errorMessage(error)}`, errorFields(error));
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
return writeRecallTrace(db, input);
|
|
62
|
-
}
|
|
63
|
-
finally {
|
|
64
|
-
closeHippoDb(db);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/** 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).
|
|
68
|
-
* Skips (log.warn) unless the trace is in `input.tenantId`; keeps only memoryIds it returned. Own table so `pruneAuditLog` cannot erase training data. */
|
|
51
|
+
/** Record an outcome against a trace; call ONLY with ids from last-retrieval state or an SDK `traceId`, never from
|
|
52
|
+
* api.outcome (stale-trace mislink). Skips (log.warn) unless the trace is in `input.tenantId`; keeps only memoryIds it
|
|
53
|
+
* returned. Own table so `pruneAuditLog` cannot erase training data. */
|
|
69
54
|
export function recordTraceOutcome(db, input) {
|
|
70
55
|
try {
|
|
71
56
|
// SAFETY: row shape matches the single `tenant_id` column named in the
|
|
@@ -95,18 +80,52 @@ export function recordTraceOutcome(db, input) {
|
|
|
95
80
|
log.error(`recall trace outcome write failed: ${errorMessage(error)}`, errorFields(error));
|
|
96
81
|
}
|
|
97
82
|
}
|
|
98
|
-
/** Pruned on write, counted back from the event's ts capped at the real clock, so a far-future fake time spares real
|
|
83
|
+
/** Pruned on write, counted back from the event's ts capped at the real clock, so a far-future fake time spares real
|
|
84
|
+
* rows. */
|
|
99
85
|
export const DELIVERY_LEDGER_RETENTION_DAYS = 90;
|
|
100
86
|
/** Lock wait for the ledger's own connection: a busy store drops the row rather than slow the hook. */
|
|
101
87
|
export const DELIVERY_LEDGER_WAIT_MS = 50;
|
|
102
|
-
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire
|
|
88
|
+
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire
|
|
89
|
+
* twice. */
|
|
103
90
|
export const DELIVERY_DUPLICATE_WINDOW_MS = 2000;
|
|
104
91
|
const DELIVERY_EVENT_COLUMNS = [
|
|
105
|
-
'ts',
|
|
106
|
-
'
|
|
107
|
-
'
|
|
108
|
-
'
|
|
109
|
-
'
|
|
92
|
+
'ts',
|
|
93
|
+
'ledger_version',
|
|
94
|
+
'tenant_id',
|
|
95
|
+
'runtime',
|
|
96
|
+
'event_type',
|
|
97
|
+
'surface',
|
|
98
|
+
'store_hash',
|
|
99
|
+
'write_store',
|
|
100
|
+
'project_hash',
|
|
101
|
+
'session_id',
|
|
102
|
+
'session_state',
|
|
103
|
+
'host_turn_id',
|
|
104
|
+
'turn_seq',
|
|
105
|
+
'duplicate_of',
|
|
106
|
+
'prompt_hash',
|
|
107
|
+
'prompt_length',
|
|
108
|
+
'query_hash',
|
|
109
|
+
'recall_trace_id',
|
|
110
|
+
'block_state',
|
|
111
|
+
'prompt_recall',
|
|
112
|
+
'considered_count',
|
|
113
|
+
'filtered_count',
|
|
114
|
+
'selected_count',
|
|
115
|
+
'emitted_count',
|
|
116
|
+
'rejected_count',
|
|
117
|
+
'rejected_unlisted',
|
|
118
|
+
'sections_shown',
|
|
119
|
+
'sections_dropped',
|
|
120
|
+
'budget_tokens',
|
|
121
|
+
'selected_tokens',
|
|
122
|
+
'injected_tokens',
|
|
123
|
+
'static_hash',
|
|
124
|
+
'recall_hash',
|
|
125
|
+
'emitted_hash',
|
|
126
|
+
'elapsed_ms',
|
|
127
|
+
'tool_use_id',
|
|
128
|
+
'failure_id',
|
|
110
129
|
];
|
|
111
130
|
function findDuplicateBoundary(db, input) {
|
|
112
131
|
// SAFETY: rows carry exactly the `id` and `ts` columns selected.
|
|
@@ -148,11 +167,14 @@ function findDuplicateTurn(db, input) {
|
|
|
148
167
|
if (input.promptHash === null)
|
|
149
168
|
return null;
|
|
150
169
|
// SAFETY: rows carry exactly the `id` and `ts` columns selected.
|
|
151
|
-
const rows = db
|
|
170
|
+
const rows = db
|
|
171
|
+
.prepare(`
|
|
152
172
|
SELECT id, ts FROM delivery_events
|
|
153
|
-
WHERE tenant_id = ? AND session_id = ? AND event_type = ? AND prompt_hash = ? AND host_turn_id IS NULL AND turn_seq
|
|
173
|
+
WHERE tenant_id = ? AND session_id = ? AND event_type = ? AND prompt_hash = ? AND host_turn_id IS NULL AND turn_seq
|
|
174
|
+
IS NOT NULL
|
|
154
175
|
ORDER BY id
|
|
155
|
-
`)
|
|
176
|
+
`)
|
|
177
|
+
.all(input.tenantId, input.sessionId, input.eventType, input.promptHash);
|
|
156
178
|
const at = Date.parse(input.ts);
|
|
157
179
|
// Absolute difference: two hook processes can commit out of ts order.
|
|
158
180
|
return rows.find((r) => Math.abs(Date.parse(r.ts) - at) <= DELIVERY_DUPLICATE_WINDOW_MS)?.id ?? null;
|
|
@@ -165,7 +187,59 @@ function nextTurnSeq(db, input) {
|
|
|
165
187
|
`).get(input.tenantId, input.sessionId, input.eventType);
|
|
166
188
|
return (row.m ?? 0) + 1;
|
|
167
189
|
}
|
|
168
|
-
|
|
190
|
+
function deliveryEventValues(input, turnSeq, duplicateOf) {
|
|
191
|
+
return [
|
|
192
|
+
input.ts,
|
|
193
|
+
DELIVERY_LEDGER_VERSION,
|
|
194
|
+
input.tenantId,
|
|
195
|
+
input.runtime,
|
|
196
|
+
input.eventType,
|
|
197
|
+
input.surface,
|
|
198
|
+
input.storeHash,
|
|
199
|
+
input.writeStore,
|
|
200
|
+
input.projectHash,
|
|
201
|
+
input.sessionId,
|
|
202
|
+
input.sessionState,
|
|
203
|
+
input.hostTurnId,
|
|
204
|
+
turnSeq,
|
|
205
|
+
duplicateOf,
|
|
206
|
+
input.promptHash,
|
|
207
|
+
input.promptLength,
|
|
208
|
+
input.queryHash,
|
|
209
|
+
input.recallTraceId,
|
|
210
|
+
input.blockState,
|
|
211
|
+
input.promptRecall ? 1 : 0,
|
|
212
|
+
input.consideredCount,
|
|
213
|
+
input.filteredCount,
|
|
214
|
+
input.selectedCount,
|
|
215
|
+
input.emittedCount,
|
|
216
|
+
input.rejectedCount,
|
|
217
|
+
input.rejectedUnlisted,
|
|
218
|
+
input.sectionsShown,
|
|
219
|
+
input.sectionsDropped,
|
|
220
|
+
input.budgetTokens,
|
|
221
|
+
input.selectedTokens,
|
|
222
|
+
input.injectedTokens,
|
|
223
|
+
input.staticHash,
|
|
224
|
+
input.recallHash,
|
|
225
|
+
input.emittedHash,
|
|
226
|
+
Math.round(input.elapsedMs),
|
|
227
|
+
input.toolUseId ?? null,
|
|
228
|
+
input.failureId ?? null,
|
|
229
|
+
];
|
|
230
|
+
}
|
|
231
|
+
function insertDeliveryCandidates(db, eventId, input) {
|
|
232
|
+
const insertCandidate = db.prepare(`
|
|
233
|
+
INSERT INTO delivery_candidates (event_id, tenant_id, memory_id, source_store, pool, stage, outcome, reason,
|
|
234
|
+
cand_rank, score, tokens)
|
|
235
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
236
|
+
`);
|
|
237
|
+
for (const c of input.candidates) {
|
|
238
|
+
insertCandidate.run(eventId, input.tenantId, c.memoryId, c.sourceStore, c.pool, c.stage, c.outcome, c.reason, c.rank, c.score, c.tokens);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/** One event plus its candidates in one write transaction, then prune; fail-soft. The caller must not hold a
|
|
242
|
+
* transaction on `db`. */
|
|
169
243
|
export function writeDeliveryEvent(db, input) {
|
|
170
244
|
try {
|
|
171
245
|
return withWriteScope(db, 'write_delivery_event', () => {
|
|
@@ -173,26 +247,12 @@ export function writeDeliveryEvent(db, input) {
|
|
|
173
247
|
const isTurn = input.sessionId !== null && (input.sessionState === 'payload' || input.sessionState === 'env');
|
|
174
248
|
const duplicateOf = isTurn ? findDuplicateTurn(db, input) : null;
|
|
175
249
|
const turnSeq = isTurn && duplicateOf === null ? nextTurnSeq(db, input) : null;
|
|
176
|
-
const values =
|
|
177
|
-
input.ts, DELIVERY_LEDGER_VERSION, input.tenantId, input.runtime, input.eventType, input.surface, input.storeHash,
|
|
178
|
-
input.writeStore, input.projectHash, input.sessionId, input.sessionState, input.hostTurnId, turnSeq, duplicateOf,
|
|
179
|
-
input.promptHash, input.promptLength, input.queryHash, input.recallTraceId, input.blockState, input.promptRecall ? 1 : 0,
|
|
180
|
-
input.consideredCount, input.filteredCount, input.selectedCount, input.emittedCount, input.rejectedCount,
|
|
181
|
-
input.rejectedUnlisted, input.sectionsShown, input.sectionsDropped, input.budgetTokens, input.selectedTokens,
|
|
182
|
-
input.injectedTokens, input.staticHash, input.recallHash, input.emittedHash, Math.round(input.elapsedMs),
|
|
183
|
-
input.toolUseId ?? null, input.failureId ?? null,
|
|
184
|
-
];
|
|
250
|
+
const values = deliveryEventValues(input, turnSeq, duplicateOf);
|
|
185
251
|
const eventId = Number(db.prepare(`
|
|
186
252
|
INSERT INTO delivery_events (${DELIVERY_EVENT_COLUMNS.join(', ')})
|
|
187
|
-
VALUES (${DELIVERY_EVENT_COLUMNS.
|
|
253
|
+
VALUES (${placeholders(DELIVERY_EVENT_COLUMNS.length)})
|
|
188
254
|
`).run(...values).lastInsertRowid);
|
|
189
|
-
|
|
190
|
-
INSERT INTO delivery_candidates (event_id, tenant_id, memory_id, source_store, pool, stage, outcome, reason, cand_rank, score, tokens)
|
|
191
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
192
|
-
`);
|
|
193
|
-
for (const c of input.candidates) {
|
|
194
|
-
insertCandidate.run(eventId, input.tenantId, c.memoryId, c.sourceStore, c.pool, c.stage, c.outcome, c.reason, c.rank, c.score, c.tokens);
|
|
195
|
-
}
|
|
255
|
+
insertDeliveryCandidates(db, eventId, input);
|
|
196
256
|
const pruneFrom = Math.min(Date.parse(input.ts), Date.now());
|
|
197
257
|
const cutoff = new Date(pruneFrom - DELIVERY_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
|
|
198
258
|
db.prepare(`DELETE FROM delivery_events WHERE ts < ?`).run(cutoff);
|
|
@@ -200,18 +260,19 @@ export function writeDeliveryEvent(db, input) {
|
|
|
200
260
|
});
|
|
201
261
|
}
|
|
202
262
|
catch (error) {
|
|
203
|
-
log.error(`delivery ledger write failed: ${errorMessage(error)}
|
|
263
|
+
log.error(`delivery ledger write failed: ${errorMessage(error)}`, errorFields(error));
|
|
204
264
|
return null;
|
|
205
265
|
}
|
|
206
266
|
}
|
|
207
|
-
/** Write on the request's handle, or a short-lived one, waiting at most {@link DELIVERY_LEDGER_WAIT_MS} for the lock.
|
|
267
|
+
/** Write on the request's handle, or a short-lived one, waiting at most {@link DELIVERY_LEDGER_WAIT_MS} for the lock.
|
|
268
|
+
* Fail-soft. */
|
|
208
269
|
export function writeDeliveryEventAtRoot(root, input) {
|
|
209
270
|
let db;
|
|
210
271
|
try {
|
|
211
272
|
db = openHippoDb(root);
|
|
212
273
|
}
|
|
213
274
|
catch (error) {
|
|
214
|
-
log.error(`delivery ledger write failed: ${errorMessage(error)}
|
|
275
|
+
log.error(`delivery ledger write failed: ${errorMessage(error)}`, errorFields(error));
|
|
215
276
|
return null;
|
|
216
277
|
}
|
|
217
278
|
try {
|
|
@@ -221,7 +282,8 @@ export function writeDeliveryEventAtRoot(root, input) {
|
|
|
221
282
|
closeHippoDb(db);
|
|
222
283
|
}
|
|
223
284
|
}
|
|
224
|
-
/** On a caller's open handle, which saves a second open and close per turn; the handle's own lock wait comes back
|
|
285
|
+
/** On a caller's open handle, which saves a second open and close per turn; the handle's own lock wait comes back
|
|
286
|
+
* after. */
|
|
225
287
|
export function writeDeliveryEventOnHandle(db, input) {
|
|
226
288
|
const prior = Math.trunc(Number(db.prepare('PRAGMA busy_timeout').get().timeout));
|
|
227
289
|
db.exec(`PRAGMA busy_timeout = ${DELIVERY_LEDGER_WAIT_MS}`);
|
|
@@ -232,10 +294,12 @@ export function writeDeliveryEventOnHandle(db, input) {
|
|
|
232
294
|
db.exec(`PRAGMA busy_timeout = ${prior}`);
|
|
233
295
|
}
|
|
234
296
|
}
|
|
235
|
-
/** A session's delivery events in write order, each with its candidate rows; `sessionId` null reads session-less
|
|
297
|
+
/** A session's delivery events in write order, each with its candidate rows; `sessionId` null reads session-less
|
|
298
|
+
* events. */
|
|
236
299
|
export function readDeliveryEvents(db, tenantId, sessionId) {
|
|
237
300
|
// SAFETY: SELECT * over delivery_events returns exactly the columns DeliveryEventRow names, less `candidates`.
|
|
238
|
-
const events = db
|
|
301
|
+
const events = db
|
|
302
|
+
.prepare(`SELECT * FROM delivery_events WHERE tenant_id = ? AND session_id IS ? ORDER BY id`)
|
|
239
303
|
.all(tenantId, sessionId);
|
|
240
304
|
const candidates = db.prepare(`
|
|
241
305
|
SELECT * FROM delivery_candidates WHERE event_id = ?
|
|
@@ -4,25 +4,29 @@ import { type RejectedValueRow } from './rejection.js';
|
|
|
4
4
|
type HoldsValue = (text: string) => boolean;
|
|
5
5
|
/** The text, tenant and scope of the memory a rejection names. */
|
|
6
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
|
|
7
|
+
/** One rejection as the store applies it. The three functions are the caller's policy over plain rows; none is handed
|
|
8
|
+
* the handle. */
|
|
8
9
|
export interface Rejection {
|
|
9
10
|
readonly tenantId: string;
|
|
10
11
|
readonly actor: string;
|
|
11
12
|
readonly reason: string;
|
|
12
13
|
/** The memory whose row `textOf` is given; unset when the caller supplies the text itself. */
|
|
13
14
|
readonly memoryId?: string;
|
|
14
|
-
/** The text to reject. `source` is undefined when `memoryId` is unset or names no row; a throw refuses before any
|
|
15
|
+
/** The text to reject. `source` is undefined when `memoryId` is unset or names no row; a throw refuses before any
|
|
16
|
+
* write. */
|
|
15
17
|
readonly textOf: (source: RejectionSource | undefined) => string;
|
|
16
18
|
/** False for a row this caller may not remove. */
|
|
17
19
|
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
|
|
20
|
+
/** What replaces a merged row once the rejected text leaves it: undefined when it holds none, null when nothing else
|
|
21
|
+
* is left. */
|
|
19
22
|
readonly successorOf: (row: MemoryEntry, holdsValue: HoldsValue, removedIds: ReadonlySet<string>) => MemoryEntry | null | undefined;
|
|
20
23
|
}
|
|
21
24
|
export interface AppliedRejection {
|
|
22
25
|
digest: string;
|
|
23
26
|
/** The rejected text: the stored row keeps only its digest, so no later read can return it. */
|
|
24
27
|
content: string;
|
|
25
|
-
/** Every row removed, live or dormant: each whose digest matched, duplicates included, and each sleep-merged row
|
|
28
|
+
/** Every row removed, live or dormant: each whose digest matched, duplicates included, and each sleep-merged row
|
|
29
|
+
* holding the text. */
|
|
26
30
|
removedIds: string[];
|
|
27
31
|
/** The removedIds of kind 'raw', archived instead of deleted. */
|
|
28
32
|
removedRawIds: string[];
|
|
@@ -30,8 +34,9 @@ export interface AppliedRejection {
|
|
|
30
34
|
successorIds: string[];
|
|
31
35
|
dormantSuccessorIds: string[];
|
|
32
36
|
}
|
|
33
|
-
/** Applies one rejection on one handle and in one write scope: the rejected-value row, the removal of every row in
|
|
34
|
-
*
|
|
37
|
+
/** Applies one rejection on one handle and in one write scope: the rejected-value row, the removal of every row in
|
|
38
|
+
* reach that holds the text (live or dormant, whole or inside a merged row) and one reject_value audit row. Markdown
|
|
39
|
+
* mirrors follow the commit. */
|
|
35
40
|
export declare function applyRejection(hippoRoot: string, rejection: Rejection): AppliedRejection;
|
|
36
41
|
export type LiftedRejection = {
|
|
37
42
|
status: 'ok';
|
|
@@ -43,13 +48,13 @@ export type LiftedRejection = {
|
|
|
43
48
|
status: 'ambiguous';
|
|
44
49
|
candidates: RejectedValueRow[];
|
|
45
50
|
};
|
|
46
|
-
/** Deletes the tenant's one rejected value whose digest starts with `digestPrefix` and writes its unreject_value audit
|
|
47
|
-
*
|
|
51
|
+
/** Deletes the tenant's one rejected value whose digest starts with `digestPrefix` and writes its unreject_value audit
|
|
52
|
+
* row. No match, or more than one, writes nothing. */
|
|
48
53
|
export declare function liftRejection(hippoRoot: string, tenantId: string, digestPrefix: string, actor: string): LiftedRejection;
|
|
49
54
|
/** The tenant's rejected values, newest first. */
|
|
50
55
|
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
|
|
52
|
-
*
|
|
56
|
+
/** Whether the write guard would refuse `content` under `entryId`, as a write of that row would find it. Reads on a
|
|
57
|
+
* plain open and writes nothing, so a dry run counts the values a real run refuses. */
|
|
53
58
|
export declare function rejectionGuardRefuses(hippoRoot: string, tenantId: string, entryId: string, content: string): boolean;
|
|
54
59
|
export {};
|
|
55
60
|
//# sourceMappingURL=rejected-values.d.ts.map
|
|
@@ -5,7 +5,7 @@ import { heldTexts } from '../util/same-text.js';
|
|
|
5
5
|
import { audit } from './audit-event.js';
|
|
6
6
|
import { deleteEntryCore } from './delete-and-batch.js';
|
|
7
7
|
import { deleteDormantRow, listDormantSnapshots, purgeDormantByDigest, replaceDormantEntry } from './dormant.js';
|
|
8
|
-
import { entryRejectRowAt,
|
|
8
|
+
import { entryRejectRowAt, selectEntriesByIds, selectTenantTexts } from './entry-reads.js';
|
|
9
9
|
import { stampOriginProject } from './entry-row.js';
|
|
10
10
|
import { writeEntryDbOnly, writeEntryMirrors } from './entry-writes.js';
|
|
11
11
|
import { purgeMirrorBestEffort } from './mirrors.js';
|
|
@@ -16,15 +16,20 @@ import { RejectedValueError } from '../core/api-errors.js';
|
|
|
16
16
|
function removeLiveRows(db, hippoRoot, rejection, holdsValue, removal) {
|
|
17
17
|
const { tenantId, actor, reason } = rejection;
|
|
18
18
|
const { removedIds, removedRawIds, successors } = removal;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// Text columns decide which rows hold the value; only those rows are read whole.
|
|
20
|
+
const directIds = [];
|
|
21
|
+
const mergedIds = [];
|
|
22
|
+
for (const row of selectTenantTexts(db, tenantId)) {
|
|
21
23
|
if (!rejection.inReach(row.scope))
|
|
22
24
|
continue;
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (holdsValue(row.content))
|
|
26
|
+
directIds.push(row.id);
|
|
27
|
+
else if (heldTexts(row).some(holdsValue))
|
|
28
|
+
mergedIds.push(row.id);
|
|
29
|
+
}
|
|
30
|
+
const held = selectEntriesByIds(db, [...directIds, ...mergedIds], tenantId);
|
|
31
|
+
const merged = mergedIds.flatMap((id) => held.get(id) ?? []);
|
|
32
|
+
for (const row of directIds.flatMap((id) => held.get(id) ?? [])) {
|
|
28
33
|
if (row.kind === 'raw') {
|
|
29
34
|
// A raw row is append-only: archiving is its one removal path, and its savepoint nests in this write scope.
|
|
30
35
|
archiveRawMemory(db, row.id, { reason, who: actor });
|
|
@@ -47,7 +52,8 @@ function removeLiveRows(db, hippoRoot, rejection, holdsValue, removal) {
|
|
|
47
52
|
successors.push(kept);
|
|
48
53
|
}
|
|
49
54
|
}
|
|
50
|
-
// Dormant copies go in the same write scope, so `hippo dormant restore` cannot bring the text back. They have no mirror
|
|
55
|
+
// Dormant copies go in the same write scope, so `hippo dormant restore` cannot bring the text back. They have no mirror
|
|
56
|
+
// to purge.
|
|
51
57
|
function removeDormantCopies(db, rejection, digest, holdsValue, removal) {
|
|
52
58
|
const { tenantId } = rejection;
|
|
53
59
|
const { removedIds, dormantSuccessorIds } = removal;
|
|
@@ -67,7 +73,8 @@ function removeDormantCopies(db, rejection, digest, holdsValue, removal) {
|
|
|
67
73
|
dormantSuccessorIds.push(successor.id);
|
|
68
74
|
}
|
|
69
75
|
}
|
|
70
|
-
// After the commit, on the same handle: a purged raw mirror is stamped so the reaper skips it, and one that stays is
|
|
76
|
+
// After the commit, on the same handle: a purged raw mirror is stamped so the reaper skips it, and one that stays is
|
|
77
|
+
// logged.
|
|
71
78
|
function purgeRemovedMirrors(db, hippoRoot, removal) {
|
|
72
79
|
for (const id of removal.removedIds) {
|
|
73
80
|
const isRaw = removal.removedRawIds.includes(id);
|
|
@@ -78,8 +85,9 @@ function purgeRemovedMirrors(db, hippoRoot, removal) {
|
|
|
78
85
|
for (const successor of removal.successors)
|
|
79
86
|
writeEntryMirrors(hippoRoot, successor);
|
|
80
87
|
}
|
|
81
|
-
/** Applies one rejection on one handle and in one write scope: the rejected-value row, the removal of every row in
|
|
82
|
-
*
|
|
88
|
+
/** Applies one rejection on one handle and in one write scope: the rejected-value row, the removal of every row in
|
|
89
|
+
* reach that holds the text (live or dormant, whole or inside a merged row) and one reject_value audit row. Markdown
|
|
90
|
+
* mirrors follow the commit. */
|
|
83
91
|
export function applyRejection(hippoRoot, rejection) {
|
|
84
92
|
const { tenantId, actor, reason, memoryId } = rejection;
|
|
85
93
|
return onHandle(hippoRoot, (db) => {
|
|
@@ -97,21 +105,34 @@ export function applyRejection(hippoRoot, rejection) {
|
|
|
97
105
|
sourceMemoryId: memoryId ?? null,
|
|
98
106
|
normalizedChars: normalizeValueForRejection(content).length,
|
|
99
107
|
});
|
|
100
|
-
// SHORTCUT: scans
|
|
108
|
+
// SHORTCUT: scans the tenant's text columns, fine for a human-run command; a digest column needs a schema
|
|
109
|
+
// migration, held until approved.
|
|
101
110
|
const holdsValue = (text) => rejectionDigest(text) === digest;
|
|
102
111
|
removeLiveRows(db, hippoRoot, rejection, holdsValue, removal);
|
|
103
112
|
removeDormantCopies(db, rejection, digest, holdsValue, removal);
|
|
104
113
|
// Still inside the write scope: a failed audit row is reported and the reject commits without it.
|
|
105
114
|
const { removedIds } = removal;
|
|
106
|
-
audit(db, 'reject_value', {
|
|
115
|
+
audit(db, 'reject_value', {
|
|
116
|
+
tenantId,
|
|
117
|
+
actor,
|
|
118
|
+
targetId: memoryId,
|
|
119
|
+
metadata: { digest, removedIds, count: removedIds.length },
|
|
120
|
+
});
|
|
107
121
|
});
|
|
108
122
|
purgeRemovedMirrors(db, hippoRoot, removal);
|
|
109
123
|
const { removedIds, removedRawIds, successors, dormantSuccessorIds } = removal;
|
|
110
|
-
return {
|
|
124
|
+
return {
|
|
125
|
+
digest,
|
|
126
|
+
content,
|
|
127
|
+
removedIds,
|
|
128
|
+
removedRawIds,
|
|
129
|
+
successorIds: successors.map((s) => s.id),
|
|
130
|
+
dormantSuccessorIds,
|
|
131
|
+
};
|
|
111
132
|
}, openStore);
|
|
112
133
|
}
|
|
113
|
-
/** Deletes the tenant's one rejected value whose digest starts with `digestPrefix` and writes its unreject_value audit
|
|
114
|
-
*
|
|
134
|
+
/** Deletes the tenant's one rejected value whose digest starts with `digestPrefix` and writes its unreject_value audit
|
|
135
|
+
* row. No match, or more than one, writes nothing. */
|
|
115
136
|
export function liftRejection(hippoRoot, tenantId, digestPrefix, actor) {
|
|
116
137
|
return onHandle(hippoRoot, (db) => {
|
|
117
138
|
const matches = listRejectedValues(db, tenantId).filter((r) => r.digest.startsWith(digestPrefix));
|
|
@@ -121,7 +142,12 @@ export function liftRejection(hippoRoot, tenantId, digestPrefix, actor) {
|
|
|
121
142
|
if (matches.length > 1)
|
|
122
143
|
return { status: 'ambiguous', candidates: matches };
|
|
123
144
|
deleteRejectedValue(db, tenantId, target.digest);
|
|
124
|
-
audit(db, 'unreject_value', {
|
|
145
|
+
audit(db, 'unreject_value', {
|
|
146
|
+
tenantId,
|
|
147
|
+
actor,
|
|
148
|
+
targetId: target.sourceMemoryId ?? undefined,
|
|
149
|
+
metadata: { digest: target.digest, reason: target.reason },
|
|
150
|
+
});
|
|
125
151
|
return { status: 'ok', digest: target.digest, reason: target.reason };
|
|
126
152
|
}, openStore);
|
|
127
153
|
}
|
|
@@ -131,8 +157,8 @@ export function loadRejectedValues(hippoRoot, tenantId) {
|
|
|
131
157
|
return listRejectedValues(db, tenantId);
|
|
132
158
|
}, openStore);
|
|
133
159
|
}
|
|
134
|
-
/** Whether the write guard would refuse `content` under `entryId`, as a write of that row would find it. Reads on a
|
|
135
|
-
*
|
|
160
|
+
/** Whether the write guard would refuse `content` under `entryId`, as a write of that row would find it. Reads on a
|
|
161
|
+
* plain open and writes nothing, so a dry run counts the values a real run refuses. */
|
|
136
162
|
export function rejectionGuardRefuses(hippoRoot, tenantId, entryId, content) {
|
|
137
163
|
const db = openHippoDb(hippoRoot);
|
|
138
164
|
try {
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
/** Rejected-value tombstone: a human can refuse byte-stable re-ingestion of a rejected fact (exact normalized value);
|
|
2
|
-
* db-agnostic (helpers take a `DatabaseSyncLike`) and imports nothing from the
|
|
1
|
+
/** Rejected-value tombstone: a human can refuse byte-stable re-ingestion of a rejected fact (exact normalized value);
|
|
2
|
+
* paraphrase matching is out of scope. db-agnostic (helpers take a `DatabaseSyncLike`) and imports nothing from the
|
|
3
|
+
* store layer above it, which imports this (the reverse is a cycle). */
|
|
4
|
+
import { normalizeValueForRejection, rejectionDigest } from '../core/rejection-digest.js';
|
|
3
5
|
import type { DatabaseSyncLike } from '../db/index.js';
|
|
4
|
-
|
|
5
|
-
* refusals, worse than misses. */
|
|
6
|
-
export declare function normalizeValueForRejection(content: string): string;
|
|
7
|
-
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char redaction hash used for query hashing. */
|
|
8
|
-
export declare function rejectionDigest(content: string): string;
|
|
6
|
+
export { normalizeValueForRejection, rejectionDigest };
|
|
9
7
|
export interface RejectedValueRow {
|
|
10
8
|
tenantId: string;
|
|
11
9
|
digest: string;
|
|
@@ -15,9 +13,11 @@ export interface RejectedValueRow {
|
|
|
15
13
|
sourceMemoryId: string | null;
|
|
16
14
|
normalizedChars: number | null;
|
|
17
15
|
}
|
|
18
|
-
/** Look up a tombstone by tenant + digest: one indexed point query, the guard's common-case cost; a miss ends the
|
|
16
|
+
/** Look up a tombstone by tenant + digest: one indexed point query, the guard's common-case cost; a miss ends the
|
|
17
|
+
* guard. */
|
|
19
18
|
export declare function findRejectedValue(db: DatabaseSyncLike, tenantId: string, digest: string): RejectedValueRow | null;
|
|
20
|
-
/** Insert (or refresh) a tombstone row; the caller owns the transaction (used by the `reject` verb and
|
|
19
|
+
/** Insert (or refresh) a tombstone row; the caller owns the transaction (used by the `reject` verb and
|
|
20
|
+
* `resolveConflict`'s `rejectLoserValue`). */
|
|
21
21
|
export declare function insertRejectedValue(db: DatabaseSyncLike, opts: {
|
|
22
22
|
tenantId: string;
|
|
23
23
|
digest: string;
|
|
@@ -31,7 +31,8 @@ export declare function insertRejectedValue(db: DatabaseSyncLike, opts: {
|
|
|
31
31
|
export declare function deleteRejectedValue(db: DatabaseSyncLike, tenantId: string, digest: string): boolean;
|
|
32
32
|
/** List tombstones for a tenant, newest first: the `rejections` verb. */
|
|
33
33
|
export declare function listRejectedValues(db: DatabaseSyncLike, tenantId: string): RejectedValueRow[];
|
|
34
|
-
/** Write-path guard check: fires when the digest matches a tombstone AND the write introduces that content (a new row,
|
|
35
|
-
* Unchanged same-id re-persists (recall boost, decay, star toggle) are exempt. A miss
|
|
34
|
+
/** Write-path guard check: fires when the digest matches a tombstone AND the write introduces that content (a new row,
|
|
35
|
+
* or a same-id UPSERT changing it). Unchanged same-id re-persists (recall boost, decay, star toggle) are exempt. A miss
|
|
36
|
+
* costs ONE indexed point query; only a hit SELECTs the stored row. */
|
|
36
37
|
export declare function checkRejectionGuard(db: DatabaseSyncLike, tenantId: string, entryId: string, content: string): void;
|
|
37
38
|
//# sourceMappingURL=rejection.d.ts.map
|