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
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { envTenant } from '../util/env.js';
|
|
2
|
+
import { validateApiKey } from './auth.js';
|
|
3
|
+
export function resolveTenantId(opts) {
|
|
4
|
+
if (opts.apiKey) {
|
|
5
|
+
if (!opts.db)
|
|
6
|
+
throw new Error('resolveTenantId: db required when apiKey is set');
|
|
7
|
+
const ctx = validateApiKey(opts.db, opts.apiKey);
|
|
8
|
+
if (!ctx.valid || !ctx.tenantId)
|
|
9
|
+
throw new Error('invalid api key');
|
|
10
|
+
return ctx.tenantId;
|
|
11
|
+
}
|
|
12
|
+
// Empty/whitespace-only HIPPO_TENANT must fall through to 'default': `??` only catches undefined, so '' leaked through and broke every downstream tenant
|
|
13
|
+
// filter.
|
|
14
|
+
return envTenant();
|
|
15
|
+
}
|
|
16
|
+
/** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root, 'sess-abc')`) and silently get null.
|
|
17
|
+
* Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...` is refused, an accepted tradeoff. */
|
|
18
|
+
export function assertTenantId(fnName, value) {
|
|
19
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
20
|
+
throw new Error(`${fnName}: tenantId is required (got ${typeof value})`);
|
|
21
|
+
}
|
|
22
|
+
if (/^sess[-_]/i.test(value)) {
|
|
23
|
+
throw new Error(`${fnName}: tenantId looks like a session id ('${value}'). ` +
|
|
24
|
+
`In v0.41+ these helpers take (hippoRoot, tenantId, ...). ` +
|
|
25
|
+
`Pass the tenant id (e.g. 'default') and the session id separately.`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=tenant.js.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { TokenSurface } from './token-ledger.js';
|
|
3
|
+
export interface TokenRowInput {
|
|
4
|
+
ts: string;
|
|
5
|
+
tenantId: string;
|
|
6
|
+
sessionId: string | null;
|
|
7
|
+
surface: string;
|
|
8
|
+
event: string;
|
|
9
|
+
items: number;
|
|
10
|
+
tokens: number;
|
|
11
|
+
blockHash: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function insertTokenRow(db: DatabaseSyncLike, row: TokenRowInput): void;
|
|
14
|
+
export declare function pruneTokenRowsBefore(db: DatabaseSyncLike, cutoffIso: string): void;
|
|
15
|
+
export interface LedgerAnchor {
|
|
16
|
+
id: number;
|
|
17
|
+
event: string;
|
|
18
|
+
block_hash: string | null;
|
|
19
|
+
}
|
|
20
|
+
/** The session's newest inject or reset row on a surface. */
|
|
21
|
+
export declare function latestInjectOrReset(db: DatabaseSyncLike, tenantId: string, sessionId: string, surface: string): LedgerAnchor | undefined;
|
|
22
|
+
export declare function countSkipsAfter(db: DatabaseSyncLike, tenantId: string, sessionId: string, surface: string, afterId: number): {
|
|
23
|
+
n: number;
|
|
24
|
+
} | undefined;
|
|
25
|
+
export interface SurfaceTotalsRow {
|
|
26
|
+
surface: string;
|
|
27
|
+
injected: number;
|
|
28
|
+
tokens: number;
|
|
29
|
+
skipped: number;
|
|
30
|
+
avoided: number;
|
|
31
|
+
reread: number;
|
|
32
|
+
sessions: number;
|
|
33
|
+
}
|
|
34
|
+
export declare function surfaceTotals(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SurfaceTotalsRow[];
|
|
35
|
+
export interface SessionTotalsRow {
|
|
36
|
+
sessions: number;
|
|
37
|
+
hook_sessions: number;
|
|
38
|
+
reread_sessions: number;
|
|
39
|
+
tokens: number | null;
|
|
40
|
+
}
|
|
41
|
+
/** Window-wide session counts; `rereadSurfaces` are the hook surfaces whose sessions count as hook sessions. */
|
|
42
|
+
export declare function sessionTotals(db: DatabaseSyncLike, tenantId: string, sinceIso: string, rereadSurfaces: readonly TokenSurface[]): SessionTotalsRow | undefined;
|
|
43
|
+
export interface SessionTokenRow {
|
|
44
|
+
session_id: string;
|
|
45
|
+
sent: number;
|
|
46
|
+
skipped: number;
|
|
47
|
+
injections: number;
|
|
48
|
+
}
|
|
49
|
+
export declare function sessionTokenRows(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SessionTokenRow[];
|
|
50
|
+
export interface InjectedBlockRow {
|
|
51
|
+
ts: string;
|
|
52
|
+
surface: TokenSurface;
|
|
53
|
+
tokens: number;
|
|
54
|
+
}
|
|
55
|
+
export declare function injectedBlocks(db: DatabaseSyncLike, tenantId: string, sessionId: string, surfaces: readonly TokenSurface[]): InjectedBlockRow[];
|
|
56
|
+
export declare function deleteRereadRows(db: DatabaseSyncLike, tenantId: string, sessionId: string): void;
|
|
57
|
+
/** The first stored pilot arm hash for a session, optionally of one tenant. */
|
|
58
|
+
export declare function firstPilotArmHash(db: DatabaseSyncLike, sessionId: string, tenantId?: string): {
|
|
59
|
+
block_hash: string | null;
|
|
60
|
+
} | undefined;
|
|
61
|
+
//# sourceMappingURL=token-ledger-rows.d.ts.map
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function insertTokenRow(db, row) {
|
|
2
|
+
db.prepare(`INSERT INTO token_ledger (ts, tenant_id, session_id, surface, event, items, tokens, block_hash)
|
|
3
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(row.ts, row.tenantId, row.sessionId, row.surface, row.event, row.items, row.tokens, row.blockHash);
|
|
4
|
+
}
|
|
5
|
+
export function pruneTokenRowsBefore(db, cutoffIso) {
|
|
6
|
+
db.prepare(`DELETE FROM token_ledger WHERE ts < ?`).run(cutoffIso);
|
|
7
|
+
}
|
|
8
|
+
/** The session's newest inject or reset row on a surface. */
|
|
9
|
+
export function latestInjectOrReset(db, tenantId, sessionId, surface) {
|
|
10
|
+
// SAFETY: the SELECT names exactly these three columns.
|
|
11
|
+
return db.prepare(`SELECT id, event, block_hash FROM token_ledger
|
|
12
|
+
WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event IN ('inject', 'reset')
|
|
13
|
+
ORDER BY id DESC LIMIT 1`).get(tenantId, sessionId, surface);
|
|
14
|
+
}
|
|
15
|
+
export function countSkipsAfter(db, tenantId, sessionId, surface, afterId) {
|
|
16
|
+
// SAFETY: the SELECT names exactly this one aggregate column.
|
|
17
|
+
return db.prepare(`SELECT COUNT(*) AS n FROM token_ledger
|
|
18
|
+
WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event = 'skip' AND id > ?`).get(tenantId, sessionId, surface, afterId);
|
|
19
|
+
}
|
|
20
|
+
export function surfaceTotals(db, tenantId, sinceIso) {
|
|
21
|
+
// SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
|
|
22
|
+
return db.prepare(`SELECT surface,
|
|
23
|
+
SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injected,
|
|
24
|
+
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens,
|
|
25
|
+
SUM(CASE WHEN event = 'skip' THEN 1 ELSE 0 END) AS skipped,
|
|
26
|
+
SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS avoided,
|
|
27
|
+
SUM(CASE WHEN event = 'reread' THEN tokens ELSE 0 END) AS reread,
|
|
28
|
+
COUNT(DISTINCT session_id) AS sessions
|
|
29
|
+
FROM token_ledger
|
|
30
|
+
WHERE tenant_id = ? AND ts >= ?
|
|
31
|
+
GROUP BY surface`).all(tenantId, sinceIso);
|
|
32
|
+
}
|
|
33
|
+
/** Window-wide session counts; `rereadSurfaces` are the hook surfaces whose sessions count as hook sessions. */
|
|
34
|
+
export function sessionTotals(db, tenantId, sinceIso, rereadSurfaces) {
|
|
35
|
+
// SAFETY: the SELECT names exactly these four aggregate columns.
|
|
36
|
+
return db.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
|
|
37
|
+
COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${rereadSurfaces.map(() => '?').join(', ')}) THEN session_id END) AS hook_sessions,
|
|
38
|
+
COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
|
|
39
|
+
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
|
|
40
|
+
FROM token_ledger
|
|
41
|
+
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`).get(...rereadSurfaces, tenantId, sinceIso);
|
|
42
|
+
}
|
|
43
|
+
export function sessionTokenRows(db, tenantId, sinceIso) {
|
|
44
|
+
// SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
|
|
45
|
+
return db.prepare(`SELECT session_id,
|
|
46
|
+
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS sent,
|
|
47
|
+
SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS skipped,
|
|
48
|
+
SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injections
|
|
49
|
+
FROM token_ledger
|
|
50
|
+
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'
|
|
51
|
+
GROUP BY session_id`).all(tenantId, sinceIso);
|
|
52
|
+
}
|
|
53
|
+
export function injectedBlocks(db, tenantId, sessionId, surfaces) {
|
|
54
|
+
// SAFETY: the SELECT names exactly these three columns.
|
|
55
|
+
return db.prepare(`SELECT ts, surface, tokens FROM token_ledger
|
|
56
|
+
WHERE tenant_id = ? AND session_id = ? AND event = 'inject' AND surface IN (${surfaces.map(() => '?').join(', ')})`).all(tenantId, sessionId, ...surfaces);
|
|
57
|
+
}
|
|
58
|
+
export function deleteRereadRows(db, tenantId, sessionId) {
|
|
59
|
+
db.prepare(`DELETE FROM token_ledger WHERE tenant_id = ? AND session_id = ? AND event = 'reread'`).run(tenantId, sessionId);
|
|
60
|
+
}
|
|
61
|
+
/** The first stored pilot arm hash for a session, optionally of one tenant. */
|
|
62
|
+
export function firstPilotArmHash(db, sessionId, tenantId) {
|
|
63
|
+
const params = tenantId === undefined ? [sessionId] : [sessionId, tenantId];
|
|
64
|
+
// SAFETY: the SELECT names exactly this one column.
|
|
65
|
+
return db.prepare(`SELECT block_hash FROM token_ledger WHERE session_id = ?${tenantId === undefined ? '' : ' AND tenant_id = ?'}
|
|
66
|
+
AND surface = 'pilot' AND event = 'arm' ORDER BY id LIMIT 1`).get(...params);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=token-ledger-rows.js.map
|
|
@@ -1,37 +1,16 @@
|
|
|
1
|
-
import type
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* - `hook`: the per-prompt `UserPromptSubmit` hook (`hippo context --pinned-only`).
|
|
5
|
-
* - `hook_recall`: the same hook's prompt-recall section.
|
|
6
|
-
* - `compact_resume`: the snapshot the SessionStart(compact) hook prints (`hippo compact-resume`).
|
|
7
|
-
* - `context`, `recall`: the CLI commands.
|
|
8
|
-
* - `mcp_recall`, `mcp_context`: the MCP tools.
|
|
9
|
-
* - `http_recall`, `http_context`, `http_assemble`: the HTTP API.
|
|
10
|
-
* - `pilot`: the session's pilot arm row (src/pilot-arm.ts); not a send, so it is in no surface list.
|
|
11
|
-
*/
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
/** Where a block was sent: `hook`/`hook_recall` (per-prompt hook), `compact_resume`, `context`/`recall` (CLI), `mcp_*`, `http_*`,
|
|
3
|
+
* and `pilot` (session pilot arm row, src/api/pilot-arm.ts; not a send, so in no surface list). */
|
|
12
4
|
export type TokenSurface = 'hook' | 'hook_recall' | 'compact_resume' | 'context' | 'recall' | 'mcp_recall' | 'mcp_context' | 'http_recall' | 'http_context' | 'http_assemble' | 'pilot';
|
|
13
5
|
/** All surfaces, in report order. */
|
|
14
6
|
export declare const TOKEN_SURFACES: readonly TokenSurface[];
|
|
15
7
|
/** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry one session id. */
|
|
16
8
|
export declare const REREAD_SURFACES: readonly TokenSurface[];
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* - `inject`: sent to the agent.
|
|
20
|
-
* - `skip`: identical to the session's last injected block, so not sent again.
|
|
21
|
-
* - `reset`: the host compacted its context, so the next block must be sent.
|
|
22
|
-
* - `reread`: tokens later calls read again, booked at session end as one row per session, hook surface and UTC day of the calls.
|
|
23
|
-
* - `arm`: the pilot assignment; `block_hash` is `hippo` or `holdout`, `items` the holdout rate in basis points.
|
|
24
|
-
*/
|
|
9
|
+
/** What happened to a block: `inject` (sent), `skip` (identical to the last injected block), `reset` (host compacted, next must send), `reread` (tokens
|
|
10
|
+
* later calls read again, booked at session end), `arm` (pilot assignment; `block_hash` is `hippo` or `holdout`, `items` the holdout rate in bp). */
|
|
25
11
|
export type TokenEvent = 'inject' | 'skip' | 'reset' | 'reread' | 'arm';
|
|
26
12
|
/** Rows older than this are pruned on write. */
|
|
27
13
|
export declare const TOKEN_LEDGER_RETENTION_DAYS = 90;
|
|
28
|
-
/**
|
|
29
|
-
* Rough token estimate: characters / 4. The single estimate behind every
|
|
30
|
-
* token budget and ledger count in hippo.
|
|
31
|
-
*/
|
|
32
|
-
export declare function estimateTokens(text: string): number;
|
|
33
|
-
/** Stable 16-hex-char hash of a rendered block, for change detection. */
|
|
34
|
-
export declare function blockHash(text: string): string;
|
|
35
14
|
/** One ledger write. */
|
|
36
15
|
export interface TokenUse {
|
|
37
16
|
tenantId: string;
|
|
@@ -48,9 +27,7 @@ export interface TokenUse {
|
|
|
48
27
|
/** Override the timestamp (tests). ISO string. */
|
|
49
28
|
now?: string;
|
|
50
29
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}.
|
|
53
|
-
*/
|
|
30
|
+
/** Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}. */
|
|
54
31
|
export declare function recordTokenUse(db: DatabaseSyncLike, use: TokenUse): void;
|
|
55
32
|
/** What a session last sent on a surface, for {@link lastSentState}. */
|
|
56
33
|
export interface LastSent {
|
|
@@ -59,18 +36,10 @@ export interface LastSent {
|
|
|
59
36
|
/** Consecutive `skip` rows since that injection. */
|
|
60
37
|
skipsSince: number;
|
|
61
38
|
}
|
|
62
|
-
/**
|
|
63
|
-
* The last block this session injected on `surface`, or null when the
|
|
64
|
-
* session has injected nothing, a `reset` came after it, or there is no
|
|
65
|
-
* session id (without one, the caller always injects).
|
|
66
|
-
*/
|
|
39
|
+
/** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session id (the caller then always injects). */
|
|
67
40
|
export declare function lastSentState(db: DatabaseSyncLike, tenantId: string, sessionId: string | null | undefined, surface: TokenSurface): LastSent | null;
|
|
68
|
-
/**
|
|
69
|
-
*
|
|
70
|
-
* skipped. `refreshTurns` resends an unchanged block after that many
|
|
71
|
-
* consecutive skips, so a long session still sees its pinned rules near the
|
|
72
|
-
* latest turn; 0 never resends an unchanged block.
|
|
73
|
-
*/
|
|
41
|
+
/** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that many consecutive skips so a long
|
|
42
|
+
* session still sees its pinned rules, 0 never resends. */
|
|
74
43
|
export declare function shouldSkipUnchanged(last: LastSent | null, hash: string, refreshTurns: number): boolean;
|
|
75
44
|
/** Per-surface totals for {@link summarizeTokenUse}. */
|
|
76
45
|
export interface TokenSurfaceSummary {
|
|
@@ -105,10 +74,7 @@ export interface TokenSummary {
|
|
|
105
74
|
/** Sessions whose re-reads were counted at session end; open or crashed sessions are not. */
|
|
106
75
|
rereadSessions: number;
|
|
107
76
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Sum the ledger for one tenant since `sinceIso`. Surfaces with no rows are
|
|
110
|
-
* omitted.
|
|
111
|
-
*/
|
|
77
|
+
/** Sum the ledger for one tenant since `sinceIso`; surfaces with no rows are omitted. */
|
|
112
78
|
export declare function summarizeTokenUse(db: DatabaseSyncLike, tenantId: string, sinceIso: string): TokenSummary;
|
|
113
79
|
/** JSON-value string check without a runtime `typeof` (anti-slop rule). */
|
|
114
80
|
interface ModelTagged {
|
|
@@ -133,11 +99,8 @@ export interface SessionTokens {
|
|
|
133
99
|
/** Blocks sent. */
|
|
134
100
|
injections: number;
|
|
135
101
|
}
|
|
136
|
-
/**
|
|
137
|
-
*
|
|
138
|
-
* Claude Code hook rows carry the host's session id, which is also the
|
|
139
|
-
* transcript file name, so these join to the host's own usage records.
|
|
140
|
-
*/
|
|
102
|
+
/** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the transcript file name), so they join to its
|
|
103
|
+
* usage records. */
|
|
141
104
|
export declare function tokensBySession(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SessionTokens[];
|
|
142
105
|
/** One model API call in a host transcript, for {@link recordRereads}. */
|
|
143
106
|
export interface ApiCall {
|
|
@@ -156,7 +119,7 @@ export interface TranscriptCalls {
|
|
|
156
119
|
export declare function readApiCalls(transcriptPath: string): Promise<TranscriptCalls>;
|
|
157
120
|
/** Calls that carried a block sent at `at` (epoch ms): every later call in the first later call's context window. */
|
|
158
121
|
export declare function carryingCalls(calls: readonly ApiCall[], at: number): ApiCall[];
|
|
159
|
-
/** Replace a session's `reread` rows in
|
|
160
|
-
export declare function recordRereads(
|
|
122
|
+
/** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
|
|
123
|
+
export declare function recordRereads(hippoRoot: string, tenantId: string, sessionId: string, calls: readonly ApiCall[]): number;
|
|
161
124
|
export {};
|
|
162
125
|
//# sourceMappingURL=token-ledger.d.ts.map
|
|
@@ -1,31 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* One row per block of memory text sent to an agent, on every surface: the
|
|
6
|
-
* per-prompt hook, the block `hippo compact-resume` restores after compaction,
|
|
7
|
-
* `hippo context`, `hippo recall`, the MCP tools and the HTTP API. The ledger
|
|
8
|
-
* answers the question a buyer asks first ("what does this cost me per
|
|
9
|
-
* session?") and is the input for the token-savings evals.
|
|
10
|
-
*
|
|
11
|
-
* Every later model call re-reads a sent block until the host compacts; at session end the worker counts
|
|
12
|
-
* those calls from the transcript as `reread` rows for the {@link REREAD_SURFACES} blocks, dated by call day.
|
|
13
|
-
*
|
|
14
|
-
* It also backs inject-only-on-change: the per-prompt hook compares the
|
|
15
|
-
* hash of the block it is about to send with the last block it sent in the
|
|
16
|
-
* same session and records a `skip` instead of sending it again.
|
|
17
|
-
*
|
|
18
|
-
* Token counts use {@link estimateTokens} (characters / 4), the same estimate
|
|
19
|
-
* every budget in hippo uses. Rows hold counts, surfaces, session ids and
|
|
20
|
-
* hashes, never memory content or query text.
|
|
21
|
-
*
|
|
22
|
-
* DB helpers take the caller's handle; {@link readApiCalls} streams one
|
|
23
|
-
* transcript file. Writes are best-effort at the call sites; a ledger failure
|
|
24
|
-
* must never break recall.
|
|
25
|
-
*/
|
|
26
|
-
import { createHash } from 'node:crypto';
|
|
1
|
+
/** Token ledger: one row per block of memory text sent to an agent on any surface, with its token cost; the input for the token-savings evals.
|
|
2
|
+
* Backs inject-only-on-change: the hook records a `skip` when the block hash matches the session's last; `reread` rows cover {@link REREAD_SURFACES} blocks.
|
|
3
|
+
* Counts use {@link estimateTokens} (chars / 4); rows never hold content or query text. Writes are best-effort: a ledger failure must not break recall. */
|
|
27
4
|
import { open } from 'node:fs/promises';
|
|
28
|
-
import {
|
|
5
|
+
import { withWriteScope } from '../db/index.js';
|
|
6
|
+
import { onHandle } from './open.js';
|
|
7
|
+
import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
|
|
8
|
+
import { DAY_MS } from '../util/time.js';
|
|
9
|
+
import { countSkipsAfter, deleteRereadRows, injectedBlocks, insertTokenRow, latestInjectOrReset, pruneTokenRowsBefore, sessionTokenRows, sessionTotals, surfaceTotals, } from './token-ledger-rows.js';
|
|
10
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
29
11
|
/** All surfaces, in report order. */
|
|
30
12
|
export const TOKEN_SURFACES = [
|
|
31
13
|
'hook', 'hook_recall', 'compact_resume', 'context', 'recall', 'mcp_recall', 'mcp_context',
|
|
@@ -35,52 +17,34 @@ export const TOKEN_SURFACES = [
|
|
|
35
17
|
export const REREAD_SURFACES = ['hook', 'hook_recall', 'compact_resume'];
|
|
36
18
|
/** Rows older than this are pruned on write. */
|
|
37
19
|
export const TOKEN_LEDGER_RETENTION_DAYS = 90;
|
|
38
|
-
/**
|
|
39
|
-
* Rough token estimate: characters / 4. The single estimate behind every
|
|
40
|
-
* token budget and ledger count in hippo.
|
|
41
|
-
*/
|
|
42
|
-
export function estimateTokens(text) {
|
|
43
|
-
return Math.ceil(text.length / 4);
|
|
44
|
-
}
|
|
45
|
-
/** Stable 16-hex-char hash of a rendered block, for change detection. */
|
|
46
|
-
export function blockHash(text) {
|
|
47
|
-
return createHash('sha256').update(text).digest('hex').slice(0, 16);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}.
|
|
51
|
-
*/
|
|
20
|
+
/** Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}. */
|
|
52
21
|
export function recordTokenUse(db, use) {
|
|
53
22
|
const now = use.now ?? new Date().toISOString();
|
|
54
|
-
db
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
23
|
+
insertTokenRow(db, {
|
|
24
|
+
ts: now,
|
|
25
|
+
tenantId: use.tenantId,
|
|
26
|
+
sessionId: use.sessionId ?? null,
|
|
27
|
+
surface: use.surface,
|
|
28
|
+
event: use.event,
|
|
29
|
+
items: Math.max(0, Math.round(use.items)),
|
|
30
|
+
tokens: Math.max(0, Math.round(use.tokens)),
|
|
31
|
+
blockHash: use.hash ?? null,
|
|
32
|
+
});
|
|
33
|
+
const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
|
|
34
|
+
pruneTokenRowsBefore(db, cutoff);
|
|
35
|
+
}
|
|
36
|
+
/** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session id (the caller then always injects). */
|
|
64
37
|
export function lastSentState(db, tenantId, sessionId, surface) {
|
|
65
38
|
if (!sessionId)
|
|
66
39
|
return null;
|
|
67
|
-
|
|
68
|
-
const anchor = db.prepare(`SELECT id, event, block_hash FROM token_ledger
|
|
69
|
-
WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event IN ('inject', 'reset')
|
|
70
|
-
ORDER BY id DESC LIMIT 1`).get(tenantId, sessionId, surface);
|
|
40
|
+
const anchor = latestInjectOrReset(db, tenantId, sessionId, surface);
|
|
71
41
|
if (!anchor || anchor.event === 'reset' || !anchor.block_hash)
|
|
72
42
|
return null;
|
|
73
|
-
|
|
74
|
-
const skips = db.prepare(`SELECT COUNT(*) AS n FROM token_ledger
|
|
75
|
-
WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event = 'skip' AND id > ?`).get(tenantId, sessionId, surface, anchor.id);
|
|
43
|
+
const skips = countSkipsAfter(db, tenantId, sessionId, surface, anchor.id);
|
|
76
44
|
return { hash: anchor.block_hash, skipsSince: Number(skips?.n ?? 0) };
|
|
77
45
|
}
|
|
78
|
-
/**
|
|
79
|
-
*
|
|
80
|
-
* skipped. `refreshTurns` resends an unchanged block after that many
|
|
81
|
-
* consecutive skips, so a long session still sees its pinned rules near the
|
|
82
|
-
* latest turn; 0 never resends an unchanged block.
|
|
83
|
-
*/
|
|
46
|
+
/** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that many consecutive skips so a long
|
|
47
|
+
* session still sees its pinned rules, 0 never resends. */
|
|
84
48
|
export function shouldSkipUnchanged(last, hash, refreshTurns) {
|
|
85
49
|
if (!last || last.hash !== hash)
|
|
86
50
|
return false;
|
|
@@ -88,22 +52,9 @@ export function shouldSkipUnchanged(last, hash, refreshTurns) {
|
|
|
88
52
|
return false;
|
|
89
53
|
return true;
|
|
90
54
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Sum the ledger for one tenant since `sinceIso`. Surfaces with no rows are
|
|
93
|
-
* omitted.
|
|
94
|
-
*/
|
|
55
|
+
/** Sum the ledger for one tenant since `sinceIso`; surfaces with no rows are omitted. */
|
|
95
56
|
export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
96
|
-
|
|
97
|
-
const rows = db.prepare(`SELECT surface,
|
|
98
|
-
SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injected,
|
|
99
|
-
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens,
|
|
100
|
-
SUM(CASE WHEN event = 'skip' THEN 1 ELSE 0 END) AS skipped,
|
|
101
|
-
SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS avoided,
|
|
102
|
-
SUM(CASE WHEN event = 'reread' THEN tokens ELSE 0 END) AS reread,
|
|
103
|
-
COUNT(DISTINCT session_id) AS sessions
|
|
104
|
-
FROM token_ledger
|
|
105
|
-
WHERE tenant_id = ? AND ts >= ?
|
|
106
|
-
GROUP BY surface`).all(tenantId, sinceIso);
|
|
57
|
+
const rows = surfaceTotals(db, tenantId, sinceIso);
|
|
107
58
|
const bySurface = new Map(rows.map((r) => [r.surface, r]));
|
|
108
59
|
const surfaces = [];
|
|
109
60
|
for (const surface of TOKEN_SURFACES) {
|
|
@@ -120,13 +71,7 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
|
120
71
|
sessions: Number(r.sessions),
|
|
121
72
|
});
|
|
122
73
|
}
|
|
123
|
-
|
|
124
|
-
const perSession = db.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
|
|
125
|
-
COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${REREAD_SURFACES.map(() => '?').join(', ')}) THEN session_id END) AS hook_sessions,
|
|
126
|
-
COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
|
|
127
|
-
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
|
|
128
|
-
FROM token_ledger
|
|
129
|
-
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`).get(...REREAD_SURFACES, tenantId, sinceIso);
|
|
74
|
+
const perSession = sessionTotals(db, tenantId, sinceIso, REREAD_SURFACES);
|
|
130
75
|
const sessionCount = Number(perSession?.sessions ?? 0);
|
|
131
76
|
const sessionTokens = Number(perSession?.tokens ?? 0);
|
|
132
77
|
return {
|
|
@@ -145,10 +90,6 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
|
145
90
|
export function isSyntheticMessage(message) {
|
|
146
91
|
return message.model === '<synthetic>';
|
|
147
92
|
}
|
|
148
|
-
/** JSON-value plain-object check (excludes arrays and null). */
|
|
149
|
-
function isJsonObject(value) {
|
|
150
|
-
return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
|
|
151
|
-
}
|
|
152
93
|
/** A Claude Code hook payload on stdin as a JSON object; null when empty, malformed or not an object. */
|
|
153
94
|
function parseHookPayload(stdinText) {
|
|
154
95
|
if (!stdinText || stdinText.trim() === '')
|
|
@@ -156,7 +97,7 @@ function parseHookPayload(stdinText) {
|
|
|
156
97
|
try {
|
|
157
98
|
// SAFETY: JSON.parse returns a JSON value by definition.
|
|
158
99
|
const payload = JSON.parse(stdinText.trim());
|
|
159
|
-
return
|
|
100
|
+
return isJsonObjectLiteral(payload) ? payload : null;
|
|
160
101
|
}
|
|
161
102
|
catch {
|
|
162
103
|
// Malformed is one of the null cases the docblock names.
|
|
@@ -184,21 +125,10 @@ export function isSubagentPayload(stdinText) {
|
|
|
184
125
|
const agentId = parseHookPayload(stdinText)?.agent_id;
|
|
185
126
|
return isJsonString(agentId) && agentId.trim() !== '';
|
|
186
127
|
}
|
|
187
|
-
/**
|
|
188
|
-
*
|
|
189
|
-
* Claude Code hook rows carry the host's session id, which is also the
|
|
190
|
-
* transcript file name, so these join to the host's own usage records.
|
|
191
|
-
*/
|
|
128
|
+
/** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the transcript file name), so they join to its
|
|
129
|
+
* usage records. */
|
|
192
130
|
export function tokensBySession(db, tenantId, sinceIso) {
|
|
193
|
-
|
|
194
|
-
const rows = db.prepare(`SELECT session_id,
|
|
195
|
-
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS sent,
|
|
196
|
-
SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS skipped,
|
|
197
|
-
SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injections
|
|
198
|
-
FROM token_ledger
|
|
199
|
-
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'
|
|
200
|
-
GROUP BY session_id`).all(tenantId, sinceIso);
|
|
201
|
-
return rows.map((r) => ({
|
|
131
|
+
return sessionTokenRows(db, tenantId, sinceIso).map((r) => ({
|
|
202
132
|
sessionId: r.session_id,
|
|
203
133
|
sent: Number(r.sent),
|
|
204
134
|
skipped: Number(r.skipped),
|
|
@@ -227,7 +157,7 @@ export async function readApiCalls(transcriptPath) {
|
|
|
227
157
|
continue;
|
|
228
158
|
}
|
|
229
159
|
// Sidechain calls, sidechain compactions and `<synthetic>` messages never touch the main context.
|
|
230
|
-
if (!
|
|
160
|
+
if (!isJsonObjectLiteral(entry) || entry.isSidechain === true)
|
|
231
161
|
continue;
|
|
232
162
|
if (entry.subtype === 'compact_boundary') {
|
|
233
163
|
compactions += 1;
|
|
@@ -235,9 +165,9 @@ export async function readApiCalls(transcriptPath) {
|
|
|
235
165
|
}
|
|
236
166
|
// One call spans lines sharing a message id.
|
|
237
167
|
const message = entry.message;
|
|
238
|
-
if (entry.type !== 'assistant' || !
|
|
168
|
+
if (entry.type !== 'assistant' || !isJsonObjectLiteral(message))
|
|
239
169
|
continue;
|
|
240
|
-
if (!
|
|
170
|
+
if (!isJsonObjectLiteral(message.usage) || isSyntheticMessage(message) || !isJsonString(message.id))
|
|
241
171
|
continue;
|
|
242
172
|
if (seen.has(message.id))
|
|
243
173
|
continue;
|
|
@@ -260,17 +190,19 @@ export function carryingCalls(calls, at) {
|
|
|
260
190
|
return [];
|
|
261
191
|
return calls.filter((call) => call.at > at && call.compactions === first.compactions);
|
|
262
192
|
}
|
|
263
|
-
/** Replace a session's `reread` rows in
|
|
264
|
-
export function recordRereads(
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
193
|
+
/** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
|
|
194
|
+
export function recordRereads(hippoRoot, tenantId, sessionId, calls) {
|
|
195
|
+
return onHandle(hippoRoot, (db) => {
|
|
196
|
+
return replaceRereadRows(db, tenantId, sessionId, calls);
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/** One transaction, so a refused row leaves the session's earlier re-read rows in place. */
|
|
200
|
+
function replaceRereadRows(db, tenantId, sessionId, calls) {
|
|
201
|
+
return withWriteScope(db, 'record_rereads', () => {
|
|
202
|
+
const rows = injectedBlocks(db, tenantId, sessionId, REREAD_SURFACES);
|
|
271
203
|
const days = new Map();
|
|
272
204
|
const add = (surface, at, rereads, tokens) => {
|
|
273
|
-
const key = `${surface} ${new Date(at).toISOString().slice(0,
|
|
205
|
+
const key = `${surface} ${new Date(at).toISOString().slice(0, DATE_PREFIX_CHARS)}`;
|
|
274
206
|
const day = days.get(key) ?? { surface, at, rereads: 0, tokens: 0 };
|
|
275
207
|
days.set(key, { surface, at: Math.max(day.at, at), rereads: day.rereads + rereads, tokens: day.tokens + tokens });
|
|
276
208
|
};
|
|
@@ -282,23 +214,13 @@ export function recordRereads(db, tenantId, sessionId, calls) {
|
|
|
282
214
|
for (const call of carryingCalls(calls, sentAt).slice(1))
|
|
283
215
|
add(row.surface, call.at, 1, Number(row.tokens));
|
|
284
216
|
}
|
|
285
|
-
db
|
|
217
|
+
deleteRereadRows(db, tenantId, sessionId);
|
|
286
218
|
for (const day of days.values()) {
|
|
287
219
|
recordTokenUse(db, {
|
|
288
220
|
tenantId, sessionId, surface: day.surface, event: 'reread', items: day.rereads, tokens: day.tokens, now: new Date(day.at).toISOString(),
|
|
289
221
|
});
|
|
290
222
|
}
|
|
291
|
-
db.exec('COMMIT');
|
|
292
|
-
committed = true;
|
|
293
223
|
return [...days.values()].reduce((sum, day) => sum + day.tokens, 0);
|
|
294
|
-
}
|
|
295
|
-
finally {
|
|
296
|
-
if (!committed) {
|
|
297
|
-
try {
|
|
298
|
-
db.exec('ROLLBACK');
|
|
299
|
-
}
|
|
300
|
-
catch { /* preserve the original throw */ }
|
|
301
|
-
}
|
|
302
|
-
}
|
|
224
|
+
});
|
|
303
225
|
}
|
|
304
226
|
//# sourceMappingURL=token-ledger.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AppendAuditOpts } from './audit.js';
|
|
2
|
+
import { type RejectedValueRow } from './rejection.js';
|
|
3
|
+
/** Tombstone lookups and their refusal audit rows on one handle: opened on first use, never under dryRun, closed once. */
|
|
4
|
+
export interface TombstoneChecks {
|
|
5
|
+
/** The tenant's tombstone for `digest`; null when there is none, and always under dryRun. */
|
|
6
|
+
find(tenantId: string, digest: string): RejectedValueRow | null;
|
|
7
|
+
/** One audit row on the same handle; nothing under dryRun. */
|
|
8
|
+
audit(event: AppendAuditOpts): void;
|
|
9
|
+
close(): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function lazyTombstoneChecks(hippoRoot: string, dryRun: boolean): TombstoneChecks;
|
|
12
|
+
//# sourceMappingURL=tombstone-checks.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Sleep's tombstone checks run on one handle for the whole pass, owned here so no stage holds a raw one.
|
|
2
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
3
|
+
import { appendAuditEvent } from './audit.js';
|
|
4
|
+
import { findRejectedValue } from './rejection.js';
|
|
5
|
+
// Lazy so a sleep that checks nothing never opens the store; make it IMMEDIATELY before the try whose
|
|
6
|
+
// finally closes it, so a throw in any phase cannot leak the handle.
|
|
7
|
+
export function lazyTombstoneChecks(hippoRoot, dryRun) {
|
|
8
|
+
let handle = null;
|
|
9
|
+
const opened = () => {
|
|
10
|
+
if (dryRun)
|
|
11
|
+
return null;
|
|
12
|
+
handle ??= openHippoDb(hippoRoot);
|
|
13
|
+
return handle;
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
find(tenantId, digest) {
|
|
17
|
+
const db = opened();
|
|
18
|
+
return db ? findRejectedValue(db, tenantId, digest) : null;
|
|
19
|
+
},
|
|
20
|
+
audit(event) {
|
|
21
|
+
const db = opened();
|
|
22
|
+
if (db)
|
|
23
|
+
appendAuditEvent(db, event);
|
|
24
|
+
},
|
|
25
|
+
close() {
|
|
26
|
+
if (handle)
|
|
27
|
+
closeHippoDb(handle);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tombstone-checks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type TokenSummary } from './token-ledger.js';
|
|
2
|
+
import { type FailureSummary } from './failure-log.js';
|
|
3
|
+
/** One tenant's token ledger totals since `sinceIso`. */
|
|
4
|
+
export declare function tokenUseSummary(hippoRoot: string, tenantId: string, sinceIso: string): TokenSummary;
|
|
5
|
+
/** One tenant's failure log totals since `sinceIso`. */
|
|
6
|
+
export declare function failureLogSummary(hippoRoot: string, tenantId: string, sinceIso: string): FailureSummary;
|
|
7
|
+
//# sourceMappingURL=usage-reports.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// The token-use and failure reports, each read on one handle of its own.
|
|
2
|
+
// A file apart from token-ledger-rows.ts: src/store/token-ledger.ts imports that one, so a summary there would be an import cycle.
|
|
3
|
+
import { onHandle } from './open.js';
|
|
4
|
+
import { summarizeTokenUse } from './token-ledger.js';
|
|
5
|
+
import { summarizeFailures } from './failure-log.js';
|
|
6
|
+
/** One tenant's token ledger totals since `sinceIso`. */
|
|
7
|
+
export function tokenUseSummary(hippoRoot, tenantId, sinceIso) {
|
|
8
|
+
return onHandle(hippoRoot, (db) => {
|
|
9
|
+
return summarizeTokenUse(db, tenantId, sinceIso);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/** One tenant's failure log totals since `sinceIso`. */
|
|
13
|
+
export function failureLogSummary(hippoRoot, tenantId, sinceIso) {
|
|
14
|
+
return onHandle(hippoRoot, (db) => {
|
|
15
|
+
return summarizeFailures(db, tenantId, sinceIso);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=usage-reports.js.map
|