hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
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,56 +110,81 @@ 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
|
-
function readSpool(store, now) {
|
|
126
|
+
function readSpool(store, now, spoolFs) {
|
|
109
127
|
try {
|
|
110
|
-
return { counts: spoolCounts(store, now, REPLAY_AFTER_MS), unread: '' };
|
|
128
|
+
return { counts: spoolCounts(store, now, REPLAY_AFTER_MS, spoolFs), unread: '' };
|
|
111
129
|
}
|
|
112
130
|
catch (err) {
|
|
113
131
|
return { counts: { waiting: 0, stale: 0, bad: 0 }, unread: `; spool not read: ${errorMessage(err)}` };
|
|
114
132
|
}
|
|
115
133
|
}
|
|
116
|
-
/**
|
|
117
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Compaction records the PostCompact hook left unfinished and spool files a replay has not finished, which `hippo
|
|
136
|
+
* sleep` replays.
|
|
137
|
+
*/
|
|
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;
|
|
124
149
|
const stuck = summarised + started;
|
|
125
|
-
const { counts: spool, unread } = readSpool(store, now);
|
|
150
|
+
const { counts: spool, unread } = readSpool(store, now, spoolFs);
|
|
126
151
|
const spooled = spool.waiting + spool.stale + spool.bad > 0;
|
|
127
152
|
const recorded = `${total} compaction${total === 1 ? '' : 's'} recorded, none stuck`;
|
|
128
153
|
if (stuck === 0 && !spooled && unread === '')
|
|
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
|
}
|
|
@@ -260,7 +318,7 @@ function tokensCheck(tokens) {
|
|
|
260
318
|
};
|
|
261
319
|
}
|
|
262
320
|
/** Checks that read the store's database; a store that cannot be opened becomes one failed schema check. */
|
|
263
|
-
function databaseChecks(store, now) {
|
|
321
|
+
function databaseChecks(store, now, spoolFs) {
|
|
264
322
|
let health;
|
|
265
323
|
try {
|
|
266
324
|
health = readStoreHealth(store, {
|
|
@@ -270,12 +328,16 @@ function databaseChecks(store, now) {
|
|
|
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()),
|
|
@@ -284,7 +346,7 @@ function databaseChecks(store, now) {
|
|
|
284
346
|
tokensCheck(health.tokens),
|
|
285
347
|
failuresCheck(health.failures, health.schemaVersion),
|
|
286
348
|
sleepCheck(health.lastSleep, now),
|
|
287
|
-
compactionsCheck(health.compactions, store, now),
|
|
349
|
+
compactionsCheck(health.compactions, store, now, spoolFs),
|
|
288
350
|
];
|
|
289
351
|
}
|
|
290
352
|
// Each hook and what it does, so a partial install says what is missing.
|
|
@@ -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',
|
|
@@ -334,13 +413,14 @@ export function runDoctor(opts) {
|
|
|
334
413
|
const { store, check } = storeCheck(local, globalRoot, hasGlobal);
|
|
335
414
|
checks.push(check);
|
|
336
415
|
if (store !== null)
|
|
337
|
-
checks.push(...databaseChecks(store, now));
|
|
416
|
+
checks.push(...databaseChecks(store, now, opts.spoolFs));
|
|
338
417
|
const holdoutRateBp = store === null ? 0 : loadConfig(store).pilot.holdoutRateBp;
|
|
339
418
|
if (holdoutRateBp > 0) {
|
|
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
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/** The one call this file makes on a Transformers.js feature-extraction pipeline, and the part of its tensor it
|
|
1
|
+
/** The one call this file makes on a Transformers.js feature-extraction pipeline, and the part of its tensor it
|
|
2
|
+
* reads. */
|
|
2
3
|
interface EmbeddingPipeline {
|
|
3
4
|
(input: string, options: {
|
|
4
5
|
pooling: 'cls' | 'mean';
|
|
@@ -25,7 +26,8 @@ interface TransformersModule {
|
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
28
|
export declare const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
|
|
28
|
-
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS
|
|
29
|
+
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS
|
|
30
|
+
* degrades mean-trained models. */
|
|
29
31
|
export declare function poolingFor(model: string): 'cls' | 'mean';
|
|
30
32
|
/** `query` is search input, `passage` is a document being indexed; no role means no prefix on any model. */
|
|
31
33
|
export type EmbeddingRole = 'query' | 'passage';
|
|
@@ -44,7 +46,8 @@ export interface LocalTransformers {
|
|
|
44
46
|
export interface LocalEmbedder {
|
|
45
47
|
isAvailable(): boolean;
|
|
46
48
|
/** Throws, with the reason, when the model's pipeline cannot load: a provider-level failure, not a per-item skip.
|
|
47
|
-
* `signal` ends the wait, never the load, and only once the load is downloading: a load from disk ends soon on its
|
|
49
|
+
* `signal` ends the wait, never the load, and only once the load is downloading: a load from disk ends soon on its
|
|
50
|
+
* own, a download may not. */
|
|
48
51
|
requirePipeline(model: string, signal?: AbortSignal): Promise<void>;
|
|
49
52
|
/** `text`'s vector, or `[]` when the model is missing or fails; `role` adds e5-style prefixes. */
|
|
50
53
|
embed(text: string, model: string, role?: EmbeddingRole): Promise<number[]>;
|
|
@@ -56,7 +59,8 @@ export declare const sharedLocalEmbedder: LocalEmbedder;
|
|
|
56
59
|
/** Check (synchronously) if @xenova/transformers or @huggingface/transformers is installed. */
|
|
57
60
|
export declare function isEmbeddingAvailable(): boolean;
|
|
58
61
|
export declare function resolveEmbeddingModel(hippoRoot: string, explicitModel?: string): string;
|
|
59
|
-
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds
|
|
62
|
+
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds
|
|
63
|
+
* e5-style prefixes. */
|
|
60
64
|
export declare function getEmbedding(text: string, model?: string, role?: EmbeddingRole): Promise<number[]>;
|
|
61
65
|
export {};
|
|
62
66
|
//# sourceMappingURL=local.d.ts.map
|
package/dist/embeddings/local.js
CHANGED
|
@@ -7,7 +7,8 @@ import { loadConfig } from '../core/config.js';
|
|
|
7
7
|
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
8
8
|
import { createModelLoads, importTransformers, MODEL_LOAD_POLICY, resolveTransformersPackage } from './transformers.js';
|
|
9
9
|
export const DEFAULT_EMBEDDING_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
10
|
-
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS
|
|
10
|
+
/** BGE was trained with CLS pooling; everything else gets mean, the sentence-transformers default, since CLS
|
|
11
|
+
* degrades mean-trained models. */
|
|
11
12
|
export function poolingFor(model) {
|
|
12
13
|
return /\bbge\b/i.test(model) ? 'cls' : 'mean';
|
|
13
14
|
}
|
|
@@ -44,8 +45,8 @@ export function createLocalEmbedder(transformers = INSTALLED_TRANSFORMERS) {
|
|
|
44
45
|
return Array.from(output.data);
|
|
45
46
|
}
|
|
46
47
|
catch (err) {
|
|
47
|
-
// The caller sees `[]` and names the memory;
|
|
48
|
-
log.
|
|
48
|
+
// The caller sees `[]` and names the memory; the first failure per model is told, the repeats go to debug.
|
|
49
|
+
log.warnThenDebug(`local-embed:${model}`, `local embedding with ${model} failed: ${errorMessage(err)}`, errorFields(err));
|
|
49
50
|
return [];
|
|
50
51
|
}
|
|
51
52
|
},
|
|
@@ -57,7 +58,8 @@ function warnLoadFailure(model, err) {
|
|
|
57
58
|
}
|
|
58
59
|
/** The model's pipeline; throws the reason it cannot load. */
|
|
59
60
|
async function createPipeline(transformers, model, gates) {
|
|
60
|
-
// The package is an optional peer, so the dynamic import is typed by what this file reads; a missing export throws
|
|
61
|
+
// The package is an optional peer, so the dynamic import is typed by what this file reads; a missing export throws
|
|
62
|
+
// below.
|
|
61
63
|
const imported = await transformers.load();
|
|
62
64
|
if (!imported)
|
|
63
65
|
throw new Error('no transformers package is installed');
|
|
@@ -82,7 +84,8 @@ async function createPipeline(transformers, model, gates) {
|
|
|
82
84
|
gates.delete(model);
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
|
-
/** Whether the load will download: remote models are allowed and no folder the package reads holds the model's ONNX
|
|
87
|
+
/** Whether the load will download: remote models are allowed and no folder the package reads holds the model's ONNX
|
|
88
|
+
* files. */
|
|
86
89
|
function fetchesWeights(env, model) {
|
|
87
90
|
if (env?.allowRemoteModels === false)
|
|
88
91
|
return false;
|
|
@@ -135,11 +138,12 @@ export function resolveEmbeddingModel(hippoRoot, explicitModel) {
|
|
|
135
138
|
return configured;
|
|
136
139
|
}
|
|
137
140
|
catch (err) {
|
|
138
|
-
log.warn(`embedding model config unreadable, using the default model: ${errorMessage(err)}
|
|
141
|
+
log.warn(`embedding model config unreadable, using the default model: ${errorMessage(err)}`, errorFields(err));
|
|
139
142
|
}
|
|
140
143
|
return DEFAULT_EMBEDDING_MODEL;
|
|
141
144
|
}
|
|
142
|
-
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds
|
|
145
|
+
/** Embeds `text` with the local model, or returns `[]` when Transformers.js is missing or fails; `role` adds
|
|
146
|
+
* e5-style prefixes. */
|
|
143
147
|
export function getEmbedding(text, model = DEFAULT_EMBEDDING_MODEL, role) {
|
|
144
148
|
return sharedLocalEmbedder.embed(text, model, role);
|
|
145
149
|
}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
/** Pluggable embedding providers; local `@huggingface/transformers` is the
|
|
2
|
-
*
|
|
3
|
-
* `
|
|
1
|
+
/** Pluggable embedding providers; local `@huggingface/transformers` is the
|
|
2
|
+
* zero-dependency default, OpenAI / Voyage / Cohere are opt-in via native
|
|
3
|
+
* `fetch`. Local `id` is the bare model string, API `id` is `${kind}:${model}`;
|
|
4
|
+
* the stored identity adds `#t<N>` (`embeddingIndexIdentity`), so changes
|
|
5
|
+
* reindex. `embed()` MAY throw on hard transport/auth failure so a reindex
|
|
6
|
+
* aborts atomically; hot paths wrap it and fall back to BM25. */
|
|
4
7
|
import { type EmbeddingRole, type LocalTransformers } from './local.js';
|
|
5
8
|
export type EmbeddingProviderKind = 'local' | 'openai' | 'voyage' | 'cohere';
|
|
6
9
|
export declare const API_PROVIDER_KINDS: readonly EmbeddingProviderKind[];
|
|
7
10
|
export interface EmbedCallOptions {
|
|
8
|
-
/** Ends the whole call when it aborts, every batch and retry included. The local provider stops waiting only on a
|
|
11
|
+
/** Ends the whole call when it aborts, every batch and retry included. The local provider stops waiting only on a
|
|
12
|
+
* model download,
|
|
9
13
|
* since nothing stops a load from disk or an in-process inference. */
|
|
10
14
|
signal?: AbortSignal;
|
|
11
15
|
}
|
|
12
16
|
export interface EmbeddingProvider {
|
|
13
17
|
readonly kind: EmbeddingProviderKind;
|
|
14
18
|
readonly model: string;
|
|
15
|
-
/** Identity recorded in DB meta to drive reindex-on-change:
|
|
19
|
+
/** Identity recorded in DB meta to drive reindex-on-change:
|
|
20
|
+
* bare model string for local, `${kind}:${model}` for api. */
|
|
16
21
|
readonly id: string;
|
|
17
22
|
/** Known fixed output dimension, if any (undefined for local / unknown). */
|
|
18
23
|
readonly dimensions?: number;
|
|
@@ -29,15 +34,19 @@ export interface ResolveProviderOptions {
|
|
|
29
34
|
model?: string;
|
|
30
35
|
/** Explicit provider override (mainly for tests). */
|
|
31
36
|
provider?: EmbeddingProviderKind;
|
|
32
|
-
/** The Transformers.js package a local provider loads from, with
|
|
37
|
+
/** The Transformers.js package a local provider loads from, with
|
|
38
|
+
* its own models; the process's shared embedder when unset. */
|
|
33
39
|
transformers?: LocalTransformers;
|
|
34
40
|
}
|
|
35
|
-
/** Build the active embedding provider from config (or an explicit override). A missing key never throws here (it
|
|
41
|
+
/** Build the active embedding provider from config (or an explicit override). A missing key never throws here (it
|
|
42
|
+
* surfaces via `isAvailable()`);
|
|
36
43
|
* only an invalid config (e.g. insecure apiBaseUrl) throws, deliberately loud, so hot-path callers wrap it. */
|
|
37
44
|
export declare function resolveEmbeddingProvider(hippoRoot: string, opts?: ResolveProviderOptions): EmbeddingProvider;
|
|
38
|
-
/** The reindex identity for the active provider; use it, NOT
|
|
39
|
-
*
|
|
45
|
+
/** The reindex identity for the active provider; use it, NOT
|
|
46
|
+
* resolveEmbeddingModel, wherever `embeddingModelRequiresReindex`
|
|
47
|
+
* / stored-model comparisons happen. */
|
|
40
48
|
export declare function resolveEmbeddingIdentity(hippoRoot: string, opts?: ResolveProviderOptions): string;
|
|
41
|
-
/** Provider-aware availability for a store (local: dependency installed; api: key present); use where the decision
|
|
49
|
+
/** Provider-aware availability for a store (local: dependency installed; api: key present); use where the decision
|
|
50
|
+
* to embed is made. */
|
|
42
51
|
export declare function isEmbeddingConfigured(hippoRoot: string): boolean;
|
|
43
52
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
/** Pluggable embedding providers; local `@huggingface/transformers` is the
|
|
2
|
-
*
|
|
3
|
-
* `
|
|
1
|
+
/** Pluggable embedding providers; local `@huggingface/transformers` is the
|
|
2
|
+
* zero-dependency default, OpenAI / Voyage / Cohere are opt-in via native
|
|
3
|
+
* `fetch`. Local `id` is the bare model string, API `id` is `${kind}:${model}`;
|
|
4
|
+
* the stored identity adds `#t<N>` (`embeddingIndexIdentity`), so changes
|
|
5
|
+
* reindex. `embed()` MAY throw on hard transport/auth failure so a reindex
|
|
6
|
+
* aborts atomically; hot paths wrap it and fall back to BM25. */
|
|
4
7
|
import { envByName } from '../util/env.js';
|
|
5
8
|
import { createLocalEmbedder, resolveEmbeddingModel, sharedLocalEmbedder, DEFAULT_EMBEDDING_MODEL, } from './local.js';
|
|
6
9
|
import { loadConfig } from '../core/config.js';
|
|
7
|
-
import { errorMessage, log } from '../util/log.js';
|
|
10
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
8
11
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
9
12
|
import { fetchWithRetry } from '../util/http-retry.js';
|
|
10
13
|
import { readCappedJson, readCappedText } from '../util/capped-json.js';
|
|
@@ -41,7 +44,8 @@ class LocalEmbeddingProvider {
|
|
|
41
44
|
return this.enabled && this.embedder.isAvailable();
|
|
42
45
|
}
|
|
43
46
|
async embed(texts, role, call = {}) {
|
|
44
|
-
// A model that cannot load fails the call, as an API outage
|
|
47
|
+
// A model that cannot load fails the call, as an API outage
|
|
48
|
+
// does; items then run one at a time on the shared pipeline.
|
|
45
49
|
if (texts.length > 0)
|
|
46
50
|
await this.embedder.requirePipeline(this.model, call.signal);
|
|
47
51
|
const out = [];
|
|
@@ -97,7 +101,8 @@ const API_PROVIDER_SPECS = {
|
|
|
97
101
|
}),
|
|
98
102
|
extractVectors: (json) => {
|
|
99
103
|
// Cohere v2 shape: { embeddings: { float: number[][] } }
|
|
100
|
-
// SAFETY: documented v2 envelope; embedChunk validates the vectors afterward, so a malformed response degrades to
|
|
104
|
+
// SAFETY: documented v2 envelope; embedChunk validates the vectors afterward, so a malformed response degrades to
|
|
105
|
+
// [] here and throws there.
|
|
101
106
|
const emb = json.embeddings;
|
|
102
107
|
return emb?.float ?? [];
|
|
103
108
|
},
|
|
@@ -170,7 +175,8 @@ class ApiEmbeddingProvider {
|
|
|
170
175
|
const resp = await this.postChunk(chunk, key, role, signal);
|
|
171
176
|
const json = await this.responseJson(resp, key, chunk.length);
|
|
172
177
|
const vectors = spec.extractVectors(json);
|
|
173
|
-
// A 200 with the wrong vector count (or any empty/malformed vector) is a provider contract violation, not a
|
|
178
|
+
// A 200 with the wrong vector count (or any empty/malformed vector) is a provider contract violation, not a
|
|
179
|
+
// per-item miss:
|
|
174
180
|
// throw so a reindex aborts atomically and the explicit backfill surfaces it, instead of saving []-padded rows.
|
|
175
181
|
if (vectors.length !== chunk.length) {
|
|
176
182
|
throw new Error(redact(`${this.kind} embeddings returned ${vectors.length} vectors for ${chunk.length} inputs`, key));
|
|
@@ -196,14 +202,17 @@ class ApiEmbeddingProvider {
|
|
|
196
202
|
signal,
|
|
197
203
|
}, {
|
|
198
204
|
timeoutMs: REQUEST_TIMEOUT_MS,
|
|
199
|
-
// Embedding the same text twice changes nothing on the far side,
|
|
205
|
+
// Embedding the same text twice changes nothing on the far side,
|
|
206
|
+
// so a dropped connection or a stalled attempt is replayed.
|
|
200
207
|
retryTransport: true,
|
|
201
208
|
maxDelayMs: signal ? DEADLINE_RETRY_WAIT_CAP_MS : undefined,
|
|
202
209
|
});
|
|
203
210
|
}
|
|
204
211
|
catch (err) {
|
|
205
212
|
const msg = errorMessage(err);
|
|
206
|
-
throw new Error(redact(`embedding request to ${this.kind} failed: ${msg}`, key), {
|
|
213
|
+
throw new Error(redact(`embedding request to ${this.kind} failed: ${msg}`, key), {
|
|
214
|
+
cause: redactedCause(err, key),
|
|
215
|
+
});
|
|
207
216
|
}
|
|
208
217
|
}
|
|
209
218
|
/** The body of an OK reply; any other status, or a body that is not JSON, throws with the key cut out. */
|
|
@@ -214,7 +223,8 @@ class ApiEmbeddingProvider {
|
|
|
214
223
|
detail = await readCappedText(resp, ERROR_BODY_MAX_BYTES);
|
|
215
224
|
}
|
|
216
225
|
catch (err) {
|
|
217
|
-
|
|
226
|
+
// The error thrown below already carries the status; the body is only extra detail.
|
|
227
|
+
log.debug(`${this.kind} embeddings error body unreadable: ${errorMessage(err)}`, errorFields(err));
|
|
218
228
|
}
|
|
219
229
|
throw new Error(redact(`${this.kind} embeddings HTTP ${resp.status}: ${detail.slice(0, ERROR_DETAIL_CHARS)}`, key));
|
|
220
230
|
}
|
|
@@ -224,20 +234,11 @@ class ApiEmbeddingProvider {
|
|
|
224
234
|
catch (err) {
|
|
225
235
|
const msg = errorMessage(err);
|
|
226
236
|
throw new Error(redact(`${this.kind} embeddings returned invalid JSON: ${msg}`, key), {
|
|
227
|
-
cause: redactedCause(err instanceof Error && err.cause ? err.cause : err, key)
|
|
237
|
+
cause: redactedCause(err instanceof Error && err.cause ? err.cause : err, key),
|
|
228
238
|
});
|
|
229
239
|
}
|
|
230
240
|
}
|
|
231
241
|
}
|
|
232
|
-
function readEmbeddingsConfig(hippoRoot) {
|
|
233
|
-
try {
|
|
234
|
-
return loadConfig(hippoRoot).embeddings;
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
// An unreadable config falls back to provider defaults; loadConfig warns on a bad parse.
|
|
238
|
-
return {};
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
242
|
/** Validate a user-supplied API base URL: HTTPS only (or explicit localhost). */
|
|
242
243
|
function validateBaseUrl(url, fallback) {
|
|
243
244
|
const candidate = url?.trim();
|
|
@@ -257,10 +258,11 @@ function validateBaseUrl(url, fallback) {
|
|
|
257
258
|
}
|
|
258
259
|
return candidate;
|
|
259
260
|
}
|
|
260
|
-
/** Build the active embedding provider from config (or an explicit override). A missing key never throws here (it
|
|
261
|
+
/** Build the active embedding provider from config (or an explicit override). A missing key never throws here (it
|
|
262
|
+
* surfaces via `isAvailable()`);
|
|
261
263
|
* only an invalid config (e.g. insecure apiBaseUrl) throws, deliberately loud, so hot-path callers wrap it. */
|
|
262
264
|
export function resolveEmbeddingProvider(hippoRoot, opts = {}) {
|
|
263
|
-
const cfg =
|
|
265
|
+
const cfg = loadConfig(hippoRoot).embeddings;
|
|
264
266
|
const requested = opts.provider ?? cfg.provider ?? 'local';
|
|
265
267
|
// An explicit embeddings.enabled=false hard-disables embedding for BOTH local
|
|
266
268
|
// and API providers — for API this prevents unwanted paid off-box calls.
|
|
@@ -272,7 +274,8 @@ export function resolveEmbeddingProvider(hippoRoot, opts = {}) {
|
|
|
272
274
|
if (!isApiProviderKind(requested)) {
|
|
273
275
|
// Fail loud on a typo'd provider rather than silently using local (which
|
|
274
276
|
// would reindex with the local model and clobber the intended identity).
|
|
275
|
-
throw new Error(`Unknown embeddings.provider '${requested}'. Valid values: local,
|
|
277
|
+
throw new Error(`Unknown embeddings.provider '${requested}'. Valid values: local, ` +
|
|
278
|
+
`${API_PROVIDER_KINDS.filter((k) => k !== 'local').join(', ')}.`);
|
|
276
279
|
}
|
|
277
280
|
const kind = requested;
|
|
278
281
|
const spec = API_PROVIDER_SPECS[kind];
|
|
@@ -286,19 +289,21 @@ export function resolveEmbeddingProvider(hippoRoot, opts = {}) {
|
|
|
286
289
|
: DEFAULT_API_BATCH_SIZE;
|
|
287
290
|
return new ApiEmbeddingProvider(kind, model, baseUrl, batchSize, enabled);
|
|
288
291
|
}
|
|
289
|
-
/** The reindex identity for the active provider; use it, NOT
|
|
290
|
-
*
|
|
292
|
+
/** The reindex identity for the active provider; use it, NOT
|
|
293
|
+
* resolveEmbeddingModel, wherever `embeddingModelRequiresReindex`
|
|
294
|
+
* / stored-model comparisons happen. */
|
|
291
295
|
export function resolveEmbeddingIdentity(hippoRoot, opts = {}) {
|
|
292
296
|
return resolveEmbeddingProvider(hippoRoot, opts).id;
|
|
293
297
|
}
|
|
294
|
-
/** Provider-aware availability for a store (local: dependency installed; api: key present); use where the decision
|
|
298
|
+
/** Provider-aware availability for a store (local: dependency installed; api: key present); use where the decision
|
|
299
|
+
* to embed is made. */
|
|
295
300
|
export function isEmbeddingConfigured(hippoRoot) {
|
|
296
301
|
try {
|
|
297
302
|
return resolveEmbeddingProvider(hippoRoot).isAvailable();
|
|
298
303
|
}
|
|
299
304
|
catch (err) {
|
|
300
305
|
// An invalid embedding config must not crash the best-effort ingestion guard, so it reads as not configured.
|
|
301
|
-
log.
|
|
306
|
+
log.warnThenDebug(`embedding-config-unusable:${hippoRoot}`, `embedding config unusable: ${errorMessage(err)}`, errorFields(err));
|
|
302
307
|
return false;
|
|
303
308
|
}
|
|
304
309
|
}
|