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,4 +1,4 @@
|
|
|
1
|
-
import { type MemoryEntry } from '
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
2
|
/** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
|
|
3
3
|
export declare function mergedSuccessor(row: MemoryEntry, retired: (text: string) => boolean, retiredIds: ReadonlySet<string>): MemoryEntry | null | undefined;
|
|
4
4
|
/** Sleep's check on a merged row: drops texts whose source was superseded since the merge, or that a rejection now covers. */
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// A sleep-merged row copies its sources' texts, so retiring a text (reject, or superseding its source) must reach the row too.
|
|
2
|
-
// SHORTCUT: reject rewrites merged rows at once, live and dormant; supersede and `resolve
|
|
3
|
-
|
|
4
|
-
import {
|
|
2
|
+
// SHORTCUT: reject rewrites merged rows at once, live and dormant; supersede and `resolve
|
|
3
|
+
// --reject-loser` wait for the next sleep's check, which sees a dormant row only once restored.
|
|
4
|
+
import { generateId } from '../core/memory.js';
|
|
5
|
+
import { duplicateKey, heldTexts, mergedText } from '../util/same-text.js';
|
|
5
6
|
/** The row that replaces a merged row once its retired texts leave: undefined when it holds none, null when nothing else is left. */
|
|
6
7
|
export function mergedSuccessor(row, retired, retiredIds) {
|
|
7
8
|
const texts = heldTexts(row);
|
|
@@ -1,60 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { simulate } from '../physics.js';
|
|
4
|
-
|
|
1
|
+
import { refreshParticleProperties } from '../db/physics-state.js';
|
|
2
|
+
import { loadStoredParticles, saveStoredParticles } from '../store/vector-index.js';
|
|
3
|
+
import { simulate } from '../core/physics.js';
|
|
4
|
+
import { errorMessage } from '../util/log.js';
|
|
5
|
+
const STATS_DECIMALS = 4;
|
|
5
6
|
// 2. Physics simulation pass
|
|
6
|
-
// -------------------------------------------------------------------------
|
|
7
7
|
export function physicsPass(run) {
|
|
8
8
|
if (run.dryRun)
|
|
9
9
|
return;
|
|
10
|
-
const { config, result
|
|
10
|
+
const { config, result } = run;
|
|
11
11
|
try {
|
|
12
12
|
const physicsEnabled = config.physics.enabled === true
|
|
13
13
|
|| (config.physics.enabled === 'auto');
|
|
14
|
-
if (physicsEnabled)
|
|
15
|
-
|
|
16
|
-
try {
|
|
17
|
-
const physicsMap = loadPhysicsState(db);
|
|
18
|
-
const particles = Array.from(physicsMap.values());
|
|
19
|
-
if (particles.length > 0) {
|
|
20
|
-
// Build entry lookup for property refresh
|
|
21
|
-
const entryMap = new Map(survivors.map(e => [e.id, e]));
|
|
22
|
-
refreshParticleProperties(particles, entryMap, run.now);
|
|
23
|
-
// Build conflict pairs from survivors
|
|
24
|
-
const conflictPairs = new Map();
|
|
25
|
-
for (const entry of survivors) {
|
|
26
|
-
if (entry.conflicts_with.length > 0) {
|
|
27
|
-
const set = conflictPairs.get(entry.id) ?? new Set();
|
|
28
|
-
for (const cid of entry.conflicts_with)
|
|
29
|
-
set.add(cid);
|
|
30
|
-
conflictPairs.set(entry.id, set);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Build half-life lookup
|
|
34
|
-
const halfLives = new Map();
|
|
35
|
-
for (const entry of survivors) {
|
|
36
|
-
halfLives.set(entry.id, entry.half_life_days);
|
|
37
|
-
}
|
|
38
|
-
const ctx = {
|
|
39
|
-
conflictPairs,
|
|
40
|
-
halfLives,
|
|
41
|
-
config: config.physics,
|
|
42
|
-
};
|
|
43
|
-
const stats = simulate(particles, ctx);
|
|
44
|
-
savePhysicsState(db, particles);
|
|
45
|
-
result.physicsSimulated = stats.particleCount;
|
|
46
|
-
result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
|
|
47
|
-
`avg vel ${stats.avgVelocityMagnitude.toFixed(4)}, ` +
|
|
48
|
-
`energy ${stats.energy.total.toFixed(4)}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
|
-
closeHippoDb(db);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
14
|
+
if (physicsEnabled)
|
|
15
|
+
simulateStoredParticles(run);
|
|
55
16
|
}
|
|
56
17
|
catch (error) {
|
|
57
|
-
result.details.push(` ⚠️ physics simulation skipped: ${error
|
|
18
|
+
result.details.push(` ⚠️ physics simulation skipped: ${errorMessage(error)}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function simulateStoredParticles(run) {
|
|
22
|
+
const { result, survivors } = run;
|
|
23
|
+
const particles = loadStoredParticles(run.hippoRoot);
|
|
24
|
+
if (particles.length === 0)
|
|
25
|
+
return;
|
|
26
|
+
// Build entry lookup for property refresh
|
|
27
|
+
const entryMap = new Map(survivors.map(e => [e.id, e]));
|
|
28
|
+
refreshParticleProperties(particles, entryMap, run.now);
|
|
29
|
+
const stats = simulate(particles, survivorForces(run));
|
|
30
|
+
saveStoredParticles(run.hippoRoot, particles);
|
|
31
|
+
result.physicsSimulated = stats.particleCount;
|
|
32
|
+
result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
|
|
33
|
+
`avg vel ${stats.avgVelocityMagnitude.toFixed(STATS_DECIMALS)}, ` +
|
|
34
|
+
`energy ${stats.energy.total.toFixed(STATS_DECIMALS)}`);
|
|
35
|
+
}
|
|
36
|
+
function survivorForces(run) {
|
|
37
|
+
// Build conflict pairs from survivors
|
|
38
|
+
const conflictPairs = new Map();
|
|
39
|
+
for (const entry of run.survivors) {
|
|
40
|
+
if (entry.conflicts_with.length > 0) {
|
|
41
|
+
const set = conflictPairs.get(entry.id) ?? new Set();
|
|
42
|
+
for (const cid of entry.conflicts_with)
|
|
43
|
+
set.add(cid);
|
|
44
|
+
conflictPairs.set(entry.id, set);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Build half-life lookup
|
|
48
|
+
const halfLives = new Map();
|
|
49
|
+
for (const entry of run.survivors) {
|
|
50
|
+
halfLives.set(entry.id, entry.half_life_days);
|
|
58
51
|
}
|
|
52
|
+
return {
|
|
53
|
+
conflictPairs,
|
|
54
|
+
halfLives,
|
|
55
|
+
config: run.config.physics,
|
|
56
|
+
};
|
|
59
57
|
}
|
|
60
58
|
//# sourceMappingURL=physics-pass.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Replay: during `hippo sleep`, sample N survivors weighted by reward, valence, under-rehearsal and age, then apply the `markRetrieved` strengthening.
|
|
2
|
+
* A lightweight deterministic analog of hippocampal replay, so important memories stay strong without being queried; distinct from decay, physics and merge. */
|
|
3
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
4
|
+
/** Priority score for ranking survivors for replay (higher = more likely sampled); pure in the entry and current time. */
|
|
5
|
+
export declare function replayPriority(entry: MemoryEntry, now: Date, outcomeAblated: boolean): number;
|
|
6
|
+
/** Pick `count` memories for replay, weighted by `replayPriority`, without replacement; deterministic for a seed.
|
|
7
|
+
* Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play. */
|
|
8
|
+
export declare function sampleForReplay(survivors: MemoryEntry[], count: number, now: Date, seed?: number): MemoryEntry[];
|
|
9
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Replay: during `hippo sleep`, sample N survivors weighted by reward, valence, under-rehearsal and age, then apply the `markRetrieved` strengthening.
|
|
2
|
+
* A lightweight deterministic analog of hippocampal replay, so important memories stay strong without being queried; distinct from decay, physics and merge. */
|
|
3
|
+
import { isOutcomeSlowAblated } from '../core/ablation.js';
|
|
4
|
+
import { resolveConfidence } from '../core/memory.js';
|
|
5
|
+
const VALENCE_WEIGHT = {
|
|
6
|
+
neutral: 1.0,
|
|
7
|
+
positive: 1.3,
|
|
8
|
+
negative: 1.5,
|
|
9
|
+
critical: 2.0,
|
|
10
|
+
};
|
|
11
|
+
/** Priority score for ranking survivors for replay (higher = more likely sampled); pure in the entry and current time. */
|
|
12
|
+
export function replayPriority(entry, now, outcomeAblated) {
|
|
13
|
+
const pos = entry.outcome_positive ?? 0;
|
|
14
|
+
const neg = entry.outcome_negative ?? 0;
|
|
15
|
+
// Reward signal: neutral = 1, strongly rewarded > 1, negative-dominated floors at 0.1 (still eligible, just unlikely).
|
|
16
|
+
// The clamp is required because sampleForReplay needs all weights positive.
|
|
17
|
+
const rewardSignal = outcomeAblated
|
|
18
|
+
? 1.0 // EVAL-ONLY ablation (see ablation.ts): outcome-off also silences replay's reward bias
|
|
19
|
+
: Math.max(0.1, 1 + pos * 0.5 + (pos - neg) * 0.25);
|
|
20
|
+
const valence = VALENCE_WEIGHT[entry.emotional_valence] ?? 1.0;
|
|
21
|
+
// Under-rehearsed memories benefit most from replay.
|
|
22
|
+
const underRehearsed = 1 / (1 + (entry.retrieval_count ?? 0));
|
|
23
|
+
// Idle-time boost: memories that haven't been touched recently need rehearsal more.
|
|
24
|
+
const lastRetrieved = new Date(entry.last_retrieved);
|
|
25
|
+
const deltaMs = now.getTime() - lastRetrieved.getTime();
|
|
26
|
+
const ageHours = Number.isFinite(deltaMs) ? Math.max(0, deltaMs / 3_600_000) : 0;
|
|
27
|
+
const idleBoost = 1 + Math.log1p(ageHours) * 0.1;
|
|
28
|
+
// Weight by current strength so dead-and-decaying memories don't waste replay slots.
|
|
29
|
+
const rawStrength = Number.isFinite(entry.strength) ? entry.strength : 0;
|
|
30
|
+
const strengthFloor = Math.max(0.1, rawStrength);
|
|
31
|
+
return rewardSignal * valence * underRehearsed * idleBoost * strengthFloor;
|
|
32
|
+
}
|
|
33
|
+
/** Deterministic 32-bit RNG (Mulberry32): same seed, same sequence, so replay is reproducible without a random-number dependency. */
|
|
34
|
+
function mulberry32(seed) {
|
|
35
|
+
let s = seed >>> 0;
|
|
36
|
+
return () => {
|
|
37
|
+
let t = (s += 0x6D2B79F5);
|
|
38
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
39
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
40
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Pick `count` memories for replay, weighted by `replayPriority`, without replacement; deterministic for a seed.
|
|
44
|
+
* Weighted but not greedy: always taking the top-N overfits, so a stochastic element keeps adjacent survivors in play. */
|
|
45
|
+
export function sampleForReplay(survivors, count, now, seed = Date.now() >>> 0) {
|
|
46
|
+
if (count <= 0 || survivors.length === 0)
|
|
47
|
+
return [];
|
|
48
|
+
const rng = mulberry32(seed);
|
|
49
|
+
// Deliberately-marked and aged-out memories are both untrusted and rehearsing them defeats staleness, so derive rather than trust
|
|
50
|
+
// the stored value (it no longer carries the age-out case).
|
|
51
|
+
const eligible = survivors.filter((e) => resolveConfidence(e, now) !== 'stale');
|
|
52
|
+
if (eligible.length === 0)
|
|
53
|
+
return [];
|
|
54
|
+
const outcomeAblated = isOutcomeSlowAblated();
|
|
55
|
+
const pool = eligible.map((entry, idx) => ({
|
|
56
|
+
entry,
|
|
57
|
+
idx,
|
|
58
|
+
weight: replayPriority(entry, now, outcomeAblated),
|
|
59
|
+
}));
|
|
60
|
+
const want = Math.min(count, pool.length);
|
|
61
|
+
const chosen = [];
|
|
62
|
+
const taken = new Set();
|
|
63
|
+
for (let k = 0; k < want; k++) {
|
|
64
|
+
let totalW = 0;
|
|
65
|
+
for (const p of pool)
|
|
66
|
+
if (!taken.has(p.idx))
|
|
67
|
+
totalW += p.weight;
|
|
68
|
+
if (totalW <= 0)
|
|
69
|
+
break;
|
|
70
|
+
let r = rng() * totalW;
|
|
71
|
+
for (const p of pool) {
|
|
72
|
+
if (taken.has(p.idx))
|
|
73
|
+
continue;
|
|
74
|
+
r -= p.weight;
|
|
75
|
+
if (r <= 0) {
|
|
76
|
+
chosen.push(p.entry);
|
|
77
|
+
taken.add(p.idx);
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return chosen;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { MemoryEntry, type DecayOptions } from '../memory.js';
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
import { loadConfig } from '../config.js';
|
|
1
|
+
import { MemoryEntry, type DecayOptions } from '../core/memory.js';
|
|
2
|
+
import { type DormantMove } from '../store/dormant.js';
|
|
3
|
+
import { type TombstoneChecks } from '../store/tombstone-checks.js';
|
|
4
|
+
import { loadConfig } from '../core/config.js';
|
|
5
5
|
export interface ConsolidationResult {
|
|
6
6
|
decayed: number;
|
|
7
7
|
removed: number;
|
|
8
8
|
/** Faded memories moved to the dormant store instead of deleted (config
|
|
9
|
-
* `dormant.enabled`; src/dormant.ts). Always 0 when that is off. */
|
|
9
|
+
* `dormant.enabled`; src/store/dormant.ts). Always 0 when that is off. */
|
|
10
10
|
dormant: number;
|
|
11
11
|
/** Dormant memories deleted for good this sleep because they outlived
|
|
12
12
|
* `dormant.retentionDays` without a restore. */
|
|
@@ -35,12 +35,6 @@ export interface ConsolidationResult {
|
|
|
35
35
|
}
|
|
36
36
|
export declare const REPLAY_COUNT_DEFAULT = 5;
|
|
37
37
|
export declare function keptAsWritten(entry: MemoryEntry): boolean;
|
|
38
|
-
/** The sleep's one tombstone-check handle: opened on first use, never under dryRun, closed once. */
|
|
39
|
-
interface LazyDb {
|
|
40
|
-
get: () => DatabaseSyncLike | null;
|
|
41
|
-
close: () => void;
|
|
42
|
-
}
|
|
43
|
-
export declare function lazyConsolidateDb(hippoRoot: string, dryRun: boolean): LazyDb;
|
|
44
38
|
/** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
|
|
45
39
|
export declare function syncFtsIndex(hippoRoot: string, dryRun: boolean, result: ConsolidationResult): void;
|
|
46
40
|
/** State every sleep stage reads or appends to; the pending lists are flushed at the end, each of `units` whole in one transaction. */
|
|
@@ -53,7 +47,8 @@ export interface SleepRun {
|
|
|
53
47
|
result: ConsolidationResult;
|
|
54
48
|
all: MemoryEntry[];
|
|
55
49
|
retirable: (entry: MemoryEntry) => boolean;
|
|
56
|
-
|
|
50
|
+
/** Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both check tombstones here first. */
|
|
51
|
+
tombstones: TombstoneChecks;
|
|
57
52
|
survivors: MemoryEntry[];
|
|
58
53
|
pendingWrites: MemoryEntry[];
|
|
59
54
|
pendingDeletes: string[];
|
|
@@ -61,5 +56,4 @@ export interface SleepRun {
|
|
|
61
56
|
units: string[][];
|
|
62
57
|
}
|
|
63
58
|
export declare function newConsolidationResult(dryRun: boolean): ConsolidationResult;
|
|
64
|
-
export {};
|
|
65
59
|
//# sourceMappingURL=run.d.ts.map
|
package/dist/consolidate/run.js
CHANGED
|
@@ -1,46 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NO_MERGE_TAGS } from '../
|
|
1
|
+
import { ftsDrift } from '../store/entry-row.js';
|
|
2
|
+
import { NO_MERGE_TAGS } from '../sharing/share.js';
|
|
3
3
|
export const REPLAY_COUNT_DEFAULT = 5;
|
|
4
4
|
export function keptAsWritten(entry) {
|
|
5
5
|
return entry.tags.some((tag) => NO_MERGE_TAGS.has(tag));
|
|
6
6
|
}
|
|
7
|
-
// Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both
|
|
8
|
-
// need this tombstone check. Lazy so a sleep reaching neither never opens it; call it IMMEDIATELY
|
|
9
|
-
// before the try whose finally closes it, so a throw in any phase cannot leak the handle.
|
|
10
|
-
export function lazyConsolidateDb(hippoRoot, dryRun) {
|
|
11
|
-
let consolidateDbHandle = null;
|
|
12
|
-
let consolidateDbOpened = false;
|
|
13
|
-
const get = () => {
|
|
14
|
-
if (dryRun)
|
|
15
|
-
return null;
|
|
16
|
-
if (!consolidateDbOpened) {
|
|
17
|
-
consolidateDbHandle = openHippoDb(hippoRoot);
|
|
18
|
-
consolidateDbOpened = true;
|
|
19
|
-
}
|
|
20
|
-
return consolidateDbHandle;
|
|
21
|
-
};
|
|
22
|
-
const close = () => {
|
|
23
|
-
if (consolidateDbHandle)
|
|
24
|
-
closeHippoDb(consolidateDbHandle);
|
|
25
|
-
};
|
|
26
|
-
return { get, close };
|
|
27
|
-
}
|
|
28
7
|
/** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
|
|
29
8
|
export function syncFtsIndex(hippoRoot, dryRun, result) {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const counts = ftsRowCounts(db);
|
|
35
|
-
if (counts === null || counts.memories === counts.fts)
|
|
36
|
-
return;
|
|
37
|
-
if (!dryRun)
|
|
38
|
-
repairFtsDrift(db);
|
|
39
|
-
result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ${counts.memories} memories)`);
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
closeHippoDb(db);
|
|
43
|
-
}
|
|
9
|
+
const counts = ftsDrift(hippoRoot, !dryRun);
|
|
10
|
+
if (counts === null)
|
|
11
|
+
return;
|
|
12
|
+
result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ${counts.memories} memories)`);
|
|
44
13
|
}
|
|
45
14
|
export function newConsolidationResult(dryRun) {
|
|
46
15
|
return {
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Steps:
|
|
5
|
-
* 1. Decay pass - remove entries below strength threshold
|
|
6
|
-
* 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
|
|
7
|
-
* 3. Stats tracking
|
|
8
|
-
*/
|
|
9
|
-
import { type WriteBudget } from '../write-budget.js';
|
|
1
|
+
/** Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic summaries of overlapping episodics), stats. */
|
|
2
|
+
import { type WriteBudget } from '../util/write-budget.js';
|
|
10
3
|
import { type ConsolidationResult } from './run.js';
|
|
11
4
|
/**
|
|
12
5
|
* Run a full consolidation pass.
|
|
@@ -1,33 +1,27 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
|
|
7
|
-
* 3. Stats tracking
|
|
8
|
-
*/
|
|
9
|
-
import { evalNow } from '../ablation.js';
|
|
10
|
-
import { canAutoDelete } from '../memory.js';
|
|
11
|
-
import { loadAllEntries } from '../store/entry-reads.js';
|
|
12
|
-
import { batchWriteAndDeleteOn, memoriesBackingObjects, noteFailedUnit } from '../store/delete-and-batch.js';
|
|
13
|
-
import { openStore } from '../store/open.js';
|
|
1
|
+
/** Consolidation engine ("Sleep"): decay pass (drop entries below the strength threshold), merge pass (semantic summaries of overlapping episodics), stats. */
|
|
2
|
+
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { canAutoDelete } from '../core/memory.js';
|
|
4
|
+
import { loadAllEntriesWithBase } from '../store/entry-reads.js';
|
|
5
|
+
import { commitInChunks, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
14
6
|
import { appendConsolidationRun, loadSessionDecayContext, incrementSleepCount } from '../store/index-and-stats.js';
|
|
15
7
|
import { replaceDetectedConflicts } from '../store/conflicts.js';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { loadConfig } from '../config.js';
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
8
|
+
import { SLEEP_DB_WAIT_MS } from '../db/index.js';
|
|
9
|
+
import { expireDormantBefore } from '../store/dormant.js';
|
|
10
|
+
import { loadConfig } from '../core/config.js';
|
|
11
|
+
import { recordAuditEventsRowByRow, reportAuditWriteFailure } from '../store/audit.js';
|
|
12
|
+
import { lazyTombstoneChecks } from '../store/tombstone-checks.js';
|
|
13
|
+
import { migrateDefaultHalfLife, LEGACY_TYPED_HALF_LIFE } from './half-life-migration.js';
|
|
14
|
+
import { errorMessage, log } from '../util/log.js';
|
|
15
|
+
import { WRITE_BUDGET } from '../util/write-budget.js';
|
|
23
16
|
import { decayPass } from './decay.js';
|
|
24
17
|
import { familyUnits, groupFlush } from './flush-units.js';
|
|
25
18
|
import { retireHeldTexts, mergePass } from './merge.js';
|
|
26
19
|
import { detectConflicts } from './conflicts.js';
|
|
27
|
-
import {
|
|
20
|
+
import { newConsolidationResult, syncFtsIndex } from './run.js';
|
|
28
21
|
import { promoteSessionTraces, replayPass } from './traces.js';
|
|
29
22
|
import { llmPasses } from './llm-passes.js';
|
|
30
23
|
import { physicsPass } from './physics-pass.js';
|
|
24
|
+
import { DAY_MS } from '../util/time.js';
|
|
31
25
|
/**
|
|
32
26
|
* Run a full consolidation pass.
|
|
33
27
|
*/
|
|
@@ -39,26 +33,18 @@ export async function consolidate(hippoRoot, options = {}) {
|
|
|
39
33
|
syncFtsIndex(hippoRoot, dryRun, result);
|
|
40
34
|
// Host-wide by design: per-tenant filtering would mean N runs per host and no cross-tenant dedup.
|
|
41
35
|
// The api.sleep audit row tags this with the admin synthetic actor.
|
|
42
|
-
const all =
|
|
36
|
+
const { entries: all, base: snapshot } = loadAllEntriesWithBase(hippoRoot);
|
|
43
37
|
if (dryRun)
|
|
44
38
|
for (const e of all)
|
|
45
39
|
e.half_life_days = halfLife.halfLives.get(e.id) ?? e.half_life_days;
|
|
46
40
|
const backingObjects = memoriesBackingObjects(hippoRoot);
|
|
47
41
|
// Retirable: auto-deletable (never pinned, raw or kept for good) and not backing a first-class object.
|
|
48
42
|
const retirable = (entry) => canAutoDelete(entry) && !backingObjects.has(entry.id);
|
|
49
|
-
const snapshot = new Map(structuredClone(all).map((e) => [e.id, e]));
|
|
50
|
-
// Load decay options from config + session context
|
|
51
43
|
const config = loadConfig(hippoRoot);
|
|
52
|
-
const
|
|
53
|
-
const decayOpts = {
|
|
54
|
-
decayBasis: config.decayBasis,
|
|
55
|
-
avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
|
|
56
|
-
sleepCount: sessionCtx.sleepCount,
|
|
57
|
-
};
|
|
58
|
-
const consolidateDb = lazyConsolidateDb(hippoRoot, dryRun);
|
|
44
|
+
const decayOpts = sessionDecayOptions(hippoRoot, config);
|
|
59
45
|
const run = {
|
|
60
46
|
hippoRoot, now, dryRun, config, decayOpts, result, all, retirable,
|
|
61
|
-
|
|
47
|
+
tombstones: lazyTombstoneChecks(hippoRoot, dryRun),
|
|
62
48
|
survivors: [],
|
|
63
49
|
// Collect all writes/deletes and batch them at the end
|
|
64
50
|
pendingWrites: [],
|
|
@@ -67,30 +53,43 @@ export async function consolidate(hippoRoot, options = {}) {
|
|
|
67
53
|
units: [],
|
|
68
54
|
};
|
|
69
55
|
const decay = decayPass(run);
|
|
56
|
+
await runPassesAfterDecay(run, options.fetcher);
|
|
57
|
+
const budget = options.budget ?? WRITE_BUDGET;
|
|
58
|
+
await flushPending(run, snapshot, budget);
|
|
59
|
+
await expireDormant(run, budget);
|
|
60
|
+
if (!dryRun)
|
|
61
|
+
logRun(run, decay);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
// Load decay options from config + session context
|
|
65
|
+
function sessionDecayOptions(hippoRoot, config) {
|
|
66
|
+
const sessionCtx = loadSessionDecayContext(hippoRoot);
|
|
67
|
+
return {
|
|
68
|
+
decayBasis: config.decayBasis,
|
|
69
|
+
avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
|
|
70
|
+
sleepCount: sessionCtx.sleepCount,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** Every pass between decay and the flush; the tombstone-check handle closes whichever of them throws. */
|
|
74
|
+
async function runPassesAfterDecay(run, fetcher) {
|
|
70
75
|
let mergesSkippedRejected = 0;
|
|
71
76
|
try {
|
|
72
77
|
promoteSessionTraces(run);
|
|
73
78
|
replayPass(run);
|
|
74
|
-
await llmPasses(run,
|
|
79
|
+
await llmPasses(run, fetcher);
|
|
75
80
|
physicsPass(run);
|
|
76
81
|
retireHeldTexts(run);
|
|
77
82
|
mergesSkippedRejected = mergePass(run);
|
|
78
83
|
}
|
|
79
84
|
finally {
|
|
80
|
-
|
|
85
|
+
run.tombstones.close();
|
|
81
86
|
}
|
|
82
87
|
if (mergesSkippedRejected > 0) {
|
|
83
88
|
log.warn(`consolidate: skipped ${mergesSkippedRejected} merge(s) whose content matches a rejected value`);
|
|
84
89
|
}
|
|
85
|
-
const budget = options.budget ?? WRITE_BUDGET;
|
|
86
|
-
await flushPending(run, snapshot, budget);
|
|
87
|
-
await expireDormant(run, budget);
|
|
88
|
-
if (!dryRun)
|
|
89
|
-
logRun(run, decay);
|
|
90
|
-
return result;
|
|
91
90
|
}
|
|
92
91
|
// A changed default half-life moves memories still on the old base first,
|
|
93
|
-
// so this pass decays them at the new one (src/half-life-migration.ts).
|
|
92
|
+
// so this pass decays them at the new one (src/consolidate/half-life-migration.ts).
|
|
94
93
|
function migrateHalfLives(hippoRoot, dryRun, result) {
|
|
95
94
|
const halfLife = migrateDefaultHalfLife(hippoRoot, loadConfig(hippoRoot).defaultHalfLifeDays, { dryRun });
|
|
96
95
|
if (halfLife.rescaled > 0) {
|
|
@@ -108,7 +107,8 @@ async function flushPending(run, snapshot, budget) {
|
|
|
108
107
|
return;
|
|
109
108
|
const units = [...run.units, ...familyUnits(pendingWrites, pendingDeletes, pendingDormant, snapshot)];
|
|
110
109
|
const components = groupFlush(pendingWrites, pendingDeletes, pendingDormant, units);
|
|
111
|
-
|
|
110
|
+
// The snapshot keeps what the DAG passes and other writers changed while sleep ran; the wait is sleep's own, not a server request's 250 ms.
|
|
111
|
+
const left = new Set(await commitInChunks(run.hippoRoot, components, { snapshot, budget, busyWaitMs: SLEEP_DB_WAIT_MS }));
|
|
112
112
|
for (const id of [...pendingDeletes, ...pendingDormant.map((m) => m.entry.id)]) {
|
|
113
113
|
if (!left.has(id))
|
|
114
114
|
result.details.push(` ↩ ${id} not removed: pinned or already gone before sleep saved`);
|
|
@@ -117,92 +117,19 @@ async function flushPending(run, snapshot, budget) {
|
|
|
117
117
|
result.removed = result.removedIds.length;
|
|
118
118
|
result.dormant = pendingDormant.filter((m) => left.has(m.entry.id)).length;
|
|
119
119
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
async function commitInChunks(hippoRoot, components, snapshot, budget) {
|
|
123
|
-
if (components.length === 0)
|
|
124
|
-
return [];
|
|
125
|
-
const removed = [];
|
|
126
|
-
// Its own wait, not a server request's 250 ms, and an option rather than a PRAGMA so a shared hook handle keeps its own.
|
|
127
|
-
const db = openStore(hippoRoot, { busyWaitMs: SLEEP_DB_WAIT_MS });
|
|
128
|
-
let next = 0;
|
|
129
|
-
try {
|
|
130
|
-
let committedAt = 0;
|
|
131
|
-
while (next < components.length) {
|
|
132
|
-
if (next > 0)
|
|
133
|
-
await budget.pause(committedAt);
|
|
134
|
-
const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, { snapshot, holdMs: budget.holdMs, clock: budget.clock });
|
|
135
|
-
committedAt = budget.clock();
|
|
136
|
-
next = chunk.next;
|
|
137
|
-
for (const id of chunk.removedIds)
|
|
138
|
-
removed.push(id);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
// A unit that threw is already tagged; a throw outside one (a pause, BEGIN or COMMIT) names the chunk's first unit.
|
|
143
|
-
if (err instanceof Error)
|
|
144
|
-
noteFailedUnit(err, components[next]);
|
|
145
|
-
throw err;
|
|
146
|
-
}
|
|
147
|
-
finally {
|
|
148
|
-
closeHippoDb(db);
|
|
149
|
-
}
|
|
150
|
-
return removed;
|
|
151
|
-
}
|
|
152
|
-
/** Deletes `keys` in transactions of about `budget.holdMs`, letting other writers in between; returns how many went. */
|
|
153
|
-
async function expireInChunks(db, keys, cutoff, budget) {
|
|
154
|
-
let gone = 0;
|
|
155
|
-
let next = 0;
|
|
156
|
-
let committedAt = 0;
|
|
157
|
-
while (next < keys.length) {
|
|
158
|
-
if (next > 0)
|
|
159
|
-
await budget.pause(committedAt);
|
|
160
|
-
db.exec('BEGIN IMMEDIATE');
|
|
161
|
-
const begunAt = budget.clock();
|
|
162
|
-
try {
|
|
163
|
-
do
|
|
164
|
-
gone += deleteExpiredDormantRow(db, keys[next++], cutoff);
|
|
165
|
-
while (next < keys.length && budget.clock() - begunAt < budget.holdMs);
|
|
166
|
-
db.exec('COMMIT');
|
|
167
|
-
}
|
|
168
|
-
catch (err) {
|
|
169
|
-
if (db.isTransaction !== false) {
|
|
170
|
-
try {
|
|
171
|
-
db.exec('ROLLBACK');
|
|
172
|
-
}
|
|
173
|
-
catch { /* preserve the original throw */ }
|
|
174
|
-
}
|
|
175
|
-
throw err;
|
|
176
|
-
}
|
|
177
|
-
committedAt = budget.clock();
|
|
178
|
-
}
|
|
179
|
-
return gone;
|
|
180
|
-
}
|
|
181
|
-
// Dormant retention: a dormant memory nobody restored within
|
|
182
|
-
// dormant.retentionDays is deleted for good (0 keeps them forever). Runs
|
|
183
|
-
// even when dormant.enabled is off, so turning it off still ages out what
|
|
184
|
-
// earlier sleeps kept.
|
|
120
|
+
// Dormant retention: a dormant memory nobody restored within dormant.retentionDays is deleted for good (0 keeps forever);
|
|
121
|
+
// runs even when dormant.enabled is off, so turning it off still ages out what earlier sleeps kept.
|
|
185
122
|
async function expireDormant(run, budget) {
|
|
186
123
|
const { config, result, dryRun } = run;
|
|
187
124
|
if (!(config.dormant.retentionDays > 0))
|
|
188
125
|
return;
|
|
189
|
-
const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays *
|
|
190
|
-
|
|
191
|
-
try {
|
|
192
|
-
// The keys come from a read, so a sleep with nothing to expire never takes the write lock; one DELETE scanned every stored entry under it.
|
|
193
|
-
const keys = expiredDormantKeys(db, cutoff);
|
|
194
|
-
result.dormantExpired = dryRun ? keys.length : await expireInChunks(db, keys, cutoff, budget);
|
|
195
|
-
}
|
|
196
|
-
finally {
|
|
197
|
-
closeHippoDb(db);
|
|
198
|
-
}
|
|
126
|
+
const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays * DAY_MS).toISOString();
|
|
127
|
+
result.dormantExpired = await expireDormantBefore(run.hippoRoot, cutoff, { dryRun, budget, busyWaitMs: SLEEP_DB_WAIT_MS });
|
|
199
128
|
if (result.dormantExpired > 0) {
|
|
200
129
|
result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant memor${result.dormantExpired === 1 ? 'y' : 'ies'} older than ${config.dormant.retentionDays} days`);
|
|
201
130
|
}
|
|
202
131
|
}
|
|
203
|
-
// -------------------------------------------------------------------------
|
|
204
132
|
// 4. Log run
|
|
205
|
-
// -------------------------------------------------------------------------
|
|
206
133
|
function logRun(run, decay) {
|
|
207
134
|
const { hippoRoot, now, result } = run;
|
|
208
135
|
const detectedConflicts = detectConflicts(run.survivors, now, run.decayOpts, decay.rescuedIds);
|
|
@@ -223,41 +150,32 @@ function logRun(run, decay) {
|
|
|
223
150
|
// One audit row per rescue, written only after the last flush chunk commits, so a run stopped mid-flush asserts no rescue.
|
|
224
151
|
function auditRescues(run, { rescuedEntries, rankById }) {
|
|
225
152
|
const { result } = run;
|
|
153
|
+
const rescueEvent = (entry) => {
|
|
154
|
+
const rank = rankById.get(entry.id);
|
|
155
|
+
return {
|
|
156
|
+
tenantId: entry.tenantId,
|
|
157
|
+
actor: 'sleep',
|
|
158
|
+
op: 'mv_rescue',
|
|
159
|
+
targetId: entry.id,
|
|
160
|
+
metadata: rank
|
|
161
|
+
? { rank: rank.rank, totalNonPinned: rank.totalNonPinned, keepN: rank.keepN, score: rank.score }
|
|
162
|
+
: {},
|
|
163
|
+
};
|
|
164
|
+
};
|
|
226
165
|
try {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
tenantId: entry.tenantId,
|
|
236
|
-
actor: 'sleep',
|
|
237
|
-
op: 'mv_rescue',
|
|
238
|
-
targetId: entry.id,
|
|
239
|
-
metadata: rank
|
|
240
|
-
? { rank: rank.rank, totalNonPinned: rank.totalNonPinned, keepN: rank.keepN, score: rank.score }
|
|
241
|
-
: {},
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
auditFailures++;
|
|
246
|
-
reportAuditWriteFailure('mv_rescue', String(error), entry.id);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if (auditFailures > 0) {
|
|
250
|
-
result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
|
|
251
|
-
`failed to write (the rescue itself still landed)`);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
finally {
|
|
255
|
-
closeHippoDb(auditDb);
|
|
166
|
+
// Row by row: one failed audit write must not silently drop every remaining row.
|
|
167
|
+
const failed = recordAuditEventsRowByRow(run.hippoRoot, rescuedEntries.map(rescueEvent));
|
|
168
|
+
for (const { event, error } of failed)
|
|
169
|
+
reportAuditWriteFailure('mv_rescue', String(error), event.targetId);
|
|
170
|
+
const auditFailures = failed.length;
|
|
171
|
+
if (auditFailures > 0) {
|
|
172
|
+
result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
|
|
173
|
+
`failed to write (the rescue itself still landed)`);
|
|
256
174
|
}
|
|
257
175
|
}
|
|
258
|
-
catch {
|
|
259
|
-
//
|
|
260
|
-
|
|
176
|
+
catch (err) {
|
|
177
|
+
// An audit store that will not open must never crash the mutation it records.
|
|
178
|
+
log.debug(`mv_rescue audit unavailable: ${errorMessage(err)}`);
|
|
261
179
|
result.details.push(` ⚠️ memory-value: mv_rescue audit unavailable this cycle ` +
|
|
262
180
|
`(${rescuedEntries.length} rescue${rescuedEntries.length === 1 ? '' : 's'} not audited)`);
|
|
263
181
|
}
|