hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- 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 +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- 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 +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- 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/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- 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 +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- 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 +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- 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 +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/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 +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
2
|
+
import { RawAppendOnlyError } from '../core/raw-append-only.js';
|
|
3
|
+
import { AUTO_DELETABLE_SQL } from './rule-sql.js';
|
|
4
|
+
import { closeHippoDb, withWriteScope } from '../db/index.js';
|
|
5
|
+
import { checkRejectionGuard } from './rejection.js';
|
|
6
|
+
import { RejectedValueError } from '../core/api-errors.js';
|
|
4
7
|
import { markSummaryDirtyInTx } from './summary-dirty.js';
|
|
5
8
|
import { insertDormantRow } from './dormant.js';
|
|
6
9
|
import { log } from '../util/log.js';
|
|
@@ -8,21 +11,18 @@ import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
|
8
11
|
import { audit } from './audit-event.js';
|
|
9
12
|
import { deleteFtsRow, replaceFtsRows, stampOriginProject, upsertMemoryRow } from './entry-row.js';
|
|
10
13
|
import { purgeMirrorBestEffort, mirrorBestEffort, writeMarkdownMirror } from './mirrors.js';
|
|
11
|
-
import { openStore } from './open.js';
|
|
14
|
+
import { onHandle, openStore } from './open.js';
|
|
12
15
|
import { clock } from '../util/write-budget.js';
|
|
16
|
+
import { chunked } from '../util/chunked.js';
|
|
13
17
|
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL); tests/dormant-memories.test.ts pins it to the schema. */
|
|
14
18
|
export const MEMORY_BACKED_TABLES = ['predictions', 'decisions', 'incidents', 'processes', 'policies', 'skills', 'project_briefs', 'customer_notes'];
|
|
15
19
|
/** Deleting a memory that backs an object nulls the object's link, and no restore can repair it, so no automatic pass may. */
|
|
16
20
|
const AUTOMATIC_DELETE_SQL = `${AUTO_DELETABLE_SQL}${MEMORY_BACKED_TABLES.map((t) => ` AND NOT EXISTS (SELECT 1 FROM ${t} WHERE ${t}.memory_id = memories.id)`).join('')}`;
|
|
17
21
|
/** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing from an older schema is skipped. */
|
|
18
22
|
export function memoriesBackingObjects(hippoRoot) {
|
|
19
|
-
|
|
20
|
-
try {
|
|
23
|
+
return onHandle(hippoRoot, (db) => {
|
|
21
24
|
return memoriesBackingObjectsOn(db);
|
|
22
|
-
}
|
|
23
|
-
finally {
|
|
24
|
-
closeHippoDb(db);
|
|
25
|
-
}
|
|
25
|
+
});
|
|
26
26
|
}
|
|
27
27
|
/** memoriesBackingObjects on the caller's handle. */
|
|
28
28
|
export function memoriesBackingObjectsOn(db) {
|
|
@@ -42,25 +42,33 @@ export function memoriesBackingObjectsOn(db) {
|
|
|
42
42
|
}
|
|
43
43
|
return ids;
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
// The abort text of trg_memories_raw_append_only (migration v14), the one place src matches it.
|
|
46
|
+
const RAW_TRIGGER_TEXT = 'raw is append-only';
|
|
47
|
+
function isRawTriggerAbort(cause) {
|
|
48
|
+
return cause instanceof Error && cause.message.includes(RAW_TRIGGER_TEXT);
|
|
49
|
+
}
|
|
50
|
+
/** Runs the DELETE and returns the rows it removed; the raw-row trigger's abort becomes RawAppendOnlyError. */
|
|
51
|
+
function deleteMemoryRow(db, sql, id) {
|
|
52
|
+
try {
|
|
53
|
+
return Number(db.prepare(sql).run(id).changes ?? 0);
|
|
54
|
+
}
|
|
55
|
+
catch (cause) {
|
|
56
|
+
throw isRawTriggerAbort(cause) ? new RawAppendOnlyError(cause) : cause;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** db-scoped delete core, composable inside a caller's transaction; NO filesystem I/O, mirrors are written post-commit. `suppressForgetAudit` is set by
|
|
60
|
+
* rejectValue and resolveConflict (own audit row). Returns `{tenantId, dagParentId}`, or null if absent or `automatic` refused it. */
|
|
55
61
|
export function deleteEntryCore(db, id, opts) {
|
|
56
62
|
// SAFETY: row's shape matches the three columns named in the SELECT above.
|
|
57
63
|
const row = db
|
|
58
64
|
.prepare(`SELECT id, tenant_id, dag_parent_id FROM memories WHERE id = ?`)
|
|
59
65
|
.get(id);
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
return row?.id ? deleteTargetRow(db, row, opts) : null;
|
|
67
|
+
}
|
|
68
|
+
function deleteTargetRow(db, row, opts) {
|
|
69
|
+
const { id } = row;
|
|
62
70
|
const guard = opts?.automatic ? ` AND ${AUTOMATIC_DELETE_SQL}` : '';
|
|
63
|
-
if (
|
|
71
|
+
if (deleteMemoryRow(db, `DELETE FROM memories WHERE id = ?${guard}`, id) === 0)
|
|
64
72
|
return null;
|
|
65
73
|
deleteFtsRow(db, id);
|
|
66
74
|
if (!opts?.suppressForgetAudit) {
|
|
@@ -69,29 +77,16 @@ export function deleteEntryCore(db, id, opts) {
|
|
|
69
77
|
// Forgetting a child of a summary marks the parent dirty. Not atomic with the DELETE, but
|
|
70
78
|
// markSummaryDirtyInTx is idempotent, so the next child mutation re-marks the parent if this fails.
|
|
71
79
|
if (row.dag_parent_id) {
|
|
72
|
-
markSummaryDirtyInTx(db, row.dag_parent_id, row.tenant_id ??
|
|
80
|
+
markSummaryDirtyInTx(db, row.dag_parent_id, row.tenant_id ?? DEFAULT_TENANT_ID, opts?.actor ?? 'cli');
|
|
73
81
|
}
|
|
74
|
-
return { tenantId: row.tenant_id ??
|
|
82
|
+
return { tenantId: row.tenant_id ?? DEFAULT_TENANT_ID, dagParentId: row.dag_parent_id ?? null };
|
|
75
83
|
}
|
|
76
|
-
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* `opts.actor` defaults to 'cli'. The api.* layer threads `ctx.actor` so HTTP
|
|
80
|
-
* callers land with `api_key:<key_id>` in the audit log without a duplicate
|
|
81
|
-
* emit from the api wrapper.
|
|
82
|
-
*
|
|
83
|
-
* Thin wrapper over `deleteEntryCore` (open → core → mirrors → close);
|
|
84
|
-
* behavior is byte-identical to the pre-split implementation for every
|
|
85
|
-
* existing caller.
|
|
86
|
-
*/
|
|
84
|
+
/** Delete an entry from SQLite and mirrors; thin wrapper over `deleteEntryCore` (open, core, mirrors, close).
|
|
85
|
+
* `opts.actor` defaults to 'cli'; the api layer threads `ctx.actor` so HTTP callers land as `api_key:<key_id>` in the audit log. */
|
|
87
86
|
export function deleteEntry(hippoRoot, id, opts) {
|
|
88
|
-
|
|
89
|
-
try {
|
|
87
|
+
return onHandle(hippoRoot, (db) => {
|
|
90
88
|
return deleteEntryOn(db, hippoRoot, id, opts);
|
|
91
|
-
}
|
|
92
|
-
finally {
|
|
93
|
-
closeHippoDb(db);
|
|
94
|
-
}
|
|
89
|
+
}, openStore);
|
|
95
90
|
}
|
|
96
91
|
/** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits alone. */
|
|
97
92
|
function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
@@ -101,6 +96,35 @@ function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
|
101
96
|
purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
|
|
102
97
|
return true;
|
|
103
98
|
}
|
|
99
|
+
/** deleteEntry with `automatic` for each removal and its own forget row and reason, all in one transaction after one read of the id set.
|
|
100
|
+
* Returns the ids deleted, in `removals` order; a missing, repeated, pinned, raw or object-backing id is left out. */
|
|
101
|
+
export function deleteEntriesAutomatically(hippoRoot, removals, actor) {
|
|
102
|
+
if (removals.length === 0)
|
|
103
|
+
return [];
|
|
104
|
+
const deleted = onHandle(hippoRoot, (db) => withWriteScope(db, 'delete_entries_automatically', () => {
|
|
105
|
+
const rows = selectDeleteTargets(db, removals.map((removal) => removal.id));
|
|
106
|
+
return removals
|
|
107
|
+
.filter(({ id, reason }) => {
|
|
108
|
+
const row = rows.get(id);
|
|
109
|
+
return row !== undefined && deleteTargetRow(db, row, { actor, reason, automatic: true }) !== null;
|
|
110
|
+
})
|
|
111
|
+
.map((removal) => removal.id);
|
|
112
|
+
}), openStore);
|
|
113
|
+
for (const id of deleted)
|
|
114
|
+
purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
|
|
115
|
+
return deleted;
|
|
116
|
+
}
|
|
117
|
+
function selectDeleteTargets(db, ids) {
|
|
118
|
+
const rows = new Map();
|
|
119
|
+
for (const chunk of chunked([...new Set(ids)])) {
|
|
120
|
+
// SAFETY: rows' shape matches the three columns named in the SELECT.
|
|
121
|
+
const found = db.prepare(`SELECT id, tenant_id, dag_parent_id FROM memories WHERE id IN (${chunk.map(() => '?').join(',')})`)
|
|
122
|
+
.all(...chunk);
|
|
123
|
+
for (const row of found)
|
|
124
|
+
rows.set(row.id, row);
|
|
125
|
+
}
|
|
126
|
+
return rows;
|
|
127
|
+
}
|
|
104
128
|
// The child fields a level-2/3 summary is built from (loadChildrenOfSummary, generateDagSummary).
|
|
105
129
|
const SUMMARY_INPUTS = ['content', 'created', 'dag_parent_id', 'kind'];
|
|
106
130
|
function mergeOwnChanges(base, ours, live) {
|
|
@@ -112,26 +136,17 @@ function mergeOwnChanges(base, ours, live) {
|
|
|
112
136
|
}
|
|
113
137
|
return row;
|
|
114
138
|
}
|
|
115
|
-
/** Writes, deletes and dormant moves in one transaction. With `snapshot
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* `dormant` (src/store/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
|
|
119
|
-
* leaves exactly like a delete (FTS row, DAG parent dirty-mark, mirrors), in the same transaction, so a memory
|
|
120
|
-
* is never in both places or in neither. Deletes and moves both skip rows that are no longer auto-deletable
|
|
121
|
-
* (pinned, raw, kept for good or backing an object since the caller decided). Returns the ids that left `memories`, deleted or moved. */
|
|
139
|
+
/** Writes, deletes and dormant moves in one transaction. With `snapshot`, a write keeps only the fields the caller changed and never resurrects a gone row.
|
|
140
|
+
* Dormant moves (src/store/dormant.ts) leave `memories` like a delete; both skip rows no longer auto-deletable. Returns ids that left `memories`. */
|
|
122
141
|
export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
|
|
123
142
|
const dormant = opts?.dormant ?? [];
|
|
124
143
|
if (toWrite.length === 0 && toDeleteIds.length === 0 && dormant.length === 0)
|
|
125
144
|
return [];
|
|
126
|
-
|
|
127
|
-
try {
|
|
145
|
+
return onHandle(hippoRoot, (db) => {
|
|
128
146
|
// One component, so every op keeps the statement order this call has always had.
|
|
129
147
|
const all = { writes: toWrite, deletes: toDeleteIds, dormant };
|
|
130
148
|
return batchWriteAndDeleteOn(db, hippoRoot, [all], 0, { snapshot: opts?.snapshot, holdMs: Infinity }).removedIds;
|
|
131
|
-
}
|
|
132
|
-
finally {
|
|
133
|
-
closeHippoDb(db);
|
|
134
|
-
}
|
|
149
|
+
}, openStore);
|
|
135
150
|
}
|
|
136
151
|
const failedUnits = new WeakMap();
|
|
137
152
|
/** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag wins. */
|
|
@@ -149,7 +164,13 @@ export function failedUnitOf(err) {
|
|
|
149
164
|
* first component boundary after `holdMs`. Returns the next component's index and the ids that left `memories`. */
|
|
150
165
|
function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
151
166
|
const now = opts.clock ?? clock;
|
|
152
|
-
const out = {
|
|
167
|
+
const out = {
|
|
168
|
+
written: [],
|
|
169
|
+
removedIds: [],
|
|
170
|
+
rejectedSkips: 0,
|
|
171
|
+
fts: { rows: [], staleIds: [] },
|
|
172
|
+
dirty: { parents: new Set(), tenantById: new Map() }
|
|
173
|
+
};
|
|
153
174
|
let next = from;
|
|
154
175
|
// IMMEDIATE: the tombstone probes below read before the first write, and under a deferred BEGIN a
|
|
155
176
|
// concurrent `hippo reject` would make the lock upgrade fail with SQLITE_BUSY and roll back the batch.
|
|
@@ -171,7 +192,7 @@ function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
|
171
192
|
// Fire dirty-mark for every collected parent INSIDE the BEGIN, so the
|
|
172
193
|
// dirty flag commits atomically with the writes + deletes.
|
|
173
194
|
for (const parentId of out.dirty.parents) {
|
|
174
|
-
markSummaryDirtyInTx(db, parentId, out.dirty.tenantById.get(parentId) ??
|
|
195
|
+
markSummaryDirtyInTx(db, parentId, out.dirty.tenantById.get(parentId) ?? DEFAULT_TENANT_ID, 'batch');
|
|
175
196
|
}
|
|
176
197
|
});
|
|
177
198
|
reportChunk(hippoRoot, out);
|
|
@@ -231,7 +252,7 @@ function selectAutoDeletableRows(db, ids, dirty) {
|
|
|
231
252
|
for (const row of rows) {
|
|
232
253
|
if (row.dag_parent_id) {
|
|
233
254
|
dirty.parents.add(row.dag_parent_id);
|
|
234
|
-
dirty.tenantById.set(row.dag_parent_id, row.tenant_id ??
|
|
255
|
+
dirty.tenantById.set(row.dag_parent_id, row.tenant_id ?? DEFAULT_TENANT_ID);
|
|
235
256
|
}
|
|
236
257
|
}
|
|
237
258
|
return rows;
|
|
@@ -272,7 +293,7 @@ function applyBatchWrites(db, stampedWrites, snapshot, out) {
|
|
|
272
293
|
}
|
|
273
294
|
/** True, after auditing the refusal, when the write would introduce a rejected value. */
|
|
274
295
|
function isRejectedBatchWrite(db, row) {
|
|
275
|
-
const entryTenantId = row.tenantId ??
|
|
296
|
+
const entryTenantId = row.tenantId ?? DEFAULT_TENANT_ID;
|
|
276
297
|
// checkRejectionGuard, not a bare tombstone probe: a tombstone can coexist with a live same-content row,
|
|
277
298
|
// and skipping every re-persist would starve it of decay/replay updates; only new or changed content is refused.
|
|
278
299
|
try {
|
|
@@ -291,16 +312,12 @@ function isRejectedBatchWrite(db, row) {
|
|
|
291
312
|
export function deleteEntriesOneByOne(hippoRoot, targets, opts) {
|
|
292
313
|
if (targets.length === 0)
|
|
293
314
|
return [];
|
|
294
|
-
|
|
295
|
-
try {
|
|
315
|
+
return onHandle(hippoRoot, (db) => {
|
|
296
316
|
return targets.map((target) => deleteEntryOn(db, hippoRoot, target.id, { ...opts, reason: target.reason }));
|
|
297
|
-
}
|
|
298
|
-
finally {
|
|
299
|
-
closeHippoDb(db);
|
|
300
|
-
}
|
|
317
|
+
}, openStore);
|
|
301
318
|
}
|
|
302
|
-
/** Commits whole components in transactions of about `budget.holdMs
|
|
303
|
-
*
|
|
319
|
+
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids that left `memories`.
|
|
320
|
+
* The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
304
321
|
export async function commitInChunks(hippoRoot, components, opts) {
|
|
305
322
|
if (components.length === 0)
|
|
306
323
|
return [];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type PromptRecallGate } from '../core/prompt-recall.js';
|
|
3
3
|
export type DeliveryRuntime = 'claude-code' | 'codex' | 'copilot' | 'unknown';
|
|
4
|
-
export type DeliveryEventType = 'prompt-submit' | 'pinned-manual' | 'pre-compact' | 'compact-resume';
|
|
5
|
-
/** True for the
|
|
4
|
+
export type DeliveryEventType = 'prompt-submit' | 'pinned-manual' | 'pre-compact' | 'compact-resume' | 'session-end' | 'context' | 'tool-failure';
|
|
5
|
+
/** True for the boundary types: a compaction's two hooks and the end of a session. */
|
|
6
6
|
export declare const isBoundaryEvent: (type: DeliveryEventType) => boolean;
|
|
7
7
|
export type DeliverySurface = 'hook' | 'context';
|
|
8
8
|
export type DeliveryWriteStore = 'local' | 'global';
|
|
@@ -12,8 +12,9 @@ export type DeliveryPool = 'pin' | 'recent' | 'prompt-recall' | 'strength' | 'se
|
|
|
12
12
|
export type DeliveryStage = 'load' | 'eligible' | 'gate' | 'budget' | 'limit' | 'final';
|
|
13
13
|
export type DeliveryOutcome = 'emitted' | 'reused' | 'rejected';
|
|
14
14
|
export type DeliveryRejectReason = 'budget' | 'gate-below-threshold' | 'gate-max-items' | 'duplicate' | 'scope' | 'quality' | 'limit';
|
|
15
|
-
/** Row format version in `delivery_events.ledger_version`:
|
|
16
|
-
|
|
15
|
+
/** Row format version in `delivery_events.ledger_version`: 4 = written by a binary that can write `tool-failure` rows and hashes the
|
|
16
|
+
* store's resolved root. */
|
|
17
|
+
export declare const DELIVERY_LEDGER_VERSION = 4;
|
|
17
18
|
/** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
|
|
18
19
|
export declare const DELIVERY_REJECTED_ROW_CAP = 16;
|
|
19
20
|
export interface DeliveryCandidateInput {
|
|
@@ -61,6 +62,10 @@ export interface DeliveryEventInput {
|
|
|
61
62
|
recallHash: string | null;
|
|
62
63
|
emittedHash: string | null;
|
|
63
64
|
elapsedMs: number;
|
|
65
|
+
/** The host's id for the tool call; set on `tool-failure` rows only. */
|
|
66
|
+
toolUseId?: string | null;
|
|
67
|
+
/** The `failure_log` row the failure was logged as; set on `tool-failure` rows only. */
|
|
68
|
+
failureId?: number | null;
|
|
64
69
|
candidates: readonly DeliveryCandidateInput[];
|
|
65
70
|
}
|
|
66
71
|
export interface DeliveryFacts {
|
|
@@ -98,6 +103,10 @@ export interface DeliveryObserver {
|
|
|
98
103
|
};
|
|
99
104
|
}[]): void;
|
|
100
105
|
selected(items: readonly DeliverySelected[]): void;
|
|
106
|
+
/** A searching call's query, `*` for none; kept as its hash, the one the recall trace stores. */
|
|
107
|
+
queried(query: string): void;
|
|
108
|
+
/** The recall trace a call that returned rows wrote; null when the write failed or the store answers no id. */
|
|
109
|
+
traced(traceId: number | null): void;
|
|
101
110
|
}
|
|
102
111
|
/** What the renderer sent, reported once at its exit. */
|
|
103
112
|
export interface DeliveryOutcomeInput {
|
|
@@ -112,6 +121,8 @@ export interface DeliveryOutcomeInput {
|
|
|
112
121
|
export interface DeliveryRecorder extends DeliveryObserver {
|
|
113
122
|
readonly root: string;
|
|
114
123
|
delivered(outcome: DeliveryOutcomeInput): void;
|
|
124
|
+
/** The failure log row id a `tool-failure` event links to; null when the log write threw. */
|
|
125
|
+
logged(failureId: number | null): void;
|
|
115
126
|
/** Builds the event and hands it to `write` once per call; throws on an injected fault, and writes nothing once broken. */
|
|
116
127
|
flush(write: (input: DeliveryEventInput) => number | null): void;
|
|
117
128
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { evalNow } from '../core/ablation.js';
|
|
2
2
|
import { scoreOverlap } from '../core/prompt-recall.js';
|
|
3
|
-
import { hookPayloadSessionId, hookPayloadString, isSubagentPayload } from '
|
|
3
|
+
import { hookPayloadSessionId, hookPayloadString, isSubagentPayload } from '../util/hook-payload.js';
|
|
4
4
|
import { blockHash, estimateTokens } from '../util/token-text.js';
|
|
5
|
-
import { errorMessage } from '../util/log.js';
|
|
6
|
-
/** True for the
|
|
7
|
-
export const isBoundaryEvent = (type) => type === 'pre-compact' || type === 'compact-resume';
|
|
8
|
-
/**
|
|
9
|
-
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
/** True for the boundary types: a compaction's two hooks and the end of a session. */
|
|
7
|
+
export const isBoundaryEvent = (type) => type === 'pre-compact' || type === 'compact-resume' || type === 'session-end';
|
|
8
|
+
/** Only the per-prompt calls keep prompt facts; a boundary or a `hippo context` run is not a prompt. */
|
|
9
|
+
const carriesPrompt = (type) => type === 'prompt-submit' || type === 'pinned-manual';
|
|
10
|
+
/** Row format version in `delivery_events.ledger_version`: 4 = written by a binary that can write `tool-failure` rows and hashes the
|
|
11
|
+
* store's resolved root. */
|
|
12
|
+
export const DELIVERY_LEDGER_VERSION = 4;
|
|
10
13
|
/** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
|
|
11
14
|
export const DELIVERY_REJECTED_ROW_CAP = 16;
|
|
12
15
|
// Deeper stages were closer to being sent, so the row cap keeps them first.
|
|
@@ -33,10 +36,13 @@ function readPayload(init) {
|
|
|
33
36
|
const rawTurnId = hookPayloadString(init.stdinText, 'turn_id');
|
|
34
37
|
const hostTurnId = rawTurnId !== null && rawTurnId.trim() !== '' ? rawTurnId : null;
|
|
35
38
|
const hookEvent = hookPayloadString(init.stdinText, 'hook_event_name');
|
|
39
|
+
const rawToolUseId = hookPayloadString(init.stdinText, 'tool_use_id')?.trim() ?? '';
|
|
40
|
+
// Cut as failure_log cuts its payload fields: the payload is not trusted to be short.
|
|
41
|
+
const toolUseId = rawToolUseId !== '' ? rawToolUseId.slice(0, 128) : null;
|
|
36
42
|
const sessionState = subagent
|
|
37
43
|
? 'subagent'
|
|
38
44
|
: payloadSession !== null ? 'payload' : envSession !== null ? 'env' : 'missing';
|
|
39
|
-
return { payloadSession, envSession, prompt, hostTurnId, hookEvent, sessionState };
|
|
45
|
+
return { payloadSession, envSession, prompt, hostTurnId, hookEvent, toolUseId, sessionState };
|
|
40
46
|
}
|
|
41
47
|
function rejectId(state, id, rejection) {
|
|
42
48
|
const { stage, reason, score, tokens } = rejection;
|
|
@@ -46,15 +52,22 @@ function rejectId(state, id, rejection) {
|
|
|
46
52
|
return;
|
|
47
53
|
state.candidates.set(id, { ...held, stage, reason, score, tokens });
|
|
48
54
|
}
|
|
55
|
+
function pickedPool(p, held) {
|
|
56
|
+
if (p.promptRecall)
|
|
57
|
+
return 'prompt-recall';
|
|
58
|
+
// A ranked call's rows keep the ranking that chose them, a pinned hit included.
|
|
59
|
+
if (held?.pool === 'search' || held?.pool === 'strength')
|
|
60
|
+
return held.pool;
|
|
61
|
+
return held?.pool === 'pin' || p.entry.pinned ? 'pin' : 'recent';
|
|
62
|
+
}
|
|
49
63
|
function pickedRows(state) {
|
|
50
64
|
const staticReused = state.outcome.staticReused === true;
|
|
51
65
|
const rows = [];
|
|
52
66
|
for (const p of state.picked.values()) {
|
|
53
|
-
const held = state.candidates.get(p.entry.id);
|
|
54
67
|
rows.push({
|
|
55
68
|
memoryId: p.entry.id,
|
|
56
69
|
sourceStore: p.sourceStore,
|
|
57
|
-
pool: p.
|
|
70
|
+
pool: pickedPool(p, state.candidates.get(p.entry.id)),
|
|
58
71
|
stage: 'final',
|
|
59
72
|
outcome: staticReused && !p.promptRecall ? 'reused' : 'emitted',
|
|
60
73
|
reason: null,
|
|
@@ -92,14 +105,14 @@ function buildEvent(init, payload, state, ts, startedMs) {
|
|
|
92
105
|
const rows = [...picked, ...rejected.rows];
|
|
93
106
|
const emitted = outcome.emittedText ?? null;
|
|
94
107
|
const eventType = init.eventType ?? (payload.hookEvent === 'UserPromptSubmit' ? 'prompt-submit' : 'pinned-manual');
|
|
95
|
-
//
|
|
96
|
-
const prompt =
|
|
108
|
+
// Whatever the payload holds, so a hook-run `hippo context` is never matched to an earlier row by its prompt.
|
|
109
|
+
const prompt = carriesPrompt(eventType) ? payload.prompt : null;
|
|
97
110
|
return {
|
|
98
111
|
ts,
|
|
99
112
|
tenantId: init.tenantId,
|
|
100
113
|
runtime: init.runtime ?? (payload.hostTurnId !== null ? 'codex' : payload.hookEvent !== null ? 'claude-code' : 'unknown'),
|
|
101
114
|
eventType,
|
|
102
|
-
surface: 'hook',
|
|
115
|
+
surface: eventType === 'context' ? 'context' : 'hook',
|
|
103
116
|
storeHash: init.storeHash,
|
|
104
117
|
writeStore: init.writeStore,
|
|
105
118
|
projectHash: facts !== null && facts.projectName !== '' ? blockHash(facts.projectName) : null,
|
|
@@ -108,8 +121,8 @@ function buildEvent(init, payload, state, ts, startedMs) {
|
|
|
108
121
|
hostTurnId: payload.hostTurnId,
|
|
109
122
|
promptHash: prompt !== null ? blockHash(prompt) : null,
|
|
110
123
|
promptLength: prompt?.length ?? 0,
|
|
111
|
-
queryHash:
|
|
112
|
-
recallTraceId:
|
|
124
|
+
queryHash: state.queryHash,
|
|
125
|
+
recallTraceId: state.recallTraceId,
|
|
113
126
|
blockState: state.disabledSeen ? 'disabled' : outcome.state,
|
|
114
127
|
promptRecall: facts?.promptRecall === true,
|
|
115
128
|
consideredCount: new Set([...state.candidates.keys(), ...state.picked.keys()]).size,
|
|
@@ -127,6 +140,8 @@ function buildEvent(init, payload, state, ts, startedMs) {
|
|
|
127
140
|
recallHash: outcome.recallHash ?? null,
|
|
128
141
|
emittedHash: emitted !== null ? blockHash(emitted) : null,
|
|
129
142
|
elapsedMs: Math.max(0, Date.now() - startedMs),
|
|
143
|
+
toolUseId: eventType === 'tool-failure' ? payload.toolUseId : null,
|
|
144
|
+
failureId: eventType === 'tool-failure' ? state.failureId : null,
|
|
130
145
|
candidates: rows,
|
|
131
146
|
};
|
|
132
147
|
}
|
|
@@ -196,7 +211,7 @@ export function createDeliveryRecorder(init) {
|
|
|
196
211
|
const payload = readPayload(init);
|
|
197
212
|
const state = {
|
|
198
213
|
candidates: new Map(), picked: new Map(), filtered: new Set(), facts: null, shown: 0, dropped: 0,
|
|
199
|
-
disabledSeen: false, outcome: { state: 'empty' }, broken: null, flushed: false,
|
|
214
|
+
disabledSeen: false, outcome: { state: 'empty' }, queryHash: null, recallTraceId: null, failureId: null, broken: null, flushed: false,
|
|
200
215
|
};
|
|
201
216
|
const guard = guardFor(state, fault);
|
|
202
217
|
const { qualityDropped, offer, reject, dropMissing, gated, selected } = candidateMethods(state, guard);
|
|
@@ -217,14 +232,16 @@ export function createDeliveryRecorder(init) {
|
|
|
217
232
|
dropMissing,
|
|
218
233
|
gated,
|
|
219
234
|
selected,
|
|
235
|
+
queried: (query) => guard(() => { state.queryHash = blockHash(query); }),
|
|
236
|
+
traced: (traceId) => guard(() => { state.recallTraceId = traceId; }),
|
|
220
237
|
delivered: (o) => guard(() => { state.outcome = { ...o }; }),
|
|
238
|
+
logged: (failureId) => guard(() => { state.failureId = failureId; }),
|
|
221
239
|
flush: (write) => {
|
|
222
240
|
if (state.flushed)
|
|
223
241
|
return;
|
|
224
242
|
state.flushed = true;
|
|
225
243
|
if (state.broken !== null) {
|
|
226
|
-
|
|
227
|
-
console.error(`[hippo] delivery ledger skipped: recorder failed: ${state.broken}`);
|
|
244
|
+
log.warn(`delivery ledger skipped: recorder failed: ${state.broken}`);
|
|
228
245
|
return;
|
|
229
246
|
}
|
|
230
247
|
if (fault === 'build')
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { selectEntriesByIds, TENANT_IS } from './entry-reads.js';
|
|
2
|
+
import { chunked } from '../util/chunked.js';
|
|
2
3
|
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
3
4
|
const marks = (ids) => ids.map(() => '?').join(',');
|
|
4
5
|
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full count in `sizes`. */
|
|
@@ -53,7 +54,8 @@ function countedLevel(db, walk, parents, room) {
|
|
|
53
54
|
const perParent = new Map();
|
|
54
55
|
for (const chunk of chunked([...parents])) {
|
|
55
56
|
// SAFETY: the SELECT names exactly ChildGroup's four fields, and the WHERE keeps dag_parent_id a string.
|
|
56
|
-
const groups = db.prepare(`SELECT dag_parent_id, scope, origin_project, COUNT(*) AS n FROM memories
|
|
57
|
+
const groups = db.prepare(`SELECT dag_parent_id, scope, origin_project, COUNT(*) AS n FROM memories ` +
|
|
58
|
+
`WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? GROUP BY dag_parent_id, scope, origin_project`).all(...chunk, walk.tenantId, walk.summary.id);
|
|
57
59
|
for (const group of groups) {
|
|
58
60
|
if (!walk.page.admit(group))
|
|
59
61
|
return null;
|
|
@@ -85,7 +87,8 @@ function childrenInOrder(db, walk, parents, limit) {
|
|
|
85
87
|
const byParent = new Map();
|
|
86
88
|
for (const chunk of chunked([...parents])) {
|
|
87
89
|
// SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
88
|
-
const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ?
|
|
90
|
+
const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? ` +
|
|
91
|
+
`ORDER BY created ASC, id ASC LIMIT ?`).all(...chunk, walk.tenantId, walk.summary.id, limit);
|
|
89
92
|
for (const row of rows) {
|
|
90
93
|
const bucket = byParent.get(row.dag_parent_id ?? '');
|
|
91
94
|
if (bucket)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// What `hippo doctor` and `hippo support-bundle` read from a store: one read-only open each, plain data out.
|
|
2
|
-
import {
|
|
2
|
+
import { countTableRows, ftsRowCounts, getMeta, getSchemaVersion, openHippoDbReadOnly } from '../db/index.js';
|
|
3
|
+
import { onHandle } from './open.js';
|
|
3
4
|
import { listTableNames } from '../db/tables.js';
|
|
4
5
|
import { errorMessage } from '../util/log.js';
|
|
5
6
|
import { compactionCountsAt, tokenTallySince } from './doctor-reads.js';
|
|
@@ -16,8 +17,7 @@ function attempt(read) {
|
|
|
16
17
|
}
|
|
17
18
|
/** Everything `hippo doctor` reads from one store; throws when it cannot be opened or its schema version read. */
|
|
18
19
|
export function readStoreHealth(hippoRoot, cutoffs) {
|
|
19
|
-
|
|
20
|
-
try {
|
|
20
|
+
return onHandle(hippoRoot, (db) => {
|
|
21
21
|
return {
|
|
22
22
|
schemaVersion: getSchemaVersion(db),
|
|
23
23
|
memories: countTableRows(db, 'memories'),
|
|
@@ -28,24 +28,17 @@ export function readStoreHealth(hippoRoot, cutoffs) {
|
|
|
28
28
|
lastSleep: attempt(() => lastConsolidationAt(db)),
|
|
29
29
|
compactions: attempt(() => compactionCountsAt(db, cutoffs.stuckBefore, cutoffs.transcriptFloor)),
|
|
30
30
|
};
|
|
31
|
-
}
|
|
32
|
-
finally {
|
|
33
|
-
closeHippoDb(db);
|
|
34
|
-
}
|
|
31
|
+
}, openHippoDbReadOnly);
|
|
35
32
|
}
|
|
36
33
|
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory column. */
|
|
37
34
|
export function readStoreInventory(hippoRoot) {
|
|
38
|
-
|
|
39
|
-
try {
|
|
35
|
+
return onHandle(hippoRoot, (db) => {
|
|
40
36
|
const schemaVersion = getSchemaVersion(db);
|
|
41
37
|
const minCompatibleBinary = getMeta(db, 'min_compatible_binary', '') || null;
|
|
42
38
|
const tables = {};
|
|
43
39
|
for (const name of listTableNames(db))
|
|
44
40
|
tables[name] = countTableRows(db, name);
|
|
45
41
|
return { schemaVersion, minCompatibleBinary, tables };
|
|
46
|
-
}
|
|
47
|
-
finally {
|
|
48
|
-
closeHippoDb(db);
|
|
49
|
-
}
|
|
42
|
+
}, openHippoDbReadOnly);
|
|
50
43
|
}
|
|
51
44
|
//# sourceMappingURL=diagnostics.js.map
|
package/dist/store/dormant.d.ts
CHANGED
|
@@ -1,27 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
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
|
-
* The db-taking helpers leave the handle and any transaction to the caller.
|
|
17
|
-
* The hippoRoot-taking functions at the end open one of their own, for
|
|
18
|
-
* api.listDormant / restoreDormant / forgetDormant / isDormant.
|
|
19
|
-
*/
|
|
1
|
+
/** Dormant memories: what sleep does with a faded memory instead of deleting it (config `dormant.enabled`; `retentionDays` bounds how long one is kept).
|
|
2
|
+
* Content stays in `dormant_memories` (schema v44) and the `memories` row goes, so every reader of `memories` stops seeing it, as if deleted.
|
|
3
|
+
* Not the raw archive (`raw_archive`, `archiveRawMemory`), which keeps metadata only. db-taking helpers leave the handle and transaction to the caller. */
|
|
20
4
|
import { type DatabaseSyncLike } from '../db/index.js';
|
|
21
5
|
import type { MemoryEntry } from '../core/memory.js';
|
|
22
|
-
import type { SqlFragment } from './
|
|
6
|
+
import type { SqlFragment } from './rule-sql.js';
|
|
23
7
|
import type { WriteBudget } from '../util/write-budget.js';
|
|
24
|
-
/** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects repair`
|
|
8
|
+
/** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects repair`
|
|
9
|
+
* splitting a two-project merge, or `hippo audit repair` setting aside an automatic memory with a certain defect. */
|
|
25
10
|
export type DormantReason = 'decay' | 'source-deleted' | 'project-repair' | 'quality-repair';
|
|
26
11
|
/** One memory that sleep is moving out of active memory into the dormant store. */
|
|
27
12
|
export interface DormantMove {
|
|
@@ -53,11 +38,7 @@ export interface ListDormantOpts {
|
|
|
53
38
|
/** Maximum rows returned, newest first. Default 20. */
|
|
54
39
|
limit?: number;
|
|
55
40
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Insert (or refresh) the dormant snapshot for `move.entry`. Does not touch
|
|
58
|
-
* the `memories` row: the caller deletes it in the same transaction, so the
|
|
59
|
-
* memory is never in both places or in neither.
|
|
60
|
-
*/
|
|
41
|
+
/** Insert (or refresh) the dormant snapshot for `move.entry`; the caller deletes the `memories` row in the same transaction. */
|
|
61
42
|
export declare function insertDormantRow(db: DatabaseSyncLike, move: DormantMove): void;
|
|
62
43
|
/** A dormant memory's stored snapshot plus when and why it went dormant. */
|
|
63
44
|
export interface DormantSnapshot {
|
|
@@ -66,10 +47,7 @@ export interface DormantSnapshot {
|
|
|
66
47
|
strength: number;
|
|
67
48
|
dormantAt: string;
|
|
68
49
|
}
|
|
69
|
-
/**
|
|
70
|
-
* The stored snapshot for a tenant's dormant memory, or null when the tenant
|
|
71
|
-
* has no dormant memory with that id (another tenant's id reads as absent).
|
|
72
|
-
*/
|
|
50
|
+
/** A tenant's stored dormant snapshot, or null when it has none with that id (another tenant's id reads as absent). */
|
|
73
51
|
export declare function readDormantSnapshot(db: DatabaseSyncLike, tenantId: string, id: string): DormantSnapshot | null;
|
|
74
52
|
/** Every dormant memory of a tenant whose snapshot still reads back. */
|
|
75
53
|
export declare function listDormantSnapshots(db: DatabaseSyncLike, tenantId: string): DormantSnapshot[];
|