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
|
@@ -9,13 +9,31 @@ import { errorMessage, log } from '../../util/log.js';
|
|
|
9
9
|
import { ScopeForbiddenError } from '../../core/recall-scope.js';
|
|
10
10
|
import { RejectedValueError } from '../../core/api-errors.js';
|
|
11
11
|
import { OtherStoreFolderError, SqliteBlockedError, StoreNotPortedError } from '../../util/sqlite-blocked.js';
|
|
12
|
-
// Every class the server maps by, at or below the store layer. Abstract ApiError is absent: only its four subclasses
|
|
12
|
+
// Every class the server maps by, at or below the store layer. Abstract ApiError is absent: only its four subclasses
|
|
13
|
+
// are thrown.
|
|
13
14
|
const CLASSES = [
|
|
14
|
-
Error,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
Error,
|
|
16
|
+
TypeError,
|
|
17
|
+
RangeError,
|
|
18
|
+
SyntaxError,
|
|
19
|
+
ReferenceError,
|
|
20
|
+
EvalError,
|
|
21
|
+
URIError,
|
|
22
|
+
HttpError,
|
|
23
|
+
BodyTooLargeError,
|
|
24
|
+
BodyTimeoutError,
|
|
25
|
+
BadRequestError,
|
|
26
|
+
ForbiddenError,
|
|
27
|
+
NotFoundError,
|
|
28
|
+
ConflictError,
|
|
29
|
+
RejectedValueError,
|
|
30
|
+
ScopeForbiddenError,
|
|
31
|
+
RawAppendOnlyError,
|
|
32
|
+
SqliteBlockedError,
|
|
33
|
+
StoreNotPortedError,
|
|
34
|
+
OtherStoreFolderError,
|
|
35
|
+
StoreBusyError,
|
|
36
|
+
IncompatibleBinaryError,
|
|
19
37
|
];
|
|
20
38
|
const PROTOTYPES = new Map(CLASSES.map((known) => [known.name, known.prototype]));
|
|
21
39
|
// A chain of causes deeper than this is cut, so a cycle cannot recurse for ever.
|
|
@@ -37,19 +55,23 @@ function ownFields(err) {
|
|
|
37
55
|
}
|
|
38
56
|
/** Worker side. A thrown value that is not an Error carries its text and no class. */
|
|
39
57
|
export function encodeError(err, depth = 0) {
|
|
40
|
-
if (!(err instanceof Error))
|
|
58
|
+
if (!(err instanceof Error)) {
|
|
41
59
|
return { classes: [], message: errorMessage(err), stack: undefined, fields: {}, cause: undefined };
|
|
60
|
+
}
|
|
42
61
|
const cause = err.cause === undefined || depth >= MAX_CAUSES ? undefined : encodeError(err.cause, depth + 1);
|
|
43
62
|
return { classes: classNames(err), message: err.message, stack: err.stack, fields: ownFields(err), cause };
|
|
44
63
|
}
|
|
45
|
-
/** Server side: an instance of the thrown class, or of its nearest ancestor in the table, with the worker's stack,
|
|
64
|
+
/** Server side: an instance of the thrown class, or of its nearest ancestor in the table, with the worker's stack,
|
|
65
|
+
* cause and fields. */
|
|
46
66
|
export function decodeError(wire) {
|
|
47
67
|
const thrown = wire.classes[0];
|
|
48
68
|
const known = wire.classes.find((name) => PROTOTYPES.has(name)) ?? 'Error';
|
|
49
69
|
const unlisted = thrown !== undefined && thrown !== known;
|
|
50
|
-
if (unlisted)
|
|
70
|
+
if (unlisted) {
|
|
51
71
|
log.once(`store-worker-error:${thrown}`, 'warn', `a store worker threw ${thrown}, which the error codec does not list; it arrives as ${known}`);
|
|
52
|
-
|
|
72
|
+
}
|
|
73
|
+
// A listed ancestor still maps to its status, so its text stays as thrown; under plain Error the class survives only
|
|
74
|
+
// in the message.
|
|
53
75
|
const message = unlisted && known === 'Error' ? `${thrown}: ${wire.message}` : wire.message;
|
|
54
76
|
const rebuilt = wire.cause === undefined ? new Error(message) : new Error(message, { cause: decodeError(wire.cause) });
|
|
55
77
|
// The constructor is not run again: its arguments did not cross, and the fields below are what it set.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// What the store workers refused, timed out and replaced since the process started; /health reports them beside the
|
|
1
|
+
// What the store workers refused, timed out and replaced since the process started; /health reports them beside the
|
|
2
|
+
// audit failure count.
|
|
2
3
|
/** Counted on the server thread, across every executor of the process. */
|
|
3
4
|
export const workerCounts = {
|
|
4
5
|
/** Calls refused because a thread's queue was full. */
|
|
@@ -2,8 +2,11 @@ import { type OpMode } from './worker-ops.js';
|
|
|
2
2
|
export interface CallOptions {
|
|
3
3
|
readonly mode: OpMode;
|
|
4
4
|
readonly requestId: string | undefined;
|
|
5
|
-
/** Epoch milliseconds by which the call's request must be answered; absent means the call waits as long as it
|
|
5
|
+
/** Epoch milliseconds by which the call's request must be answered; absent means the call waits as long as it
|
|
6
|
+
* takes. */
|
|
6
7
|
readonly deadlineAt?: number | undefined;
|
|
8
|
+
/** Aborts when the request is abandoned; a call still queued then is dropped and never runs. */
|
|
9
|
+
readonly signal?: AbortSignal | undefined;
|
|
7
10
|
}
|
|
8
11
|
export interface ExecutorOptions {
|
|
9
12
|
/** Lock wait of each thread's connection; defaults to the server's. */
|
|
@@ -14,13 +17,15 @@ export interface ExecutorOptions {
|
|
|
14
17
|
readonly writeGraceMs?: number;
|
|
15
18
|
}
|
|
16
19
|
export interface SqliteExecutor {
|
|
17
|
-
/** Runs `op` of the synchronous store on a worker thread. A throw there rejects here as an instance of its own
|
|
20
|
+
/** Runs `op` of the synchronous store on a worker thread. A throw there rejects here as an instance of its own
|
|
21
|
+
* class. */
|
|
18
22
|
call<T>(op: string, args: readonly unknown[], opts: CallOptions): Promise<T>;
|
|
19
23
|
/** Resolves once every thread has exited: Windows cannot delete a store folder while a thread holds its files. */
|
|
20
24
|
close(): Promise<void>;
|
|
21
25
|
/** Threads started and not yet exited. */
|
|
22
26
|
liveThreads(): number;
|
|
23
|
-
/** Stops the writer thread as a crash would: its running and queued calls reject, and the next write starts a fresh
|
|
27
|
+
/** Stops the writer thread as a crash would: its running and queued calls reject, and the next write starts a fresh
|
|
28
|
+
* thread. */
|
|
24
29
|
terminateWriter(): void;
|
|
25
30
|
}
|
|
26
31
|
/** Threads for the hippo.db under `hippoRoot`: one writer and two readers. The first
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// The server thread's side of the store workers: SQLite's synchronous statements and lock waits run on their threads,
|
|
1
|
+
// The server thread's side of the store workers: SQLite's synchronous statements and lock waits run on their threads,
|
|
2
|
+
// so the event loop keeps answering.
|
|
2
3
|
import { fileURLToPath } from 'node:url';
|
|
3
4
|
import { SHARE_ENV, Worker } from 'node:worker_threads';
|
|
4
5
|
import { addAuditWriteFailures } from '../audit.js';
|
|
@@ -66,7 +67,7 @@ class WorkerPool {
|
|
|
66
67
|
this.#queueMax = opts.queueMax ?? envStoreQueueMax() ?? DEFAULT_QUEUE_MAX;
|
|
67
68
|
this.#writeGraceMs = opts.writeGraceMs ?? DEFAULT_WRITE_GRACE_MS;
|
|
68
69
|
}
|
|
69
|
-
call(op, args, { mode, requestId, deadlineAt }) {
|
|
70
|
+
call(op, args, { mode, requestId, deadlineAt, signal }) {
|
|
70
71
|
return new Promise((resolve, reject) => {
|
|
71
72
|
if (this.#closed) {
|
|
72
73
|
reject(new StoreBusyError(EXECUTOR_CLOSED));
|
|
@@ -77,16 +78,27 @@ class WorkerPool {
|
|
|
77
78
|
reject(decodeError(reply.error));
|
|
78
79
|
return;
|
|
79
80
|
}
|
|
80
|
-
// SAFETY: the worker ran `op` of the synchronous store, whose result is the T the caller's port method
|
|
81
|
+
// SAFETY: the worker ran `op` of the synchronous store, whose result is the T the caller's port method
|
|
82
|
+
// declares.
|
|
81
83
|
resolve(reply.value);
|
|
82
84
|
};
|
|
83
|
-
const lane = mode === 'write'
|
|
85
|
+
const lane = mode === 'write'
|
|
86
|
+
? this.#writer
|
|
87
|
+
: this.#readers.reduce((least, next) => (load(next) < load(least) ? next : least));
|
|
84
88
|
const refusal = this.#refusal(lane, deadlineAt);
|
|
85
89
|
if (refusal !== undefined) {
|
|
86
90
|
reject(refusal);
|
|
87
91
|
return;
|
|
88
92
|
}
|
|
89
|
-
const pending = {
|
|
93
|
+
const pending = {
|
|
94
|
+
job: { id: this.#nextId++, op, args, requestId },
|
|
95
|
+
settle,
|
|
96
|
+
fail: reject,
|
|
97
|
+
deadlineAt,
|
|
98
|
+
signal,
|
|
99
|
+
timer: undefined,
|
|
100
|
+
answered: false,
|
|
101
|
+
};
|
|
90
102
|
this.#watchDeadline(lane, pending);
|
|
91
103
|
lane.queue.push(pending);
|
|
92
104
|
this.#ensureSetup();
|
|
@@ -109,13 +121,15 @@ class WorkerPool {
|
|
|
109
121
|
this.#writer.queue.unshift(pending);
|
|
110
122
|
this.#pump(this.#writer);
|
|
111
123
|
}
|
|
112
|
-
// A failed setup fails the reads that waited for it with its own error, as each read's own open would have, and the
|
|
124
|
+
// A failed setup fails the reads that waited for it with its own error, as each read's own open would have, and the
|
|
125
|
+
// next call tries it again.
|
|
113
126
|
#setupEnded(failure) {
|
|
114
127
|
this.#setup = failure === undefined ? 'done' : 'none';
|
|
115
128
|
for (const lane of this.#readers) {
|
|
116
|
-
if (failure !== undefined)
|
|
129
|
+
if (failure !== undefined) {
|
|
117
130
|
for (const waiting of lane.queue.splice(0))
|
|
118
131
|
finish(waiting, () => waiting.fail(failure));
|
|
132
|
+
}
|
|
119
133
|
this.#pump(lane);
|
|
120
134
|
}
|
|
121
135
|
}
|
|
@@ -148,7 +162,9 @@ class WorkerPool {
|
|
|
148
162
|
}
|
|
149
163
|
if (lane.running !== pending || lane.worker === undefined)
|
|
150
164
|
return;
|
|
151
|
-
log.warn(`the store's ${lane.mode} worker ran '${pending.job.op}' past its request's deadline`, {
|
|
165
|
+
log.warn(`the store's ${lane.mode} worker ran '${pending.job.op}' past its request's deadline`, {
|
|
166
|
+
requestId: pending.job.requestId,
|
|
167
|
+
});
|
|
152
168
|
if (lane.mode === 'read')
|
|
153
169
|
this.#stopReader(lane, lane.worker, pending);
|
|
154
170
|
else
|
|
@@ -160,13 +176,15 @@ class WorkerPool {
|
|
|
160
176
|
lane.stopping = worker;
|
|
161
177
|
terminateLogged(worker);
|
|
162
178
|
}
|
|
163
|
-
// Before its commit flag a stopped write is a known rollback; after it the thread is left to finish, since stopping
|
|
179
|
+
// Before its commit flag a stopped write is a known rollback; after it the thread is left to finish, since stopping
|
|
180
|
+
// it could not undo the write.
|
|
164
181
|
#stopWriter(lane, worker, pending) {
|
|
165
182
|
if (!mayHaveCommitted(lane, pending)) {
|
|
166
183
|
lane.stopping = worker;
|
|
167
184
|
this.terminateWriter();
|
|
168
185
|
}
|
|
169
|
-
// A statement in flight runs to its end even after the stop, so the caller waits for the thread's own word only
|
|
186
|
+
// A statement in flight runs to its end even after the stop, so the caller waits for the thread's own word only
|
|
187
|
+
// this long.
|
|
170
188
|
pending.timer = setTimeout(() => finish(pending, () => pending.fail(new DeadlineExceededError(WRITE_UNKNOWN))), this.#writeGraceMs);
|
|
171
189
|
pending.timer.unref();
|
|
172
190
|
}
|
|
@@ -187,8 +205,9 @@ class WorkerPool {
|
|
|
187
205
|
async close() {
|
|
188
206
|
this.#closed = true;
|
|
189
207
|
for (const lane of [this.#writer, ...this.#readers]) {
|
|
190
|
-
for (const pending of lane.queue.splice(0))
|
|
208
|
+
for (const pending of lane.queue.splice(0)) {
|
|
191
209
|
finish(pending, () => pending.fail(new StoreBusyError(EXECUTOR_CLOSED)));
|
|
210
|
+
}
|
|
192
211
|
// An idle thread is unreferenced, and the process must not end before the thread has closed its connection.
|
|
193
212
|
lane.worker?.ref();
|
|
194
213
|
// Read after the reply of a job still running; the thread then closes its connection and ends.
|
|
@@ -209,7 +228,14 @@ class WorkerPool {
|
|
|
209
228
|
// Setup comes first: a reader sent a job before it would open a store whose setup it cannot write.
|
|
210
229
|
if (lane.mode === 'read' && this.#setup !== 'done')
|
|
211
230
|
return;
|
|
212
|
-
|
|
231
|
+
let next = lane.queue.shift();
|
|
232
|
+
// Its request was abandoned while it waited, so no one is left to read what it would do.
|
|
233
|
+
while (next?.signal?.aborted) {
|
|
234
|
+
workerCounts.jobsExpired += 1;
|
|
235
|
+
const dropped = next;
|
|
236
|
+
finish(dropped, () => dropped.fail(new StoreBusyError(EXPIRED_WAITING)));
|
|
237
|
+
next = lane.queue.shift();
|
|
238
|
+
}
|
|
213
239
|
if (next === undefined)
|
|
214
240
|
return;
|
|
215
241
|
// Started by the first call and never at boot, so a server that only answers /health opens no thread.
|
|
@@ -219,7 +245,10 @@ class WorkerPool {
|
|
|
219
245
|
// An idle thread never keeps the process alive; one with a call in flight does.
|
|
220
246
|
lane.worker.ref();
|
|
221
247
|
try {
|
|
222
|
-
lane.worker.postMessage({
|
|
248
|
+
lane.worker.postMessage({
|
|
249
|
+
...next.job,
|
|
250
|
+
walPages: autoCheckpointPages(getHippoDbPath(this.#hippoRoot)),
|
|
251
|
+
});
|
|
223
252
|
}
|
|
224
253
|
catch (err) {
|
|
225
254
|
// Arguments that cannot be copied to the thread fail this call alone.
|
|
@@ -233,11 +262,18 @@ class WorkerPool {
|
|
|
233
262
|
worker.unref();
|
|
234
263
|
}
|
|
235
264
|
#start(lane) {
|
|
236
|
-
// A fresh flag per thread: a job id left by the thread before it could match no later job, but a shared buffer
|
|
265
|
+
// A fresh flag per thread: a job id left by the thread before it could match no later job, but a shared buffer
|
|
266
|
+
// would outlive its writer.
|
|
237
267
|
const shared = lane.mode === 'write' ? new SharedArrayBuffer(4) : undefined;
|
|
238
268
|
lane.commitFlag = shared && new Int32Array(shared);
|
|
239
|
-
const init = {
|
|
240
|
-
|
|
269
|
+
const init = {
|
|
270
|
+
hippoRoot: this.#hippoRoot,
|
|
271
|
+
mode: lane.mode,
|
|
272
|
+
busyWaitMs: this.#busyWaitMs,
|
|
273
|
+
...(shared && { commitFlag: shared }),
|
|
274
|
+
};
|
|
275
|
+
// An explicit execArgv keeps the parent's loaders out of the thread and silences its repeat of the node:sqlite
|
|
276
|
+
// warning.
|
|
241
277
|
const worker = new Worker(WORKER_ENTRY, { env: SHARE_ENV, execArgv: ['--no-warnings'], workerData: init });
|
|
242
278
|
worker.unref();
|
|
243
279
|
worker.on('message', (reply) => this.#settle(lane, worker, reply));
|
|
@@ -265,7 +301,8 @@ class WorkerPool {
|
|
|
265
301
|
this.#idle(lane, worker);
|
|
266
302
|
this.#pump(lane);
|
|
267
303
|
}
|
|
268
|
-
// The lane keeps a stopped thread until it has exited, so a new thread never starts while the old one may still hold
|
|
304
|
+
// The lane keeps a stopped thread until it has exited, so a new thread never starts while the old one may still hold
|
|
305
|
+
// the write lock.
|
|
269
306
|
#retire(lane, worker, cause) {
|
|
270
307
|
if (lane.worker !== worker)
|
|
271
308
|
return;
|
|
@@ -278,7 +315,8 @@ class WorkerPool {
|
|
|
278
315
|
const lost = lane.running === undefined ? lane.queue.splice(0) : [lane.running, ...lane.queue.splice(0)];
|
|
279
316
|
lane.running = undefined;
|
|
280
317
|
if (lost.length > 0 || cause !== undefined) {
|
|
281
|
-
log.warn(`the store's ${lane.mode} worker stopped with ${lost.length} call(s)
|
|
318
|
+
log.warn(`the store's ${lane.mode} worker stopped with ${lost.length} call(s) ` +
|
|
319
|
+
`unanswered${cause === undefined ? '' : `: ${cause.message}`}`);
|
|
282
320
|
}
|
|
283
321
|
// The server answers this class as its retryable 503.
|
|
284
322
|
for (const pending of lost)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { MemoryEntry } from '../../core/memory.js';
|
|
2
|
+
import type { PromoteOptions } from '../port/promotion.js';
|
|
3
|
+
/** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
|
|
4
|
+
export declare function copyToGlobal(localRoot: string, id: string, opts?: PromoteOptions): MemoryEntry;
|
|
5
|
+
//# sourceMappingURL=global-promote.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Copies a local memory into the global store; the caller embeds the copy.
|
|
2
|
+
import { BadRequestError, NotFoundError } from '../../core/api-errors.js';
|
|
3
|
+
import { generateId } from '../../core/memory.js';
|
|
4
|
+
import { isPersonalScope } from '../../core/recall-scope.js';
|
|
5
|
+
import { fallbackOrigin, resolveGlobalRootDir } from '../../core/project-identity.js';
|
|
6
|
+
import { isSharedStore } from '../../core/config.js';
|
|
7
|
+
import { detectSecret } from '../../util/secret-detect.js';
|
|
8
|
+
import { initStore } from '../open.js';
|
|
9
|
+
import { writePromotedEntry } from '../entry-writes.js';
|
|
10
|
+
import { readEntry } from '../entry-reads.js';
|
|
11
|
+
import { isQuarantineScope } from '../quarantine.js';
|
|
12
|
+
function assertPromotable(id, entry) {
|
|
13
|
+
// Same quarantine veto as shareMemory; a promoted copy would have no quarantine record to review.
|
|
14
|
+
if (isQuarantineScope(entry.scope)) {
|
|
15
|
+
throw new BadRequestError(`Refusing to promote ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ` +
|
|
16
|
+
`${id}'.`);
|
|
17
|
+
}
|
|
18
|
+
if (isPersonalScope(entry.scope ?? null)) {
|
|
19
|
+
throw new BadRequestError(`Refusing to promote ${id}: it is a personal memory and stays with its owner on this server.`);
|
|
20
|
+
}
|
|
21
|
+
// Secret producer veto: promote is a producer path to the global store
|
|
22
|
+
// exactly like shareMemory - same hard rule.
|
|
23
|
+
const promoteSecret = detectSecret(entry);
|
|
24
|
+
if (promoteSecret.flagged) {
|
|
25
|
+
throw new BadRequestError(`Refusing to promote ${id} to the global store: content matches secret material (${promoteSecret.reason}). ` +
|
|
26
|
+
`Secrets stay in their owning project's store.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
|
|
30
|
+
export function copyToGlobal(localRoot, id, opts) {
|
|
31
|
+
const entry = readEntry(localRoot, id, opts?.tenantId);
|
|
32
|
+
if (!entry)
|
|
33
|
+
throw new NotFoundError(`Memory not found: ${id}`);
|
|
34
|
+
assertPromotable(id, entry);
|
|
35
|
+
const globalRoot = resolveGlobalRootDir();
|
|
36
|
+
initStore(globalRoot);
|
|
37
|
+
// A project store's NULL row gets its folder back; a shared store's folder is no caller's project, so NULL stays and
|
|
38
|
+
// the label names no path.
|
|
39
|
+
const globalEntry = {
|
|
40
|
+
...entry,
|
|
41
|
+
id: generateId('g'),
|
|
42
|
+
source: isSharedStore(localRoot) ? `shared::${new Date().toISOString()}` : `promoted:${localRoot}`,
|
|
43
|
+
origin_project: entry.origin_project ?? fallbackOrigin(localRoot),
|
|
44
|
+
};
|
|
45
|
+
writePromotedEntry(globalRoot, globalEntry, { actor: opts?.actor, sourceId: id, auditAs: opts?.auditAs });
|
|
46
|
+
return globalEntry;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=global-promote.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Goals } from '../port-groups.js';
|
|
2
|
+
import type { Sync } from '../port.js';
|
|
3
|
+
export declare function sqliteGoals(hippoRoot: string): Sync<Goals>;
|
|
4
|
+
/** The group as a served store answers it: a throw rejects as another store's would. */
|
|
5
|
+
export declare function servedGoals(sync: Sync<Goals>): Goals;
|
|
6
|
+
//# sourceMappingURL=goals-group.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// hippo.db's Goals group: the goal stack's writes and the every-status listing.
|
|
2
|
+
import { completeGoal, getSessionGoals, pushGoal, resumeGoal, suspendGoal } from '../goals.js';
|
|
3
|
+
export function sqliteGoals(hippoRoot) {
|
|
4
|
+
return {
|
|
5
|
+
push: (tenantId, goal) => pushGoal(hippoRoot, { ...goal, tenantId }),
|
|
6
|
+
sessionGoals: (tenantId, sessionId) => getSessionGoals(hippoRoot, { sessionId, tenantId }),
|
|
7
|
+
// Goal ids are not tenant-scoped in hippo.db, so these ignore the tenant; the api checks the host admin.
|
|
8
|
+
complete: (_tenantId, goalId, opts) => completeGoal(hippoRoot, goalId, opts),
|
|
9
|
+
suspend: (_tenantId, goalId) => suspendGoal(hippoRoot, goalId),
|
|
10
|
+
resume: (_tenantId, goalId) => resumeGoal(hippoRoot, goalId),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** The group as a served store answers it: a throw rejects as another store's would. */
|
|
14
|
+
export function servedGoals(sync) {
|
|
15
|
+
return {
|
|
16
|
+
push: async (tenantId, goal) => sync.push(tenantId, goal),
|
|
17
|
+
sessionGoals: async (tenantId, sessionId) => sync.sessionGoals(tenantId, sessionId),
|
|
18
|
+
complete: async (tenantId, goalId, opts) => sync.complete(tenantId, goalId, opts),
|
|
19
|
+
suspend: async (tenantId, goalId) => sync.suspend(tenantId, goalId),
|
|
20
|
+
resume: async (tenantId, goalId) => sync.resume(tenantId, goalId),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=goals-group.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { GraphReads, Sync } from '../port.js';
|
|
2
2
|
export declare function sqliteGraphReads(hippoRoot: string): Sync<GraphReads>;
|
|
3
|
-
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
3
|
+
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
4
|
+
* another store's would. */
|
|
4
5
|
export declare function servedGraphReads(sync: Sync<GraphReads>): GraphReads;
|
|
5
6
|
//# sourceMappingURL=graph-reads-group.d.ts.map
|
|
@@ -11,7 +11,8 @@ export function sqliteGraphReads(hippoRoot) {
|
|
|
11
11
|
})),
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
14
|
+
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
15
|
+
* another store's would. */
|
|
15
16
|
export function servedGraphReads(sync) {
|
|
16
17
|
return { graphRows: async (tenantId, query) => sync.graphRows(tenantId, query) };
|
|
17
18
|
}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
import { type HippoStore } from '../port.js';
|
|
1
2
|
/** What the server calls around its responses to keep its store connection. */
|
|
2
3
|
export interface StoreHolder {
|
|
3
4
|
hold: () => void;
|
|
4
5
|
afterResponse: () => void;
|
|
5
6
|
release: () => Promise<void>;
|
|
6
|
-
/** Runs one request, inside the fence that keeps hippo.db shut when the store is not it. */
|
|
7
|
+
/** Runs one request in the server's scope, inside the fence that keeps hippo.db shut when the store is not it. */
|
|
7
8
|
runRequest: (run: () => Promise<void>) => Promise<void>;
|
|
8
9
|
}
|
|
9
10
|
/** Holds a connection to the hippo.db under `hippoRoot` once it exists, so serving never creates one. */
|
|
10
11
|
export declare function holdSqliteConnection(hippoRoot: string): StoreHolder;
|
|
12
|
+
/** The holder for the store a server serves: hippo.db's held connection, else a fence that keeps hippo.db shut. */
|
|
13
|
+
export declare function createStoreHolder(hippoRoot: string, store: HippoStore): StoreHolder;
|
|
14
|
+
/** Runs a route's store work off the event loop when the store has a worker, else in place. */
|
|
15
|
+
export declare function offLoopFor(store: HippoStore): <T>(run: () => T) => T;
|
|
16
|
+
export declare function outsideRouteBlock<A extends readonly unknown[], R>(resolver: ((...args: A) => R) | undefined): ((...args: A) => R) | undefined;
|
|
11
17
|
//# sourceMappingURL=held-connection.d.ts.map
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// A served hippo.db keeps one connection open for the life of the server, beside the worker that checkpoints its WAL.
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
-
import { closeHippoDb, getHippoDbPath, openHippoDb, outsideRequestStores, outsideSqliteOffLoop, SERVER_DB_WAIT_MS, } from '../../db/index.js';
|
|
3
|
+
import { closeHippoDb, getHippoDbPath, openHippoDb, outsideRequestStores, outsideSqliteOffLoop, SERVER_DB_WAIT_MS, withSqliteBlocked, withSqliteOffLoop, } from '../../db/index.js';
|
|
4
|
+
import { hasGroup } from '../port.js';
|
|
5
|
+
import { runSqliteRequest } from './request-scope.js';
|
|
6
|
+
import { runsOffLoop } from './worker-store.js';
|
|
4
7
|
import { startWalCheckpointer } from '../../db/wal-checkpointer.js';
|
|
5
|
-
import { errorMessage, log } from '../../util/log.js';
|
|
8
|
+
import { errorMessage, log, errorFields } from '../../util/log.js';
|
|
6
9
|
/** Holds a connection to the hippo.db under `hippoRoot` once it exists, so serving never creates one. */
|
|
7
10
|
export function holdSqliteConnection(hippoRoot) {
|
|
8
11
|
// Handlers open and close their own connections; while this one is held, none of those closes is SQLite's last,
|
|
@@ -14,14 +17,15 @@ export function holdSqliteConnection(hippoRoot) {
|
|
|
14
17
|
if (heldDb || stopHolding || !existsSync(getHippoDbPath(hippoRoot)))
|
|
15
18
|
return;
|
|
16
19
|
try {
|
|
17
|
-
// The 'finish' listener can fire inside a request scope (closing this connection with the request) and inside a
|
|
18
|
-
// The server's lock wait: this open runs on the event loop, where
|
|
20
|
+
// The 'finish' listener can fire inside a request scope (closing this connection with the request) and inside a
|
|
21
|
+
// `loop: 'off'` block (refusing the open). The server's lock wait: this open runs on the event loop, where
|
|
22
|
+
// SQLite's 5 s default and the 30 s journal-mode retry would stall every request.
|
|
19
23
|
heldDb = outsideSqliteOffLoop(() => outsideRequestStores(() => openHippoDb(hippoRoot, { busyWaitMs: SERVER_DB_WAIT_MS })));
|
|
20
24
|
checkpointer = startWalCheckpointer(getHippoDbPath(hippoRoot));
|
|
21
25
|
}
|
|
22
26
|
catch (err) {
|
|
23
27
|
stopHolding = true;
|
|
24
|
-
log.warn(`serve: could not hold a store connection; requests still work, only slower: ${errorMessage(err)}
|
|
28
|
+
log.warn(`serve: could not hold a store connection; requests still work, only slower: ${errorMessage(err)}`, errorFields(err));
|
|
25
29
|
}
|
|
26
30
|
};
|
|
27
31
|
const afterResponse = () => {
|
|
@@ -30,12 +34,35 @@ export function holdSqliteConnection(hippoRoot) {
|
|
|
30
34
|
};
|
|
31
35
|
const release = async () => {
|
|
32
36
|
stopHolding = true;
|
|
33
|
-
// The worker's connection closes first, so the held one is SQLite's last and its close checkpoints and deletes the
|
|
37
|
+
// The worker's connection closes first, so the held one is SQLite's last and its close checkpoints and deletes the
|
|
38
|
+
// WAL.
|
|
34
39
|
await checkpointer?.stop();
|
|
35
40
|
if (heldDb)
|
|
36
41
|
closeHippoDb(heldDb);
|
|
37
42
|
heldDb = undefined;
|
|
38
43
|
};
|
|
39
|
-
return { hold, afterResponse, release, runRequest: (run) => run
|
|
44
|
+
return { hold, afterResponse, release, runRequest: (run) => runSqliteRequest(run, 'server') };
|
|
45
|
+
}
|
|
46
|
+
/** The holder for the store a server serves: hippo.db's held connection, else a fence that keeps hippo.db shut. */
|
|
47
|
+
export function createStoreHolder(hippoRoot, store) {
|
|
48
|
+
if (hasGroup(store, 'localFiles'))
|
|
49
|
+
return holdSqliteConnection(hippoRoot);
|
|
50
|
+
log.info(`serve: the '${store.kind}' store serves ${hippoRoot}, so no hippo.db connection is held`);
|
|
51
|
+
// A missed port under another store would otherwise create and write a hippo.db that store never reads.
|
|
52
|
+
return {
|
|
53
|
+
hold: () => { },
|
|
54
|
+
afterResponse: () => { },
|
|
55
|
+
release: async () => { },
|
|
56
|
+
runRequest: (run) => runSqliteRequest(() => withSqliteBlocked(store.kind, run), 'server'),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Runs a route's store work off the event loop when the store has a worker, else in place. */
|
|
60
|
+
export function offLoopFor(store) {
|
|
61
|
+
return runsOffLoop(store) ? withSqliteOffLoop : (run) => run();
|
|
62
|
+
}
|
|
63
|
+
// A plugin's resolver may read hippo.db through this package's synchronous functions, so it runs outside the block of a
|
|
64
|
+
// `loop: 'off'` route.
|
|
65
|
+
export function outsideRouteBlock(resolver) {
|
|
66
|
+
return resolver && ((...args) => outsideSqliteOffLoop(() => resolver(...args)));
|
|
40
67
|
}
|
|
41
68
|
//# sourceMappingURL=held-connection.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { LastRecall, RecallWrites, Sync } from '../port.js';
|
|
2
|
-
/** What a finished recall wrote after its audit rows: the trace's id, null when none was asked or its write failed, and
|
|
2
|
+
/** What a finished recall wrote after its audit rows: the trace's id, null when none was asked or its write failed, and
|
|
3
|
+
* the ids strengthened. */
|
|
3
4
|
interface RecallFinish {
|
|
4
5
|
readonly traceId: number | null;
|
|
5
6
|
readonly strengthened: ReadonlySet<string>;
|
|
@@ -7,7 +8,8 @@ interface RecallFinish {
|
|
|
7
8
|
/** sqliteStore's finishRecall, for the synchronous recall that cannot await the port. */
|
|
8
9
|
export declare function finishRecallAt(hippoRoot: string, writes: RecallWrites): RecallFinish;
|
|
9
10
|
export declare function sqliteLastRecall(hippoRoot: string): Sync<LastRecall>;
|
|
10
|
-
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
11
|
+
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
12
|
+
* another store's would. */
|
|
11
13
|
export declare function servedLastRecall(sync: Sync<LastRecall>): LastRecall;
|
|
12
14
|
export {};
|
|
13
15
|
//# sourceMappingURL=last-recall-group.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// hippo.db's LastRecall group: the last recall sits in its meta table, and a traced outcome links on the outcome's own
|
|
1
|
+
// hippo.db's LastRecall group: the last recall sits in its meta table, and a traced outcome links on the outcome's own
|
|
2
|
+
// handle.
|
|
2
3
|
import { withWriteScope } from '../../db/index.js';
|
|
3
4
|
import { appendAuditEvent } from '../audit.js';
|
|
4
5
|
import { strengthenRetrieved, strengthenRetrievedInOwnTx } from '../entry-writes.js';
|
|
@@ -12,12 +13,15 @@ export function finishRecallAt(hippoRoot, writes) {
|
|
|
12
13
|
return onHandle(hippoRoot, (db) => {
|
|
13
14
|
const traceAndStrengthen = () => ({
|
|
14
15
|
traceId: writes.trace ? writeRecallTrace(db, writes.trace) : null,
|
|
15
|
-
strengthened: writes.strengthen
|
|
16
|
+
strengthened: writes.strengthen
|
|
17
|
+
? strengthenRetrievedInOwnTx(db, writes.strengthen.ids, writes.strengthen.opts)
|
|
18
|
+
: new Set(),
|
|
16
19
|
});
|
|
17
20
|
// Alone, the fail-soft trace and strengthen keep their own scopes so a busy lock loses them, never the read.
|
|
18
21
|
if (writes.goalLog.length === 0 && writes.audit.length === 0)
|
|
19
22
|
return traceAndStrengthen();
|
|
20
|
-
// Inside this scope both run as savepoints, so one recall commits once and a failed trace or strengthen still
|
|
23
|
+
// Inside this scope both run as savepoints, so one recall commits once and a failed trace or strengthen still
|
|
24
|
+
// unwinds alone.
|
|
21
25
|
return withWriteScope(db, 'finish_recall', () => {
|
|
22
26
|
writeGoalRecallLog(db, localGoalRecallRows(db, writes.goalLog));
|
|
23
27
|
for (const event of writes.audit)
|
|
@@ -46,7 +50,8 @@ export function sqliteLastRecall(hippoRoot) {
|
|
|
46
50
|
},
|
|
47
51
|
};
|
|
48
52
|
}
|
|
49
|
-
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
53
|
+
/** The group as a served store answers it: the call runs at once and resolves through a Promise, so a throw rejects as
|
|
54
|
+
* another store's would. */
|
|
50
55
|
export function servedLastRecall(sync) {
|
|
51
56
|
return {
|
|
52
57
|
applyTracedOutcome: async (outcome, traceId) => sync.applyTracedOutcome(outcome, traceId),
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Learning } from '../port/learning.js';
|
|
2
|
+
/** The learn passes' store work on the hippo.db under `hippoRoot`, each call on its own short-lived handle. */
|
|
3
|
+
export declare function sqliteLearning(hippoRoot: string): Learning;
|
|
4
|
+
//# sourceMappingURL=learning-group.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { confirmedOutcomeTimes } from '../audit.js';
|
|
2
|
+
import { loadAllEntries, loadCurrentEntriesFromOrigins, loadEntriesMentioning, readEntry } from '../entry-reads.js';
|
|
3
|
+
import { addTagToEntries, writeEntriesTogether, writeEntry } from '../entry-writes.js';
|
|
4
|
+
/** The learn passes' store work on the hippo.db under `hippoRoot`, each call on its own short-lived handle. */
|
|
5
|
+
export function sqliteLearning(hippoRoot) {
|
|
6
|
+
return {
|
|
7
|
+
allEntries: (tenantId) => loadAllEntries(hippoRoot, tenantId),
|
|
8
|
+
entriesMentioning: (tokens, tag, tenantId) => loadEntriesMentioning(hippoRoot, tokens, tag, tenantId),
|
|
9
|
+
readEntry: (id, tenantId) => readEntry(hippoRoot, id, tenantId),
|
|
10
|
+
currentEntriesFromOrigins: (tenantId, origins) => loadCurrentEntriesFromOrigins(hippoRoot, tenantId, origins),
|
|
11
|
+
writeEntry: (entry) => writeEntry(hippoRoot, entry),
|
|
12
|
+
writeEntriesTogether: (entries) => writeEntriesTogether(hippoRoot, entries),
|
|
13
|
+
addTagToEntries: (tenantId, ids, tag) => addTagToEntries(hippoRoot, tenantId, ids, tag),
|
|
14
|
+
confirmedOutcomeTimes: (tenantId) => confirmedOutcomeTimes(hippoRoot, tenantId),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=learning-group.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// hippo.db's half of the AuditMaintenance and LessonWrites store groups: the quality audit, audit prune and git learn's
|
|
1
|
+
// hippo.db's half of the AuditMaintenance and LessonWrites store groups: the quality audit, audit prune and git learn's
|
|
2
|
+
// batch.
|
|
2
3
|
import { pruneAuditRows } from '../audit.js';
|
|
3
4
|
import { loadTextsHoldingWords } from '../candidates.js';
|
|
4
5
|
import { deleteEntriesAutomatically, memoriesBackingObjects } from '../delete-and-batch.js';
|
|
@@ -78,7 +78,8 @@ interface RowSpec<K extends ObjectKind> {
|
|
|
78
78
|
readonly closeOp: AuditOp;
|
|
79
79
|
/** The one column a list may filter by equality. */
|
|
80
80
|
readonly filterColumn?: string;
|
|
81
|
-
/** Set for the kinds the graph extracts, so a save marks the graph stale and a close drops the object's graph
|
|
81
|
+
/** Set for the kinds the graph extracts, so a save marks the graph stale and a close drops the object's graph
|
|
82
|
+
* rows. */
|
|
82
83
|
readonly graphType?: SourceObjectType;
|
|
83
84
|
}
|
|
84
85
|
/** What one column of a new row can hold. */
|
|
@@ -86,12 +87,14 @@ export type ColumnValue = string | number | null;
|
|
|
86
87
|
interface InsertSpec<K extends SavableKind> {
|
|
87
88
|
readonly createOp: AuditOp;
|
|
88
89
|
readonly supersedeOp: AuditOp;
|
|
89
|
-
/** A versioned table has `version` and `change_summary`: a successor takes its predecessor's version plus one and the
|
|
90
|
+
/** A versioned table has `version` and `change_summary`: a successor takes its predecessor's version plus one and the
|
|
91
|
+
* caller's change note. */
|
|
90
92
|
readonly versioned: boolean;
|
|
91
93
|
/** The kind's own columns, in the order `values` fills them. */
|
|
92
94
|
readonly columns: readonly string[];
|
|
93
95
|
readonly values: (w: ObjectFields[K]) => readonly ColumnValue[];
|
|
94
|
-
/** The create audit's keys after the id, in the order they are stored: ids, counts and flags, never the object's
|
|
96
|
+
/** The create audit's keys after the id, in the order they are stored: ids, counts and flags, never the object's
|
|
97
|
+
* text. */
|
|
95
98
|
readonly createMeta: (w: ObjectFields[K], version: number) => JsonObject;
|
|
96
99
|
/** Keys the supersede audit stores after its own. */
|
|
97
100
|
readonly supersedeMeta?: (w: ObjectFields[K]) => JsonObject;
|
|
@@ -69,11 +69,40 @@ function parseSteps(raw, id) {
|
|
|
69
69
|
return [];
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
const rowToProcess = (row) => ({
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
const rowToProcess = (row) => ({
|
|
73
|
+
...head(row),
|
|
74
|
+
processName: row.process_name,
|
|
75
|
+
description: row.description,
|
|
76
|
+
steps: parseSteps(row.steps, row.id),
|
|
77
|
+
...versionedTail(row),
|
|
78
|
+
});
|
|
79
|
+
const rowToPolicy = (row) => ({
|
|
80
|
+
...head(row),
|
|
81
|
+
policyName: row.policy_name,
|
|
82
|
+
policyText: row.policy_text,
|
|
83
|
+
validFrom: row.valid_from,
|
|
84
|
+
validTo: row.valid_to,
|
|
85
|
+
...versionedTail(row),
|
|
86
|
+
});
|
|
87
|
+
const rowToSkill = (row) => ({
|
|
88
|
+
...head(row),
|
|
89
|
+
skillName: row.skill_name,
|
|
90
|
+
instructions: row.instructions,
|
|
91
|
+
trigger: row.trigger_text,
|
|
92
|
+
...versionedTail(row),
|
|
93
|
+
});
|
|
94
|
+
const rowToProjectBrief = (row) => ({
|
|
95
|
+
...head(row),
|
|
96
|
+
repo: row.repo,
|
|
97
|
+
summary: row.summary,
|
|
98
|
+
...versionedTail(row),
|
|
99
|
+
});
|
|
100
|
+
const rowToCustomerNote = (row) => ({
|
|
101
|
+
...head(row),
|
|
102
|
+
customer: row.customer,
|
|
103
|
+
note: row.note,
|
|
104
|
+
...versionedTail(row),
|
|
105
|
+
});
|
|
77
106
|
/** Tells an auto-refresh from a manual write in the audit log without a fourth audit op. */
|
|
78
107
|
function refreshMeta(w) {
|
|
79
108
|
return w.receiptCount === undefined ? { refreshed: false } : { refreshed: true, receipt_count: w.receiptCount };
|