hippo-memory 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
package/dist/store/summaries.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DAG_LEVEL } from '../core/memory.js';
|
|
1
2
|
import { withWriteScope } from '../db/index.js';
|
|
2
3
|
import { assertTenantId } from './tenant.js';
|
|
3
4
|
import { findRejectedValue, rejectionDigest } from './rejection.js';
|
|
@@ -9,10 +10,12 @@ import { onHandle, openStore } from './open.js';
|
|
|
9
10
|
import { chunked } from '../util/chunked.js';
|
|
10
11
|
import { DIGEST_DISPLAY_CHARS } from '../util/token-text.js';
|
|
11
12
|
import { placeholders } from '../util/sql.js';
|
|
12
|
-
// Sleep-cycle rebuild surface: lives here, not in src/consolidate/dag.ts, because it needs module-private
|
|
13
|
-
// audit, syncFtsRow and assertTenantId. dag.ts keeps only the thin
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
// Sleep-cycle rebuild surface: lives here, not in src/consolidate/dag.ts, because it needs module-private
|
|
14
|
+
// MEMORY_SELECT_COLUMNS, MemoryRow, rowToEntry, audit, syncFtsRow and assertTenantId. dag.ts keeps only the thin
|
|
15
|
+
// orchestrator rebuildDirtySummaries().
|
|
16
|
+
/** Host-wide loader for L2 topic summaries without an L3 parent, for consolidate phase 1.9 (buildEntityProfiles);
|
|
17
|
+
* SQL-level filter, since in-memory `survivors` lacks L2s created by phase 1.7. Entries carry tenantId so per-cluster
|
|
18
|
+
* writes stay tenant-scoped. */
|
|
16
19
|
export function loadAllL2Summaries(hippoRoot) {
|
|
17
20
|
return onHandle(hippoRoot, (db) => {
|
|
18
21
|
// SAFETY: this query selects exactly MEMORY_SELECT_COLUMNS, matching
|
|
@@ -20,7 +23,7 @@ export function loadAllL2Summaries(hippoRoot) {
|
|
|
20
23
|
const rows = db.prepare(`
|
|
21
24
|
SELECT ${MEMORY_SELECT_COLUMNS}
|
|
22
25
|
FROM memories
|
|
23
|
-
WHERE dag_level =
|
|
26
|
+
WHERE dag_level = ${DAG_LEVEL.topic}
|
|
24
27
|
AND dag_parent_id IS NULL
|
|
25
28
|
AND kind != 'archived'
|
|
26
29
|
AND superseded_by IS NULL
|
|
@@ -29,8 +32,9 @@ export function loadAllL2Summaries(hippoRoot) {
|
|
|
29
32
|
return rows.map(rowToEntry);
|
|
30
33
|
}, openStore);
|
|
31
34
|
}
|
|
32
|
-
/** Dirty summaries across all tenants, newest change first (latest_at DESC NULLS LAST, id ASC), at most `limit` (all
|
|
33
|
-
* so HIPPO_DAG_REBUILD_CAP reads only the most recently changed. Each entry carries its tenantId so later
|
|
35
|
+
/** Dirty summaries across all tenants, newest change first (latest_at DESC NULLS LAST, id ASC), at most `limit` (all
|
|
36
|
+
* when omitted) so HIPPO_DAG_REBUILD_CAP reads only the most recently changed. Each entry carries its tenantId so later
|
|
37
|
+
* writes stay tenant-scoped. */
|
|
34
38
|
export function loadAllDirtySummaries(hippoRoot, limit) {
|
|
35
39
|
return onHandle(hippoRoot, (db) => {
|
|
36
40
|
// SAFETY: this query selects exactly MEMORY_SELECT_COLUMNS, matching
|
|
@@ -46,7 +50,8 @@ export function loadAllDirtySummaries(hippoRoot, limit) {
|
|
|
46
50
|
return rows.map(rowToEntry);
|
|
47
51
|
}, openStore);
|
|
48
52
|
}
|
|
49
|
-
/** Live (non-archived) children of a DAG summary, so a rebuild regenerates from the CURRENT child set; tenant-scoped as
|
|
53
|
+
/** Live (non-archived) children of a DAG summary, so a rebuild regenerates from the CURRENT child set; tenant-scoped as
|
|
54
|
+
* defence in depth. */
|
|
50
55
|
export function loadChildrenOfSummary(hippoRoot, summaryId, tenantId) {
|
|
51
56
|
assertTenantId('loadChildrenOfSummary', tenantId);
|
|
52
57
|
return onHandle(hippoRoot, (db) => {
|
|
@@ -64,7 +69,8 @@ export function loadChildrenOfSummary(hippoRoot, summaryId, tenantId) {
|
|
|
64
69
|
return rows.map(rowToEntry);
|
|
65
70
|
}, openStore);
|
|
66
71
|
}
|
|
67
|
-
/** loadChildrenOfSummary for many summaries in one IN query per tenant chunk; the map key is
|
|
72
|
+
/** loadChildrenOfSummary for many summaries in one IN query per tenant chunk; the map key is
|
|
73
|
+
* `${tenantId}\u0000${summaryId}`, each list in created order. */
|
|
68
74
|
export function loadChildrenOfSummaries(hippoRoot, summaries) {
|
|
69
75
|
const byTenant = new Map();
|
|
70
76
|
for (const s of summaries) {
|
|
@@ -104,8 +110,9 @@ export function loadChildrenOfSummaries(hippoRoot, summaries) {
|
|
|
104
110
|
export function childrenKey(tenantId, summaryId) {
|
|
105
111
|
return `${tenantId}\u0000${summaryId}`;
|
|
106
112
|
}
|
|
107
|
-
/** Apply a rebuild result to a dirty summary in one write scope (UPDATE plus syncFtsRow); `AND summary_dirty = 1` makes
|
|
108
|
-
* Returns `{ changed, refused }`: `refused` only when a tombstone hit suppressed the
|
|
113
|
+
/** Apply a rebuild result to a dirty summary in one write scope (UPDATE plus syncFtsRow); `AND summary_dirty = 1` makes
|
|
114
|
+
* a concurrent race-loser a no-op. Returns `{ changed, refused }`: `refused` only when a tombstone hit suppressed the
|
|
115
|
+
* content write while the metadata UPDATE still landed. */
|
|
109
116
|
export function applyRebuildResult(hippoRoot, summary, patch) {
|
|
110
117
|
assertTenantId('applyRebuildResult', summary.tenant_id);
|
|
111
118
|
return onHandle(hippoRoot, (db) => {
|
|
@@ -123,7 +130,7 @@ const REBUILD_CONTENT_SQL = `UPDATE memories
|
|
|
123
130
|
summary_dirty = 0
|
|
124
131
|
WHERE id = ?
|
|
125
132
|
AND tenant_id = ?
|
|
126
|
-
AND dag_level IN (
|
|
133
|
+
AND dag_level IN (${DAG_LEVEL.topic}, ${DAG_LEVEL.entity})
|
|
127
134
|
AND summary_dirty = 1
|
|
128
135
|
AND kind != 'archived'`;
|
|
129
136
|
const REBUILD_METADATA_SQL = `UPDATE memories
|
|
@@ -133,7 +140,7 @@ const REBUILD_METADATA_SQL = `UPDATE memories
|
|
|
133
140
|
summary_dirty = 0
|
|
134
141
|
WHERE id = ?
|
|
135
142
|
AND tenant_id = ?
|
|
136
|
-
AND dag_level IN (
|
|
143
|
+
AND dag_level IN (${DAG_LEVEL.topic}, ${DAG_LEVEL.entity})
|
|
137
144
|
AND summary_dirty = 1
|
|
138
145
|
AND kind != 'archived'`;
|
|
139
146
|
function applyRebuildInSavepoint(db, summary, patch) {
|
|
@@ -143,8 +150,9 @@ function applyRebuildInSavepoint(db, summary, patch) {
|
|
|
143
150
|
const tombstone = patch.bumpRebuildCount
|
|
144
151
|
? findRejectedValue(db, summary.tenant_id, rejectionDigest(patch.content))
|
|
145
152
|
: null;
|
|
146
|
-
// On a tombstone hit, write no content: take the zero-child metadata-only path
|
|
147
|
-
// rebuild_count bump). Clearing dirty is
|
|
153
|
+
// On a tombstone hit, write no content: take the zero-child metadata-only path
|
|
154
|
+
// (descendant_count/earliest_at/latest_at, summary_dirty cleared, no rebuild_count bump). Clearing dirty is
|
|
155
|
+
// deliberate: leaving it set would make every later sleep re-attempt and re-refuse the same rebuild forever.
|
|
148
156
|
const applyContentWrite = patch.bumpRebuildCount && !tombstone;
|
|
149
157
|
const result = applyContentWrite
|
|
150
158
|
? db.prepare(REBUILD_CONTENT_SQL).run(patch.content, patch.descendant_count, patch.earliest_at, patch.latest_at, nowIso, summary.id, summary.tenant_id)
|
|
@@ -161,8 +169,9 @@ function applyRebuildInSavepoint(db, summary, patch) {
|
|
|
161
169
|
}
|
|
162
170
|
/** Audit and log a rebuild whose content matched a rejected value; metadata still landed. */
|
|
163
171
|
function auditRefusedRebuild(db, summary, patch, tombstone) {
|
|
164
|
-
// refused === true here (narrowed for the tombstone.* access). Best-effort refusal audit written INLINE in this
|
|
165
|
-
// UPDATE already committed to it), so a direct audit() call is correct, not the
|
|
172
|
+
// refused === true here (narrowed for the tombstone.* access). Best-effort refusal audit written INLINE in this
|
|
173
|
+
// still-open SAVEPOINT (the metadata UPDATE already committed to it), so a direct audit() call is correct, not the
|
|
174
|
+
// post-rollback auditRejectionRefusal.
|
|
166
175
|
audit(db, 'reject_refusal', {
|
|
167
176
|
targetId: summary.id,
|
|
168
177
|
metadata: { digest: tombstone.digest, reason: tombstone.reason },
|
|
@@ -196,8 +205,9 @@ function syncRebuiltSummary(db, summary, patch, applyContentWrite, nowIso) {
|
|
|
196
205
|
descendant_count: patch.descendant_count,
|
|
197
206
|
}, actor: patch.actor, tenantId: summary.tenant_id });
|
|
198
207
|
}
|
|
199
|
-
/** Clear summary_dirty on a new summary after buildDag's child-link loop (each member's writeEntry marks the parent
|
|
200
|
-
* Idempotent (no-op, no audit if not dirty); audit source='buildDag-clean'
|
|
208
|
+
/** Clear summary_dirty on a new summary after buildDag's child-link loop (each member's writeEntry marks the parent
|
|
209
|
+
* dirty, so the same cycle would rebuild it). Idempotent (no-op, no audit if not dirty); audit source='buildDag-clean'
|
|
210
|
+
* distinguishes it from the rebuild's. */
|
|
201
211
|
export function clearSummaryDirtyAfterBuild(hippoRoot, summaryId, tenantId, actor = 'cli', source = 'buildDag-clean') {
|
|
202
212
|
assertTenantId('clearSummaryDirtyAfterBuild', tenantId);
|
|
203
213
|
onHandle(hippoRoot, (db) => {
|
|
@@ -208,14 +218,19 @@ export function clearSummaryDirtyAfterBuild(hippoRoot, summaryId, tenantId, acto
|
|
|
208
218
|
SET summary_dirty = 0
|
|
209
219
|
WHERE id = ?
|
|
210
220
|
AND tenant_id = ?
|
|
211
|
-
AND dag_level IN (
|
|
221
|
+
AND dag_level IN (${DAG_LEVEL.topic}, ${DAG_LEVEL.entity})
|
|
212
222
|
AND summary_dirty = 1
|
|
213
223
|
AND kind != 'archived'
|
|
214
224
|
RETURNING dag_level
|
|
215
225
|
`).get(summaryId, tenantId);
|
|
216
226
|
if (result) {
|
|
217
227
|
// source tells buildDag-clean (L2) from buildEntityProfiles-clean (L3) and any future build path.
|
|
218
|
-
audit(db, 'summary_marked_clean', {
|
|
228
|
+
audit(db, 'summary_marked_clean', {
|
|
229
|
+
targetId: summaryId,
|
|
230
|
+
metadata: { dag_level: result.dag_level, source },
|
|
231
|
+
actor,
|
|
232
|
+
tenantId,
|
|
233
|
+
});
|
|
219
234
|
}
|
|
220
235
|
}, openStore);
|
|
221
236
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
-
/** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is
|
|
2
|
+
/** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is
|
|
3
|
+
* audited. */
|
|
3
4
|
export declare function markSummaryDirtyInTx(db: DatabaseSyncLike, summaryId: string, tenantId: string, actor: string): void;
|
|
4
5
|
//# sourceMappingURL=summary-dirty.d.ts.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Leaf module so entry-writes.ts and raw-archive.ts can both mark a parent summary dirty without importing each other.
|
|
2
2
|
import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
|
|
3
|
-
/** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is
|
|
3
|
+
/** Runs in the caller's transaction so the mark commits or rolls back with the child change; only a 0 to 1 flip is
|
|
4
|
+
* audited. */
|
|
4
5
|
export function markSummaryDirtyInTx(db, summaryId, tenantId, actor) {
|
|
5
6
|
// SAFETY: result's shape matches the single `dag_level` column returned below.
|
|
6
7
|
const result = db.prepare(`
|
package/dist/store/tenant.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ export interface ResolveOpts {
|
|
|
5
5
|
apiKey?: string;
|
|
6
6
|
}
|
|
7
7
|
export declare function resolveTenantId(opts: ResolveOpts): string;
|
|
8
|
-
/** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root,
|
|
9
|
-
* Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...`
|
|
8
|
+
/** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root,
|
|
9
|
+
* 'sess-abc')`) and silently get null. Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...`
|
|
10
|
+
* is refused, an accepted tradeoff. */
|
|
10
11
|
export declare function assertTenantId(fnName: string, value: JsonValue): asserts value is string;
|
|
11
12
|
//# sourceMappingURL=tenant.d.ts.map
|
package/dist/store/tenant.js
CHANGED
|
@@ -9,12 +9,13 @@ export function resolveTenantId(opts) {
|
|
|
9
9
|
throw new Error('invalid api key');
|
|
10
10
|
return ctx.tenantId;
|
|
11
11
|
}
|
|
12
|
-
// Empty/whitespace-only HIPPO_TENANT must fall through to 'default': `??` only catches undefined, so '' leaked
|
|
13
|
-
// filter.
|
|
12
|
+
// Empty/whitespace-only HIPPO_TENANT must fall through to 'default': `??` only catches undefined, so '' leaked
|
|
13
|
+
// through and broke every downstream tenant filter.
|
|
14
14
|
return envTenant();
|
|
15
15
|
}
|
|
16
|
-
/** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root,
|
|
17
|
-
* Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...`
|
|
16
|
+
/** Runtime guard for tenant id args: an older JS caller can pass a `sessionId` as the tenant (`loadLatestHandoff(root,
|
|
17
|
+
* 'sess-abc')`) and silently get null. Rejects values starting `sess-` / `sess_`; a tenant literally named `sess-...`
|
|
18
|
+
* is refused, an accepted tradeoff. */
|
|
18
19
|
export function assertTenantId(fnName, value) {
|
|
19
20
|
if (typeof value !== 'string' || value.length === 0) {
|
|
20
21
|
throw new Error(`${fnName}: tenantId is required (got ${typeof value})`);
|
|
@@ -34,12 +34,15 @@ export function surfaceTotals(db, tenantId, sinceIso) {
|
|
|
34
34
|
/** Window-wide session counts; `rereadSurfaces` are the hook surfaces whose sessions count as hook sessions. */
|
|
35
35
|
export function sessionTotals(db, tenantId, sinceIso, rereadSurfaces) {
|
|
36
36
|
// SAFETY: the SELECT names exactly these four aggregate columns.
|
|
37
|
-
return db
|
|
38
|
-
|
|
37
|
+
return db
|
|
38
|
+
.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
|
|
39
|
+
COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${placeholders(rereadSurfaces.length)}) THEN
|
|
40
|
+
session_id END) AS hook_sessions,
|
|
39
41
|
COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
|
|
40
42
|
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
|
|
41
43
|
FROM token_ledger
|
|
42
|
-
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`)
|
|
44
|
+
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`)
|
|
45
|
+
.get(...rereadSurfaces, tenantId, sinceIso);
|
|
43
46
|
}
|
|
44
47
|
export function sessionTokenRows(db, tenantId, sinceIso) {
|
|
45
48
|
// SAFETY: the SELECT names exactly these columns, all aggregates or TEXT.
|
|
@@ -1,13 +1,15 @@
|
|
|
1
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_*`,
|
|
3
|
-
* and `pilot` (session pilot arm row, src/api/pilot-arm.ts; not a send, so in no surface list). */
|
|
2
|
+
/** Where a block was sent: `hook`/`hook_recall` (per-prompt hook), `compact_resume`, `context`/`recall` (CLI), `mcp_*`,
|
|
3
|
+
* `http_*`, and `pilot` (session pilot arm row, src/api/pilot-arm.ts; not a send, so in no surface list). */
|
|
4
4
|
export type TokenSurface = 'hook' | 'hook_recall' | 'compact_resume' | 'context' | 'recall' | 'mcp_recall' | 'mcp_context' | 'http_recall' | 'http_context' | 'http_assemble' | 'pilot';
|
|
5
5
|
/** All surfaces, in report order. */
|
|
6
6
|
export declare const TOKEN_SURFACES: readonly TokenSurface[];
|
|
7
|
-
/** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry
|
|
7
|
+
/** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry
|
|
8
|
+
* one session id. */
|
|
8
9
|
export declare const REREAD_SURFACES: readonly TokenSurface[];
|
|
9
|
-
/** What happened to a block: `inject` (sent), `skip` (identical to the last injected block), `reset` (host compacted,
|
|
10
|
-
* later calls read again, booked at session end), `arm` (pilot assignment;
|
|
10
|
+
/** What happened to a block: `inject` (sent), `skip` (identical to the last injected block), `reset` (host compacted,
|
|
11
|
+
* next must send), `reread` (tokens later calls read again, booked at session end), `arm` (pilot assignment;
|
|
12
|
+
* `block_hash` is `hippo` or `holdout`, `items` the holdout rate in bp). */
|
|
11
13
|
export type TokenEvent = 'inject' | 'skip' | 'reset' | 'reread' | 'arm';
|
|
12
14
|
/** Rows older than this are pruned on write. */
|
|
13
15
|
export declare const TOKEN_LEDGER_RETENTION_DAYS = 90;
|
|
@@ -36,10 +38,11 @@ export interface LastSent {
|
|
|
36
38
|
/** Consecutive `skip` rows since that injection. */
|
|
37
39
|
skipsSince: number;
|
|
38
40
|
}
|
|
39
|
-
/** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session
|
|
41
|
+
/** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session
|
|
42
|
+
* id (the caller then always injects). */
|
|
40
43
|
export declare function lastSentState(db: DatabaseSyncLike, tenantId: string, sessionId: string | null | undefined, surface: TokenSurface): LastSent | null;
|
|
41
|
-
/** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that
|
|
42
|
-
* session still sees its pinned rules, 0 never resends. */
|
|
44
|
+
/** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that
|
|
45
|
+
* many consecutive skips so a long session still sees its pinned rules, 0 never resends. */
|
|
43
46
|
export declare function shouldSkipUnchanged(last: LastSent | null, hash: string, refreshTurns: number): boolean;
|
|
44
47
|
/** Per-surface totals for {@link summarizeTokenUse}. */
|
|
45
48
|
export interface TokenSurfaceSummary {
|
|
@@ -52,7 +55,8 @@ export interface TokenSurfaceSummary {
|
|
|
52
55
|
skipped: number;
|
|
53
56
|
/** Tokens those skipped blocks would have cost. */
|
|
54
57
|
tokensAvoided: number;
|
|
55
|
-
/** Tokens of these blocks that later model calls read again, from sessions that have ended; 0 off {@link
|
|
58
|
+
/** Tokens of these blocks that later model calls read again, from sessions that have ended; 0 off {@link
|
|
59
|
+
* REREAD_SURFACES}. */
|
|
56
60
|
tokensReread: number;
|
|
57
61
|
/** Distinct session ids seen (rows without one are not counted). */
|
|
58
62
|
sessions: number;
|
|
@@ -80,7 +84,8 @@ export declare function summarizeTokenUse(db: DatabaseSyncLike, tenantId: string
|
|
|
80
84
|
interface ModelTagged {
|
|
81
85
|
model?: unknown;
|
|
82
86
|
}
|
|
83
|
-
/** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made
|
|
87
|
+
/** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made
|
|
88
|
+
* them. */
|
|
84
89
|
export declare function isSyntheticMessage(message: ModelTagged): boolean;
|
|
85
90
|
/** Tokens hippo sent and skipped in one session, for {@link tokensBySession}. */
|
|
86
91
|
export interface SessionTokens {
|
|
@@ -92,8 +97,8 @@ export interface SessionTokens {
|
|
|
92
97
|
/** Blocks sent. */
|
|
93
98
|
injections: number;
|
|
94
99
|
}
|
|
95
|
-
/** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the
|
|
96
|
-
* usage records. */
|
|
100
|
+
/** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the
|
|
101
|
+
* transcript file name), so they join to its usage records. */
|
|
97
102
|
export declare function tokensBySession(db: DatabaseSyncLike, tenantId: string, sinceIso: string): SessionTokens[];
|
|
98
103
|
/** One model API call in a host transcript, for {@link recordRereads}. */
|
|
99
104
|
export interface ApiCall {
|
|
@@ -112,7 +117,8 @@ export interface TranscriptCalls {
|
|
|
112
117
|
export declare function readApiCalls(transcriptPath: string): Promise<TranscriptCalls>;
|
|
113
118
|
/** Calls that carried a block sent at `at` (epoch ms): every later call in the first later call's context window. */
|
|
114
119
|
export declare function carryingCalls(calls: readonly ApiCall[], at: number): ApiCall[];
|
|
115
|
-
/** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day;
|
|
120
|
+
/** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day;
|
|
121
|
+
* returns the tokens booked. */
|
|
116
122
|
export declare function recordRereads(hippoRoot: string, tenantId: string, sessionId: string, calls: readonly ApiCall[]): number;
|
|
117
123
|
export {};
|
|
118
124
|
//# sourceMappingURL=token-ledger.d.ts.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
/** Token ledger: one row per block of memory text sent to an agent on any surface, with its token cost; the input for
|
|
2
|
-
* Backs inject-only-on-change: the hook records a `skip` when the block hash matches the
|
|
3
|
-
* Counts use {@link estimateTokens} (chars / 4);
|
|
1
|
+
/** Token ledger: one row per block of memory text sent to an agent on any surface, with its token cost; the input for
|
|
2
|
+
* the token-savings evals. Backs inject-only-on-change: the hook records a `skip` when the block hash matches the
|
|
3
|
+
* session's last; `reread` rows cover {@link REREAD_SURFACES} blocks. Counts use {@link estimateTokens} (chars / 4);
|
|
4
|
+
* rows never hold content or query text. Writes are best-effort: a ledger failure must not break recall. */
|
|
4
5
|
import { open } from 'node:fs/promises';
|
|
5
6
|
import { withWriteScope } from '../db/index.js';
|
|
6
7
|
import { onHandle } from './open.js';
|
|
@@ -13,7 +14,8 @@ export const TOKEN_SURFACES = [
|
|
|
13
14
|
'hook', 'hook_recall', 'compact_resume', 'context', 'recall', 'mcp_recall', 'mcp_context',
|
|
14
15
|
'http_recall', 'http_context', 'http_assemble',
|
|
15
16
|
];
|
|
16
|
-
/** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry
|
|
17
|
+
/** Surfaces whose re-reads are counted: only a hook payload tells a sub-agent's block from its parent's, as both carry
|
|
18
|
+
* one session id. */
|
|
17
19
|
export const REREAD_SURFACES = ['hook', 'hook_recall', 'compact_resume'];
|
|
18
20
|
/** Rows older than this are pruned on write. */
|
|
19
21
|
export const TOKEN_LEDGER_RETENTION_DAYS = 90;
|
|
@@ -33,7 +35,8 @@ export function recordTokenUse(db, use) {
|
|
|
33
35
|
const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
|
|
34
36
|
pruneTokenRowsBefore(db, cutoff);
|
|
35
37
|
}
|
|
36
|
-
/** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session
|
|
38
|
+
/** The last block this session injected on `surface`, or null if none, a `reset` came after it, or there is no session
|
|
39
|
+
* id (the caller then always injects). */
|
|
37
40
|
export function lastSentState(db, tenantId, sessionId, surface) {
|
|
38
41
|
if (!sessionId)
|
|
39
42
|
return null;
|
|
@@ -43,8 +46,8 @@ export function lastSentState(db, tenantId, sessionId, surface) {
|
|
|
43
46
|
const skips = countSkipsAfter(db, tenantId, sessionId, surface, anchor.id);
|
|
44
47
|
return { hash: anchor.block_hash, skipsSince: Number(skips?.n ?? 0) };
|
|
45
48
|
}
|
|
46
|
-
/** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that
|
|
47
|
-
* session still sees its pinned rules, 0 never resends. */
|
|
49
|
+
/** Whether a block identical to the session's last injection should be skipped; `refreshTurns` resends it after that
|
|
50
|
+
* many consecutive skips so a long session still sees its pinned rules, 0 never resends. */
|
|
48
51
|
export function shouldSkipUnchanged(last, hash, refreshTurns) {
|
|
49
52
|
if (!last || last.hash !== hash)
|
|
50
53
|
return false;
|
|
@@ -86,12 +89,13 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
|
86
89
|
rereadSessions: Number(perSession?.reread_sessions ?? 0),
|
|
87
90
|
};
|
|
88
91
|
}
|
|
89
|
-
/** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made
|
|
92
|
+
/** Claude Code writes its own API errors and limit notices as assistant lines from this model; no model call made
|
|
93
|
+
* them. */
|
|
90
94
|
export function isSyntheticMessage(message) {
|
|
91
95
|
return message.model === '<synthetic>';
|
|
92
96
|
}
|
|
93
|
-
/** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the
|
|
94
|
-
* usage records. */
|
|
97
|
+
/** Ledger totals per session id since `sinceIso`, across surfaces; hook rows carry the host's session id (the
|
|
98
|
+
* transcript file name), so they join to its usage records. */
|
|
95
99
|
export function tokensBySession(db, tenantId, sinceIso) {
|
|
96
100
|
return sessionTokenRows(db, tenantId, sinceIso).map((r) => ({
|
|
97
101
|
sessionId: r.session_id,
|
|
@@ -149,13 +153,15 @@ export async function readApiCalls(transcriptPath) {
|
|
|
149
153
|
}
|
|
150
154
|
/** Calls that carried a block sent at `at` (epoch ms): every later call in the first later call's context window. */
|
|
151
155
|
export function carryingCalls(calls, at) {
|
|
152
|
-
// Windows come from file order, not boundary timestamps: the compact-resume block is booked before its boundary's
|
|
156
|
+
// Windows come from file order, not boundary timestamps: the compact-resume block is booked before its boundary's
|
|
157
|
+
// timestamp.
|
|
153
158
|
const first = calls.find((call) => call.at > at);
|
|
154
159
|
if (!first)
|
|
155
160
|
return [];
|
|
156
161
|
return calls.filter((call) => call.at > at && call.compactions === first.compactions);
|
|
157
162
|
}
|
|
158
|
-
/** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day;
|
|
163
|
+
/** Replace a session's `reread` rows in `hippoRoot`'s store, one per {@link REREAD_SURFACES} surface and UTC day;
|
|
164
|
+
* returns the tokens booked. */
|
|
159
165
|
export function recordRereads(hippoRoot, tenantId, sessionId, calls) {
|
|
160
166
|
return onHandle(hippoRoot, (db) => {
|
|
161
167
|
return replaceRereadRows(db, tenantId, sessionId, calls);
|
|
@@ -173,7 +179,8 @@ function replaceRereadRows(db, tenantId, sessionId, calls) {
|
|
|
173
179
|
};
|
|
174
180
|
for (const row of rows) {
|
|
175
181
|
const sentAt = Date.parse(row.ts);
|
|
176
|
-
// Dated by when the calls happened, so a --days window counts re-reads in it; the empty send-day row keeps the
|
|
182
|
+
// Dated by when the calls happened, so a --days window counts re-reads in it; the empty send-day row keeps the
|
|
183
|
+
// session in coverage.
|
|
177
184
|
add(row.surface, sentAt, 0, 0);
|
|
178
185
|
// The first carrying call is the send itself; every later one is a re-read.
|
|
179
186
|
for (const call of carryingCalls(calls, sentAt).slice(1))
|
|
@@ -182,7 +189,13 @@ function replaceRereadRows(db, tenantId, sessionId, calls) {
|
|
|
182
189
|
deleteRereadRows(db, tenantId, sessionId);
|
|
183
190
|
for (const day of days.values()) {
|
|
184
191
|
recordTokenUse(db, {
|
|
185
|
-
tenantId,
|
|
192
|
+
tenantId,
|
|
193
|
+
sessionId,
|
|
194
|
+
surface: day.surface,
|
|
195
|
+
event: 'reread',
|
|
196
|
+
items: day.rereads,
|
|
197
|
+
tokens: day.tokens,
|
|
198
|
+
now: new Date(day.at).toISOString(),
|
|
186
199
|
});
|
|
187
200
|
}
|
|
188
201
|
return [...days.values()].reduce((sum, day) => sum + day.tokens, 0);
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type AppendAuditOpts } from './audit.js';
|
|
2
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
|
|
3
|
+
/** Tombstone lookups and their refusal audit rows on one handle: opened on first use, never under dryRun, closed
|
|
4
|
+
* once. */
|
|
4
5
|
export interface TombstoneChecks {
|
|
5
6
|
/** The tenant's tombstone for `digest`; null when there is none, and always under dryRun. */
|
|
6
7
|
find(tenantId: string, digest: string): RejectedValueRow | null;
|
|
7
8
|
/** One audit row on the same handle; nothing under dryRun. */
|
|
8
9
|
audit(event: AppendAuditOpts): void;
|
|
10
|
+
/** `audit`, with a failed write logged and counted instead of thrown, for a refusal that stands without its row. */
|
|
11
|
+
auditOrCount(event: AppendAuditOpts): void;
|
|
9
12
|
close(): void;
|
|
10
13
|
}
|
|
11
14
|
export declare function lazyTombstoneChecks(hippoRoot: string, dryRun: boolean): TombstoneChecks;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// Sleep's tombstone checks run on one handle for the whole pass, owned here so no stage holds a raw one.
|
|
2
2
|
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
3
|
-
import { appendAuditEvent } from './audit.js';
|
|
3
|
+
import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
|
|
4
4
|
import { findRejectedValue } from './rejection.js';
|
|
5
|
+
import { errorMessage } from '../util/log.js';
|
|
5
6
|
// Lazy so a sleep that checks nothing never opens the store; make it IMMEDIATELY before the try whose
|
|
6
7
|
// finally closes it, so a throw in any phase cannot leak the handle.
|
|
7
8
|
export function lazyTombstoneChecks(hippoRoot, dryRun) {
|
|
@@ -22,6 +23,14 @@ export function lazyTombstoneChecks(hippoRoot, dryRun) {
|
|
|
22
23
|
if (db)
|
|
23
24
|
appendAuditEvent(db, event);
|
|
24
25
|
},
|
|
26
|
+
auditOrCount(event) {
|
|
27
|
+
try {
|
|
28
|
+
this.audit(event);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
reportAuditWriteFailure(event.op, errorMessage(error), event.targetId);
|
|
32
|
+
}
|
|
33
|
+
},
|
|
25
34
|
close() {
|
|
26
35
|
if (handle)
|
|
27
36
|
closeHippoDb(handle);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
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
|
|
2
|
+
// A file apart from token-ledger-rows.ts: src/store/token-ledger.ts imports that one, so a summary there would be an
|
|
3
|
+
// import cycle.
|
|
3
4
|
import { onHandle } from './open.js';
|
|
4
5
|
import { summarizeTokenUse } from './token-ledger.js';
|
|
5
6
|
import { summarizeFailures } from './failure-log.js';
|
|
@@ -15,7 +15,8 @@ export declare function replacesIndex(state: EmbeddingIndexState, model: string)
|
|
|
15
15
|
export declare function storedIndexState(hippoRoot: string): EmbeddingIndexState;
|
|
16
16
|
/** Records `identity` as what built the index under `hippoRoot`. */
|
|
17
17
|
export declare function saveIndexIdentity(hippoRoot: string, identity: string): void;
|
|
18
|
-
/** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via
|
|
18
|
+
/** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via
|
|
19
|
+
* `loadStoredVectors`. */
|
|
19
20
|
export declare function loadEmbeddingIndex(hippoRoot: string): Record<string, number[]>;
|
|
20
21
|
export interface StoredVectorSummary {
|
|
21
22
|
readonly ids: Set<string>;
|
|
@@ -29,17 +30,19 @@ export declare function loadStoredVectors(hippoRoot: string, ids: readonly strin
|
|
|
29
30
|
export declare function loadStoredVectorViews(hippoRoot: string, ids: readonly string[]): Map<string, Float32Array>;
|
|
30
31
|
/** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
|
|
31
32
|
export declare function saveEmbeddingIndex(hippoRoot: string, index: Record<string, number[]>, model?: string): void;
|
|
32
|
-
/** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how
|
|
33
|
+
/** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how
|
|
34
|
+
* many it wrote. */
|
|
33
35
|
export declare function saveStoredVectors(hippoRoot: string, rows: Iterable<readonly [string, readonly number[]]>, model: string): number;
|
|
34
|
-
/** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids
|
|
35
|
-
export declare function
|
|
36
|
+
/** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids with no vector, oldest first. */
|
|
37
|
+
export declare function pruneStoredVectorsListPending(hippoRoot: string): string[];
|
|
36
38
|
export declare function entriesWithoutVectorAt(db: DatabaseSyncLike, query: VectorBackfillQuery): MemoryEntry[];
|
|
37
39
|
export declare function writeVectorsAt(db: DatabaseSyncLike, write: VectorWrite): VectorWriteResult;
|
|
38
40
|
/** Every particle stored under `hippoRoot`. */
|
|
39
41
|
export declare function loadStoredParticles(hippoRoot: string): PhysicsParticle[];
|
|
40
42
|
/** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
|
|
41
43
|
export declare function saveStoredParticles(hippoRoot: string, particles: PhysicsParticle[]): void;
|
|
42
|
-
/** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how
|
|
44
|
+
/** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how
|
|
45
|
+
* many. Rows are read a page at a time. */
|
|
43
46
|
export declare function resetStoredParticles(hippoRoot: string, ids: readonly string[], embeddingIndex: Record<string, number[]>): number;
|
|
44
47
|
/** Stores a first particle for `entry`, placed at `vector`; a memory that has one keeps it. */
|
|
45
48
|
export declare function seedStoredParticle(hippoRoot: string, entry: MemoryEntry, vector: number[]): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// Owns hippo.db's stored vectors, the identity of the model that built them, and the particle rows: every read and
|
|
1
|
+
// Owns hippo.db's stored vectors, the identity of the model that built them, and the particle rows: every read and
|
|
2
|
+
// write of the three.
|
|
2
3
|
import { getMeta, setMeta, withWriteScope } from '../db/index.js';
|
|
3
4
|
import { onHandle } from './open.js';
|
|
4
5
|
import { DEFAULT_EMBEDDING_MODEL } from '../embeddings/local.js';
|
|
@@ -38,7 +39,8 @@ export function saveIndexIdentity(hippoRoot, identity) {
|
|
|
38
39
|
setMeta(db, EMBEDDING_MODEL_META_KEY, identity);
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
|
-
/** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via
|
|
42
|
+
/** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via
|
|
43
|
+
* `loadStoredVectors`. */
|
|
42
44
|
export function loadEmbeddingIndex(hippoRoot) {
|
|
43
45
|
return onHandle(hippoRoot, (db) => {
|
|
44
46
|
return Object.fromEntries(loadVectors(db));
|
|
@@ -72,17 +74,24 @@ export function saveEmbeddingIndex(hippoRoot, index, model) {
|
|
|
72
74
|
replaceAllVectors(db, index, model ?? getMeta(db, EMBEDDING_MODEL_META_KEY, ''));
|
|
73
75
|
});
|
|
74
76
|
}
|
|
75
|
-
/** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how
|
|
77
|
+
/** Inserts or replaces `rows` under `model`, each row its own commit so a failure keeps the rows before it; returns how
|
|
78
|
+
* many it wrote. */
|
|
76
79
|
export function saveStoredVectors(hippoRoot, rows, model) {
|
|
77
80
|
return onHandle(hippoRoot, (db) => {
|
|
78
81
|
return upsertVectors(db, rows, model);
|
|
79
82
|
});
|
|
80
83
|
}
|
|
81
|
-
/** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids
|
|
82
|
-
export function
|
|
84
|
+
/** Drops the vectors of deleted memories under `hippoRoot`, then returns the ids with no vector, oldest first. */
|
|
85
|
+
export function pruneStoredVectorsListPending(hippoRoot) {
|
|
83
86
|
return onHandle(hippoRoot, (db) => {
|
|
84
87
|
deleteOrphanVectors(db);
|
|
85
|
-
|
|
88
|
+
// SAFETY: the SELECT names exactly the one column read.
|
|
89
|
+
const rows = db
|
|
90
|
+
.prepare(`SELECT id FROM memories
|
|
91
|
+
WHERE NOT EXISTS (SELECT 1 FROM memory_vectors v WHERE v.memory_id = memories.id)
|
|
92
|
+
ORDER BY created ASC, id ASC`)
|
|
93
|
+
.all();
|
|
94
|
+
return rows.map((r) => r.id);
|
|
86
95
|
});
|
|
87
96
|
}
|
|
88
97
|
export function entriesWithoutVectorAt(db, query) {
|
|
@@ -101,21 +110,25 @@ function ownedIds(db, ids, tenantId) {
|
|
|
101
110
|
const owned = new Set();
|
|
102
111
|
for (const chunk of chunked([...new Set(ids)])) {
|
|
103
112
|
// SAFETY: the SELECT names one column, id.
|
|
104
|
-
const rows = db
|
|
113
|
+
const rows = db
|
|
114
|
+
.prepare(`SELECT id FROM memories WHERE +tenant_id = ? AND id IN (${placeholders(chunk.length)})`)
|
|
115
|
+
.all(tenantId, ...chunk);
|
|
105
116
|
for (const row of rows)
|
|
106
117
|
owned.add(row.id);
|
|
107
118
|
}
|
|
108
119
|
return owned;
|
|
109
120
|
}
|
|
110
|
-
// savePhysicsState opens its own transaction and overwrites, so the first particle for a memory is inserted here
|
|
121
|
+
// savePhysicsState opens its own transaction and overwrites, so the first particle for a memory is inserted here
|
|
122
|
+
// instead.
|
|
111
123
|
function insertNewParticles(db, rows) {
|
|
112
124
|
const stmt = db.prepare(`
|
|
113
125
|
INSERT INTO memory_physics (memory_id, position_blob, velocity_blob, mass, charge, temperature, last_simulation)
|
|
114
126
|
VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(memory_id) DO NOTHING
|
|
115
127
|
`);
|
|
116
128
|
for (const { memoryId, particle: p } of rows) {
|
|
117
|
-
if (p)
|
|
129
|
+
if (p) {
|
|
118
130
|
stmt.run(memoryId, float32ToBuffer(p.position), float32ToBuffer(p.velocity), p.mass, p.charge, p.temperature, p.lastSimulation);
|
|
131
|
+
}
|
|
119
132
|
}
|
|
120
133
|
}
|
|
121
134
|
export function writeVectorsAt(db, write) {
|
|
@@ -158,7 +171,8 @@ function* entriesInPages(db, ids) {
|
|
|
158
171
|
}
|
|
159
172
|
}
|
|
160
173
|
}
|
|
161
|
-
/** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how
|
|
174
|
+
/** Replaces every particle under `hippoRoot` with a fresh one per memory in `ids` that has an embedding; returns how
|
|
175
|
+
* many. Rows are read a page at a time. */
|
|
162
176
|
export function resetStoredParticles(hippoRoot, ids, embeddingIndex) {
|
|
163
177
|
return onHandle(hippoRoot, (db) => {
|
|
164
178
|
return resetAllPhysicsState(db, entriesInPages(db, ids), embeddingIndex);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/** Working Memory: bounded buffer for current-state notes, separate from long-term memory; scoped, importance-ranked,
|
|
1
|
+
/** Working Memory: bounded buffer for current-state notes, separate from long-term memory; scoped, importance-ranked,
|
|
2
|
+
* evicted past WM_MAX_ENTRIES per scope. */
|
|
2
3
|
import type { JsonValue } from '../util/json.js';
|
|
3
4
|
export declare const WM_MAX_ENTRIES = 20;
|
|
4
5
|
export type JsonObject = {
|
|
@@ -15,8 +16,8 @@ export interface WorkingMemoryItem {
|
|
|
15
16
|
createdAt: string;
|
|
16
17
|
updatedAt: string;
|
|
17
18
|
}
|
|
18
|
-
/** Push a new entry into working memory; past WM_MAX_ENTRIES the scope's lowest-importance entry is evicted (ties:
|
|
19
|
-
* row ID. */
|
|
19
|
+
/** Push a new entry into working memory; past WM_MAX_ENTRIES the scope's lowest-importance entry is evicted (ties:
|
|
20
|
+
* oldest created_at). Returns the new row ID. */
|
|
20
21
|
export declare function wmPush(hippoRoot: string, opts: {
|
|
21
22
|
scope: string;
|
|
22
23
|
content: string;
|
|
@@ -39,7 +40,8 @@ export declare function wmClear(hippoRoot: string, opts?: {
|
|
|
39
40
|
sessionId?: string;
|
|
40
41
|
tenantId?: string;
|
|
41
42
|
}): number;
|
|
42
|
-
/** Flush working memory after session end: same as wmClear, but marks the session-boundary discard of ephemeral state.
|
|
43
|
+
/** Flush working memory after session end: same as wmClear, but marks the session-boundary discard of ephemeral state.
|
|
44
|
+
* Returns the count flushed. */
|
|
43
45
|
export declare function wmFlush(hippoRoot: string, opts?: {
|
|
44
46
|
scope?: string;
|
|
45
47
|
sessionId?: string;
|