hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/decisions.js
DELETED
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Decision first-class object.
|
|
3
|
-
*
|
|
4
|
-
* `hippo decide` used to write only a tagged memory (tags ['decision'], source
|
|
5
|
-
* 'decision') with a 90-day half-life, so an in-force decision decayed out of
|
|
6
|
-
* recall even though it was never reversed. The `decisions` table is now the
|
|
7
|
-
* source of truth: a decision stays `active` regardless of memory decay, and
|
|
8
|
-
* `hippo decide list --status active` is authoritative. A memory row still
|
|
9
|
-
* mirrors the decision for recall surfaces but is NOT canonical — memory_id is
|
|
10
|
-
* NULLABLE with ON DELETE SET NULL so forget/consolidate/archive gracefully
|
|
11
|
-
* orphans the decision row.
|
|
12
|
-
*
|
|
13
|
-
* Lifecycle: active -> superseded (a newer decision replaces it; superseded_by
|
|
14
|
-
* points to the successor) or active -> closed (retired with no successor).
|
|
15
|
-
*
|
|
16
|
-
* Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
|
|
17
|
-
* enforce decisions.tenant_id == the referenced memory's tenant_id, and a
|
|
18
|
-
* superseded_by same-tenant trigger makes cross-tenant supersession
|
|
19
|
-
* unrepresentable. Mirrors the predictions pattern (src/predictions.ts).
|
|
20
|
-
*
|
|
21
|
-
* Dual-write atomicity: `saveDecision` writes the memory + decisions row (and,
|
|
22
|
-
* when superseding, the old row's UPDATE) inside writeEntry's SAVEPOINT
|
|
23
|
-
* 'write_entry' (store/entry-writes.ts) via the afterWrite hook, so a failure in any
|
|
24
|
-
* step rolls all of them back. Pattern matches savePrediction (predictions.ts).
|
|
25
|
-
*/
|
|
26
|
-
import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
|
|
27
|
-
import { openHippoDb, closeHippoDb } from './db.js';
|
|
28
|
-
import { writeEntry } from './store/entry-writes.js';
|
|
29
|
-
import { assertTenantId } from './tenant.js';
|
|
30
|
-
import { markGraphDirty, removeGraphEntitiesForObject } from './graph/write.js';
|
|
31
|
-
import { createMemory, Layer } from './memory.js';
|
|
32
|
-
import { appendAuditEvent } from './audit.js';
|
|
33
|
-
import { objectHalfLifeDays } from './half-life-migration.js';
|
|
34
|
-
import { keysetAfter } from './keyset.js';
|
|
35
|
-
export const VALID_DECISION_STATES = new Set([
|
|
36
|
-
'active',
|
|
37
|
-
'superseded',
|
|
38
|
-
'closed',
|
|
39
|
-
]);
|
|
40
|
-
function rowToDecision(row) {
|
|
41
|
-
return {
|
|
42
|
-
id: row.id,
|
|
43
|
-
memoryId: row.memory_id,
|
|
44
|
-
tenantId: row.tenant_id,
|
|
45
|
-
decisionText: row.decision_text,
|
|
46
|
-
context: row.context,
|
|
47
|
-
// SAFETY: status is DB-constrained to VALID_DECISION_STATES; this module
|
|
48
|
-
// is the only writer and always inserts one of those literal strings.
|
|
49
|
-
status: row.status,
|
|
50
|
-
supersededBy: row.superseded_by,
|
|
51
|
-
supersededAt: row.superseded_at,
|
|
52
|
-
closedAt: row.closed_at,
|
|
53
|
-
createdAt: row.created_at,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
const DECISION_COLS = `
|
|
57
|
-
id, memory_id, tenant_id, decision_text, context, status,
|
|
58
|
-
superseded_by, superseded_at, closed_at, created_at
|
|
59
|
-
`;
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
// Public API
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
/** The legacy `hippo decide` memory mirror for a decision. */
|
|
64
|
-
function buildDecisionMemory(hippoRoot, tenantId, opts) {
|
|
65
|
-
const content = opts.context
|
|
66
|
-
? `${opts.decisionText}\n\nContext: ${opts.context}`
|
|
67
|
-
: opts.decisionText;
|
|
68
|
-
const tags = ['decision', ...(opts.extraTags ?? [])];
|
|
69
|
-
return createMemory(content, {
|
|
70
|
-
tags,
|
|
71
|
-
layer: Layer.Semantic,
|
|
72
|
-
confidence: 'verified',
|
|
73
|
-
source: 'decision',
|
|
74
|
-
baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
|
|
75
|
-
tenantId,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
// Preflight the supersede target BEFORE inserting the new row. The new
|
|
79
|
-
// row's autoincrement id could otherwise collide with a non-existent
|
|
80
|
-
// supersedesDecisionId (e.g. superseding id 1 on an empty store, where the
|
|
81
|
-
// INSERT below would itself become id 1), making the row supersede itself.
|
|
82
|
-
// Validating first means the new row is never a candidate for its own
|
|
83
|
-
// supersede UPDATE.
|
|
84
|
-
function preflightDecisionSupersede(db, tenantId, supersedesId) {
|
|
85
|
-
// SAFETY: row shape matches the single `status` column named in the SELECT below.
|
|
86
|
-
const pred = db.prepare(`SELECT status FROM decisions WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
|
|
87
|
-
if (!pred) {
|
|
88
|
-
throw new NotFoundError(`saveDecision: decision ${supersedesId} to supersede not found for tenant ${tenantId}`);
|
|
89
|
-
}
|
|
90
|
-
if (pred.status !== 'active') {
|
|
91
|
-
throw new ConflictError(`saveDecision: decision ${supersedesId} is not active (status='${pred.status}'); only active decisions can be superseded.`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function insertDecisionRow(db, memoryId, tenantId, opts, now) {
|
|
95
|
-
const result = db.prepare(`
|
|
96
|
-
INSERT INTO decisions(
|
|
97
|
-
memory_id, tenant_id, decision_text, context,
|
|
98
|
-
status, superseded_by, superseded_at, closed_at, created_at
|
|
99
|
-
) VALUES (?, ?, ?, ?, 'active', NULL, NULL, NULL, ?)
|
|
100
|
-
`).run(memoryId, tenantId, opts.decisionText, opts.context ?? null, now);
|
|
101
|
-
return Number(result.lastInsertRowid ?? 0);
|
|
102
|
-
}
|
|
103
|
-
// Supersede the (preflight-validated) prior active decision in the SAME
|
|
104
|
-
// SAVEPOINT, atomic with the new row. The `id != decisionId` exclusion is
|
|
105
|
-
// defense-in-depth against the self-match described above; combined with
|
|
106
|
-
// the preflight, a 0-change here is unreachable in the single-writer txn.
|
|
107
|
-
function supersedeDecisionRow(db, tenantId, actor, supersedesId, decisionId, now) {
|
|
108
|
-
const sup = db.prepare(`
|
|
109
|
-
UPDATE decisions
|
|
110
|
-
SET status = 'superseded', superseded_by = ?, superseded_at = ?
|
|
111
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
|
|
112
|
-
`).run(decisionId, now, supersedesId, tenantId, decisionId);
|
|
113
|
-
if (sup.changes === 0) {
|
|
114
|
-
throw new ConflictError(`saveDecision: decision ${supersedesId} could not be superseded (no longer active or self-reference).`);
|
|
115
|
-
}
|
|
116
|
-
appendAuditEvent(db, {
|
|
117
|
-
tenantId,
|
|
118
|
-
actor,
|
|
119
|
-
op: 'decision_supersede',
|
|
120
|
-
targetId: String(supersedesId),
|
|
121
|
-
metadata: {
|
|
122
|
-
decision_id: supersedesId,
|
|
123
|
-
superseded_by: decisionId,
|
|
124
|
-
},
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
/** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
|
|
128
|
-
function writeDecisionRow(db, memoryId, tenantId, opts, actor, now) {
|
|
129
|
-
if (opts.supersedesDecisionId !== undefined) {
|
|
130
|
-
preflightDecisionSupersede(db, tenantId, opts.supersedesDecisionId);
|
|
131
|
-
}
|
|
132
|
-
const decisionId = insertDecisionRow(db, memoryId, tenantId, opts, now);
|
|
133
|
-
if (opts.supersedesDecisionId !== undefined) {
|
|
134
|
-
supersedeDecisionRow(db, tenantId, actor, opts.supersedesDecisionId, decisionId, now);
|
|
135
|
-
}
|
|
136
|
-
// SAFETY: row's shape matches the columns named in DECISION_COLS above.
|
|
137
|
-
const row = db.prepare(`SELECT ${DECISION_COLS} FROM decisions WHERE id = ?`)
|
|
138
|
-
.get(decisionId);
|
|
139
|
-
if (!row)
|
|
140
|
-
throw new Error('saveDecision: failed to reload saved decision row');
|
|
141
|
-
// GDPR-light metadata: id + flag only, no decision_text.
|
|
142
|
-
appendAuditEvent(db, {
|
|
143
|
-
tenantId,
|
|
144
|
-
actor,
|
|
145
|
-
op: 'decision_create',
|
|
146
|
-
targetId: String(decisionId),
|
|
147
|
-
metadata: {
|
|
148
|
-
decision_id: decisionId,
|
|
149
|
-
has_context: opts.context !== undefined && opts.context !== null && opts.context !== '',
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
return row;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Create a decision. Writes the memory mirror + the decisions row atomically
|
|
156
|
-
* inside writeEntry's SAVEPOINT 'write_entry'. When supersedesDecisionId is
|
|
157
|
-
* given, the referenced ACTIVE row is UPDATEd -> superseded in the SAME
|
|
158
|
-
* SAVEPOINT (CAS: WHERE status='active'; throws on changes===0 so a duplicate
|
|
159
|
-
* supersede aborts the whole write rather than orphaning a successor).
|
|
160
|
-
*
|
|
161
|
-
* The memory mirror preserves the legacy `hippo decide` shape: tags
|
|
162
|
-
* ['decision', ...extraTags], source 'decision', confidence 'verified',
|
|
163
|
-
* the half-life objectHalfLifeDays picks, content = "<text>\n\nContext: <context>"
|
|
164
|
-
* when context is given (so existing recall output is unchanged).
|
|
165
|
-
*/
|
|
166
|
-
export function saveDecision(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
167
|
-
assertTenantId('saveDecision', tenantId);
|
|
168
|
-
if (!opts.decisionText)
|
|
169
|
-
throw new BadRequestError('saveDecision: decisionText is required');
|
|
170
|
-
const now = new Date().toISOString();
|
|
171
|
-
const mem = buildDecisionMemory(hippoRoot, tenantId, opts);
|
|
172
|
-
// Populated inside afterWrite so the INSERT, the supersede UPDATE, and the
|
|
173
|
-
// memory write all share one SAVEPOINT.
|
|
174
|
-
let savedRow;
|
|
175
|
-
writeEntry(hippoRoot, mem, {
|
|
176
|
-
actor,
|
|
177
|
-
afterWrite: (db, memoryId) => {
|
|
178
|
-
savedRow = writeDecisionRow(db, memoryId, tenantId, opts, actor, now);
|
|
179
|
-
},
|
|
180
|
-
// Post-commit hook: mark the tenant's graph dirty AFTER the DB row commits
|
|
181
|
-
// but BEFORE the markdown mirrors are written, so a mirror-write failure can
|
|
182
|
-
// never leave a committed save unflagged. markGraphDirty is fail-soft.
|
|
183
|
-
afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
|
|
184
|
-
});
|
|
185
|
-
if (!savedRow) {
|
|
186
|
-
// Unreachable unless afterWrite threw first; defensive.
|
|
187
|
-
throw new Error('saveDecision: afterWrite did not populate the row');
|
|
188
|
-
}
|
|
189
|
-
return rowToDecision(savedRow);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Close (retire) an active decision with no successor. Updates the decisions
|
|
193
|
-
* row only; the memory mirror is not mutated. CAS guard mirrors closePrediction
|
|
194
|
-
* (predictions.ts): WHERE status='active'; 0 changes distinguishes not-found
|
|
195
|
-
* from not-active so callers surface the right error.
|
|
196
|
-
*/
|
|
197
|
-
export function closeDecision(hippoRoot, tenantId, id, actor = 'cli') {
|
|
198
|
-
assertTenantId('closeDecision', tenantId);
|
|
199
|
-
const now = new Date().toISOString();
|
|
200
|
-
const db = openHippoDb(hippoRoot);
|
|
201
|
-
try {
|
|
202
|
-
db.exec('BEGIN IMMEDIATE');
|
|
203
|
-
try {
|
|
204
|
-
const updateResult = db.prepare(`
|
|
205
|
-
UPDATE decisions
|
|
206
|
-
SET status = 'closed', closed_at = ?
|
|
207
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active'
|
|
208
|
-
`).run(now, id, tenantId);
|
|
209
|
-
if (updateResult.changes === 0) {
|
|
210
|
-
// SAFETY: row shape matches the single `status` column named in the SELECT above.
|
|
211
|
-
const existing = db.prepare(`SELECT status FROM decisions WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
|
|
212
|
-
if (!existing) {
|
|
213
|
-
throw new NotFoundError(`closeDecision: decision ${id} not found for tenant ${tenantId}`);
|
|
214
|
-
}
|
|
215
|
-
throw new ConflictError(`closeDecision: decision ${id} is not active (status='${existing.status}'); only active decisions can be closed.`);
|
|
216
|
-
}
|
|
217
|
-
// SAFETY: row's shape matches the columns named in DECISION_COLS above.
|
|
218
|
-
const row = db.prepare(`SELECT ${DECISION_COLS} FROM decisions WHERE id = ? AND tenant_id = ?`)
|
|
219
|
-
.get(id, tenantId);
|
|
220
|
-
if (!row)
|
|
221
|
-
throw new NotFoundError(`closeDecision: decision ${id} not found after UPDATE`);
|
|
222
|
-
appendAuditEvent(db, {
|
|
223
|
-
tenantId,
|
|
224
|
-
actor,
|
|
225
|
-
op: 'decision_close',
|
|
226
|
-
targetId: String(id),
|
|
227
|
-
metadata: { decision_id: id },
|
|
228
|
-
});
|
|
229
|
-
db.exec('COMMIT');
|
|
230
|
-
const closed = rowToDecision(row);
|
|
231
|
-
// After COMMIT (write lock released), before the finally closes `db`.
|
|
232
|
-
// Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
|
|
233
|
-
// not only via an enqueued rebuild whose queue item is lost if the mirror is later
|
|
234
|
-
// forgotten (the queue row cascade-deletes with the memory), which would leave the closed
|
|
235
|
-
// object stale and could block that forget. Still enqueue when a mirror exists
|
|
236
|
-
// so a concurrent rebuild re-derives consistently (harmless if it also runs).
|
|
237
|
-
removeGraphEntitiesForObject(hippoRoot, tenantId, 'decision', closed.id);
|
|
238
|
-
if (closed.memoryId) {
|
|
239
|
-
markGraphDirty(hippoRoot, tenantId, closed.memoryId);
|
|
240
|
-
}
|
|
241
|
-
return closed;
|
|
242
|
-
}
|
|
243
|
-
catch (e) {
|
|
244
|
-
try {
|
|
245
|
-
db.exec('ROLLBACK');
|
|
246
|
-
}
|
|
247
|
-
catch {
|
|
248
|
-
// Ignore rollback failures — the throw below is what matters.
|
|
249
|
-
}
|
|
250
|
-
throw e;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
finally {
|
|
254
|
-
closeHippoDb(db);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
export function loadDecisionById(hippoRoot, tenantId, id) {
|
|
258
|
-
assertTenantId('loadDecisionById', tenantId);
|
|
259
|
-
const db = openHippoDb(hippoRoot);
|
|
260
|
-
try {
|
|
261
|
-
// SAFETY: row's shape matches the columns named in DECISION_COLS above.
|
|
262
|
-
const row = db.prepare(`SELECT ${DECISION_COLS} FROM decisions WHERE id = ? AND tenant_id = ?`)
|
|
263
|
-
.get(id, tenantId);
|
|
264
|
-
return row ? rowToDecision(row) : null;
|
|
265
|
-
}
|
|
266
|
-
finally {
|
|
267
|
-
closeHippoDb(db);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
export function loadDecisions(hippoRoot, tenantId, opts = {}) {
|
|
271
|
-
assertTenantId('loadDecisions', tenantId);
|
|
272
|
-
const limit = opts.limit ?? 100;
|
|
273
|
-
const after = keysetAfter('created_at', 'id', opts.after);
|
|
274
|
-
const db = openHippoDb(hippoRoot);
|
|
275
|
-
try {
|
|
276
|
-
let rows;
|
|
277
|
-
if (opts.status) {
|
|
278
|
-
if (!VALID_DECISION_STATES.has(opts.status)) {
|
|
279
|
-
throw new BadRequestError(`loadDecisions: status must be one of ${Array.from(VALID_DECISION_STATES).join('|')}; got ${opts.status}`);
|
|
280
|
-
}
|
|
281
|
-
// SAFETY: rows' shape matches the columns named in DECISION_COLS above.
|
|
282
|
-
rows = db.prepare(`
|
|
283
|
-
SELECT ${DECISION_COLS} FROM decisions
|
|
284
|
-
WHERE tenant_id = ? AND status = ?${after.sql}
|
|
285
|
-
ORDER BY created_at DESC, id DESC
|
|
286
|
-
LIMIT ?
|
|
287
|
-
`).all(tenantId, opts.status, ...after.params, limit);
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
// SAFETY: rows' shape matches the columns named in DECISION_COLS above.
|
|
291
|
-
rows = db.prepare(`
|
|
292
|
-
SELECT ${DECISION_COLS} FROM decisions
|
|
293
|
-
WHERE tenant_id = ?${after.sql}
|
|
294
|
-
ORDER BY created_at DESC, id DESC
|
|
295
|
-
LIMIT ?
|
|
296
|
-
`).all(tenantId, ...after.params, limit);
|
|
297
|
-
}
|
|
298
|
-
return rows.map(rowToDecision);
|
|
299
|
-
}
|
|
300
|
-
finally {
|
|
301
|
-
closeHippoDb(db);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
export function loadActiveDecisions(hippoRoot, tenantId, opts = {}) {
|
|
305
|
-
return loadDecisions(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Resolve a `--supersedes <memory-id>` (the legacy CLI contract) to the table id
|
|
309
|
-
* of the ACTIVE decision backed by that memory, or null when the memory has no
|
|
310
|
-
* active decision row (a legacy pre-episode decision-tagged memory). Extracted
|
|
311
|
-
* so the CLI's backward-compat path is unit-testable at the store layer without
|
|
312
|
-
* exporting cmdDecide.
|
|
313
|
-
*/
|
|
314
|
-
export function resolveActiveDecisionIdByMemory(hippoRoot, tenantId, memoryId) {
|
|
315
|
-
assertTenantId('resolveActiveDecisionIdByMemory', tenantId);
|
|
316
|
-
const db = openHippoDb(hippoRoot);
|
|
317
|
-
try {
|
|
318
|
-
// SAFETY: row shape matches the single `id` column named in the SELECT above.
|
|
319
|
-
const row = db.prepare(`SELECT id FROM decisions WHERE memory_id = ? AND tenant_id = ? AND status = 'active' ORDER BY id DESC LIMIT 1`).get(memoryId, tenantId);
|
|
320
|
-
return row ? row.id : null;
|
|
321
|
-
}
|
|
322
|
-
finally {
|
|
323
|
-
closeHippoDb(db);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
//# sourceMappingURL=decisions.js.map
|
package/dist/dedupe.d.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Store-level deduplication. Scans for memories with the same text apart
|
|
3
|
-
* from spacing, keeps the stronger copy (by strength + retrieval count),
|
|
4
|
-
* removes the rest.
|
|
5
|
-
*
|
|
6
|
-
* Extracted from cli.ts in Episode A (v1.11.3) so `api.sleep` can dedupe
|
|
7
|
-
* during the consolidation pipeline without violating the cli -> api
|
|
8
|
-
* dependency direction. `cmdDedup` in cli.ts continues to import and use
|
|
9
|
-
* this function unchanged.
|
|
10
|
-
*
|
|
11
|
-
* Survivor selection is a total order as of v1.26.3
|
|
12
|
-
* (docs/plans/2026-07-16-dedupe-survivor-determinism.md): strength bucket
|
|
13
|
-
* desc -> retrieval_count desc -> compareEntryIdentity (content asc ->
|
|
14
|
-
* layer rank -> tags -> source -> id asc; the metadata keys arrived in
|
|
15
|
-
* v1.38.1, docs/plans/2026-09-04-dedupe-survivor-metadata.md). Previously
|
|
16
|
-
* the strength/retrieval-count comparator could tie exactly with no terminal
|
|
17
|
-
* key, so the survivor fell to load order (arrival-order-dependent); see
|
|
18
|
-
* `strengthBucket` below for the bucket encoding. As of the tenant-partition
|
|
19
|
-
* fix (docs/plans/2026-08-15-dedupe-tenant-partition.md) the order is scoped
|
|
20
|
-
* WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
|
|
21
|
-
* superseded rows are not candidates at all (v1.38.1).
|
|
22
|
-
*/
|
|
23
|
-
export interface DedupPair {
|
|
24
|
-
kept: string;
|
|
25
|
-
keptContent: string;
|
|
26
|
-
keptLayer: string;
|
|
27
|
-
keptStrength: number;
|
|
28
|
-
removed: string;
|
|
29
|
-
removedContent: string;
|
|
30
|
-
removedLayer: string;
|
|
31
|
-
removedStrength: number;
|
|
32
|
-
similarity: number;
|
|
33
|
-
}
|
|
34
|
-
/** Result of `deduplicateStore`: how many entries were removed, and the kept/removed pairs. */
|
|
35
|
-
export interface DedupResult {
|
|
36
|
-
removed: number;
|
|
37
|
-
pairs: DedupPair[];
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Quantize a strength value into an integer "bucket" for tie comparison.
|
|
41
|
-
*
|
|
42
|
-
* Encodes the historical 0.01 epsilon transitively: two strengths compare
|
|
43
|
-
* equal here iff they round to the same multiple of `STRENGTH_TIE_EPSILON`,
|
|
44
|
-
* which (unlike a raw `Math.abs(a - b) > epsilon` check) is a genuine
|
|
45
|
-
* equivalence relation — no more "A ties B, B ties C, but A beats C"
|
|
46
|
-
* (see the file-level history note above).
|
|
47
|
-
*
|
|
48
|
-
* Non-finite input (`NaN`, `+/-Infinity`) maps to bucket `0` rather than
|
|
49
|
-
* propagating: a NaN bucket would make the sort comparator return NaN,
|
|
50
|
-
* silently reintroducing the non-total-order class this fix exists to kill.
|
|
51
|
-
* (`null`/`undefined` already default to strength `0` via `?? 0`, same as
|
|
52
|
-
* before this change.)
|
|
53
|
-
*
|
|
54
|
-
* Bucket-edge nuance: two strengths straddling a bucket edge (e.g. 0.0049 vs
|
|
55
|
-
* 0.0051) now compare as different, where the old raw-epsilon check called
|
|
56
|
-
* them tied. The flip always favors the not-weaker entry, and the OLD
|
|
57
|
-
* behavior at such pairs was itself order/engine-dependent (the defect this
|
|
58
|
-
* fix exists to kill) — so there is no stable prior behavior being broken.
|
|
59
|
-
*/
|
|
60
|
-
export declare function strengthBucket(strength: number | null | undefined): number;
|
|
61
|
-
/**
|
|
62
|
-
* Scan the store for duplicates and remove the weaker copy: same text apart
|
|
63
|
-
* from spacing, since a near-duplicate can differ in a value (port, version,
|
|
64
|
-
* path, name), AND the same tenant: the scan is partitioned by
|
|
65
|
-
* tenantId, so byte-identical content in two tenants is never a duplicate
|
|
66
|
-
* pair (the tenant boundary is an isolation boundary; cross-tenant removal
|
|
67
|
-
* was the v1.32.0 known-issue data-loss bug).
|
|
68
|
-
* Keeps the one with higher strength (or more retrievals if tied). `threshold` is accepted for old callers and ignored.
|
|
69
|
-
*/
|
|
70
|
-
export declare function deduplicateStore(hippoRoot: string, options?: {
|
|
71
|
-
threshold?: number;
|
|
72
|
-
dryRun?: boolean;
|
|
73
|
-
actor?: string;
|
|
74
|
-
}): DedupResult;
|
|
75
|
-
//# sourceMappingURL=dedupe.d.ts.map
|
package/dist/dedupe.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Store-level deduplication. Scans for memories with the same text apart
|
|
3
|
-
* from spacing, keeps the stronger copy (by strength + retrieval count),
|
|
4
|
-
* removes the rest.
|
|
5
|
-
*
|
|
6
|
-
* Extracted from cli.ts in Episode A (v1.11.3) so `api.sleep` can dedupe
|
|
7
|
-
* during the consolidation pipeline without violating the cli -> api
|
|
8
|
-
* dependency direction. `cmdDedup` in cli.ts continues to import and use
|
|
9
|
-
* this function unchanged.
|
|
10
|
-
*
|
|
11
|
-
* Survivor selection is a total order as of v1.26.3
|
|
12
|
-
* (docs/plans/2026-07-16-dedupe-survivor-determinism.md): strength bucket
|
|
13
|
-
* desc -> retrieval_count desc -> compareEntryIdentity (content asc ->
|
|
14
|
-
* layer rank -> tags -> source -> id asc; the metadata keys arrived in
|
|
15
|
-
* v1.38.1, docs/plans/2026-09-04-dedupe-survivor-metadata.md). Previously
|
|
16
|
-
* the strength/retrieval-count comparator could tie exactly with no terminal
|
|
17
|
-
* key, so the survivor fell to load order (arrival-order-dependent); see
|
|
18
|
-
* `strengthBucket` below for the bucket encoding. As of the tenant-partition
|
|
19
|
-
* fix (docs/plans/2026-08-15-dedupe-tenant-partition.md) the order is scoped
|
|
20
|
-
* WITHIN each tenant group; cross-tenant pairs are never compared. Raw and
|
|
21
|
-
* superseded rows are not candidates at all (v1.38.1).
|
|
22
|
-
*/
|
|
23
|
-
import { textOverlap } from './tokenize.js';
|
|
24
|
-
import { loadAllEntries } from './store/entry-reads.js';
|
|
25
|
-
import { deleteEntryOn, memoriesBackingObjects } from './store/delete-and-batch.js';
|
|
26
|
-
import { openStore } from './store/open.js';
|
|
27
|
-
import { closeHippoDb } from './db.js';
|
|
28
|
-
import { compareEntryIdentity } from './compare.js';
|
|
29
|
-
import { canAutoDelete } from './memory.js';
|
|
30
|
-
import { derivationPartitionKey } from './recall-scope.js';
|
|
31
|
-
import { duplicateKey } from './same-text.js';
|
|
32
|
-
/** Quantization step for strength-tie comparisons. The historical 0.01
|
|
33
|
-
* epsilon (see `strengthBucket` below) applied via rounding instead of a
|
|
34
|
-
* raw abs-diff threshold, so the tiebreak is transitive. */
|
|
35
|
-
const STRENGTH_TIE_EPSILON = 0.01;
|
|
36
|
-
/**
|
|
37
|
-
* Quantize a strength value into an integer "bucket" for tie comparison.
|
|
38
|
-
*
|
|
39
|
-
* Encodes the historical 0.01 epsilon transitively: two strengths compare
|
|
40
|
-
* equal here iff they round to the same multiple of `STRENGTH_TIE_EPSILON`,
|
|
41
|
-
* which (unlike a raw `Math.abs(a - b) > epsilon` check) is a genuine
|
|
42
|
-
* equivalence relation — no more "A ties B, B ties C, but A beats C"
|
|
43
|
-
* (see the file-level history note above).
|
|
44
|
-
*
|
|
45
|
-
* Non-finite input (`NaN`, `+/-Infinity`) maps to bucket `0` rather than
|
|
46
|
-
* propagating: a NaN bucket would make the sort comparator return NaN,
|
|
47
|
-
* silently reintroducing the non-total-order class this fix exists to kill.
|
|
48
|
-
* (`null`/`undefined` already default to strength `0` via `?? 0`, same as
|
|
49
|
-
* before this change.)
|
|
50
|
-
*
|
|
51
|
-
* Bucket-edge nuance: two strengths straddling a bucket edge (e.g. 0.0049 vs
|
|
52
|
-
* 0.0051) now compare as different, where the old raw-epsilon check called
|
|
53
|
-
* them tied. The flip always favors the not-weaker entry, and the OLD
|
|
54
|
-
* behavior at such pairs was itself order/engine-dependent (the defect this
|
|
55
|
-
* fix exists to kill) — so there is no stable prior behavior being broken.
|
|
56
|
-
*/
|
|
57
|
-
export function strengthBucket(strength) {
|
|
58
|
-
const s = strength ?? 0;
|
|
59
|
-
return Number.isFinite(s) ? Math.round(s / STRENGTH_TIE_EPSILON) : 0;
|
|
60
|
-
}
|
|
61
|
-
// finiteCount mirrors strengthBucket's non-finite hardening on the
|
|
62
|
-
// retrieval leg: a NaN retrieval_count would make the comparator return
|
|
63
|
-
// NaN and break the total order the same way a NaN bucket would.
|
|
64
|
-
// Unreachable via the schema (non-nullable INTEGER column), so this is
|
|
65
|
-
// symmetry, not a live bug.
|
|
66
|
-
const finiteCount = (n) => Number.isFinite(n ?? 0) ? (n ?? 0) : 0;
|
|
67
|
-
/** The v1.26.3 survivor total order: strength bucket desc, then retrieval_count desc, then compareEntryIdentity. */
|
|
68
|
-
function survivorOrder(a, b) {
|
|
69
|
-
const bucketDiff = strengthBucket(b.strength) - strengthBucket(a.strength);
|
|
70
|
-
if (bucketDiff !== 0)
|
|
71
|
-
return bucketDiff;
|
|
72
|
-
const retrievalDiff = finiteCount(b.retrieval_count) - finiteCount(a.retrieval_count);
|
|
73
|
-
if (retrievalDiff !== 0)
|
|
74
|
-
return retrievalDiff;
|
|
75
|
-
return compareEntryIdentity(a, b);
|
|
76
|
-
}
|
|
77
|
-
// Tenant partition (mirrors consolidate.ts mergeCandidatesByTenant and
|
|
78
|
-
// dag.ts unparentedByTenant): group by tenantId BEFORE the sort so a
|
|
79
|
-
// duplicate pair can never form across tenants. Map preserves insertion
|
|
80
|
-
// order, so a single-tenant store (every row 'default') gets exactly one
|
|
81
|
-
// group and the sort plus pair loop below run byte-identical to the
|
|
82
|
-
// pre-fix global pass.
|
|
83
|
-
function entriesByPartition(entries) {
|
|
84
|
-
const entriesByTenant = new Map();
|
|
85
|
-
for (const entry of entries) {
|
|
86
|
-
// EI2: also split by restricted scope, else a private copy can delete the readable one.
|
|
87
|
-
const key = derivationPartitionKey(entry.tenantId, entry.scope, entry.origin_project);
|
|
88
|
-
const bucket = entriesByTenant.get(key);
|
|
89
|
-
if (bucket)
|
|
90
|
-
bucket.push(entry);
|
|
91
|
-
else
|
|
92
|
-
entriesByTenant.set(key, [entry]);
|
|
93
|
-
}
|
|
94
|
-
return entriesByTenant;
|
|
95
|
-
}
|
|
96
|
-
function dedupPair(kept, dropped) {
|
|
97
|
-
return {
|
|
98
|
-
kept: kept.id,
|
|
99
|
-
keptContent: kept.content,
|
|
100
|
-
keptLayer: kept.layer,
|
|
101
|
-
keptStrength: kept.strength ?? 0,
|
|
102
|
-
removed: dropped.id,
|
|
103
|
-
removedContent: dropped.content,
|
|
104
|
-
removedLayer: dropped.layer,
|
|
105
|
-
removedStrength: dropped.strength ?? 0,
|
|
106
|
-
similarity: textOverlap(kept.content, dropped.content),
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
/** Pairs within one partition, already in survivor order, grouped by survivor; marks each loser in `removed`. */
|
|
110
|
-
function partitionPairs(tenantEntries, removed, backing) {
|
|
111
|
-
const groups = new Map();
|
|
112
|
-
for (const entry of tenantEntries) {
|
|
113
|
-
const key = duplicateKey(entry.content);
|
|
114
|
-
const group = groups.get(key);
|
|
115
|
-
if (!group) {
|
|
116
|
-
groups.set(key, { survivor: entry, pairs: [] });
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
if (!canAutoDelete(entry) || backing.has(entry.id))
|
|
120
|
-
continue;
|
|
121
|
-
removed.add(entry.id);
|
|
122
|
-
group.pairs.push(dedupPair(group.survivor, entry));
|
|
123
|
-
}
|
|
124
|
-
return [...groups.values()].flatMap((group) => group.pairs);
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Scan the store for duplicates and remove the weaker copy: same text apart
|
|
128
|
-
* from spacing, since a near-duplicate can differ in a value (port, version,
|
|
129
|
-
* path, name), AND the same tenant: the scan is partitioned by
|
|
130
|
-
* tenantId, so byte-identical content in two tenants is never a duplicate
|
|
131
|
-
* pair (the tenant boundary is an isolation boundary; cross-tenant removal
|
|
132
|
-
* was the v1.32.0 known-issue data-loss bug).
|
|
133
|
-
* Keeps the one with higher strength (or more retrievals if tied). `threshold` is accepted for old callers and ignored.
|
|
134
|
-
*/
|
|
135
|
-
export function deduplicateStore(hippoRoot, options = {}) {
|
|
136
|
-
const dryRun = options.dryRun ?? false;
|
|
137
|
-
// Only current distilled rows compete: raw rows are append-only (the delete
|
|
138
|
-
// trigger would abort sleep mid-loop) and superseded rows are history, as in consolidate.ts.
|
|
139
|
-
const entries = loadAllEntries(hippoRoot).filter((e) => e.kind === 'distilled' && !e.superseded_by);
|
|
140
|
-
const entriesByTenant = entriesByPartition(entries);
|
|
141
|
-
// Shared across tenant groups: safe because memory ids are globally
|
|
142
|
-
// unique (crypto.randomUUID at creation), so an id in `removed` can never
|
|
143
|
-
// collide with another tenant's row, and deleteEntry below deletes by
|
|
144
|
-
// primary-key id alone.
|
|
145
|
-
const removed = new Set();
|
|
146
|
-
const pairs = [];
|
|
147
|
-
const backing = memoriesBackingObjects(hippoRoot);
|
|
148
|
-
for (const tenantEntries of entriesByTenant.values()) {
|
|
149
|
-
// The survivor total order (see the file-level docstring), scoped per
|
|
150
|
-
// tenant group: the total order holds within a tenant only, matching the partition above.
|
|
151
|
-
tenantEntries.sort(survivorOrder);
|
|
152
|
-
pairs.push(...partitionPairs(tenantEntries, removed, backing));
|
|
153
|
-
}
|
|
154
|
-
const done = dryRun ? pairs : deletePairs(hippoRoot, pairs, options.actor);
|
|
155
|
-
return { removed: done.length, pairs: done };
|
|
156
|
-
}
|
|
157
|
-
/** The pairs whose loser was deleted; one store handle, one transaction per delete. */
|
|
158
|
-
function deletePairs(hippoRoot, pairs, actor) {
|
|
159
|
-
if (pairs.length === 0)
|
|
160
|
-
return [];
|
|
161
|
-
const db = openStore(hippoRoot);
|
|
162
|
-
try {
|
|
163
|
-
return pairs.filter((p) => deleteEntryOn(db, hippoRoot, p.removed, { actor, reason: `dedup: duplicate of ${p.kept}`, automatic: true }));
|
|
164
|
-
}
|
|
165
|
-
finally {
|
|
166
|
-
closeHippoDb(db);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
//# sourceMappingURL=dedupe.js.map
|
package/dist/dormant.d.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dormant memories: what sleep does with a faded memory instead of deleting
|
|
3
|
-
* it (config `dormant.enabled`, on by default; `retentionDays` bounds how
|
|
4
|
-
* long one is kept).
|
|
5
|
-
*
|
|
6
|
-
* A dormant memory keeps its full content in `dormant_memories` (schema v44)
|
|
7
|
-
* but is no longer a `memories` row, so recall, context, every sleep pass and
|
|
8
|
-
* every other reader of `memories` stop seeing it exactly as if it had been
|
|
9
|
-
* deleted. `hippo dormant` lists and searches them, `hippo dormant restore`
|
|
10
|
-
* brings one back, `hippo dormant forget` deletes one for good.
|
|
11
|
-
*
|
|
12
|
-
* Not to be confused with the raw archive (`raw_archive`, `archiveRawMemory`,
|
|
13
|
-
* `hippo forget --archive`): that path removes a raw receipt's content and
|
|
14
|
-
* keeps only its metadata. A dormant memory keeps its content.
|
|
15
|
-
*
|
|
16
|
-
* DB-only helpers: the caller owns the handle and any transaction. The
|
|
17
|
-
* tenant-scoped entry points are api.listDormant / restoreDormant /
|
|
18
|
-
* forgetDormant.
|
|
19
|
-
*/
|
|
20
|
-
import type { DatabaseSyncLike } from './db.js';
|
|
21
|
-
import type { MemoryEntry } from './memory.js';
|
|
22
|
-
import type { SqlFragment } from './recall-scope.js';
|
|
23
|
-
/** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects repair` splitting a two-project merge, or `hippo audit repair` setting aside an automatic memory with a certain defect. */
|
|
24
|
-
export type DormantReason = 'decay' | 'source-deleted' | 'project-repair' | 'quality-repair';
|
|
25
|
-
/** One memory that sleep is moving out of active memory into the dormant store. */
|
|
26
|
-
export interface DormantMove {
|
|
27
|
-
/** The memory as it stood when it faded; restored verbatim apart from its recall clock. */
|
|
28
|
-
entry: MemoryEntry;
|
|
29
|
-
/** Live strength at the moment it went dormant (below the decay threshold). */
|
|
30
|
-
strength: number;
|
|
31
|
-
reason: DormantReason;
|
|
32
|
-
/** ISO time of the sleep that made it dormant. */
|
|
33
|
-
dormantAt: string;
|
|
34
|
-
}
|
|
35
|
-
/** A dormant memory as listed to a user. */
|
|
36
|
-
export interface DormantMemory {
|
|
37
|
-
id: string;
|
|
38
|
-
tenantId: string;
|
|
39
|
-
content: string;
|
|
40
|
-
tags: string[];
|
|
41
|
-
/** Live strength when it went dormant. */
|
|
42
|
-
strength: number;
|
|
43
|
-
/** Why it went dormant: one of the {@link DormantReason} values. */
|
|
44
|
-
reason: string;
|
|
45
|
-
/** ISO time it went dormant. */
|
|
46
|
-
dormantAt: string;
|
|
47
|
-
}
|
|
48
|
-
/** Options for {@link listDormantRows}. */
|
|
49
|
-
export interface ListDormantOpts {
|
|
50
|
-
/** Whitespace-separated terms; a row must contain every term (case-insensitive substring). */
|
|
51
|
-
query?: string;
|
|
52
|
-
/** Maximum rows returned, newest first. Default 20. */
|
|
53
|
-
limit?: number;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Insert (or refresh) the dormant snapshot for `move.entry`. Does not touch
|
|
57
|
-
* the `memories` row: the caller deletes it in the same transaction, so the
|
|
58
|
-
* memory is never in both places or in neither.
|
|
59
|
-
*/
|
|
60
|
-
export declare function insertDormantRow(db: DatabaseSyncLike, move: DormantMove): void;
|
|
61
|
-
/** A tenant's dormant memories whose scope `admit` passes, newest first, optionally filtered by search terms. */
|
|
62
|
-
export declare function listDormantRows(db: DatabaseSyncLike, tenantId: string, opts?: ListDormantOpts, admit?: SqlFragment): DormantMemory[];
|
|
63
|
-
/** A dormant memory's stored snapshot plus when and why it went dormant. */
|
|
64
|
-
export interface DormantSnapshot {
|
|
65
|
-
entry: MemoryEntry;
|
|
66
|
-
reason: string;
|
|
67
|
-
strength: number;
|
|
68
|
-
dormantAt: string;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* The stored snapshot for a tenant's dormant memory, or null when the tenant
|
|
72
|
-
* has no dormant memory with that id (another tenant's id reads as absent).
|
|
73
|
-
*/
|
|
74
|
-
export declare function readDormantSnapshot(db: DatabaseSyncLike, tenantId: string, id: string): DormantSnapshot | null;
|
|
75
|
-
/** Every dormant memory of a tenant whose snapshot still reads back. */
|
|
76
|
-
export declare function listDormantSnapshots(db: DatabaseSyncLike, tenantId: string): DormantSnapshot[];
|
|
77
|
-
/** Readable snapshots whose entry's source starts with `prefix`; a malformed snapshot is passed over, not an error. */
|
|
78
|
-
export declare function dormantSnapshotsBySourcePrefix(db: DatabaseSyncLike, tenantId: string, prefix: string): DormantSnapshot[];
|
|
79
|
-
/** Put `entry` in place of a tenant's dormant memory `id`, keeping when and why that one went dormant. */
|
|
80
|
-
export declare function replaceDormantEntry(db: DatabaseSyncLike, tenantId: string, id: string, entry: MemoryEntry): void;
|
|
81
|
-
/** Whether a tenant has a dormant memory with this id whose scope `admit` passes (snapshot readable or not). */
|
|
82
|
-
export declare function hasDormantRow(db: DatabaseSyncLike, tenantId: string, id: string, admit?: SqlFragment): boolean;
|
|
83
|
-
/** Delete a tenant's dormant memory. Returns false when there was none. */
|
|
84
|
-
export declare function deleteDormantRow(db: DatabaseSyncLike, tenantId: string, id: string): boolean;
|
|
85
|
-
/** Deletes the tenant's dormant copies of a rejected digest whose snapshot scope `inReach` admits, so the value cannot linger; returns their ids. */
|
|
86
|
-
export declare function purgeDormantByDigest(db: DatabaseSyncLike, tenantId: string, digest: string, inReach: (scope: string | null) => boolean): string[];
|
|
87
|
-
export interface DormantKey {
|
|
88
|
-
readonly tenantId: string;
|
|
89
|
-
readonly id: string;
|
|
90
|
-
}
|
|
91
|
-
export declare function expiredDormantKeys(db: DatabaseSyncLike, cutoffIso: string): DormantKey[];
|
|
92
|
-
export declare function deleteExpiredDormantRow(db: DatabaseSyncLike, key: DormantKey, cutoffIso: string): number;
|
|
93
|
-
//# sourceMappingURL=dormant.d.ts.map
|