hippo-memory 1.72.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/README.md +6 -4
- 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 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- 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 +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- 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} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- 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} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- 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 -7
- 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 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- 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 +35 -20
- package/dist/api/prompt-hook.js +66 -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} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- 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 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- 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} +54 -45
- 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 +27 -12
- 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 +34 -15
- 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 +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- 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 +58 -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 +33 -33
- package/dist/cli/auth.js +23 -31
- 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 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- 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 +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- 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 +5 -5
- package/dist/cli/object-verbs.js +13 -16
- 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 +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- 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 +16 -8
- 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 +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- 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 -4
- 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 -5
- 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 -5
- 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 +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- 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 -5
- 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 -4
- 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 -5
- 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 +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- 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 +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- 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 +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- 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 +38 -29
- 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 +22 -17
- 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 +87 -30
- package/dist/core/memory.js +82 -33
- 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 +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- 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.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- 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 -2
- package/dist/db/connect.js +8 -2
- 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 +40 -20
- 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/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- 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 -8
- package/dist/db/physics-state.js +17 -50
- 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 +20 -5
- package/dist/db/request-stores.js +15 -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 +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- 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 +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- 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 +17 -7
- 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 +72 -33
- 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 +11 -10
- 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 +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- 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 +17 -10
- 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 -6
- package/dist/learn/invalidation.js +62 -28
- 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 +21 -20
- 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 +61 -77
- 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 +59 -23
- 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 +19 -9
- 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 +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- 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 +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- 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 +550 -97
- 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 -17
- 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 +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- 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 +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -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 +90 -41
- 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 +97 -63
- 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 +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- 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 +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- 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 +11 -12
- 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 +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- 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 +4 -2
- package/dist/store/index.js +2 -1
- 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 +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- 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 +261 -219
- 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 +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- 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 +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- 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 +12 -5
- 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 +9 -6
- 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 +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- 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.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- 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 +97 -38
- 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 -18
- package/dist/store/sqlite/store.js +95 -33
- 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 +25 -11
- package/dist/store/summaries.js +84 -27
- 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 +8 -4
- 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 +28 -11
- 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 +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- 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 +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- 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 +16 -4
- package/dist/util/request-scope.js +19 -6
- 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 +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- 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 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- 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 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- 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 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -14,11 +14,24 @@ import { purgeMirrorBestEffort, mirrorBestEffort, writeMarkdownMirror } from './
|
|
|
14
14
|
import { onHandle, openStore } from './open.js';
|
|
15
15
|
import { clock } from '../util/write-budget.js';
|
|
16
16
|
import { chunked } from '../util/chunked.js';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
+
* 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. */
|
|
20
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('')}`;
|
|
21
|
-
/** 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. */
|
|
22
35
|
export function memoriesBackingObjects(hippoRoot) {
|
|
23
36
|
return onHandle(hippoRoot, (db) => {
|
|
24
37
|
return memoriesBackingObjectsOn(db);
|
|
@@ -56,8 +69,9 @@ function deleteMemoryRow(db, sql, id) {
|
|
|
56
69
|
throw isRawTriggerAbort(cause) ? new RawAppendOnlyError(cause) : cause;
|
|
57
70
|
}
|
|
58
71
|
}
|
|
59
|
-
/** db-scoped delete core, composable inside a caller's transaction; NO filesystem I/O, mirrors are written post-commit.
|
|
60
|
-
* 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. */
|
|
61
75
|
export function deleteEntryCore(db, id, opts) {
|
|
62
76
|
// SAFETY: row's shape matches the three columns named in the SELECT above.
|
|
63
77
|
const row = db
|
|
@@ -72,7 +86,12 @@ function deleteTargetRow(db, row, opts) {
|
|
|
72
86
|
return null;
|
|
73
87
|
deleteFtsRow(db, id);
|
|
74
88
|
if (!opts?.suppressForgetAudit) {
|
|
75
|
-
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
|
+
});
|
|
76
95
|
}
|
|
77
96
|
// Forgetting a child of a summary marks the parent dirty. Not atomic with the DELETE, but
|
|
78
97
|
// markSummaryDirtyInTx is idempotent, so the next child mutation re-marks the parent if this fails.
|
|
@@ -82,13 +101,15 @@ function deleteTargetRow(db, row, opts) {
|
|
|
82
101
|
return { tenantId: row.tenant_id ?? DEFAULT_TENANT_ID, dagParentId: row.dag_parent_id ?? null };
|
|
83
102
|
}
|
|
84
103
|
/** Delete an entry from SQLite and mirrors; thin wrapper over `deleteEntryCore` (open, core, mirrors, close).
|
|
85
|
-
* `opts.actor` defaults to 'cli'; the api layer threads `ctx.actor` so HTTP callers land as `api_key:<key_id>` in the
|
|
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. */
|
|
86
106
|
export function deleteEntry(hippoRoot, id, opts) {
|
|
87
107
|
return onHandle(hippoRoot, (db) => {
|
|
88
108
|
return deleteEntryOn(db, hippoRoot, id, opts);
|
|
89
109
|
}, openStore);
|
|
90
110
|
}
|
|
91
|
-
/** 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. */
|
|
92
113
|
function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
93
114
|
const result = withWriteScope(db, 'delete_entry', () => deleteEntryCore(db, id, opts));
|
|
94
115
|
if (!result)
|
|
@@ -96,8 +117,9 @@ function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
|
96
117
|
purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
|
|
97
118
|
return true;
|
|
98
119
|
}
|
|
99
|
-
/** deleteEntry with `automatic` for each removal and its own forget row and reason, all in one transaction after one
|
|
100
|
-
*
|
|
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. */
|
|
101
123
|
export function deleteEntriesAutomatically(hippoRoot, removals, actor) {
|
|
102
124
|
if (removals.length === 0)
|
|
103
125
|
return [];
|
|
@@ -118,7 +140,8 @@ function selectDeleteTargets(db, ids) {
|
|
|
118
140
|
const rows = new Map();
|
|
119
141
|
for (const chunk of chunked([...new Set(ids)])) {
|
|
120
142
|
// SAFETY: rows' shape matches the three columns named in the SELECT.
|
|
121
|
-
const found = db
|
|
143
|
+
const found = db
|
|
144
|
+
.prepare(`SELECT id, tenant_id, dag_parent_id FROM memories WHERE id IN (${placeholders(chunk.length)})`)
|
|
122
145
|
.all(...chunk);
|
|
123
146
|
for (const row of found)
|
|
124
147
|
rows.set(row.id, row);
|
|
@@ -136,8 +159,9 @@ function mergeOwnChanges(base, ours, live) {
|
|
|
136
159
|
}
|
|
137
160
|
return row;
|
|
138
161
|
}
|
|
139
|
-
/** Writes, deletes and dormant moves in one transaction. With `snapshot`, a write keeps only the fields the caller
|
|
140
|
-
* 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`. */
|
|
141
165
|
export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
|
|
142
166
|
const dormant = opts?.dormant ?? [];
|
|
143
167
|
if (toWrite.length === 0 && toDeleteIds.length === 0 && dormant.length === 0)
|
|
@@ -149,7 +173,8 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
|
|
|
149
173
|
}, openStore);
|
|
150
174
|
}
|
|
151
175
|
const failedUnits = new WeakMap();
|
|
152
|
-
/** 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. */
|
|
153
178
|
function noteFailedUnit(err, component) {
|
|
154
179
|
if (!component || failedUnits.has(err))
|
|
155
180
|
return;
|
|
@@ -160,8 +185,9 @@ function noteFailedUnit(err, component) {
|
|
|
160
185
|
export function failedUnitOf(err) {
|
|
161
186
|
return err ? failedUnits.get(err) : undefined;
|
|
162
187
|
}
|
|
163
|
-
/** batchWriteAndDelete on the caller's open store from component `from`, each component whole, closing the transaction
|
|
164
|
-
*
|
|
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`. */
|
|
165
191
|
function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
166
192
|
const now = opts.clock ?? clock;
|
|
167
193
|
const out = {
|
|
@@ -198,7 +224,8 @@ function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
|
198
224
|
reportChunk(hippoRoot, out);
|
|
199
225
|
return { next, removedIds: out.removedIds };
|
|
200
226
|
}
|
|
201
|
-
/** 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. */
|
|
202
229
|
function applyComponent(db, hippoRoot, component, snapshot, out) {
|
|
203
230
|
// Snapshot every doomed row's dag_parent_id before the deletes: consolidation flushes through here
|
|
204
231
|
// every cycle, so without it parents would never be marked dirty for decay, merge or garbage-collect.
|
|
@@ -217,7 +244,8 @@ function applyComponent(db, hippoRoot, component, snapshot, out) {
|
|
|
217
244
|
/** After COMMIT: warn about refused writes, then sync mirrors once for what landed. */
|
|
218
245
|
function reportChunk(hippoRoot, out) {
|
|
219
246
|
if (out.rejectedSkips > 0) {
|
|
220
|
-
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)`);
|
|
221
249
|
}
|
|
222
250
|
// A skipped write never landed, so mirroring it would resurrect the text the skip kept out of the DB.
|
|
223
251
|
mirrorBestEffort('markdown mirrors', () => {
|
|
@@ -245,10 +273,14 @@ function moveDormantAndDelete(db, dormantMoves, deletableIds, out) {
|
|
|
245
273
|
out.removedIds.push(id);
|
|
246
274
|
}
|
|
247
275
|
}
|
|
248
|
-
/** 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. */
|
|
249
278
|
function selectAutoDeletableRows(db, ids, dirty) {
|
|
250
279
|
// SAFETY: rows' shape matches the three columns named in the SELECT.
|
|
251
|
-
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);
|
|
252
284
|
for (const row of rows) {
|
|
253
285
|
if (row.dag_parent_id) {
|
|
254
286
|
dirty.parents.add(row.dag_parent_id);
|
|
@@ -284,16 +316,17 @@ function applyBatchWrites(db, stampedWrites, snapshot, out) {
|
|
|
284
316
|
if (live)
|
|
285
317
|
fts.staleIds.push(row.id);
|
|
286
318
|
}
|
|
287
|
-
// 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.
|
|
288
321
|
if (row.dag_parent_id && (!live || SUMMARY_INPUTS.some((k) => row[k] !== live[k]))) {
|
|
289
322
|
dirty.parents.add(row.dag_parent_id);
|
|
290
|
-
dirty.tenantById.set(row.dag_parent_id, row.
|
|
323
|
+
dirty.tenantById.set(row.dag_parent_id, row.tenant_id);
|
|
291
324
|
}
|
|
292
325
|
}
|
|
293
326
|
}
|
|
294
327
|
/** True, after auditing the refusal, when the write would introduce a rejected value. */
|
|
295
328
|
function isRejectedBatchWrite(db, row) {
|
|
296
|
-
const entryTenantId = row.
|
|
329
|
+
const entryTenantId = row.tenant_id ?? DEFAULT_TENANT_ID;
|
|
297
330
|
// checkRejectionGuard, not a bare tombstone probe: a tombstone can coexist with a live same-content row,
|
|
298
331
|
// and skipping every re-persist would starve it of decay/replay updates; only new or changed content is refused.
|
|
299
332
|
try {
|
|
@@ -301,7 +334,12 @@ function isRejectedBatchWrite(db, row) {
|
|
|
301
334
|
}
|
|
302
335
|
catch (err) {
|
|
303
336
|
if (err instanceof RejectedValueError) {
|
|
304
|
-
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
|
+
});
|
|
305
343
|
return true;
|
|
306
344
|
}
|
|
307
345
|
throw err;
|
|
@@ -316,8 +354,8 @@ export function deleteEntriesOneByOne(hippoRoot, targets, opts) {
|
|
|
316
354
|
return targets.map((target) => deleteEntryOn(db, hippoRoot, target.id, { ...opts, reason: target.reason }));
|
|
317
355
|
}, openStore);
|
|
318
356
|
}
|
|
319
|
-
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids
|
|
320
|
-
* 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. */
|
|
321
359
|
export async function commitInChunks(hippoRoot, components, opts) {
|
|
322
360
|
if (components.length === 0)
|
|
323
361
|
return [];
|
|
@@ -331,7 +369,11 @@ export async function commitInChunks(hippoRoot, components, opts) {
|
|
|
331
369
|
while (next < components.length) {
|
|
332
370
|
if (next > 0)
|
|
333
371
|
await budget.pause(committedAt);
|
|
334
|
-
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
|
+
});
|
|
335
377
|
committedAt = budget.clock();
|
|
336
378
|
next = chunk.next;
|
|
337
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,14 +136,15 @@ 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;
|
|
144
|
+
/** Makes this recorder throw at one stage; only tests set it, and no CLI flag or environment variable reaches it. */
|
|
145
|
+
fault?: DeliveryFault;
|
|
141
146
|
}
|
|
142
147
|
export type DeliveryFault = 'observe' | 'build' | 'flush';
|
|
143
|
-
/** Makes every recorder created afterwards throw at one stage. Only tests call it; the shipped CLI and server have no route here. */
|
|
144
|
-
export declare function _setDeliveryFaultForTests(fault: DeliveryFault | null): void;
|
|
145
148
|
/** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
|
|
146
149
|
export declare function createDeliveryRecorder(init: DeliveryRecorderInit): DeliveryRecorder;
|
|
147
150
|
//# sourceMappingURL=delivery-recorder.d.ts.map
|
|
@@ -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,35 +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
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
+
};
|
|
205
241
|
}
|
|
206
242
|
/** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
|
|
207
243
|
export function createDeliveryRecorder(init) {
|
|
208
244
|
const startedMs = Date.now();
|
|
209
245
|
const ts = evalNow().toISOString();
|
|
210
|
-
const fault =
|
|
246
|
+
const fault = init.fault ?? null;
|
|
211
247
|
const payload = readPayload(init);
|
|
212
|
-
const state =
|
|
213
|
-
candidates: new Map(), picked: new Map(), filtered: new Set(), facts: null, shown: 0, dropped: 0,
|
|
214
|
-
disabledSeen: false, outcome: { state: 'empty' }, queryHash: null, recallTraceId: null, failureId: null, broken: null, flushed: false,
|
|
215
|
-
};
|
|
248
|
+
const state = newRecorderState();
|
|
216
249
|
const guard = guardFor(state, fault);
|
|
217
250
|
const { qualityDropped, offer, reject, dropMissing, gated, selected } = candidateMethods(state, guard);
|
|
218
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
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { selectEntriesByIds, TENANT_IS } from './entry-reads.js';
|
|
2
2
|
import { chunked } from '../util/chunked.js';
|
|
3
3
|
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { placeholders } from '../util/sql.js';
|
|
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
|
|
7
|
+
* count in `sizes`. */
|
|
6
8
|
export function pagedDescendants(db, walk, summaryAdmitted) {
|
|
7
9
|
const sizes = [];
|
|
8
10
|
const levels = [];
|
|
@@ -26,7 +28,10 @@ function keyedLevel(db, walk, parents, at) {
|
|
|
26
28
|
const byParent = new Map();
|
|
27
29
|
for (const chunk of chunked([...parents])) {
|
|
28
30
|
// SAFETY: the SELECT names exactly ChildKey's four columns, and the WHERE keeps dag_parent_id a string.
|
|
29
|
-
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);
|
|
30
35
|
for (const key of keys) {
|
|
31
36
|
const bucket = byParent.get(key.dag_parent_id);
|
|
32
37
|
if (bucket)
|
|
@@ -48,14 +53,18 @@ function keyedLevel(db, walk, parents, at) {
|
|
|
48
53
|
const whole = selectEntriesByIds(db, shown, walk.tenantId);
|
|
49
54
|
return { ids, size: ids.length, rows: shown.flatMap((id) => whole.get(id) ?? []) };
|
|
50
55
|
}
|
|
51
|
-
/** The last level counted in SQL and read up to `room` rows; null when a row there is refused, which only the keyed
|
|
52
|
-
*
|
|
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. */
|
|
53
59
|
function countedLevel(db, walk, parents, room) {
|
|
54
60
|
const perParent = new Map();
|
|
55
61
|
for (const chunk of chunked([...parents])) {
|
|
56
62
|
// SAFETY: the SELECT names exactly ChildGroup's four fields, and the WHERE keeps dag_parent_id a string.
|
|
57
|
-
const groups = db
|
|
58
|
-
`
|
|
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);
|
|
59
68
|
for (const group of groups) {
|
|
60
69
|
if (!walk.page.admit(group))
|
|
61
70
|
return null;
|
|
@@ -65,7 +74,11 @@ function countedLevel(db, walk, parents, room) {
|
|
|
65
74
|
let size = 0;
|
|
66
75
|
for (const n of perParent.values())
|
|
67
76
|
size += n;
|
|
68
|
-
return {
|
|
77
|
+
return {
|
|
78
|
+
ids: [],
|
|
79
|
+
size,
|
|
80
|
+
rows: firstRows(db, walk, parents.filter((id) => perParent.has(id)), { perParent, room }),
|
|
81
|
+
};
|
|
69
82
|
}
|
|
70
83
|
// Every parent before the one the page ends in is read whole in one statement; that last one is read under a LIMIT.
|
|
71
84
|
function firstRows(db, walk, parents, at) {
|
|
@@ -87,8 +100,11 @@ function childrenInOrder(db, walk, parents, limit) {
|
|
|
87
100
|
const byParent = new Map();
|
|
88
101
|
for (const chunk of chunked([...parents])) {
|
|
89
102
|
// SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
90
|
-
const rows = db
|
|
91
|
-
`
|
|
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);
|
|
92
108
|
for (const row of rows) {
|
|
93
109
|
const bucket = byParent.get(row.dag_parent_id ?? '');
|
|
94
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) {
|