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
package/dist/rerankers/remote.js
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
import { fetchWithRetry } from '../util/http-retry.js';
|
|
3
3
|
// A Retry-After longer than this would outlast most budgets, so the answer is handed back and the reranker falls back.
|
|
4
4
|
const RETRY_WAIT_CAP_MS = 2_000;
|
|
5
|
-
// Every reranker reads its reply through this cap; the largest honest reply is a few KB, and 1 MiB leaves room for a
|
|
5
|
+
// Every reranker reads its reply through this cap; the largest honest reply is a few KB, and 1 MiB leaves room for a
|
|
6
|
+
// verbose envelope.
|
|
6
7
|
export const RERANKER_MAX_REPLY_BYTES = 1024 * 1024;
|
|
7
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side.
|
|
10
|
+
*/
|
|
8
11
|
export async function rerankerPost(url, init, budgetMs) {
|
|
9
12
|
// The budget bounds the whole call, retries included, so recall never waits past the configured timeout.
|
|
10
13
|
const budget = AbortSignal.timeout(budgetMs);
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { SearchResult } from '../core/search-types.js';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
2
|
+
/**
|
|
3
|
+
* Reorders hybridSearch's candidates AFTER MMR de-duplication and BEFORE token-budget filtering, so it sees the full
|
|
4
|
+
* diverse pool.
|
|
5
|
+
* MUST be deterministic for a given (query, results) unless documented stochastic (LLM track, hosted jev): paired A/B
|
|
6
|
+
* and the validity gate need it.
|
|
7
|
+
*/
|
|
4
8
|
export type RerankerFn = (query: string, results: SearchResult[], options?: RerankerOptions) => Promise<RerankResult[]>;
|
|
5
9
|
/** JSON-serializable value. Per-track reranker config is opaque to the seam
|
|
6
10
|
* but must still be a concrete, serializable shape rather than `unknown`. */
|
|
@@ -9,6 +9,8 @@ export interface SearchOptions {
|
|
|
9
9
|
includeSuperseded?: boolean;
|
|
10
10
|
asOf?: string;
|
|
11
11
|
}
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge.
|
|
14
|
+
*/
|
|
13
15
|
export declare function search(query: string, entries: MemoryEntry[], options?: SearchOptions): SearchResult[];
|
|
14
16
|
//# sourceMappingURL=bm25-search.d.ts.map
|
|
@@ -10,7 +10,20 @@ import { applyRankBoosts, strengthRecencyMultipliers, NO_SUMMARY_SCORING } from
|
|
|
10
10
|
import { temporalContext } from './temporal.js';
|
|
11
11
|
import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
|
|
12
12
|
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
13
|
-
|
|
13
|
+
// Keyed on the caller's array so multihop's two passes share one build;
|
|
14
|
+
// the pool identity check keeps a mutated array honest.
|
|
15
|
+
const corpusCache = new WeakMap();
|
|
16
|
+
function corpusFor(entries, pool) {
|
|
17
|
+
const hit = corpusCache.get(entries);
|
|
18
|
+
if (hit && hit.pool.length === pool.length && hit.pool.every((e, i) => e === pool[i]))
|
|
19
|
+
return hit.corpus;
|
|
20
|
+
const corpus = buildCorpus(pool.map(entryText));
|
|
21
|
+
corpusCache.set(entries, { pool: pool.slice(), corpus });
|
|
22
|
+
return corpus;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge.
|
|
26
|
+
*/
|
|
14
27
|
export function search(query, entries, options = {}) {
|
|
15
28
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
16
29
|
const pool = currentEntries(entries, options);
|
|
@@ -19,7 +32,7 @@ export function search(query, entries, options = {}) {
|
|
|
19
32
|
const queryTerms = tokenize(query);
|
|
20
33
|
if (queryTerms.length === 0)
|
|
21
34
|
return [];
|
|
22
|
-
const corpus =
|
|
35
|
+
const corpus = corpusFor(entries, pool);
|
|
23
36
|
const ctx = {
|
|
24
37
|
now,
|
|
25
38
|
pathTags: extractPathTags(process.cwd()),
|
package/dist/search/boosts.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { envSummaryDeboost } from '../util/env.js';
|
|
2
|
-
import { calculateStrength, CHURN_STALE_TAG } from '../core/memory.js';
|
|
2
|
+
import { calculateStrength, CHURN_STALE_TAG, DAG_LEVEL } from '../core/memory.js';
|
|
3
3
|
import { isOutcomeFastAblated, isRecencyAblated, evalRecencyScaleDays } from '../core/ablation.js';
|
|
4
4
|
import { pathBoostMultiplier } from './path-context.js';
|
|
5
5
|
import { scopeMatch } from '../core/active-scope.js';
|
|
@@ -15,7 +15,8 @@ const EXTRACTION_TAG_BOOST = 1.3;
|
|
|
15
15
|
const OUTCOME_NUDGE_SLOPE = 0.15;
|
|
16
16
|
const OUTCOME_NUDGE_MIN = 0.85;
|
|
17
17
|
const OUTCOME_NUDGE_MAX = 1.15;
|
|
18
|
-
// Strength and recency enter the rank as floor + span * signal, so a weak or old memory keeps most of its lexical
|
|
18
|
+
// Strength and recency enter the rank as floor + span * signal, so a weak or old memory keeps most of its lexical
|
|
19
|
+
// score.
|
|
19
20
|
export const STRENGTH_RANK_FLOOR = 0.5;
|
|
20
21
|
export const STRENGTH_RANK_SPAN = 0.5;
|
|
21
22
|
const RECENCY_RANK_FLOOR = 0.8;
|
|
@@ -44,7 +45,7 @@ export function outcomeMultiplier(entry) {
|
|
|
44
45
|
}
|
|
45
46
|
/** A DAG summary is a topic summary (level 2) or an entity profile (level 3); both take the same deboost. */
|
|
46
47
|
export function isDagSummary(entry) {
|
|
47
|
-
return entry.dag_level ===
|
|
48
|
+
return entry.dag_level === DAG_LEVEL.topic || entry.dag_level === DAG_LEVEL.entity;
|
|
48
49
|
}
|
|
49
50
|
/** Summary deboost: per-call, then HIPPO_SUMMARY_DEBOOST, then 0.85; values outside (0, 1] fall through. */
|
|
50
51
|
export function resolveSummaryDeboost(perCall) {
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type EmbeddingProvider } from '../embeddings/provider.js';
|
|
3
3
|
import { type HippoStore } from '../store/port.js';
|
|
4
|
-
/** `off` is a provider that is disabled or not installed, which is a choice; `failed` is a memory that stays out of
|
|
4
|
+
/** `off` is a provider that is disabled or not installed, which is a choice; `failed` is a memory that stays out of
|
|
5
|
+
* the vector index. */
|
|
5
6
|
export type EmbedOutcome = 'indexed' | 'off' | 'failed';
|
|
6
|
-
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites,
|
|
7
|
-
*
|
|
7
|
+
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites,
|
|
8
|
+
* never opening hippo.db.
|
|
9
|
+
* Resolves whatever fails, so a caller that fires and forgets stays safe; the outcome says whether the memory
|
|
10
|
+
* reached the index. */
|
|
8
11
|
export declare function embedMemory(hippoRoot: string, entry: MemoryEntry, model?: string, store?: HippoStore): Promise<EmbedOutcome>;
|
|
9
|
-
/** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded;
|
|
10
|
-
*
|
|
12
|
+
/** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded;
|
|
13
|
+
* `provider` defaults to the
|
|
14
|
+
* configured one. With `store`, every tenant's memories with no vector for the provider's model go through its
|
|
15
|
+
* `vectorWrites`, never hippo.db. */
|
|
11
16
|
export declare function embedAll(hippoRoot: string, model?: string, provider?: EmbeddingProvider, store?: HippoStore): Promise<number>;
|
|
12
17
|
//# sourceMappingURL=embed-memories.d.ts.map
|
|
@@ -7,13 +7,14 @@ import { loadConfig } from '../core/config.js';
|
|
|
7
7
|
import { initializeParticle } from '../core/physics.js';
|
|
8
8
|
import { resolveEmbeddingProvider } from '../embeddings/provider.js';
|
|
9
9
|
import { embeddingIndexIdentity, embeddingInputText, embeddingModelRequiresReindex, indexNeedsRebuild, saveStoredEmbeddingModel, } from '../store/embeddings/index.js';
|
|
10
|
-
import { loadAllEntryIds, loadEntriesByIds } from '../store/entry-reads.js';
|
|
10
|
+
import { countAllEntries, loadAllEntryIds, loadEntriesByIds } from '../store/entry-reads.js';
|
|
11
11
|
import { requireGroup, } from '../store/port.js';
|
|
12
|
-
import { indexedModel,
|
|
12
|
+
import { indexedModel, pruneStoredVectorsListPending, replacesIndex, resetStoredParticles, saveEmbeddingIndex, saveStoredVectors, seedStoredParticle, } from '../store/vector-index.js';
|
|
13
13
|
import { chunked } from '../util/chunked.js';
|
|
14
14
|
import { envByName } from '../util/env.js';
|
|
15
|
-
import { errorCode, errorMessage, log } from '../util/log.js';
|
|
15
|
+
import { errorCode, errorMessage, log, errorFields } from '../util/log.js';
|
|
16
16
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
17
|
+
import { MINUTE_MS } from '../util/time.js';
|
|
17
18
|
const STORE_PAGE = 64;
|
|
18
19
|
/** The rows for `ids`, a page at a time and in that order; an id deleted since it was listed is skipped. */
|
|
19
20
|
function* entryPages(hippoRoot, ids) {
|
|
@@ -48,7 +49,7 @@ function resetPhysicsFromIndex(hippoRoot, ids, index) {
|
|
|
48
49
|
}
|
|
49
50
|
catch (err) {
|
|
50
51
|
// Best effort: retrieval still falls back without physics state.
|
|
51
|
-
log.warn(`physics reset after reindex failed: ${errorMessage(err)}
|
|
52
|
+
log.warn(`physics reset after reindex failed: ${errorMessage(err)}`, errorFields(err));
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
/** A provider's `[]` row is a swallowed per-item failure; name the memory so the gap can be traced. */
|
|
@@ -112,7 +113,8 @@ async function acquireEmbedFileLock(hippoRoot) {
|
|
|
112
113
|
if (!(err instanceof Error && 'code' in err && err.code === 'EEXIST'))
|
|
113
114
|
throw err;
|
|
114
115
|
}
|
|
115
|
-
// SHORTCUT: two waiters can both break one dead holder's lock; a vector lost that way is backfilled by the next
|
|
116
|
+
// SHORTCUT: two waiters can both break one dead holder's lock; a vector lost that way is backfilled by the next
|
|
117
|
+
// `hippo embed`.
|
|
116
118
|
if (!embedLockHolderAlive(lockPath)) {
|
|
117
119
|
fs.rmSync(lockPath, { force: true });
|
|
118
120
|
continue;
|
|
@@ -133,7 +135,8 @@ async function withEmbedLock(hippoRoot, fn) {
|
|
|
133
135
|
}
|
|
134
136
|
});
|
|
135
137
|
}
|
|
136
|
-
// A store keeps each write whole in its own transaction, and a
|
|
138
|
+
// A store keeps each write whole in its own transaction, and a
|
|
139
|
+
// lock file in hippoRoot would not reach a worker on another host.
|
|
137
140
|
async function withProcessEmbedLock(fn) {
|
|
138
141
|
let resolve;
|
|
139
142
|
const next = new Promise(r => { resolve = r; });
|
|
@@ -147,9 +150,10 @@ async function withProcessEmbedLock(fn) {
|
|
|
147
150
|
resolve();
|
|
148
151
|
}
|
|
149
152
|
}
|
|
150
|
-
// A bad key fails every write; one full warning per distinct failure tells the user, and a count of the repeats follows
|
|
153
|
+
// A bad key fails every write; one full warning per distinct failure tells the user, and a count of the repeats follows
|
|
154
|
+
// at most once per interval.
|
|
151
155
|
const EMBED_WARN_KEY_CAP = 64;
|
|
152
|
-
const EMBED_SUPPRESSED_SUMMARY_INTERVAL_MS =
|
|
156
|
+
const EMBED_SUPPRESSED_SUMMARY_INTERVAL_MS = MINUTE_MS;
|
|
153
157
|
const embedFailureSeen = new Map();
|
|
154
158
|
function embedFailureKey(source, cause) {
|
|
155
159
|
const kind = errorCode(cause) || (cause instanceof Error ? cause.constructor.name : 'NonError');
|
|
@@ -162,7 +166,8 @@ function warnEmbedFailureOnce(source, rawMessage, cause) {
|
|
|
162
166
|
if (seen) {
|
|
163
167
|
seen.suppressed += 1;
|
|
164
168
|
if (now - seen.lastNoticeAt >= EMBED_SUPPRESSED_SUMMARY_INTERVAL_MS) {
|
|
165
|
-
log.warn(`${seen.suppressed} more embedding errors from ${source} since
|
|
169
|
+
log.warn(`${seen.suppressed} more embedding errors from ${source} since ` +
|
|
170
|
+
`the last notice; memories are still stored without embeddings.`);
|
|
166
171
|
seen.suppressed = 0;
|
|
167
172
|
seen.lastNoticeAt = now;
|
|
168
173
|
}
|
|
@@ -183,14 +188,17 @@ function warnEmbedFailureOnce(source, rawMessage, cause) {
|
|
|
183
188
|
function vectorGroups(store) {
|
|
184
189
|
return [requireGroup(store, 'vectors'), requireGroup(store, 'vectorWrites')];
|
|
185
190
|
}
|
|
186
|
-
/** Writes one page's vectors, one writeVectors per tenant, and stops at the first refused write; `withParticles`
|
|
191
|
+
/** Writes one page's vectors, one writeVectors per tenant, and stops at the first refused write; `withParticles`
|
|
192
|
+
* seeds each memory's particle. */
|
|
187
193
|
async function writeVectorPage(writes, write, page, vectors, withParticles) {
|
|
188
194
|
const byTenant = new Map();
|
|
189
195
|
page.forEach((entry, i) => {
|
|
190
196
|
const vector = vectors[i];
|
|
191
197
|
if (!vector || vector.length === 0)
|
|
192
198
|
return noteSkippedEmbedding(entry.id);
|
|
193
|
-
const row = withParticles
|
|
199
|
+
const row = withParticles
|
|
200
|
+
? { memoryId: entry.id, vector, particle: initializeParticle(entry, vector) }
|
|
201
|
+
: { memoryId: entry.id, vector };
|
|
194
202
|
byTenant.set(entry.tenant_id, [...(byTenant.get(entry.tenant_id) ?? []), row]);
|
|
195
203
|
});
|
|
196
204
|
let written = 0;
|
|
@@ -203,7 +211,8 @@ async function writeVectorPage(writes, write, page, vectors, withParticles) {
|
|
|
203
211
|
return { written, modelMismatch: false };
|
|
204
212
|
}
|
|
205
213
|
const OTHER_MODEL_INDEX = "the vector index was built by another embedding model; run 'hippo embed' to rebuild it";
|
|
206
|
-
/** Embeds every memory with no vector under `model`, page by page, so a provider failure keeps the pages written; a
|
|
214
|
+
/** Embeds every memory with no vector under `model`, page by page, so a provider failure keeps the pages written; a
|
|
215
|
+
* rebuild reseeds the particles it drops. */
|
|
207
216
|
async function backfillInStore(writes, provider, model, rebuild) {
|
|
208
217
|
let count = 0;
|
|
209
218
|
let afterId;
|
|
@@ -214,7 +223,8 @@ async function backfillInStore(writes, provider, model, rebuild) {
|
|
|
214
223
|
afterId = page[page.length - 1].id;
|
|
215
224
|
const vectors = await provider.embed(page.map((e) => embeddingInputText(e)), 'passage');
|
|
216
225
|
const result = await writeVectorPage(writes, { model, replaceIndex: rebuild }, page, vectors, rebuild);
|
|
217
|
-
// Another process rebuilt the index mid-run; every later page
|
|
226
|
+
// Another process rebuilt the index mid-run; every later page
|
|
227
|
+
// would be refused too, after paying the provider for it.
|
|
218
228
|
if (result.modelMismatch)
|
|
219
229
|
throw new Error(OTHER_MODEL_INDEX);
|
|
220
230
|
count += result.written;
|
|
@@ -226,8 +236,10 @@ async function embedAllInStore(store, provider) {
|
|
|
226
236
|
const rebuild = indexNeedsRebuild(indexedModel(await reads.embeddingIndexState()), provider.id);
|
|
227
237
|
return backfillInStore(writes, provider, embeddingIndexIdentity(provider.id), rebuild);
|
|
228
238
|
}
|
|
229
|
-
/** embedMemory on a store; like the hippo.db path it resolves whatever fails. Unlike it, it leaves a model change to
|
|
230
|
-
*
|
|
239
|
+
/** embedMemory on a store; like the hippo.db path it resolves whatever fails. Unlike it, it leaves a model change to
|
|
240
|
+
* embedAll, so a stale
|
|
241
|
+
* read here never drops another process's rebuild; the read only saves a paid embed call, as the write refuses
|
|
242
|
+
* another model itself. */
|
|
231
243
|
function embedMemoryInStore(store, provider, entry) {
|
|
232
244
|
return withProcessEmbedLock(async () => {
|
|
233
245
|
const [reads, writes] = vectorGroups(store);
|
|
@@ -244,40 +256,46 @@ function embedMemoryInStore(store, provider, entry) {
|
|
|
244
256
|
return 'failed';
|
|
245
257
|
}
|
|
246
258
|
}).catch((err) => {
|
|
247
|
-
log.warn(`skipped embedding ${entry.id} (${errorMessage(err)})
|
|
259
|
+
log.warn(`skipped embedding ${entry.id} (${errorMessage(err)})`, errorFields(err));
|
|
248
260
|
return 'failed';
|
|
249
261
|
});
|
|
250
262
|
}
|
|
251
263
|
const INLINE_REINDEX_MAX_ROWS = 256;
|
|
252
|
-
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites,
|
|
253
|
-
*
|
|
264
|
+
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites,
|
|
265
|
+
* never opening hippo.db.
|
|
266
|
+
* Resolves whatever fails, so a caller that fires and forgets stays safe; the outcome says whether the memory
|
|
267
|
+
* reached the index. */
|
|
254
268
|
export async function embedMemory(hippoRoot, entry, model, store) {
|
|
255
269
|
let provider;
|
|
270
|
+
let available;
|
|
256
271
|
try {
|
|
257
272
|
provider = resolveEmbeddingProvider(hippoRoot, { model });
|
|
273
|
+
available = provider.isAvailable();
|
|
258
274
|
}
|
|
259
275
|
catch (err) {
|
|
260
276
|
// Callers fire and forget, so this must resolve: a bad config warns once instead of rejecting.
|
|
261
277
|
warnEmbedFailureOnce('config', errorMessage(err), err);
|
|
262
278
|
return 'failed';
|
|
263
279
|
}
|
|
264
|
-
if (!
|
|
280
|
+
if (!available)
|
|
265
281
|
return 'off';
|
|
266
282
|
if (store)
|
|
267
283
|
return embedMemoryInStore(store, provider, entry);
|
|
268
284
|
return withEmbedLock(hippoRoot, () => embedMemoryLocked(hippoRoot, provider, entry)).catch((err) => {
|
|
269
|
-
log.warn(`skipped embedding ${entry.id} (${errorMessage(err)}); run 'hippo embed' to backfill
|
|
285
|
+
log.warn(`skipped embedding ${entry.id} (${errorMessage(err)}); run 'hippo embed' to backfill`, errorFields(err));
|
|
270
286
|
return 'failed';
|
|
271
287
|
});
|
|
272
288
|
}
|
|
273
|
-
/** Best-effort: an embedding failure (API down, bad key, 5xx) must not reject the caller's write; the existing index is
|
|
289
|
+
/** Best-effort: an embedding failure (API down, bad key, 5xx) must not reject the caller's write; the existing index is
|
|
290
|
+
* left as-is.
|
|
274
291
|
* Failures surface on the explicit `hippo embed` / `embedAll` path. */
|
|
275
292
|
async function embedMemoryLocked(hippoRoot, provider, entry) {
|
|
276
293
|
try {
|
|
277
294
|
const identity = provider.id;
|
|
278
295
|
if (embeddingModelRequiresReindex(hippoRoot, identity)) {
|
|
279
|
-
// A fire-and-forget write heals a small index inline; a large one is left to `hippo embed`, so no write holds the
|
|
280
|
-
|
|
296
|
+
// A fire-and-forget write heals a small index inline; a large one is left to `hippo embed`, so no write holds the
|
|
297
|
+
// lock for a whole-store embed.
|
|
298
|
+
if (countAllEntries(hippoRoot) > INLINE_REINDEX_MAX_ROWS) {
|
|
281
299
|
warnEmbedFailureOnce('index', OTHER_MODEL_INDEX);
|
|
282
300
|
return 'failed';
|
|
283
301
|
}
|
|
@@ -298,11 +316,14 @@ async function embedMemoryLocked(hippoRoot, provider, entry) {
|
|
|
298
316
|
return 'failed';
|
|
299
317
|
}
|
|
300
318
|
}
|
|
301
|
-
// Every page is embedded before one transaction replaces the index, and
|
|
302
|
-
//
|
|
319
|
+
// Every page is embedded before one transaction replaces the index, and
|
|
320
|
+
// the identity is saved only after that: a provider failure or a crash
|
|
321
|
+
// at any earlier point leaves the old identity, so
|
|
322
|
+
// embeddingModelRequiresReindex has the next run rebuild from the start.
|
|
303
323
|
async function rebuildIndexForProvider(hippoRoot, provider) {
|
|
304
324
|
const identity = provider.id;
|
|
305
|
-
// Host-wide rebuild: one embedding index per hippoRoot, keyed by tenant-scoped entry.id; per-tenant indices would be
|
|
325
|
+
// Host-wide rebuild: one embedding index per hippoRoot, keyed by tenant-scoped entry.id; per-tenant indices would be
|
|
326
|
+
// a larger architecture change.
|
|
306
327
|
const ids = loadAllEntryIds(hippoRoot);
|
|
307
328
|
const rebuiltIndex = await rebuildEmbeddingIndex(hippoRoot, ids, provider);
|
|
308
329
|
saveEmbeddingIndex(hippoRoot, rebuiltIndex, embeddingIndexIdentity(identity));
|
|
@@ -316,12 +337,13 @@ function initializePhysicsIfMissing(hippoRoot, entry, vector) {
|
|
|
316
337
|
}
|
|
317
338
|
catch (err) {
|
|
318
339
|
// Physics init is best-effort and must not fail the embedding that just landed.
|
|
319
|
-
log.
|
|
340
|
+
log.warnThenDebug('physics-state-seed', `physics state not initialised for ${entry.id}: ${errorMessage(err)}`, errorFields(err));
|
|
320
341
|
}
|
|
321
342
|
}
|
|
322
343
|
/** Throws when an unavailable provider is a misconfiguration rather than an intentional no-op. */
|
|
323
344
|
function throwIfProviderKeyMissing(hippoRoot, provider) {
|
|
324
|
-
// A configured API provider with a missing key is a misconfiguration: surface it so callers of the exported
|
|
345
|
+
// A configured API provider with a missing key is a misconfiguration: surface it so callers of the exported
|
|
346
|
+
// embedAll() learn nothing was written.
|
|
325
347
|
// Local-not-installed and an explicit enabled=false stay silent no-ops.
|
|
326
348
|
const cfg = loadConfig(hippoRoot).embeddings;
|
|
327
349
|
if (provider.kind !== 'local' &&
|
|
@@ -331,8 +353,10 @@ function throwIfProviderKeyMissing(hippoRoot, provider) {
|
|
|
331
353
|
throw new Error(`Embedding provider '${provider.kind}' is configured but ${provider.keyEnv} is not set.`);
|
|
332
354
|
}
|
|
333
355
|
}
|
|
334
|
-
// Embeds entries without a cached vector in save-checkpointed chunks; a `[]` row means that item could not be embedded
|
|
335
|
-
//
|
|
356
|
+
// Embeds entries without a cached vector in save-checkpointed chunks; a `[]` row means that item could not be embedded
|
|
357
|
+
// and is retried next run.
|
|
358
|
+
// On a hard provider failure mid-backfill the chunks already embedded are persisted (paid progress), then it stops and
|
|
359
|
+
// resumes next run.
|
|
336
360
|
async function backfillPending(hippoRoot, provider, pending, model) {
|
|
337
361
|
let count = 0;
|
|
338
362
|
// Initialized to `undefined` so it stays a plain `unknown` binding for the arbitrary caught value; falsy either way.
|
|
@@ -360,8 +384,10 @@ async function backfillPending(hippoRoot, provider, pending, model) {
|
|
|
360
384
|
}
|
|
361
385
|
return { count, backfillError };
|
|
362
386
|
}
|
|
363
|
-
/** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded;
|
|
364
|
-
*
|
|
387
|
+
/** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded;
|
|
388
|
+
* `provider` defaults to the
|
|
389
|
+
* configured one. With `store`, every tenant's memories with no vector for the provider's model go through its
|
|
390
|
+
* `vectorWrites`, never hippo.db. */
|
|
365
391
|
export async function embedAll(hippoRoot, model, provider = resolveEmbeddingProvider(hippoRoot, { model }), store) {
|
|
366
392
|
if (!provider.isAvailable()) {
|
|
367
393
|
throwIfProviderKeyMissing(hippoRoot, provider);
|
|
@@ -373,10 +399,10 @@ export async function embedAll(hippoRoot, model, provider = resolveEmbeddingProv
|
|
|
373
399
|
const identity = provider.id;
|
|
374
400
|
if (embeddingModelRequiresReindex(hippoRoot, identity))
|
|
375
401
|
return rebuildIndexForProvider(hippoRoot, provider);
|
|
376
|
-
// Host-wide by design: embedAll backfills all tenants'
|
|
377
|
-
//
|
|
378
|
-
|
|
379
|
-
const pending =
|
|
402
|
+
// Host-wide by design: embedAll backfills all tenants'
|
|
403
|
+
// entries into the per-host index; per-tenant filtering
|
|
404
|
+
// would produce partial indices and break recall.
|
|
405
|
+
const pending = pruneStoredVectorsListPending(hippoRoot);
|
|
380
406
|
const { count, backfillError } = await backfillPending(hippoRoot, provider, pending, embeddingIndexIdentity(identity));
|
|
381
407
|
saveStoredEmbeddingModel(hippoRoot, identity);
|
|
382
408
|
// Partial progress is now persisted; surface a hard backfill failure so the
|
package/dist/search/engine.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ import type { PhysicsConfig } from '../core/physics-config.js';
|
|
|
3
3
|
import type { SearchResult } from '../core/search-types.js';
|
|
4
4
|
import { type HybridSearchOptions } from './hybrid.js';
|
|
5
5
|
import type { VectorSource } from './vector.js';
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Physics scoring when `physics` holds its config, hybrid otherwise, both on the store `source` names; each caller
|
|
8
|
+
* keeps its own options.
|
|
9
|
+
*/
|
|
7
10
|
export declare function searchByEngine(source: VectorSource, query: string, pool: MemoryEntry[], physics: PhysicsConfig | null, options: Omit<HybridSearchOptions, 'hippoRoot' | 'store'>): Promise<SearchResult[]>;
|
|
8
11
|
//# sourceMappingURL=engine.d.ts.map
|
package/dist/search/engine.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
// The one search-engine choice every ranker over a candidate pool makes: recall's band, MCP's wide list, the CLI core
|
|
1
|
+
// The one search-engine choice every ranker over a candidate pool makes: recall's band, MCP's wide list, the CLI core
|
|
2
|
+
// and context.
|
|
2
3
|
import { hybridSearch } from './hybrid.js';
|
|
3
4
|
import { physicsSearchIn } from './physics-search.js';
|
|
4
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Physics scoring when `physics` holds its config, hybrid otherwise, both on the store `source` names; each caller
|
|
7
|
+
* keeps its own options.
|
|
8
|
+
*/
|
|
5
9
|
export function searchByEngine(source, query, pool, physics, options) {
|
|
6
10
|
return physics
|
|
7
11
|
? physicsSearchIn(source, query, pool, { ...options, physicsConfig: physics })
|
|
@@ -6,7 +6,10 @@ export interface GoalStackBoostOpts {
|
|
|
6
6
|
sessionId: string;
|
|
7
7
|
tenantId: string;
|
|
8
8
|
limit: number;
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Side-channel: one goal-boost `RerankStep` per boosted row, keyed by `entry.id` (a map because the helper re-spreads
|
|
11
|
+
* rows); only populated when passed.
|
|
12
|
+
*/
|
|
10
13
|
trace?: Map<string, RerankStep>;
|
|
11
14
|
}
|
|
12
15
|
/** The boosted, re-sorted rows and the `goal_recall_log` rows they earn. */
|
|
@@ -14,8 +17,12 @@ export interface GoalStackBoost<R> {
|
|
|
14
17
|
results: R[];
|
|
15
18
|
log: GoalRecallLogRow[];
|
|
16
19
|
}
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
20
|
+
/**
|
|
21
|
+
* The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its
|
|
22
|
+
* log covers the top
|
|
23
|
+
* `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link
|
|
24
|
+
* localGoalRecallRows} drops those before the write.
|
|
25
|
+
*/
|
|
19
26
|
export declare function boostByGoals<R extends {
|
|
20
27
|
entry: MemoryEntry;
|
|
21
28
|
score: number;
|
|
@@ -53,15 +53,20 @@ function buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) {
|
|
|
53
53
|
}
|
|
54
54
|
return log;
|
|
55
55
|
}
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
56
|
+
/**
|
|
57
|
+
* The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its
|
|
58
|
+
* log covers the top
|
|
59
|
+
* `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link
|
|
60
|
+
* localGoalRecallRows} drops those before the write.
|
|
61
|
+
*/
|
|
58
62
|
export function boostByGoals(results, active, opts) {
|
|
59
63
|
const { trace } = opts;
|
|
60
64
|
if (active.goals.length === 0)
|
|
61
65
|
return { results, log: [] };
|
|
62
66
|
const goalsByTag = new Map(active.goals.map((g) => [g.goalName, g]));
|
|
63
67
|
const policiesByGoalId = active.policies;
|
|
64
|
-
// Goal-tag matches per boosted row, keyed by entry id; a side table (not a spread-on marker property) so `boosted`
|
|
68
|
+
// Goal-tag matches per boosted row, keyed by entry id; a side table (not a spread-on marker property) so `boosted`
|
|
69
|
+
// stays exactly R[] with no cast-then-strip.
|
|
65
70
|
const matchesByEntryId = new Map();
|
|
66
71
|
const boosted = results
|
|
67
72
|
.map((r) => {
|
|
@@ -82,11 +87,13 @@ export function boostByGoals(results, active, opts) {
|
|
|
82
87
|
});
|
|
83
88
|
}
|
|
84
89
|
matchesByEntryId.set(r.entry.id, matches);
|
|
85
|
-
// SAFETY: spreading a generic-constrained `r: R` widens to the spread's plain object type; only `score` changes,
|
|
90
|
+
// SAFETY: spreading a generic-constrained `r: R` widens to the spread's plain object type; only `score` changes,
|
|
91
|
+
// so the value still satisfies R.
|
|
86
92
|
return { ...r, score: r.score * multiplier };
|
|
87
93
|
})
|
|
88
|
-
// Deliberately a PLAIN stable score sort with no compareEntryIdentity tail:
|
|
89
|
-
//
|
|
94
|
+
// Deliberately a PLAIN stable score sort with no compareEntryIdentity tail:
|
|
95
|
+
// re-sorting an already deterministic ranking inherits its determinism via stability,
|
|
96
|
+
// and ties keep the prior (meaningful) rank instead of reordering by content.
|
|
90
97
|
.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
91
98
|
return { results: boosted, log: buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) };
|
|
92
99
|
}
|
|
@@ -15,6 +15,9 @@ export interface HybridScoreInput {
|
|
|
15
15
|
explain: boolean;
|
|
16
16
|
boosts: BoostContext;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Scores every pool entry; rows with no lexical hit drop out unless vectors are in play, and non-positive scores always
|
|
20
|
+
* do.
|
|
21
|
+
*/
|
|
19
22
|
export declare function scoreHybridPool(input: HybridScoreInput): SearchResult[];
|
|
20
23
|
//# sourceMappingURL=hybrid-score.d.ts.map
|
|
@@ -2,7 +2,10 @@ import { estimateTokens } from '../util/token-text.js';
|
|
|
2
2
|
import { matchedQueryTerms } from './bm25.js';
|
|
3
3
|
import { applyRankBoosts, strengthRecencyMultipliers } from './boosts.js';
|
|
4
4
|
import { addDagFields, ageInDays } from './breakdown.js';
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Scores every pool entry; rows with no lexical hit drop out unless vectors are in play, and non-positive scores always
|
|
7
|
+
* do.
|
|
8
|
+
*/
|
|
6
9
|
export function scoreHybridPool(input) {
|
|
7
10
|
const scored = [];
|
|
8
11
|
const queryTermSet = new Set(input.queryTerms);
|
package/dist/search/hybrid.d.ts
CHANGED
|
@@ -17,7 +17,9 @@ export interface HybridSearchOptions {
|
|
|
17
17
|
mmrLambda?: number;
|
|
18
18
|
/** 'blend' (weighted sum of BM25 and cosine, default) or 'rrf' (reciprocal rank fusion of their ranks). */
|
|
19
19
|
scoring?: 'blend' | 'rrf';
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Corpus from `buildCorpus` over the same `entries` in the same order (content + tags), reused to skip tokenizing.
|
|
22
|
+
*/
|
|
21
23
|
preparedCorpus?: BM25Corpus;
|
|
22
24
|
/** Minimum number of results to return regardless of budget. Default 1. */
|
|
23
25
|
minResults?: number;
|
|
@@ -33,13 +35,21 @@ export interface HybridSearchOptions {
|
|
|
33
35
|
reranker?: RerankerFn;
|
|
34
36
|
/** Options passed through to the reranker. */
|
|
35
37
|
rerankerOptions?: RerankerOptions;
|
|
36
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Multiplier on DAG summary scores. Default 0.85 (env HIPPO_SUMMARY_DEBOOST overrides; per-call wins). 1.0 disables.
|
|
40
|
+
*/
|
|
37
41
|
summaryDeboost?: number;
|
|
38
42
|
/** 1.05 micro-boost for summaries rebuilt within 7 days. Default true. */
|
|
39
43
|
summaryFreshness?: boolean;
|
|
40
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See
|
|
46
|
+
* src/graph/stream.ts.
|
|
47
|
+
*/
|
|
41
48
|
graphStream?: GraphStreamOptions;
|
|
42
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Add the rows nearest the query vector, not only rescore `entries`; without it a row no query word matches cannot
|
|
51
|
+
* surface.
|
|
52
|
+
*/
|
|
43
53
|
vectorCandidates?: HybridVectorCandidates;
|
|
44
54
|
/** Where vectors are read; hippo.db under `hippoRoot` when unset. */
|
|
45
55
|
store?: HippoStore;
|
|
@@ -47,11 +57,16 @@ export interface HybridSearchOptions {
|
|
|
47
57
|
queryEmbedDeadline?: AbortSignal;
|
|
48
58
|
}
|
|
49
59
|
export declare const DEFAULT_EMBEDDING_WEIGHT = 0.6;
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
/**
|
|
61
|
+
* BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency
|
|
62
|
+
* otherwise.
|
|
63
|
+
*/
|
|
52
64
|
export declare function hybridSearch(query: string, entries: MemoryEntry[], options?: HybridSearchOptions): Promise<SearchResult[]>;
|
|
53
|
-
/**
|
|
54
|
-
|
|
65
|
+
/**
|
|
66
|
+
* hippo.db under `hippoRoot` when the caller passed no store: the default lives on this exported entry, never inside
|
|
67
|
+
* the vector arm.
|
|
68
|
+
*/
|
|
69
|
+
export declare function vectorSourceOf({ hippoRoot, store, }: {
|
|
55
70
|
hippoRoot?: string;
|
|
56
71
|
store?: HippoStore;
|
|
57
72
|
}): VectorSource | undefined;
|
package/dist/search/hybrid.js
CHANGED
|
@@ -7,17 +7,19 @@ import { bm25Score, buildCorpus, entryText } from './bm25.js';
|
|
|
7
7
|
import { currentEntries } from './as-of.js';
|
|
8
8
|
import { summaryScoring } from './boosts.js';
|
|
9
9
|
import { temporalContext } from './temporal.js';
|
|
10
|
-
import { denseScores, resolveVectorArm } from './vector.js';
|
|
10
|
+
import { denseScores, resolveVectorArm, } from './vector.js';
|
|
11
11
|
import { fuseRanks } from './fusion.js';
|
|
12
12
|
import { scoreHybridPool } from './hybrid-score.js';
|
|
13
13
|
import { applyMmrWindow, applyReranker } from './rerank.js';
|
|
14
14
|
import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
|
|
15
|
-
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
15
|
+
import { DEFAULT_MMR_LAMBDA, DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
16
16
|
import { sqliteStore } from '../store/index.js';
|
|
17
|
-
// Share of the blended score that cosine takes
|
|
17
|
+
// Share of the blended score that cosine takes.
|
|
18
18
|
export const DEFAULT_EMBEDDING_WEIGHT = 0.6;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
/**
|
|
20
|
+
* BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency
|
|
21
|
+
* otherwise.
|
|
22
|
+
*/
|
|
21
23
|
export async function hybridSearch(query, entries, options = {}) {
|
|
22
24
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
23
25
|
const embeddingWeight = options.embeddingWeight ?? DEFAULT_EMBEDDING_WEIGHT;
|
|
@@ -49,8 +51,11 @@ export async function hybridSearch(query, entries, options = {}) {
|
|
|
49
51
|
const ordered = await orderHybrid(query, withDagChildren(dedupeExtracted(scored), arm.entries), arm, options);
|
|
50
52
|
return fitBudget(ordered, options.budget ?? DEFAULT_RECALL_BUDGET, options.minResults ?? 1, options.cost);
|
|
51
53
|
}
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
+
/**
|
|
55
|
+
* hippo.db under `hippoRoot` when the caller passed no store: the default lives on this exported entry, never inside
|
|
56
|
+
* the vector arm.
|
|
57
|
+
*/
|
|
58
|
+
export function vectorSourceOf({ hippoRoot, store, }) {
|
|
54
59
|
return hippoRoot ? { root: hippoRoot, store: store ?? sqliteStore(hippoRoot) } : undefined;
|
|
55
60
|
}
|
|
56
61
|
function hybridBoostContext(query, pool, now, options) {
|