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
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// One store handle per store for each request (HTTP call, MCP tool call, scoped CLI command), opened lazily and closed
|
|
1
|
+
// One store handle per store for each request (HTTP call, MCP tool call, scoped CLI command), opened lazily and closed
|
|
2
|
+
// with it.
|
|
2
3
|
import * as path from 'node:path';
|
|
3
4
|
import { connectWithFacts, getHippoDbPath } from './connect.js';
|
|
4
|
-
import { currentDeadline, currentRequestId, currentSignal, requestScopes } from '../util/request-scope.js';
|
|
5
|
+
import { currentDeadline, currentRequestId, currentSignal, requestScopes, } from '../util/request-scope.js';
|
|
5
6
|
// Handles a scope owns, so closeHippoDb leaves them open for the rest of the request.
|
|
6
7
|
const scopedHandles = new WeakSet();
|
|
7
8
|
// process.exit skips every finally, so one exit listener closes the handles of scopes still open.
|
|
@@ -79,7 +80,10 @@ export class RequestStores {
|
|
|
79
80
|
this.#handles.clear();
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Runs `fn` in a request scope whose handles close when `fn` settles; inside an open scope `fn` joins it and `opts` is
|
|
85
|
+
* ignored.
|
|
86
|
+
*/
|
|
83
87
|
export async function runWithRequestStores(fn, opts) {
|
|
84
88
|
const outer = currentRequestStores();
|
|
85
89
|
if (outer && !outer.closed)
|
|
@@ -94,7 +98,9 @@ export async function runWithRequestStores(fn, opts) {
|
|
|
94
98
|
}
|
|
95
99
|
});
|
|
96
100
|
}
|
|
97
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* runWithRequestStores for a synchronous `fn`, so a batch called from outside any request still opens each store once.
|
|
103
|
+
*/
|
|
98
104
|
export function withRequestStoresSync(fn) {
|
|
99
105
|
const outer = currentRequestStores();
|
|
100
106
|
if (outer && !outer.closed)
|
|
@@ -112,7 +118,10 @@ export function currentRequestStores() {
|
|
|
112
118
|
const scope = requestScopes.getStore();
|
|
113
119
|
return scope instanceof RequestStores ? scope : undefined;
|
|
114
120
|
}
|
|
115
|
-
/**
|
|
121
|
+
/**
|
|
122
|
+
* Runs `fn` outside every store scope, for a connection that must outlive the request that happens to open it; its log
|
|
123
|
+
* lines keep the request's id.
|
|
124
|
+
*/
|
|
116
125
|
export function outsideRequestStores(fn) {
|
|
117
126
|
return requestScopes.run({ requestId: currentRequestId() }, fn);
|
|
118
127
|
}
|
package/dist/db/tables.d.ts
CHANGED
|
@@ -7,7 +7,8 @@ export declare function tableExists(db: DatabaseSyncLike, tableName: string): bo
|
|
|
7
7
|
export declare function listTableNames(db: DatabaseSyncLike): string[];
|
|
8
8
|
/** Row count of one table; null when the table is missing or unreadable, which callers show as unknown. */
|
|
9
9
|
export declare function countTableRows(db: DatabaseSyncLike, table: string): number | null;
|
|
10
|
-
/** Sleep runs a store keeps; stats.json lists exactly these,
|
|
10
|
+
/** Sleep runs a store keeps; stats.json lists exactly these,
|
|
11
|
+
* so a recall's stats rewrite reads a fixed number of rows. */
|
|
11
12
|
export declare const CONSOLIDATION_RUNS_KEPT = 50;
|
|
12
13
|
export declare function pruneConsolidationRuns(db: DatabaseSyncLike, keep?: number): void;
|
|
13
14
|
//# sourceMappingURL=tables.d.ts.map
|
package/dist/db/tables.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { errorCode, log } from '../util/log.js';
|
|
1
|
+
import { errorCode, log, errorFields } from '../util/log.js';
|
|
2
2
|
/** Column names of one table; empty when the table is missing. */
|
|
3
3
|
export function tableColumns(db, tableName) {
|
|
4
4
|
if (!/^[a-z_]+$/i.test(tableName))
|
|
@@ -21,7 +21,10 @@ export function tableExists(db, tableName) {
|
|
|
21
21
|
/** Names of the real tables, without sqlite internals and FTS virtual tables. */
|
|
22
22
|
export function listTableNames(db) {
|
|
23
23
|
// SAFETY: each row's shape matches the single `name` column named in the SELECT below.
|
|
24
|
-
const rows = db
|
|
24
|
+
const rows = db
|
|
25
|
+
.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ` +
|
|
26
|
+
`AND sql NOT LIKE 'CREATE VIRTUAL TABLE%' ORDER BY name`)
|
|
27
|
+
.all();
|
|
25
28
|
return rows.map((r) => r.name);
|
|
26
29
|
}
|
|
27
30
|
/** Row count of one table; null when the table is missing or unreadable, which callers show as unknown. */
|
|
@@ -33,11 +36,16 @@ export function countTableRows(db, table) {
|
|
|
33
36
|
}
|
|
34
37
|
catch (err) {
|
|
35
38
|
// Callers treat an uncountable table as unknown; the bundle and doctor still finish.
|
|
36
|
-
log.warn(`could not count rows in table ${table}`, {
|
|
39
|
+
log.warn(`could not count rows in table ${table}`, {
|
|
40
|
+
table,
|
|
41
|
+
code: errorCode(err) || 'unknown',
|
|
42
|
+
...errorFields(err),
|
|
43
|
+
});
|
|
37
44
|
return null;
|
|
38
45
|
}
|
|
39
46
|
}
|
|
40
|
-
/** Sleep runs a store keeps; stats.json lists exactly these,
|
|
47
|
+
/** Sleep runs a store keeps; stats.json lists exactly these,
|
|
48
|
+
* so a recall's stats rewrite reads a fixed number of rows. */
|
|
41
49
|
export const CONSOLIDATION_RUNS_KEPT = 50;
|
|
42
50
|
export function pruneConsolidationRuns(db, keep = CONSOLIDATION_RUNS_KEPT) {
|
|
43
51
|
db.prepare(`
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Embedding vectors in the `memory_vectors` table: one Float32 BLOB per memory id, plus the one-time import of the old
|
|
3
|
+
* JSON index.
|
|
4
|
+
*/
|
|
2
5
|
import type { DatabaseSyncLike } from './index.js';
|
|
3
6
|
export declare const EMBEDDING_MODEL_META_KEY = "embedding_model";
|
|
4
7
|
export declare const MEMORY_VECTORS_DDL = "\n CREATE TABLE IF NOT EXISTS memory_vectors (\n memory_id TEXT PRIMARY KEY,\n model TEXT NOT NULL,\n dim INTEGER NOT NULL,\n vector BLOB NOT NULL\n );\n CREATE TRIGGER IF NOT EXISTS trg_memory_vectors_delete AFTER DELETE ON memories BEGIN\n DELETE FROM memory_vectors WHERE memory_id = old.id;\n END;\n";
|
|
@@ -27,13 +30,19 @@ export interface VectorRow {
|
|
|
27
30
|
readonly id: string;
|
|
28
31
|
readonly vector: Float32Array;
|
|
29
32
|
}
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
33
|
+
/**
|
|
34
|
+
* The `k` rows closest to `query` by cosine, best first; ties go to the smaller id, so row order never changes the top
|
|
35
|
+
* k.
|
|
36
|
+
* The query rounds to Float32 as stored vectors are, and scores add up in float64, so every store that feeds it the
|
|
37
|
+
* same bytes ranks alike.
|
|
38
|
+
*/
|
|
32
39
|
export declare function rankVectorRows(query: readonly number[], rows: Iterable<VectorRow>, k: number): VectorMatch[];
|
|
33
40
|
/** The `k` stored vectors closest to `query` among `memories m` rows passing `where` (SQL starting with ` AND`).
|
|
34
41
|
* Filters run before the cut, so rows a caller may not see can never push admitted rows out of the top k. */
|
|
35
42
|
export declare function topVectorMatches(db: DatabaseSyncLike, query: readonly number[], k: number, where: string, params: readonly (string | number)[]): Promise<VectorMatch[]>;
|
|
36
43
|
/** Move a legacy `embeddings.json` into `memory_vectors`, then keep the file as `embeddings.json.imported-<stamp>`.
|
|
37
|
-
*
|
|
44
|
+
* Runs after the migration commits, so the rename never outlives rolled-back rows; a file an older binary writes later
|
|
45
|
+
* imports the same way.
|
|
46
|
+
*/
|
|
38
47
|
export declare function importLegacyEmbeddingIndex(db: DatabaseSyncLike, hippoRoot: string): void;
|
|
39
48
|
//# sourceMappingURL=vector-store.d.ts.map
|
package/dist/db/vector-store.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Embedding vectors in the `memory_vectors` table: one Float32 BLOB per memory id, plus the one-time import of the old
|
|
3
|
+
* JSON index.
|
|
4
|
+
*/
|
|
2
5
|
import * as fs from 'fs';
|
|
3
6
|
import * as path from 'path';
|
|
4
7
|
import { withWriteScope } from './busy.js';
|
|
@@ -57,8 +60,9 @@ export function deleteOrphanVectors(db) {
|
|
|
57
60
|
function eachStoredVector(db, ids, take) {
|
|
58
61
|
const read = (rows) => {
|
|
59
62
|
// SAFETY: both SELECTs below name exactly these two columns; node:sqlite returns BLOBs as Uint8Array.
|
|
60
|
-
for (const row of rows)
|
|
63
|
+
for (const row of rows) {
|
|
61
64
|
take(row.memory_id, decodeVector(row.vector));
|
|
65
|
+
}
|
|
62
66
|
};
|
|
63
67
|
if (ids === undefined) {
|
|
64
68
|
read(db.prepare('SELECT memory_id, vector FROM memory_vectors').iterate());
|
|
@@ -67,7 +71,9 @@ function eachStoredVector(db, ids, take) {
|
|
|
67
71
|
const unique = [...new Set(ids)];
|
|
68
72
|
for (let i = 0; i < unique.length; i += ID_CHUNK) {
|
|
69
73
|
const chunk = unique.slice(i, i + ID_CHUNK);
|
|
70
|
-
read(db
|
|
74
|
+
read(db
|
|
75
|
+
.prepare(`SELECT memory_id, vector FROM memory_vectors WHERE memory_id IN (${placeholders(chunk.length)})`)
|
|
76
|
+
.all(...chunk));
|
|
71
77
|
}
|
|
72
78
|
}
|
|
73
79
|
/** Vectors for `ids`, or every stored vector when `ids` is omitted. */
|
|
@@ -95,8 +101,12 @@ export function storedVectorDims(db) {
|
|
|
95
101
|
export function hasStoredVectors(db) {
|
|
96
102
|
return db.prepare('SELECT 1 FROM memory_vectors LIMIT 1').get() !== undefined;
|
|
97
103
|
}
|
|
98
|
-
/**
|
|
99
|
-
*
|
|
104
|
+
/**
|
|
105
|
+
* The `k` rows closest to `query` by cosine, best first; ties go to the smaller id, so row order never changes the top
|
|
106
|
+
* k.
|
|
107
|
+
* The query rounds to Float32 as stored vectors are, and scores add up in float64, so every store that feeds it the
|
|
108
|
+
* same bytes ranks alike.
|
|
109
|
+
*/
|
|
100
110
|
export function rankVectorRows(query, rows, k) {
|
|
101
111
|
const best = bestMatches(query, k);
|
|
102
112
|
if (!best)
|
|
@@ -191,7 +201,9 @@ function stamp() {
|
|
|
191
201
|
}
|
|
192
202
|
// The codes a rename gets when another process holds the file open (Windows); any other failure would fail a copy too.
|
|
193
203
|
const RENAME_BLOCKED_CODES = new Set(['EPERM', 'EBUSY', 'EACCES']);
|
|
194
|
-
/**
|
|
204
|
+
/**
|
|
205
|
+
* Rename `fp` to `aside`; a rename blocked by an open handle falls back to a copy, so the bytes are kept either way.
|
|
206
|
+
*/
|
|
195
207
|
function moveAside(fp, aside) {
|
|
196
208
|
try {
|
|
197
209
|
fs.renameSync(fp, aside);
|
|
@@ -203,7 +215,10 @@ function moveAside(fp, aside) {
|
|
|
203
215
|
return false;
|
|
204
216
|
if (!RENAME_BLOCKED_CODES.has(code))
|
|
205
217
|
throw err;
|
|
206
|
-
log.warn(`could not rename ${path.basename(fp)} aside (${code}); copying it instead`, {
|
|
218
|
+
log.warn(`could not rename ${path.basename(fp)} aside (${code}); copying it instead`, {
|
|
219
|
+
path: fp,
|
|
220
|
+
...errorFields(err),
|
|
221
|
+
});
|
|
207
222
|
fs.copyFileSync(fp, aside, fs.constants.COPYFILE_EXCL);
|
|
208
223
|
try {
|
|
209
224
|
fs.rmSync(fp, { force: true });
|
|
@@ -216,7 +231,8 @@ function moveAside(fp, aside) {
|
|
|
216
231
|
return true;
|
|
217
232
|
}
|
|
218
233
|
}
|
|
219
|
-
// The old writer only wrote a plain object of id to number[]; any other shape is corrupt, and non-numeric entries are
|
|
234
|
+
// The old writer only wrote a plain object of id to number[]; any other shape is corrupt, and non-numeric entries are
|
|
235
|
+
// dropped.
|
|
220
236
|
function parseLegacyIndex(raw) {
|
|
221
237
|
let parsed;
|
|
222
238
|
try {
|
|
@@ -235,7 +251,9 @@ function parseLegacyIndex(raw) {
|
|
|
235
251
|
return index;
|
|
236
252
|
}
|
|
237
253
|
/** Move a legacy `embeddings.json` into `memory_vectors`, then keep the file as `embeddings.json.imported-<stamp>`.
|
|
238
|
-
*
|
|
254
|
+
* Runs after the migration commits, so the rename never outlives rolled-back rows; a file an older binary writes later
|
|
255
|
+
* imports the same way.
|
|
256
|
+
*/
|
|
239
257
|
export function importLegacyEmbeddingIndex(db, hippoRoot) {
|
|
240
258
|
const fp = path.join(hippoRoot, LEGACY_EMBEDDINGS_FILE);
|
|
241
259
|
let raw;
|
|
@@ -252,17 +270,19 @@ export function importLegacyEmbeddingIndex(db, hippoRoot) {
|
|
|
252
270
|
const aside = `${fp}.corrupt-${stamp()}`;
|
|
253
271
|
if (!moveAside(fp, aside))
|
|
254
272
|
return;
|
|
255
|
-
log.error(`${LEGACY_EMBEDDINGS_FILE} could not be parsed; kept it as ${path.basename(aside)} and the next embed rebuilds
|
|
256
|
-
|
|
257
|
-
|
|
273
|
+
log.error(`${LEGACY_EMBEDDINGS_FILE} could not be parsed; kept it as ${path.basename(aside)} and the next embed rebuilds ` +
|
|
274
|
+
`the index`, { hippoRoot });
|
|
275
|
+
db.prepare(`INSERT INTO meta(key, value) VALUES(?, ?) ON CONFLICT(key) DO UPDATE SET value=excluded.value`).run(EMBEDDING_MODEL_META_KEY, QUARANTINED_INDEX_IDENTITY);
|
|
258
276
|
return;
|
|
259
277
|
}
|
|
260
278
|
// SAFETY: the SELECT names exactly the one column read.
|
|
261
|
-
const model = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(EMBEDDING_MODEL_META_KEY)
|
|
279
|
+
const model = db.prepare(`SELECT value FROM meta WHERE key = ?`).get(EMBEDDING_MODEL_META_KEY)
|
|
280
|
+
?.value ?? '';
|
|
262
281
|
const written = withWriteScope(db, 'import_legacy_vectors', () => upsertVectors(db, index, model));
|
|
263
282
|
const backup = `${fp}.imported-${stamp()}`;
|
|
264
283
|
if (moveAside(fp, backup)) {
|
|
265
|
-
log.info(`moved ${written} vectors from ${LEGACY_EMBEDDINGS_FILE} into the store; the file is kept as
|
|
284
|
+
log.info(`moved ${written} vectors from ${LEGACY_EMBEDDINGS_FILE} into the store; the file is kept as ` +
|
|
285
|
+
`${path.basename(backup)}`, { hippoRoot });
|
|
266
286
|
}
|
|
267
287
|
}
|
|
268
288
|
//# sourceMappingURL=vector-store.js.map
|
|
@@ -6,6 +6,7 @@ export interface WalCheckpointer {
|
|
|
6
6
|
}
|
|
7
7
|
/** The wal_autocheckpoint value for a new connection to `dbPath` in this process. */
|
|
8
8
|
export declare function autoCheckpointPages(dbPath: string): number;
|
|
9
|
-
/** Checkpoints `dbPath` off the calling thread until `stop()`;
|
|
9
|
+
/** Checkpoints `dbPath` off the calling thread until `stop()`;
|
|
10
|
+
* the worker starts with the first checkpoint that is due. */
|
|
10
11
|
export declare function startWalCheckpointer(dbPath: string): WalCheckpointer;
|
|
11
12
|
//# sourceMappingURL=wal-checkpointer.d.ts.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// A served store's WAL is checkpointed on a worker thread: the fsync calls of a checkpoint would otherwise stall every
|
|
1
|
+
// A served store's WAL is checkpointed on a worker thread: the fsync calls of a checkpoint would otherwise stall every
|
|
2
|
+
// request on the event loop.
|
|
2
3
|
import * as path from 'node:path';
|
|
3
4
|
import { Worker } from 'node:worker_threads';
|
|
4
|
-
import { errorMessage, log } from '../util/log.js';
|
|
5
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
5
6
|
import { DEFAULT_BUSY_WAIT_MS } from './busy.js';
|
|
6
7
|
// WAL pages at which a connection checkpoints inside its own commit.
|
|
7
8
|
const INLINE_CHECKPOINT_PAGES = 100;
|
|
@@ -43,7 +44,19 @@ const backgrounded = new Set();
|
|
|
43
44
|
export function autoCheckpointPages(dbPath) {
|
|
44
45
|
return backgrounded.has(path.resolve(dbPath)) ? BACKSTOP_CHECKPOINT_PAGES : INLINE_CHECKPOINT_PAGES;
|
|
45
46
|
}
|
|
46
|
-
/**
|
|
47
|
+
/** An explicit execArgv keeps the parent's loaders out of the
|
|
48
|
+
* worker and silences its repeat of the node:sqlite warning. */
|
|
49
|
+
function newCheckpointWorker(key) {
|
|
50
|
+
const started = new Worker(WORKER_SOURCE, {
|
|
51
|
+
eval: true,
|
|
52
|
+
execArgv: ['--no-warnings'],
|
|
53
|
+
workerData: { dbPath: key, maxPasses: MAX_PASSES },
|
|
54
|
+
});
|
|
55
|
+
started.unref();
|
|
56
|
+
return started;
|
|
57
|
+
}
|
|
58
|
+
/** Checkpoints `dbPath` off the calling thread until `stop()`;
|
|
59
|
+
* the worker starts with the first checkpoint that is due. */
|
|
47
60
|
export function startWalCheckpointer(dbPath) {
|
|
48
61
|
const key = path.resolve(dbPath);
|
|
49
62
|
let worker;
|
|
@@ -58,16 +71,15 @@ export function startWalCheckpointer(dbPath) {
|
|
|
58
71
|
backgrounded.delete(key);
|
|
59
72
|
};
|
|
60
73
|
const spawn = () => {
|
|
61
|
-
|
|
62
|
-
const started = new Worker(WORKER_SOURCE, { eval: true, execArgv: ['--no-warnings'], workerData: { dbPath: key, maxPasses: MAX_PASSES } });
|
|
63
|
-
started.unref();
|
|
74
|
+
const started = newCheckpointWorker(key);
|
|
64
75
|
started.on('message', (settled) => {
|
|
65
76
|
running = false;
|
|
66
77
|
due = settled ? RESPONSES_PER_CHECKPOINT : RESPONSES_PER_RETRY;
|
|
67
78
|
});
|
|
68
79
|
started.on('error', (err) => {
|
|
69
80
|
end();
|
|
70
|
-
log.warn(`background checkpoint of ${key} stopped (${errorMessage(err)});
|
|
81
|
+
log.warn(`background checkpoint of ${key} stopped (${errorMessage(err)}); ` +
|
|
82
|
+
`each connection checkpoints inside its own commit again`, errorFields(err));
|
|
71
83
|
});
|
|
72
84
|
exited = new Promise((resolve) => { started.once('exit', () => resolve()); });
|
|
73
85
|
return started;
|
package/dist/doctor.d.ts
CHANGED
|
@@ -20,7 +20,10 @@ export interface DoctorReport {
|
|
|
20
20
|
/** Inputs for {@link runDoctor}; defaults come from the process. */
|
|
21
21
|
export interface DoctorOpts {
|
|
22
22
|
cwd?: string;
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Home directory used to find agent configuration (~/.claude unless CLAUDE_CONFIG_DIR is set, ~/.codex unless
|
|
25
|
+
* CODEX_HOME is).
|
|
26
|
+
*/
|
|
24
27
|
home?: string;
|
|
25
28
|
version: string;
|
|
26
29
|
nodeVersion?: string;
|
package/dist/doctor.js
CHANGED
|
@@ -7,14 +7,14 @@ import { findHippoStoreDir, isInitialized } from './core/project-identity.js';
|
|
|
7
7
|
import { getGlobalRoot } from './sharing/global-store.js';
|
|
8
8
|
import { readStoreHealth } from './store/diagnostics.js';
|
|
9
9
|
import { loadConfig } from './core/config.js';
|
|
10
|
-
import {
|
|
10
|
+
import { getCurrentSchemaVersion, IncompatibleBinaryError, } from './db/index.js';
|
|
11
11
|
import { REPLAY_AFTER_MS, TRANSCRIPT_FILL_WINDOW_MS } from './core/compaction-timing.js';
|
|
12
12
|
import { SPOOL_DIR, spoolCounts } from './capture/compaction-spool.js';
|
|
13
13
|
import { isEmbeddingAvailable } from './embeddings/local.js';
|
|
14
14
|
import { CODEX_TRUST_LINE, isCodexPresent } from './hooks/shared.js';
|
|
15
15
|
import { claudeConfigDir, codexHomeDir } from './util/agent-homes.js';
|
|
16
16
|
import { planProjectRepair } from './sharing/project-merge.js';
|
|
17
|
-
import {
|
|
17
|
+
import { readProjectTags } from './store/project-tags.js';
|
|
18
18
|
import { resolveTenantId } from './store/tenant.js';
|
|
19
19
|
import { errorMessage, log } from './util/log.js';
|
|
20
20
|
import { readJsonFile, isJsonObjectLiteral } from './util/json.js';
|
|
@@ -60,8 +60,9 @@ function codexCheck(home) {
|
|
|
60
60
|
['hippo compact-resume', 'resume after compaction'],
|
|
61
61
|
];
|
|
62
62
|
const missing = codexHooks.filter(([marker]) => !text.includes(marker)).map(([, what]) => what);
|
|
63
|
-
if (missing.length === 0)
|
|
63
|
+
if (missing.length === 0) {
|
|
64
64
|
return { id: 'codex', status: 'pass', detail: `Codex: hippo memory hooks installed. ${CODEX_TRUST_LINE}` };
|
|
65
|
+
}
|
|
65
66
|
return {
|
|
66
67
|
id: 'codex',
|
|
67
68
|
status: 'warn',
|
|
@@ -76,14 +77,22 @@ const FAILURE_LOG_SCHEMA = 46;
|
|
|
76
77
|
/** The failed-tool-call count over the last 7 days, or why it could not be read. */
|
|
77
78
|
function failuresCheck(failures, schemaVersion) {
|
|
78
79
|
if (failures.ok) {
|
|
79
|
-
return {
|
|
80
|
+
return {
|
|
81
|
+
id: 'failures',
|
|
82
|
+
status: 'info',
|
|
83
|
+
detail: `${failures.value} failed tool calls logged in 7 days (hippo failures for detail)`,
|
|
84
|
+
};
|
|
80
85
|
}
|
|
81
86
|
if (!failures.message.includes('no such table')) {
|
|
82
87
|
return { id: 'failures', status: 'warn', detail: `cannot read the failure log: ${failures.message}` };
|
|
83
88
|
}
|
|
84
89
|
return schemaVersion < FAILURE_LOG_SCHEMA
|
|
85
90
|
? { id: 'failures', status: 'info', detail: 'no failure log yet (hippo creates it on the next write)' }
|
|
86
|
-
: {
|
|
91
|
+
: {
|
|
92
|
+
id: 'failures',
|
|
93
|
+
status: 'warn',
|
|
94
|
+
detail: 'the failure_log table is missing, so failed tool calls are not being logged',
|
|
95
|
+
};
|
|
87
96
|
}
|
|
88
97
|
/** How long ago the store last slept (consolidated), or why that history could not be read. */
|
|
89
98
|
function sleepCheck(lastSleep, now) {
|
|
@@ -101,8 +110,17 @@ function sleepCheck(lastSleep, now) {
|
|
|
101
110
|
}
|
|
102
111
|
const days = Math.floor((now.getTime() - when) / DAY_MS);
|
|
103
112
|
return days > 7
|
|
104
|
-
? {
|
|
105
|
-
|
|
113
|
+
? {
|
|
114
|
+
id: 'sleep',
|
|
115
|
+
status: 'warn',
|
|
116
|
+
detail: `last sleep ${days} days ago`,
|
|
117
|
+
fix: 'hippo sleep, and check the session-end hook is installed',
|
|
118
|
+
}
|
|
119
|
+
: {
|
|
120
|
+
id: 'sleep',
|
|
121
|
+
status: 'pass',
|
|
122
|
+
detail: `last sleep ${days === 0 ? 'today' : `${days} day${days === 1 ? '' : 's'} ago`}`,
|
|
123
|
+
};
|
|
106
124
|
}
|
|
107
125
|
/** Spool counts in their own try, so a spool that cannot be read never hides the database counts. */
|
|
108
126
|
function readSpool(store, now, spoolFs) {
|
|
@@ -113,11 +131,18 @@ function readSpool(store, now, spoolFs) {
|
|
|
113
131
|
return { counts: { waiting: 0, stale: 0, bad: 0 }, unread: `; spool not read: ${errorMessage(err)}` };
|
|
114
132
|
}
|
|
115
133
|
}
|
|
116
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* Compaction records the PostCompact hook left unfinished and spool files a replay has not finished, which `hippo
|
|
136
|
+
* sleep` replays.
|
|
137
|
+
*/
|
|
117
138
|
function compactionsCheck(compactions, store, now, spoolFs) {
|
|
118
139
|
if (!compactions.ok) {
|
|
119
140
|
return compactions.message.includes('no such table')
|
|
120
|
-
? {
|
|
141
|
+
? {
|
|
142
|
+
id: 'compactions',
|
|
143
|
+
status: 'info',
|
|
144
|
+
detail: 'no compaction records yet (hippo creates them on the next write)',
|
|
145
|
+
}
|
|
121
146
|
: { id: 'compactions', status: 'warn', detail: `cannot read the compaction records: ${compactions.message}` };
|
|
122
147
|
}
|
|
123
148
|
const { total, summarised, started } = compactions.value;
|
|
@@ -129,28 +154,37 @@ function compactionsCheck(compactions, store, now, spoolFs) {
|
|
|
129
154
|
return { id: 'compactions', status: 'pass', detail: recorded };
|
|
130
155
|
const fix = [
|
|
131
156
|
stuck + spool.waiting + spool.stale > 0 ? 'hippo sleep (replays them)' : '',
|
|
132
|
-
spool.bad > 0
|
|
157
|
+
spool.bad > 0
|
|
158
|
+
? `open the .bad files in ${path.join(store, SPOOL_DIR)}, save what you still need with hippo remember, then ` +
|
|
159
|
+
`delete them`
|
|
160
|
+
: '',
|
|
133
161
|
].filter((s) => s !== '');
|
|
134
162
|
const unfinished = stuck === 0
|
|
135
163
|
? `${recorded} in the store`
|
|
136
164
|
: `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes ` +
|
|
137
165
|
`(${summarised} with a summary whose memories are not saved yet, ${started} with no summary yet)`;
|
|
138
|
-
const note = spooled
|
|
166
|
+
const note = spooled
|
|
167
|
+
? `; spool: ${spool.waiting} waiting, ${spool.stale} left by a replay that stopped, ${spool.bad} .bad`
|
|
168
|
+
: '';
|
|
139
169
|
return { id: 'compactions', status: 'warn', detail: `${unfinished}${note}${unread}`, fix: fix.join('; ') };
|
|
140
170
|
}
|
|
141
171
|
/** Old project tags in the global store, counted by the repair's own plan so a truly user-global merge never warns. */
|
|
142
172
|
function projectsCheck(globalRoot) {
|
|
143
|
-
let db = null;
|
|
144
173
|
try {
|
|
145
|
-
|
|
146
|
-
const r = planProjectRepair(projectTagReads(db, resolveTenantId({})), globalRoot);
|
|
174
|
+
const r = readProjectTags(globalRoot, resolveTenantId({}), (reads) => planProjectRepair(reads, globalRoot));
|
|
147
175
|
const found = [
|
|
148
176
|
r.copies.length > 0 ? `${r.copies.length} imported notes copied under the wrong project` : '',
|
|
149
|
-
r.folds.length > 0
|
|
177
|
+
r.folds.length > 0
|
|
178
|
+
? `old project names that now resolve to another project: ` +
|
|
179
|
+
`${r.folds.map((f) => `${f.from} -> ${f.into}`).join(', ')}`
|
|
180
|
+
: '',
|
|
150
181
|
r.collisions.length > 0
|
|
151
|
-
? `old project names shared by several projects, folded by hand only:
|
|
182
|
+
? `old project names shared by several projects, folded by hand only: ` +
|
|
183
|
+
`${r.collisions.map((c) => `${c.name} (${c.ids.join(', ')})`).join('; ')}`
|
|
184
|
+
: '',
|
|
185
|
+
r.toProject.length + r.setAside.length > 0
|
|
186
|
+
? `${r.toProject.length + r.setAside.length} merged memories tagged user-global`
|
|
152
187
|
: '',
|
|
153
|
-
r.toProject.length + r.setAside.length > 0 ? `${r.toProject.length + r.setAside.length} merged memories tagged user-global` : '',
|
|
154
188
|
].filter((s) => s !== '');
|
|
155
189
|
return found.length === 0
|
|
156
190
|
? { id: 'projects', status: 'pass', detail: 'no duplicate or out-of-date project tags in the global store' }
|
|
@@ -164,22 +198,27 @@ function projectsCheck(globalRoot) {
|
|
|
164
198
|
catch (err) {
|
|
165
199
|
return { id: 'projects', status: 'info', detail: `project tags not checked (${errorMessage(err)})` };
|
|
166
200
|
}
|
|
167
|
-
finally {
|
|
168
|
-
if (db !== null)
|
|
169
|
-
closeHippoDb(db);
|
|
170
|
-
}
|
|
171
201
|
}
|
|
172
202
|
function nodeCheck(node) {
|
|
173
203
|
return versionAtLeast(node, MIN_NODE)
|
|
174
204
|
? { id: 'node', status: 'pass', detail: `Node.js ${node}` }
|
|
175
|
-
: {
|
|
205
|
+
: {
|
|
206
|
+
id: 'node',
|
|
207
|
+
status: 'fail',
|
|
208
|
+
detail: `Node.js ${node} is older than ${MIN_NODE}`,
|
|
209
|
+
fix: `Install Node.js ${MIN_NODE} or newer`,
|
|
210
|
+
};
|
|
176
211
|
}
|
|
177
212
|
/** The store the checks run against (project first, then global), and the check that says which. */
|
|
178
213
|
function storeCheck(local, globalRoot, hasGlobal) {
|
|
179
214
|
if (local !== null && isInitialized(local)) {
|
|
180
215
|
return {
|
|
181
216
|
store: local,
|
|
182
|
-
check: {
|
|
217
|
+
check: {
|
|
218
|
+
id: 'store',
|
|
219
|
+
status: 'pass',
|
|
220
|
+
detail: `project store at ${local}${hasGlobal ? ` (global store at ${globalRoot} too)` : ''}`,
|
|
221
|
+
},
|
|
183
222
|
};
|
|
184
223
|
}
|
|
185
224
|
if (local !== null) {
|
|
@@ -219,30 +258,49 @@ function schemaCheck(have, want) {
|
|
|
219
258
|
return have === want
|
|
220
259
|
? { id: 'schema', status: 'pass', detail: `database schema v${have}` }
|
|
221
260
|
: have > want
|
|
222
|
-
? {
|
|
223
|
-
|
|
261
|
+
? {
|
|
262
|
+
id: 'schema',
|
|
263
|
+
status: 'fail',
|
|
264
|
+
detail: `database schema v${have} is newer than this hippo (v${want})`,
|
|
265
|
+
fix: 'npm install -g hippo-memory@latest',
|
|
266
|
+
}
|
|
267
|
+
: {
|
|
268
|
+
id: 'schema',
|
|
269
|
+
status: 'info',
|
|
270
|
+
detail: `database schema v${have}; hippo migrates it to v${want} on the next write`,
|
|
271
|
+
};
|
|
224
272
|
}
|
|
225
273
|
function memoriesCheck(memories, dormant) {
|
|
226
|
-
const memoryCheck = {
|
|
274
|
+
const memoryCheck = {
|
|
275
|
+
id: 'memories',
|
|
276
|
+
status: 'info',
|
|
277
|
+
detail: `${memories ?? '?'} memories${dormant !== null ? `, ${dormant} dormant` : ''}`,
|
|
278
|
+
};
|
|
227
279
|
if (memories === 0) {
|
|
228
280
|
memoryCheck.status = 'warn';
|
|
229
281
|
memoryCheck.fix = 'hippo learn --git (seed lessons from git history)';
|
|
230
282
|
}
|
|
231
283
|
return memoryCheck;
|
|
232
284
|
}
|
|
233
|
-
/**
|
|
285
|
+
/**
|
|
286
|
+
* Whether the full-text index still matches `memories`; opening a current store no longer checks, so doctor reports and
|
|
287
|
+
* sleep repairs.
|
|
288
|
+
*/
|
|
234
289
|
function ftsCheck(fts) {
|
|
235
290
|
if (!fts.ok)
|
|
236
291
|
return { id: 'fts', status: 'warn', detail: `cannot read the full-text index: ${fts.message}` };
|
|
237
292
|
const counts = fts.value;
|
|
238
|
-
if (counts === null)
|
|
293
|
+
if (counts === null) {
|
|
239
294
|
return { id: 'fts', status: 'info', detail: 'no full-text index; search uses slower LIKE matching' };
|
|
240
|
-
|
|
295
|
+
}
|
|
296
|
+
if (counts.memories === counts.fts) {
|
|
241
297
|
return { id: 'fts', status: 'pass', detail: `full-text index in sync (${counts.fts} rows)` };
|
|
298
|
+
}
|
|
242
299
|
return {
|
|
243
300
|
id: 'fts',
|
|
244
301
|
status: 'warn',
|
|
245
|
-
detail: `full-text index out of sync: ${counts.fts} indexed rows for ${counts.memories} memories, so search can
|
|
302
|
+
detail: `full-text index out of sync: ${counts.fts} indexed rows for ${counts.memories} memories, so search can ` +
|
|
303
|
+
`miss memories or match removed ones`,
|
|
246
304
|
fix: 'hippo sleep (re-syncs the index)',
|
|
247
305
|
};
|
|
248
306
|
}
|
|
@@ -270,12 +328,16 @@ function databaseChecks(store, now, spoolFs) {
|
|
|
270
328
|
});
|
|
271
329
|
}
|
|
272
330
|
catch (err) {
|
|
273
|
-
return [
|
|
331
|
+
return [
|
|
332
|
+
{
|
|
274
333
|
id: 'schema',
|
|
275
334
|
status: 'fail',
|
|
276
335
|
detail: `cannot open the database: ${errorMessage(err)}`,
|
|
277
|
-
fix: err instanceof IncompatibleBinaryError
|
|
278
|
-
|
|
336
|
+
fix: err instanceof IncompatibleBinaryError
|
|
337
|
+
? 'npm install -g hippo-memory@latest'
|
|
338
|
+
: 'check file permissions on the .hippo folder',
|
|
339
|
+
},
|
|
340
|
+
];
|
|
279
341
|
}
|
|
280
342
|
return [
|
|
281
343
|
schemaCheck(health.schemaVersion, getCurrentSchemaVersion()),
|
|
@@ -299,20 +361,37 @@ const CLAUDE_CODE_HOOKS = [
|
|
|
299
361
|
function claudeCodeCheck(home) {
|
|
300
362
|
const claudeDir = claudeConfigDir(home);
|
|
301
363
|
if (!fs.existsSync(claudeDir)) {
|
|
302
|
-
return {
|
|
364
|
+
return {
|
|
365
|
+
id: 'claude-code',
|
|
366
|
+
status: 'info',
|
|
367
|
+
detail: 'Claude Code not found; other agents can use hippo over MCP (hippo mcp)',
|
|
368
|
+
};
|
|
303
369
|
}
|
|
304
370
|
const settings = readJson(path.join(claudeDir, 'settings.json'));
|
|
305
371
|
const text = settings === null ? '' : JSON.stringify(settings);
|
|
306
372
|
const viaPlugin = /hippo-memory@/.test(text);
|
|
307
373
|
const missing = CLAUDE_CODE_HOOKS.filter(([marker]) => !text.includes(marker)).map(([, what]) => what);
|
|
308
374
|
if (viaPlugin) {
|
|
309
|
-
return {
|
|
375
|
+
return {
|
|
376
|
+
id: 'claude-code',
|
|
377
|
+
status: 'pass',
|
|
378
|
+
detail: 'Claude Code: hippo plugin enabled (all hooks, including compaction and failed-tool capture)',
|
|
379
|
+
};
|
|
310
380
|
}
|
|
311
381
|
if (missing.length === 0) {
|
|
312
|
-
return {
|
|
382
|
+
return {
|
|
383
|
+
id: 'claude-code',
|
|
384
|
+
status: 'pass',
|
|
385
|
+
detail: 'Claude Code: all hippo hooks installed, including compaction and failed-tool capture',
|
|
386
|
+
};
|
|
313
387
|
}
|
|
314
388
|
if (missing.length === CLAUDE_CODE_HOOKS.length) {
|
|
315
|
-
return {
|
|
389
|
+
return {
|
|
390
|
+
id: 'claude-code',
|
|
391
|
+
status: 'warn',
|
|
392
|
+
detail: 'Claude Code found, but no hippo hooks are installed',
|
|
393
|
+
fix: 'hippo hook install claude-code',
|
|
394
|
+
};
|
|
316
395
|
}
|
|
317
396
|
return {
|
|
318
397
|
id: 'claude-code',
|
|
@@ -340,7 +419,8 @@ export function runDoctor(opts) {
|
|
|
340
419
|
checks.push({
|
|
341
420
|
id: 'pilot',
|
|
342
421
|
status: 'info',
|
|
343
|
-
detail: `pilot holdout on: about ${holdoutRateBp / 100}% of sessions get no memories pushed by hippo
|
|
422
|
+
detail: `pilot holdout on: about ${holdoutRateBp / 100}% of sessions get no memories pushed by hippo ` +
|
|
423
|
+
`(pilot.holdoutRateBp=${holdoutRateBp})`,
|
|
344
424
|
});
|
|
345
425
|
}
|
|
346
426
|
if (hasGlobal)
|
|
@@ -351,7 +431,9 @@ export function runDoctor(opts) {
|
|
|
351
431
|
checks.push({
|
|
352
432
|
id: 'embeddings',
|
|
353
433
|
status: 'info',
|
|
354
|
-
detail: isEmbeddingAvailable()
|
|
434
|
+
detail: isEmbeddingAvailable()
|
|
435
|
+
? 'local embeddings available (hybrid search)'
|
|
436
|
+
: 'embeddings not installed; recall uses BM25 (optional: hippo embed --help)',
|
|
355
437
|
});
|
|
356
438
|
return { ok: !checks.some((c) => c.status === 'fail'), version: opts.version, store, checks };
|
|
357
439
|
}
|