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
|
@@ -15,11 +15,23 @@ import { onHandle, openStore } from './open.js';
|
|
|
15
15
|
import { clock } from '../util/write-budget.js';
|
|
16
16
|
import { chunked } from '../util/chunked.js';
|
|
17
17
|
import { placeholders } from '../util/sql.js';
|
|
18
|
-
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL);
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL);
|
|
19
|
+
* tests/dormant-memories.test.ts pins it to the schema. */
|
|
20
|
+
export const MEMORY_BACKED_TABLES = [
|
|
21
|
+
'predictions',
|
|
22
|
+
'decisions',
|
|
23
|
+
'incidents',
|
|
24
|
+
'processes',
|
|
25
|
+
'policies',
|
|
26
|
+
'skills',
|
|
27
|
+
'project_briefs',
|
|
28
|
+
'customer_notes',
|
|
29
|
+
];
|
|
30
|
+
/** Deleting a memory that backs an object nulls the object's link, and no restore can repair it, so no automatic pass
|
|
31
|
+
* may. */
|
|
21
32
|
const AUTOMATIC_DELETE_SQL = `${AUTO_DELETABLE_SQL}${MEMORY_BACKED_TABLES.map((t) => ` AND NOT EXISTS (SELECT 1 FROM ${t} WHERE ${t}.memory_id = memories.id)`).join('')}`;
|
|
22
|
-
/** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing
|
|
33
|
+
/** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing
|
|
34
|
+
* from an older schema is skipped. */
|
|
23
35
|
export function memoriesBackingObjects(hippoRoot) {
|
|
24
36
|
return onHandle(hippoRoot, (db) => {
|
|
25
37
|
return memoriesBackingObjectsOn(db);
|
|
@@ -57,8 +69,9 @@ function deleteMemoryRow(db, sql, id) {
|
|
|
57
69
|
throw isRawTriggerAbort(cause) ? new RawAppendOnlyError(cause) : cause;
|
|
58
70
|
}
|
|
59
71
|
}
|
|
60
|
-
/** db-scoped delete core, composable inside a caller's transaction; NO filesystem I/O, mirrors are written post-commit.
|
|
61
|
-
* rejectValue and resolveConflict (own audit row). Returns `{tenantId, dagParentId}`,
|
|
72
|
+
/** db-scoped delete core, composable inside a caller's transaction; NO filesystem I/O, mirrors are written post-commit.
|
|
73
|
+
* `suppressForgetAudit` is set by rejectValue and resolveConflict (own audit row). Returns `{tenantId, dagParentId}`,
|
|
74
|
+
* or null if absent or `automatic` refused it. */
|
|
62
75
|
export function deleteEntryCore(db, id, opts) {
|
|
63
76
|
// SAFETY: row's shape matches the three columns named in the SELECT above.
|
|
64
77
|
const row = db
|
|
@@ -73,7 +86,12 @@ function deleteTargetRow(db, row, opts) {
|
|
|
73
86
|
return null;
|
|
74
87
|
deleteFtsRow(db, id);
|
|
75
88
|
if (!opts?.suppressForgetAudit) {
|
|
76
|
-
audit(db, 'forget', {
|
|
89
|
+
audit(db, 'forget', {
|
|
90
|
+
targetId: id,
|
|
91
|
+
metadata: opts?.reason ? { reason: opts.reason } : undefined,
|
|
92
|
+
actor: opts?.actor ?? 'cli',
|
|
93
|
+
tenantId: row.tenant_id,
|
|
94
|
+
});
|
|
77
95
|
}
|
|
78
96
|
// Forgetting a child of a summary marks the parent dirty. Not atomic with the DELETE, but
|
|
79
97
|
// markSummaryDirtyInTx is idempotent, so the next child mutation re-marks the parent if this fails.
|
|
@@ -83,13 +101,15 @@ function deleteTargetRow(db, row, opts) {
|
|
|
83
101
|
return { tenantId: row.tenant_id ?? DEFAULT_TENANT_ID, dagParentId: row.dag_parent_id ?? null };
|
|
84
102
|
}
|
|
85
103
|
/** Delete an entry from SQLite and mirrors; thin wrapper over `deleteEntryCore` (open, core, mirrors, close).
|
|
86
|
-
* `opts.actor` defaults to 'cli'; the api layer threads `ctx.actor` so HTTP callers land as `api_key:<key_id>` in the
|
|
104
|
+
* `opts.actor` defaults to 'cli'; the api layer threads `ctx.actor` so HTTP callers land as `api_key:<key_id>` in the
|
|
105
|
+
* audit log. */
|
|
87
106
|
export function deleteEntry(hippoRoot, id, opts) {
|
|
88
107
|
return onHandle(hippoRoot, (db) => {
|
|
89
108
|
return deleteEntryOn(db, hippoRoot, id, opts);
|
|
90
109
|
}, openStore);
|
|
91
110
|
}
|
|
92
|
-
/** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits
|
|
111
|
+
/** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits
|
|
112
|
+
* alone. */
|
|
93
113
|
function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
94
114
|
const result = withWriteScope(db, 'delete_entry', () => deleteEntryCore(db, id, opts));
|
|
95
115
|
if (!result)
|
|
@@ -97,8 +117,9 @@ function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
|
97
117
|
purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
|
|
98
118
|
return true;
|
|
99
119
|
}
|
|
100
|
-
/** deleteEntry with `automatic` for each removal and its own forget row and reason, all in one transaction after one
|
|
101
|
-
*
|
|
120
|
+
/** deleteEntry with `automatic` for each removal and its own forget row and reason, all in one transaction after one
|
|
121
|
+
* read of the id set. Returns the ids deleted, in `removals` order; a missing, repeated, pinned, raw or object-backing
|
|
122
|
+
* id is left out. */
|
|
102
123
|
export function deleteEntriesAutomatically(hippoRoot, removals, actor) {
|
|
103
124
|
if (removals.length === 0)
|
|
104
125
|
return [];
|
|
@@ -119,7 +140,8 @@ function selectDeleteTargets(db, ids) {
|
|
|
119
140
|
const rows = new Map();
|
|
120
141
|
for (const chunk of chunked([...new Set(ids)])) {
|
|
121
142
|
// SAFETY: rows' shape matches the three columns named in the SELECT.
|
|
122
|
-
const found = db
|
|
143
|
+
const found = db
|
|
144
|
+
.prepare(`SELECT id, tenant_id, dag_parent_id FROM memories WHERE id IN (${placeholders(chunk.length)})`)
|
|
123
145
|
.all(...chunk);
|
|
124
146
|
for (const row of found)
|
|
125
147
|
rows.set(row.id, row);
|
|
@@ -137,8 +159,9 @@ function mergeOwnChanges(base, ours, live) {
|
|
|
137
159
|
}
|
|
138
160
|
return row;
|
|
139
161
|
}
|
|
140
|
-
/** Writes, deletes and dormant moves in one transaction. With `snapshot`, a write keeps only the fields the caller
|
|
141
|
-
* Dormant moves (src/store/dormant.ts) leave `memories` like a delete; both
|
|
162
|
+
/** Writes, deletes and dormant moves in one transaction. With `snapshot`, a write keeps only the fields the caller
|
|
163
|
+
* changed and never resurrects a gone row. Dormant moves (src/store/dormant.ts) leave `memories` like a delete; both
|
|
164
|
+
* skip rows no longer auto-deletable. Returns ids that left `memories`. */
|
|
142
165
|
export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
|
|
143
166
|
const dormant = opts?.dormant ?? [];
|
|
144
167
|
if (toWrite.length === 0 && toDeleteIds.length === 0 && dormant.length === 0)
|
|
@@ -150,7 +173,8 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
|
|
|
150
173
|
}, openStore);
|
|
151
174
|
}
|
|
152
175
|
const failedUnits = new WeakMap();
|
|
153
|
-
/** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag
|
|
176
|
+
/** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag
|
|
177
|
+
* wins. */
|
|
154
178
|
function noteFailedUnit(err, component) {
|
|
155
179
|
if (!component || failedUnits.has(err))
|
|
156
180
|
return;
|
|
@@ -161,8 +185,9 @@ function noteFailedUnit(err, component) {
|
|
|
161
185
|
export function failedUnitOf(err) {
|
|
162
186
|
return err ? failedUnits.get(err) : undefined;
|
|
163
187
|
}
|
|
164
|
-
/** batchWriteAndDelete on the caller's open store from component `from`, each component whole, closing the transaction
|
|
165
|
-
*
|
|
188
|
+
/** batchWriteAndDelete on the caller's open store from component `from`, each component whole, closing the transaction
|
|
189
|
+
* at the first component boundary after `holdMs`. Returns the next component's index and the ids that left
|
|
190
|
+
* `memories`. */
|
|
166
191
|
function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
167
192
|
const now = opts.clock ?? clock;
|
|
168
193
|
const out = {
|
|
@@ -199,7 +224,8 @@ function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
|
199
224
|
reportChunk(hippoRoot, out);
|
|
200
225
|
return { next, removedIds: out.removedIds };
|
|
201
226
|
}
|
|
202
|
-
/** One component in the open transaction, in the order a single batch always ran: pin-checked deletes, writes, dormant
|
|
227
|
+
/** One component in the open transaction, in the order a single batch always ran: pin-checked deletes, writes, dormant
|
|
228
|
+
* moves, row deletes. */
|
|
203
229
|
function applyComponent(db, hippoRoot, component, snapshot, out) {
|
|
204
230
|
// Snapshot every doomed row's dag_parent_id before the deletes: consolidation flushes through here
|
|
205
231
|
// every cycle, so without it parents would never be marked dirty for decay, merge or garbage-collect.
|
|
@@ -218,7 +244,8 @@ function applyComponent(db, hippoRoot, component, snapshot, out) {
|
|
|
218
244
|
/** After COMMIT: warn about refused writes, then sync mirrors once for what landed. */
|
|
219
245
|
function reportChunk(hippoRoot, out) {
|
|
220
246
|
if (out.rejectedSkips > 0) {
|
|
221
|
-
log.warn(`batchWriteAndDelete: skipped ${out.rejectedSkips} write(s) whose content matches a rejected value (tombstone
|
|
247
|
+
log.warn(`batchWriteAndDelete: skipped ${out.rejectedSkips} write(s) whose content matches a rejected value (tombstone ` +
|
|
248
|
+
`hit during the batch transaction)`);
|
|
222
249
|
}
|
|
223
250
|
// A skipped write never landed, so mirroring it would resurrect the text the skip kept out of the DB.
|
|
224
251
|
mirrorBestEffort('markdown mirrors', () => {
|
|
@@ -246,10 +273,14 @@ function moveDormantAndDelete(db, dormantMoves, deletableIds, out) {
|
|
|
246
273
|
out.removedIds.push(id);
|
|
247
274
|
}
|
|
248
275
|
}
|
|
249
|
-
/** The still auto-deletable rows among `ids`, recording each one's DAG parent as dirty. Placeholders come from `ids`
|
|
276
|
+
/** The still auto-deletable rows among `ids`, recording each one's DAG parent as dirty. Placeholders come from `ids`
|
|
277
|
+
* itself. */
|
|
250
278
|
function selectAutoDeletableRows(db, ids, dirty) {
|
|
251
279
|
// SAFETY: rows' shape matches the three columns named in the SELECT.
|
|
252
|
-
const rows = db
|
|
280
|
+
const rows = db
|
|
281
|
+
.prepare(`SELECT id, dag_parent_id, tenant_id FROM memories WHERE id IN (${placeholders(ids.length)}) AND ` +
|
|
282
|
+
`${AUTOMATIC_DELETE_SQL}`)
|
|
283
|
+
.all(...ids);
|
|
253
284
|
for (const row of rows) {
|
|
254
285
|
if (row.dag_parent_id) {
|
|
255
286
|
dirty.parents.add(row.dag_parent_id);
|
|
@@ -285,7 +316,8 @@ function applyBatchWrites(db, stampedWrites, snapshot, out) {
|
|
|
285
316
|
if (live)
|
|
286
317
|
fts.staleIds.push(row.id);
|
|
287
318
|
}
|
|
288
|
-
// Hook for writes: a new child, or a change to what its summary reads, marks the parent dirty; decay alone does
|
|
319
|
+
// Hook for writes: a new child, or a change to what its summary reads, marks the parent dirty; decay alone does
|
|
320
|
+
// not.
|
|
289
321
|
if (row.dag_parent_id && (!live || SUMMARY_INPUTS.some((k) => row[k] !== live[k]))) {
|
|
290
322
|
dirty.parents.add(row.dag_parent_id);
|
|
291
323
|
dirty.tenantById.set(row.dag_parent_id, row.tenant_id);
|
|
@@ -302,7 +334,12 @@ function isRejectedBatchWrite(db, row) {
|
|
|
302
334
|
}
|
|
303
335
|
catch (err) {
|
|
304
336
|
if (err instanceof RejectedValueError) {
|
|
305
|
-
audit(db, 'reject_refusal', {
|
|
337
|
+
audit(db, 'reject_refusal', {
|
|
338
|
+
targetId: row.id,
|
|
339
|
+
metadata: { digest: err.digest, reason: err.reason },
|
|
340
|
+
actor: 'sleep-batch',
|
|
341
|
+
tenantId: entryTenantId,
|
|
342
|
+
});
|
|
306
343
|
return true;
|
|
307
344
|
}
|
|
308
345
|
throw err;
|
|
@@ -317,8 +354,8 @@ export function deleteEntriesOneByOne(hippoRoot, targets, opts) {
|
|
|
317
354
|
return targets.map((target) => deleteEntryOn(db, hippoRoot, target.id, { ...opts, reason: target.reason }));
|
|
318
355
|
}, openStore);
|
|
319
356
|
}
|
|
320
|
-
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids
|
|
321
|
-
* The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
357
|
+
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids
|
|
358
|
+
* that left `memories`. The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
322
359
|
export async function commitInChunks(hippoRoot, components, opts) {
|
|
323
360
|
if (components.length === 0)
|
|
324
361
|
return [];
|
|
@@ -332,7 +369,11 @@ export async function commitInChunks(hippoRoot, components, opts) {
|
|
|
332
369
|
while (next < components.length) {
|
|
333
370
|
if (next > 0)
|
|
334
371
|
await budget.pause(committedAt);
|
|
335
|
-
const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, {
|
|
372
|
+
const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, {
|
|
373
|
+
snapshot,
|
|
374
|
+
holdMs: budget.holdMs,
|
|
375
|
+
clock: budget.clock,
|
|
376
|
+
});
|
|
336
377
|
committedAt = budget.clock();
|
|
337
378
|
next = chunk.next;
|
|
338
379
|
for (const id of chunk.removedIds)
|
|
@@ -12,8 +12,8 @@ export type DeliveryPool = 'pin' | 'recent' | 'prompt-recall' | 'strength' | 'se
|
|
|
12
12
|
export type DeliveryStage = 'load' | 'eligible' | 'gate' | 'budget' | 'limit' | 'final';
|
|
13
13
|
export type DeliveryOutcome = 'emitted' | 'reused' | 'rejected';
|
|
14
14
|
export type DeliveryRejectReason = 'budget' | 'gate-below-threshold' | 'gate-max-items' | 'duplicate' | 'scope' | 'quality' | 'limit';
|
|
15
|
-
/** Row format version in `delivery_events.ledger_version`: 4 = written by a binary that can write `tool-failure` rows
|
|
16
|
-
* store's resolved root. */
|
|
15
|
+
/** Row format version in `delivery_events.ledger_version`: 4 = written by a binary that can write `tool-failure` rows
|
|
16
|
+
* and hashes the store's resolved root. */
|
|
17
17
|
export declare const DELIVERY_LEDGER_VERSION = 4;
|
|
18
18
|
/** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
|
|
19
19
|
export declare const DELIVERY_REJECTED_ROW_CAP = 16;
|
|
@@ -87,7 +87,8 @@ export interface DeliveryObserver {
|
|
|
87
87
|
sections(shown: number, dropped: number): void;
|
|
88
88
|
/** Returns `admit`'s own answer unchanged and lets its throws through. */
|
|
89
89
|
watchAdmit(admit: (e: MemoryEntry) => boolean): (e: MemoryEntry) => boolean;
|
|
90
|
-
/** The loader's quality floor dropped a row admit let through; with prompt recall on, eligibility reports it
|
|
90
|
+
/** The loader's quality floor dropped a row admit let through; with prompt recall on, eligibility reports it
|
|
91
|
+
* instead. */
|
|
91
92
|
qualityDropped(entry: MemoryEntry, isGlobal: boolean): void;
|
|
92
93
|
disabled(): void;
|
|
93
94
|
/** No `pool` means pin or recent by the entry's own flag. */
|
|
@@ -123,7 +124,8 @@ export interface DeliveryRecorder extends DeliveryObserver {
|
|
|
123
124
|
delivered(outcome: DeliveryOutcomeInput): void;
|
|
124
125
|
/** The failure log row id a `tool-failure` event links to; null when the log write threw. */
|
|
125
126
|
logged(failureId: number | null): void;
|
|
126
|
-
/** Builds the event and hands it to `write` once per call; throws on an injected fault, and writes nothing once
|
|
127
|
+
/** Builds the event and hands it to `write` once per call; throws on an injected fault, and writes nothing once
|
|
128
|
+
* broken. */
|
|
127
129
|
flush(write: (input: DeliveryEventInput) => number | null): void;
|
|
128
130
|
}
|
|
129
131
|
export interface DeliveryRecorderInit {
|
|
@@ -134,7 +136,8 @@ export interface DeliveryRecorderInit {
|
|
|
134
136
|
tenantId: string;
|
|
135
137
|
stdinText?: string;
|
|
136
138
|
envSessionId?: string;
|
|
137
|
-
/** Set by the caller's runtime flag; Copilot payloads carry hook_event_name too, so inference would say
|
|
139
|
+
/** Set by the caller's runtime flag; Copilot payloads carry hook_event_name too, so inference would say
|
|
140
|
+
* claude-code. */
|
|
138
141
|
runtime?: DeliveryRuntime;
|
|
139
142
|
/** Set by hooks that are not prompt or context calls; without it the payload's hook event decides. */
|
|
140
143
|
eventType?: DeliveryEventType;
|
|
@@ -7,8 +7,8 @@ import { errorMessage, log } from '../util/log.js';
|
|
|
7
7
|
export const isBoundaryEvent = (type) => type === 'pre-compact' || type === 'compact-resume' || type === 'session-end';
|
|
8
8
|
/** Only the per-prompt calls keep prompt facts; a boundary or a `hippo context` run is not a prompt. */
|
|
9
9
|
const carriesPrompt = (type) => type === 'prompt-submit' || type === 'pinned-manual';
|
|
10
|
-
/** Row format version in `delivery_events.ledger_version`: 4 = written by a binary that can write `tool-failure` rows
|
|
11
|
-
* store's resolved root. */
|
|
10
|
+
/** Row format version in `delivery_events.ledger_version`: 4 = written by a binary that can write `tool-failure` rows
|
|
11
|
+
* and hashes the store's resolved root. */
|
|
12
12
|
export const DELIVERY_LEDGER_VERSION = 4;
|
|
13
13
|
/** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
|
|
14
14
|
export const DELIVERY_REJECTED_ROW_CAP = 16;
|
|
@@ -145,37 +145,52 @@ function buildEvent(init, payload, state, ts, startedMs) {
|
|
|
145
145
|
candidates: rows,
|
|
146
146
|
};
|
|
147
147
|
}
|
|
148
|
+
function markQualityDropped(state, ...[e, isGlobal]) {
|
|
149
|
+
state.filtered.add(e.id);
|
|
150
|
+
if (!state.candidates.has(e.id)) {
|
|
151
|
+
state.candidates.set(e.id, {
|
|
152
|
+
id: e.id,
|
|
153
|
+
sourceStore: storeOf(isGlobal),
|
|
154
|
+
pool: 'recent',
|
|
155
|
+
stage: null,
|
|
156
|
+
reason: null,
|
|
157
|
+
score: null,
|
|
158
|
+
tokens: null,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
rejectId(state, e.id, { stage: 'load', reason: 'quality', score: null, tokens: null });
|
|
162
|
+
}
|
|
163
|
+
function offerEntries(state, ...[entries, isGlobal, pool]) {
|
|
164
|
+
for (const e of entries) {
|
|
165
|
+
const held = state.candidates.get(e.id);
|
|
166
|
+
const wanted = pool ?? (e.pinned ? 'pin' : 'recent');
|
|
167
|
+
// A loaded recent row the prompt-recall gate then judges belongs to that pool.
|
|
168
|
+
const relabel = held !== undefined && held.reason === null && held.pool === 'recent' && wanted === 'prompt-recall';
|
|
169
|
+
if (held !== undefined && !relabel)
|
|
170
|
+
continue;
|
|
171
|
+
state.candidates.set(e.id, {
|
|
172
|
+
id: e.id,
|
|
173
|
+
sourceStore: storeOf(isGlobal),
|
|
174
|
+
pool: wanted,
|
|
175
|
+
stage: null,
|
|
176
|
+
reason: null,
|
|
177
|
+
score: null,
|
|
178
|
+
tokens: null,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
148
182
|
/** The candidate-tracking half of the observer, each method run through `guard`. */
|
|
149
183
|
function candidateMethods(state, guard) {
|
|
150
184
|
return {
|
|
151
|
-
qualityDropped: (
|
|
152
|
-
|
|
153
|
-
if (!state.candidates.has(e.id)) {
|
|
154
|
-
state.candidates.set(e.id, {
|
|
155
|
-
id: e.id, sourceStore: storeOf(isGlobal), pool: 'recent', stage: null, reason: null, score: null, tokens: null,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
rejectId(state, e.id, { stage: 'load', reason: 'quality', score: null, tokens: null });
|
|
159
|
-
}),
|
|
160
|
-
offer: (entries, isGlobal, pool) => guard(() => {
|
|
161
|
-
for (const e of entries) {
|
|
162
|
-
const held = state.candidates.get(e.id);
|
|
163
|
-
const wanted = pool ?? (e.pinned ? 'pin' : 'recent');
|
|
164
|
-
// A loaded recent row the prompt-recall gate then judges belongs to that pool.
|
|
165
|
-
const relabel = held !== undefined && held.reason === null && held.pool === 'recent' && wanted === 'prompt-recall';
|
|
166
|
-
if (held !== undefined && !relabel)
|
|
167
|
-
continue;
|
|
168
|
-
state.candidates.set(e.id, {
|
|
169
|
-
id: e.id, sourceStore: storeOf(isGlobal), pool: wanted, stage: null, reason: null, score: null, tokens: null,
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}),
|
|
185
|
+
qualityDropped: (...args) => guard(() => markQualityDropped(state, ...args)),
|
|
186
|
+
offer: (...args) => guard(() => offerEntries(state, ...args)),
|
|
173
187
|
reject: (e, stage, reason, score, tokens) => guard(() => rejectId(state, e.id, { stage, reason, score: score ?? null, tokens: tokens ?? null })),
|
|
174
188
|
dropMissing: (before, after, stage, reason) => guard(() => {
|
|
175
189
|
const kept = new Set(after.map((e) => e.id));
|
|
176
|
-
for (const e of before)
|
|
190
|
+
for (const e of before) {
|
|
177
191
|
if (!kept.has(e.id))
|
|
178
192
|
rejectId(state, e.id, { stage, reason, score: null, tokens: null });
|
|
193
|
+
}
|
|
179
194
|
}),
|
|
180
195
|
gated: (prompt, items, gate, kept) => guard(() => {
|
|
181
196
|
const keptIds = new Set(kept.map((g) => g.item.id));
|
|
@@ -184,30 +199,53 @@ function candidateMethods(state, guard) {
|
|
|
184
199
|
continue;
|
|
185
200
|
const { score, shared } = scoreOverlap(prompt, c.tokens, gate.metric);
|
|
186
201
|
const cleared = score >= gate.threshold && shared >= gate.minShared;
|
|
187
|
-
rejectId(state, c.id, {
|
|
202
|
+
rejectId(state, c.id, {
|
|
203
|
+
stage: 'gate',
|
|
204
|
+
reason: cleared ? 'gate-max-items' : 'gate-below-threshold',
|
|
205
|
+
score,
|
|
206
|
+
tokens: null,
|
|
207
|
+
});
|
|
188
208
|
}
|
|
189
209
|
}),
|
|
190
210
|
selected: (items) => guard(() => {
|
|
191
211
|
state.picked.clear();
|
|
192
212
|
items.forEach((r, i) => {
|
|
193
213
|
state.picked.set(r.entry.id, {
|
|
194
|
-
entry: r.entry,
|
|
195
|
-
|
|
214
|
+
entry: r.entry,
|
|
215
|
+
rank: i + 1,
|
|
216
|
+
score: r.score,
|
|
217
|
+
tokens: r.tokens,
|
|
218
|
+
sourceStore: storeOf(r.isGlobal),
|
|
219
|
+
promptRecall: r.promptRecall === true,
|
|
196
220
|
});
|
|
197
221
|
});
|
|
198
222
|
}),
|
|
199
223
|
};
|
|
200
224
|
}
|
|
225
|
+
function newRecorderState() {
|
|
226
|
+
return {
|
|
227
|
+
candidates: new Map(),
|
|
228
|
+
picked: new Map(),
|
|
229
|
+
filtered: new Set(),
|
|
230
|
+
facts: null,
|
|
231
|
+
shown: 0,
|
|
232
|
+
dropped: 0,
|
|
233
|
+
disabledSeen: false,
|
|
234
|
+
outcome: { state: 'empty' },
|
|
235
|
+
queryHash: null,
|
|
236
|
+
recallTraceId: null,
|
|
237
|
+
failureId: null,
|
|
238
|
+
broken: null,
|
|
239
|
+
flushed: false,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
201
242
|
/** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
|
|
202
243
|
export function createDeliveryRecorder(init) {
|
|
203
244
|
const startedMs = Date.now();
|
|
204
245
|
const ts = evalNow().toISOString();
|
|
205
246
|
const fault = init.fault ?? null;
|
|
206
247
|
const payload = readPayload(init);
|
|
207
|
-
const state =
|
|
208
|
-
candidates: new Map(), picked: new Map(), filtered: new Set(), facts: null, shown: 0, dropped: 0,
|
|
209
|
-
disabledSeen: false, outcome: { state: 'empty' }, queryHash: null, recallTraceId: null, failureId: null, broken: null, flushed: false,
|
|
210
|
-
};
|
|
248
|
+
const state = newRecorderState();
|
|
211
249
|
const guard = guardFor(state, fault);
|
|
212
250
|
const { qualityDropped, offer, reject, dropMissing, gated, selected } = candidateMethods(state, guard);
|
|
213
251
|
return {
|
|
@@ -7,6 +7,7 @@ export interface PagedWalk {
|
|
|
7
7
|
readonly depth: number;
|
|
8
8
|
readonly page: DescendantPage;
|
|
9
9
|
}
|
|
10
|
-
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full
|
|
10
|
+
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full
|
|
11
|
+
* count in `sizes`. */
|
|
11
12
|
export declare function pagedDescendants(db: DatabaseSyncLike, walk: PagedWalk, summaryAdmitted: boolean): SummaryDescendants;
|
|
12
13
|
//# sourceMappingURL=descendant-page.d.ts.map
|
|
@@ -3,7 +3,8 @@ import { chunked } from '../util/chunked.js';
|
|
|
3
3
|
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
4
4
|
import { placeholders } from '../util/sql.js';
|
|
5
5
|
const marks = (ids) => placeholders(ids.length);
|
|
6
|
-
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full
|
|
6
|
+
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full
|
|
7
|
+
* count in `sizes`. */
|
|
7
8
|
export function pagedDescendants(db, walk, summaryAdmitted) {
|
|
8
9
|
const sizes = [];
|
|
9
10
|
const levels = [];
|
|
@@ -27,7 +28,10 @@ function keyedLevel(db, walk, parents, at) {
|
|
|
27
28
|
const byParent = new Map();
|
|
28
29
|
for (const chunk of chunked([...parents])) {
|
|
29
30
|
// SAFETY: the SELECT names exactly ChildKey's four columns, and the WHERE keeps dag_parent_id a string.
|
|
30
|
-
const keys = db
|
|
31
|
+
const keys = db
|
|
32
|
+
.prepare(`SELECT id, dag_parent_id, scope, origin_project FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ` +
|
|
33
|
+
`${TENANT_IS} ORDER BY created ASC, id ASC`)
|
|
34
|
+
.all(...chunk, walk.tenantId);
|
|
31
35
|
for (const key of keys) {
|
|
32
36
|
const bucket = byParent.get(key.dag_parent_id);
|
|
33
37
|
if (bucket)
|
|
@@ -49,14 +53,18 @@ function keyedLevel(db, walk, parents, at) {
|
|
|
49
53
|
const whole = selectEntriesByIds(db, shown, walk.tenantId);
|
|
50
54
|
return { ids, size: ids.length, rows: shown.flatMap((id) => whole.get(id) ?? []) };
|
|
51
55
|
}
|
|
52
|
-
/** The last level counted in SQL and read up to `room` rows; null when a row there is refused, which only the keyed
|
|
53
|
-
*
|
|
56
|
+
/** The last level counted in SQL and read up to `room` rows; null when a row there is refused, which only the keyed
|
|
57
|
+
* read can leave out. A row has one parent and a parent is read at one level, so the summary is the only row an earlier
|
|
58
|
+
* level can already hold. */
|
|
54
59
|
function countedLevel(db, walk, parents, room) {
|
|
55
60
|
const perParent = new Map();
|
|
56
61
|
for (const chunk of chunked([...parents])) {
|
|
57
62
|
// SAFETY: the SELECT names exactly ChildGroup's four fields, and the WHERE keeps dag_parent_id a string.
|
|
58
|
-
const groups = db
|
|
59
|
-
`
|
|
63
|
+
const groups = db
|
|
64
|
+
.prepare(`SELECT dag_parent_id, scope, origin_project, COUNT(*) AS n FROM memories ` +
|
|
65
|
+
`WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? GROUP BY dag_parent_id, scope, ` +
|
|
66
|
+
`origin_project`)
|
|
67
|
+
.all(...chunk, walk.tenantId, walk.summary.id);
|
|
60
68
|
for (const group of groups) {
|
|
61
69
|
if (!walk.page.admit(group))
|
|
62
70
|
return null;
|
|
@@ -66,7 +74,11 @@ function countedLevel(db, walk, parents, room) {
|
|
|
66
74
|
let size = 0;
|
|
67
75
|
for (const n of perParent.values())
|
|
68
76
|
size += n;
|
|
69
|
-
return {
|
|
77
|
+
return {
|
|
78
|
+
ids: [],
|
|
79
|
+
size,
|
|
80
|
+
rows: firstRows(db, walk, parents.filter((id) => perParent.has(id)), { perParent, room }),
|
|
81
|
+
};
|
|
70
82
|
}
|
|
71
83
|
// Every parent before the one the page ends in is read whole in one statement; that last one is read under a LIMIT.
|
|
72
84
|
function firstRows(db, walk, parents, at) {
|
|
@@ -88,8 +100,11 @@ function childrenInOrder(db, walk, parents, limit) {
|
|
|
88
100
|
const byParent = new Map();
|
|
89
101
|
for (const chunk of chunked([...parents])) {
|
|
90
102
|
// SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
91
|
-
const rows = db
|
|
92
|
-
`
|
|
103
|
+
const rows = db
|
|
104
|
+
.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND ` +
|
|
105
|
+
`id <> ? ` +
|
|
106
|
+
`ORDER BY created ASC, id ASC LIMIT ?`)
|
|
107
|
+
.all(...chunk, walk.tenantId, walk.summary.id, limit);
|
|
93
108
|
for (const row of rows) {
|
|
94
109
|
const bucket = byParent.get(row.dag_parent_id ?? '');
|
|
95
110
|
if (bucket)
|
|
@@ -42,6 +42,7 @@ export interface StoreInventory {
|
|
|
42
42
|
/** Row count by table name; null for a table that cannot be counted. */
|
|
43
43
|
readonly tables: JsonObject;
|
|
44
44
|
}
|
|
45
|
-
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory
|
|
45
|
+
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory
|
|
46
|
+
* column. */
|
|
46
47
|
export declare function readStoreInventory(hippoRoot: string): StoreInventory;
|
|
47
48
|
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -30,7 +30,8 @@ export function readStoreHealth(hippoRoot, cutoffs) {
|
|
|
30
30
|
};
|
|
31
31
|
}, openHippoDbReadOnly);
|
|
32
32
|
}
|
|
33
|
-
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory
|
|
33
|
+
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory
|
|
34
|
+
* column. */
|
|
34
35
|
export function readStoreInventory(hippoRoot) {
|
|
35
36
|
return onHandle(hippoRoot, (db) => {
|
|
36
37
|
const schemaVersion = getSchemaVersion(db);
|
|
@@ -4,7 +4,8 @@ export interface CompactionCounts {
|
|
|
4
4
|
summarised: number;
|
|
5
5
|
started: number;
|
|
6
6
|
}
|
|
7
|
-
/** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary;
|
|
7
|
+
/** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary;
|
|
8
|
+
* each cutoff is an ISO time. */
|
|
8
9
|
export declare function compactionCountsAt(db: DatabaseSyncLike, stuckBefore: string, transcriptFloor: string): CompactionCounts;
|
|
9
10
|
export interface TokenTally {
|
|
10
11
|
injected: number;
|
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
/** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary;
|
|
1
|
+
/** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary;
|
|
2
|
+
* each cutoff is an ISO time. */
|
|
2
3
|
export function compactionCountsAt(db, stuckBefore, transcriptFloor) {
|
|
3
4
|
// SAFETY: COUNT aggregate row.
|
|
4
|
-
const row = db
|
|
5
|
+
const row = db
|
|
6
|
+
.prepare(`SELECT COUNT(*) AS total,
|
|
5
7
|
COUNT(CASE WHEN status = 'summarised' AND summarised_at < ? THEN 1 END) AS summarised,
|
|
6
|
-
COUNT(CASE WHEN status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
COUNT(CASE WHEN status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL
|
|
9
|
+
THEN 1 END) AS started
|
|
10
|
+
FROM compactions`)
|
|
11
|
+
.get(stuckBefore, stuckBefore, transcriptFloor);
|
|
12
|
+
return {
|
|
13
|
+
total: Number(row?.total ?? 0),
|
|
14
|
+
summarised: Number(row?.summarised ?? 0),
|
|
15
|
+
started: Number(row?.started ?? 0),
|
|
16
|
+
};
|
|
9
17
|
}
|
|
10
18
|
/** Memory blocks injected since `sinceIso`, the tokens they sent and the tokens later model calls re-read. */
|
|
11
19
|
export function tokenTallySince(db, sinceIso) {
|
package/dist/store/dormant.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
/** Dormant memories: what sleep does with a faded memory instead of deleting it (config `dormant.enabled`;
|
|
2
|
-
* Content stays in `dormant_memories` (schema v44) and the `memories` row
|
|
3
|
-
*
|
|
1
|
+
/** Dormant memories: what sleep does with a faded memory instead of deleting it (config `dormant.enabled`;
|
|
2
|
+
* `retentionDays` bounds how long one is kept). Content stays in `dormant_memories` (schema v44) and the `memories` row
|
|
3
|
+
* goes, so every reader of `memories` stops seeing it, as if deleted. Not the raw archive (`raw_archive`,
|
|
4
|
+
* `archiveRawMemory`), which keeps metadata only. db-taking helpers leave the handle and transaction to the caller. */
|
|
4
5
|
import { type DatabaseSyncLike } from '../db/index.js';
|
|
5
6
|
import type { MemoryEntry } from '../core/memory.js';
|
|
6
7
|
import type { SqlFragment } from './rule-sql.js';
|
|
7
8
|
import type { WriteBudget } from '../util/write-budget.js';
|
|
8
|
-
/** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects
|
|
9
|
-
* splitting a two-project merge, or `hippo audit repair` setting aside an automatic memory with a certain
|
|
9
|
+
/** Why a memory went dormant: sleep's decay pass, an imported agent memory whose note was deleted, `hippo projects
|
|
10
|
+
* repair` splitting a two-project merge, or `hippo audit repair` setting aside an automatic memory with a certain
|
|
11
|
+
* defect. */
|
|
10
12
|
export type DormantReason = 'decay' | 'source-deleted' | 'project-repair' | 'quality-repair';
|
|
11
13
|
/** One memory that sleep is moving out of active memory into the dormant store. */
|
|
12
14
|
export interface DormantMove {
|
|
@@ -38,7 +40,8 @@ export interface ListDormantOpts {
|
|
|
38
40
|
/** Maximum rows returned, newest first. Default 20. */
|
|
39
41
|
limit?: number;
|
|
40
42
|
}
|
|
41
|
-
/** Insert (or refresh) the dormant snapshot for `move.entry`; the caller deletes the `memories` row in the same
|
|
43
|
+
/** Insert (or refresh) the dormant snapshot for `move.entry`; the caller deletes the `memories` row in the same
|
|
44
|
+
* transaction. */
|
|
42
45
|
export declare function insertDormantRow(db: DatabaseSyncLike, move: DormantMove): void;
|
|
43
46
|
/** A dormant memory's stored snapshot plus when and why it went dormant. */
|
|
44
47
|
export interface DormantSnapshot {
|
|
@@ -57,9 +60,11 @@ export declare function dormantSnapshotsBySourcePrefix(db: DatabaseSyncLike, ten
|
|
|
57
60
|
export declare function replaceDormantEntry(db: DatabaseSyncLike, tenantId: string, id: string, entry: MemoryEntry): void;
|
|
58
61
|
/** Delete a tenant's dormant memory. Returns false when there was none. */
|
|
59
62
|
export declare function deleteDormantRow(db: DatabaseSyncLike, tenantId: string, id: string): boolean;
|
|
60
|
-
/** Deletes the tenant's dormant copies of a rejected digest whose snapshot scope `inReach` admits, so the value cannot
|
|
63
|
+
/** Deletes the tenant's dormant copies of a rejected digest whose snapshot scope `inReach` admits, so the value cannot
|
|
64
|
+
* linger; returns their ids. */
|
|
61
65
|
export declare function purgeDormantByDigest(db: DatabaseSyncLike, tenantId: string, digest: string, inReach: (scope: string | null) => boolean): string[];
|
|
62
|
-
/** Deletes for good every memory that went dormant before `cutoffIso`, on one handle; returns how many went, or under
|
|
66
|
+
/** Deletes for good every memory that went dormant before `cutoffIso`, on one handle; returns how many went, or under
|
|
67
|
+
* `dryRun` how many would. */
|
|
63
68
|
export declare function expireDormantBefore(hippoRoot: string, cutoffIso: string, opts: {
|
|
64
69
|
dryRun: boolean;
|
|
65
70
|
budget: WriteBudget;
|
|
@@ -69,7 +74,8 @@ export declare function expireDormantBefore(hippoRoot: string, cutoffIso: string
|
|
|
69
74
|
export declare function loadDormantMemories(hippoRoot: string, tenantId: string, opts?: ListDormantOpts, admit?: SqlFragment): DormantMemory[];
|
|
70
75
|
/** Whether a tenant holds a dormant memory with this id whose scope `admit` passes, read on a handle of its own. */
|
|
71
76
|
export declare function holdsDormantMemory(hippoRoot: string, tenantId: string, id: string, admit?: SqlFragment): boolean;
|
|
72
|
-
/** One restore as the store applies it. The two functions are the caller's policy over plain rows; neither is handed
|
|
77
|
+
/** One restore as the store applies it. The two functions are the caller's policy over plain rows; neither is handed
|
|
78
|
+
* the handle. */
|
|
73
79
|
export interface DormantRestore {
|
|
74
80
|
readonly tenantId: string;
|
|
75
81
|
readonly id: string;
|
|
@@ -89,7 +95,8 @@ export type DormantRestoreOutcome = {
|
|
|
89
95
|
} | {
|
|
90
96
|
readonly status: 'active';
|
|
91
97
|
};
|
|
92
|
-
/** Brings one dormant memory back on a single handle: the live row, the dormant delete and the audit row commit
|
|
98
|
+
/** Brings one dormant memory back on a single handle: the live row, the dormant delete and the audit row commit
|
|
99
|
+
* together, then its mirrors are written. */
|
|
93
100
|
export declare function restoreDormantMemory(hippoRoot: string, restore: DormantRestore): DormantRestoreOutcome;
|
|
94
101
|
/** One permanent delete of a dormant memory. */
|
|
95
102
|
export interface DormantForget {
|
|
@@ -100,6 +107,7 @@ export interface DormantForget {
|
|
|
100
107
|
/** The scopes this caller may touch; a row outside them reads as missing. */
|
|
101
108
|
readonly admit: SqlFragment;
|
|
102
109
|
}
|
|
103
|
-
/** Deletes a tenant's dormant memory for good and writes its `forget` audit row, on a single handle; false when it
|
|
110
|
+
/** Deletes a tenant's dormant memory for good and writes its `forget` audit row, on a single handle; false when it
|
|
111
|
+
* holds none `admit` passes. */
|
|
104
112
|
export declare function forgetDormantMemory(hippoRoot: string, forget: DormantForget): boolean;
|
|
105
113
|
//# sourceMappingURL=dormant.d.ts.map
|