hippo-memory 1.69.0 → 1.71.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/search/boosts.js
CHANGED
|
@@ -1,23 +1,38 @@
|
|
|
1
|
-
import { envSummaryDeboost } from '../env.js';
|
|
2
|
-
import { calculateStrength, CHURN_STALE_TAG } from '../memory.js';
|
|
3
|
-
import { isOutcomeFastAblated, isRecencyAblated, evalRecencyScaleDays } from '../ablation.js';
|
|
4
|
-
import { pathBoostMultiplier } from '
|
|
5
|
-
import { scopeMatch } from '../scope.js';
|
|
1
|
+
import { envSummaryDeboost } from '../util/env.js';
|
|
2
|
+
import { calculateStrength, CHURN_STALE_TAG } from '../core/memory.js';
|
|
3
|
+
import { isOutcomeFastAblated, isRecencyAblated, evalRecencyScaleDays } from '../core/ablation.js';
|
|
4
|
+
import { pathBoostMultiplier } from './path-context.js';
|
|
5
|
+
import { scopeMatch } from '../sharing/scope.js';
|
|
6
6
|
import { temporalBoost } from './temporal.js';
|
|
7
|
-
|
|
7
|
+
import { DAY_MS } from '../util/time.js';
|
|
8
|
+
const CHURN_STALE_RANK_MULTIPLIER = 0.5; // SHORTCUT: untuned; measure on real recall before any default.
|
|
8
9
|
const DECISION_TAG_BOOST = 1.2;
|
|
10
|
+
// A memory tagged for the active scope outranks a neutral one; one tagged for another scope is demoted.
|
|
11
|
+
const SCOPE_MATCH_BOOST = 1.5;
|
|
12
|
+
const SCOPE_MISMATCH_BOOST = 0.5;
|
|
13
|
+
const EXTRACTION_TAG_BOOST = 1.3;
|
|
14
|
+
// The outcome nudge is 1 + slope * tanh(net / 2), clamped so one outcome streak cannot swamp lexical rank.
|
|
15
|
+
const OUTCOME_NUDGE_SLOPE = 0.15;
|
|
16
|
+
const OUTCOME_NUDGE_MIN = 0.85;
|
|
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 score.
|
|
19
|
+
export const STRENGTH_RANK_FLOOR = 0.5;
|
|
20
|
+
export const STRENGTH_RANK_SPAN = 0.5;
|
|
21
|
+
const RECENCY_RANK_FLOOR = 0.8;
|
|
22
|
+
const RECENCY_RANK_SPAN = 0.2;
|
|
23
|
+
const RECENCY_SCALE_DAYS = 30;
|
|
9
24
|
const DEFAULT_SUMMARY_DEBOOST = 0.85;
|
|
10
25
|
const DEFAULT_FRESHNESS_BOOST = 1.05;
|
|
11
|
-
const FRESHNESS_WINDOW_MS = 7 *
|
|
26
|
+
const FRESHNESS_WINDOW_MS = 7 * DAY_MS;
|
|
12
27
|
export function churnStaleFactor(entry) {
|
|
13
28
|
return entry.tags.includes(CHURN_STALE_TAG) ? CHURN_STALE_RANK_MULTIPLIER : 1.0;
|
|
14
29
|
}
|
|
15
|
-
|
|
30
|
+
function recencyBoost(entry, now) {
|
|
16
31
|
if (isRecencyAblated())
|
|
17
32
|
return 1; // EVAL-ONLY ablation (see ablation.ts)
|
|
18
33
|
const created = new Date(entry.created);
|
|
19
|
-
const ageDays = (now.getTime() - created.getTime()) /
|
|
20
|
-
return Math.exp(-ageDays / (evalRecencyScaleDays() ??
|
|
34
|
+
const ageDays = (now.getTime() - created.getTime()) / DAY_MS;
|
|
35
|
+
return Math.exp(-ageDays / (evalRecencyScaleDays() ?? RECENCY_SCALE_DAYS));
|
|
21
36
|
}
|
|
22
37
|
/** Retrieval-time outcome nudge in [0.85, 1.15]; the bm25-outcome eval baseline ranks with it too. */
|
|
23
38
|
export function outcomeMultiplier(entry) {
|
|
@@ -25,7 +40,7 @@ export function outcomeMultiplier(entry) {
|
|
|
25
40
|
const neg = entry.outcome_negative ?? 0;
|
|
26
41
|
if (isOutcomeFastAblated() || (pos === 0 && neg === 0))
|
|
27
42
|
return 1.0; // EVAL-ONLY ablation (see ablation.ts)
|
|
28
|
-
return Math.max(
|
|
43
|
+
return Math.max(OUTCOME_NUDGE_MIN, Math.min(OUTCOME_NUDGE_MAX, 1 + OUTCOME_NUDGE_SLOPE * Math.tanh((pos - neg) / 2)));
|
|
29
44
|
}
|
|
30
45
|
/** A DAG summary is a topic summary (level 2) or an entity profile (level 3); both take the same deboost. */
|
|
31
46
|
export function isDagSummary(entry) {
|
|
@@ -66,7 +81,14 @@ export function summaryMultipliers(entry, now, s) {
|
|
|
66
81
|
return { deboost: s.deboost, freshness: s.freshness ? summaryFreshnessMultiplier(entry, now) : 1.0 };
|
|
67
82
|
}
|
|
68
83
|
export function strengthRecencyMultipliers(entry, now) {
|
|
69
|
-
return {
|
|
84
|
+
return {
|
|
85
|
+
strength: STRENGTH_RANK_FLOOR + STRENGTH_RANK_SPAN * calculateStrength(entry, now),
|
|
86
|
+
recency: RECENCY_RANK_FLOOR + RECENCY_RANK_SPAN * recencyBoost(entry, now),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** The rank multiplier for a scopeMatch signal: match, mismatch or neutral. */
|
|
90
|
+
export function scopeBoostFor(signal) {
|
|
91
|
+
return signal === 1 ? SCOPE_MATCH_BOOST : signal === -1 ? SCOPE_MISMATCH_BOOST : 1.0;
|
|
70
92
|
}
|
|
71
93
|
/** Applies every rank multiplier one at a time, in a fixed order, so float rounding matches across paths. */
|
|
72
94
|
export function applyRankBoosts(score, entry, ctx) {
|
|
@@ -74,9 +96,8 @@ export function applyRankBoosts(score, entry, ctx) {
|
|
|
74
96
|
const churnStaleMultiplier = churnStaleFactor(entry);
|
|
75
97
|
const pathBoost = pathBoostMultiplier(entry.tags, ctx.pathTags);
|
|
76
98
|
const outcomeBoost = ctx.outcome ? outcomeMultiplier(entry) : 1.0;
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const extractionBoost = entry.tags.includes('extracted') ? 1.3 : 1.0;
|
|
99
|
+
const scopeBoost = scopeBoostFor(scopeMatch(entry.tags, ctx.scope));
|
|
100
|
+
const extractionBoost = entry.tags.includes('extracted') ? EXTRACTION_TAG_BOOST : 1.0;
|
|
80
101
|
const summary = summaryMultipliers(entry, ctx.now, ctx.summary);
|
|
81
102
|
let s = score;
|
|
82
103
|
s *= decisionBoost;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
2
|
-
import type { ScoreBreakdown } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { ScoreBreakdown } from '../core/search-types.js';
|
|
3
3
|
/** Whole days since the entry was created, never negative. */
|
|
4
4
|
export declare function ageInDays(entry: MemoryEntry, now: Date): number;
|
|
5
5
|
/** Copies the entry's DAG metadata, and for summaries the multipliers applied, onto an explain breakdown. */
|
package/dist/search/breakdown.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { isDagSummary } from './boosts.js';
|
|
2
|
+
import { DAY_MS } from '../util/time.js';
|
|
2
3
|
/** Whole days since the entry was created, never negative. */
|
|
3
4
|
export function ageInDays(entry, now) {
|
|
4
|
-
return Math.max(0, Math.floor((now.getTime() - new Date(entry.created).getTime()) /
|
|
5
|
+
return Math.max(0, Math.floor((now.getTime() - new Date(entry.created).getTime()) / DAY_MS));
|
|
5
6
|
}
|
|
6
7
|
/** Copies the entry's DAG metadata, and for summaries the multipliers applied, onto an explain breakdown. */
|
|
7
8
|
export function addDagFields(breakdown, entry, deboost, freshness) {
|
package/dist/search/explain.d.ts
CHANGED
package/dist/search/explain.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { tokenize } from '../tokenize.js';
|
|
1
|
+
import { tokenize } from '../util/tokenize.js';
|
|
2
2
|
import { matchedQueryTerms } from './bm25.js';
|
|
3
|
+
const COSINE_DECIMALS = 3;
|
|
3
4
|
/** Why a result matched: the overlapping query terms and whether BM25 and/or embedding similarity contributed. */
|
|
4
5
|
export function explainMatch(query, result) {
|
|
5
6
|
const matchedTerms = matchedQueryTerms(new Set(tokenize(query)), result.entry);
|
|
@@ -9,7 +10,7 @@ export function explainMatch(query, result) {
|
|
|
9
10
|
if (hasBm25)
|
|
10
11
|
parts.push(`BM25: matched terms [${matchedTerms.join(', ')}]`);
|
|
11
12
|
if (hasEmbedding)
|
|
12
|
-
parts.push(`embedding similarity: ${result.cosine.toFixed(
|
|
13
|
+
parts.push(`embedding similarity: ${result.cosine.toFixed(COSINE_DECIMALS)}`);
|
|
13
14
|
if (parts.length === 0)
|
|
14
15
|
parts.push('no direct term or embedding match');
|
|
15
16
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
2
|
-
import type { ResultCost, SearchResult } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { ResultCost, SearchResult } from '../core/search-types.js';
|
|
3
3
|
/** When an extracted fact and its source both match, keep only the higher-scoring one (usually the fact). */
|
|
4
4
|
export declare function dedupeExtracted(scored: SearchResult[]): SearchResult[];
|
|
5
5
|
/** DAG drill-down: a matched summary pulls its children from `pool` in at 0.9x its score; sorts `results` in place. */
|
package/dist/search/finalize.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { estimateTokens } from '../token-
|
|
2
|
-
import { compareScoredResults } from '../compare.js';
|
|
1
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
2
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
3
3
|
import { churnStaleFactor } from './boosts.js';
|
|
4
4
|
/** When an extracted fact and its source both match, keep only the higher-scoring one (usually the fact). */
|
|
5
5
|
export function dedupeExtracted(scored) {
|
|
@@ -20,6 +20,7 @@ export function dedupeExtracted(scored) {
|
|
|
20
20
|
}
|
|
21
21
|
return deduped;
|
|
22
22
|
}
|
|
23
|
+
const DAG_CHILD_SCORE_FACTOR = 0.9;
|
|
23
24
|
/** DAG drill-down: a matched summary pulls its children from `pool` in at 0.9x its score; sorts `results` in place. */
|
|
24
25
|
export function withDagChildren(results, pool) {
|
|
25
26
|
const summaryIds = results.filter((r) => r.entry.tags.includes('dag-summary')).map((r) => r.entry.id);
|
|
@@ -30,7 +31,7 @@ export function withDagChildren(results, pool) {
|
|
|
30
31
|
if (results.some((r) => r.entry.id === child.id))
|
|
31
32
|
continue;
|
|
32
33
|
const parentResult = results.find((r) => r.entry.id === child.dag_parent_id);
|
|
33
|
-
const childScore = parentResult ? parentResult.score *
|
|
34
|
+
const childScore = parentResult ? parentResult.score * DAG_CHILD_SCORE_FACTOR * churnStaleFactor(child) : 0;
|
|
34
35
|
results.push({ entry: child, score: childScore, bm25: 0, cosine: 0, tokens: estimateTokens(child.content) });
|
|
35
36
|
}
|
|
36
37
|
results.sort(compareScoredResults);
|
package/dist/search/fusion.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import type { DenseScores } from './vector.js';
|
|
3
3
|
/** Opt-in third RRF list ranking in-pool candidates by graph proximity to the strong lexical seeds. */
|
|
4
4
|
export interface GraphStreamOptions {
|
package/dist/search/fusion.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { rrfFuse } from '
|
|
2
|
-
import { graphRankStream, selectGraphSeeds, DEFAULT_GRAPH_SEED_COUNT } from '../graph
|
|
3
|
-
import { compareEntryIdentity } from '../compare.js';
|
|
1
|
+
import { rrfFuse } from './rrf.js';
|
|
2
|
+
import { graphRankStream, selectGraphSeeds, DEFAULT_GRAPH_SEED_COUNT } from '../graph/stream.js';
|
|
3
|
+
import { compareEntryIdentity } from '../core/compare.js';
|
|
4
4
|
// Score desc, then entry identity, so ties cannot leak fresh-ingest order into graph seeds or RRF ranks.
|
|
5
5
|
function rankBy(eligible, scores, entries) {
|
|
6
6
|
return [...eligible].sort((a, b) => {
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { RerankStep } from '../core/search-types.js';
|
|
3
|
+
import type { ActiveGoals, GoalRecallLogRow } from '../store/goals.js';
|
|
4
|
+
/** Options of {@link boostByGoals}. */
|
|
5
|
+
export interface GoalStackBoostOpts {
|
|
6
|
+
sessionId: string;
|
|
7
|
+
tenantId: string;
|
|
8
|
+
limit: number;
|
|
9
|
+
/** Side-channel: one goal-boost `RerankStep` per boosted row, keyed by `entry.id` (a map because the helper re-spreads rows); only populated when passed. */
|
|
10
|
+
trace?: Map<string, RerankStep>;
|
|
11
|
+
}
|
|
12
|
+
/** The boosted, re-sorted rows and the `goal_recall_log` rows they earn. */
|
|
13
|
+
export interface GoalStackBoost<R> {
|
|
14
|
+
results: R[];
|
|
15
|
+
log: GoalRecallLogRow[];
|
|
16
|
+
}
|
|
17
|
+
/** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
|
|
18
|
+
* `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
|
|
19
|
+
export declare function boostByGoals<R extends {
|
|
20
|
+
entry: MemoryEntry;
|
|
21
|
+
score: number;
|
|
22
|
+
}>(results: R[], active: ActiveGoals, opts: GoalStackBoostOpts): GoalStackBoost<R>;
|
|
23
|
+
//# sourceMappingURL=goal-boost.d.ts.map
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// src/search/goal-boost.ts: the goal-stack boost over goals already read; it ranks rows and touches no store.
|
|
2
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
3
|
+
const MAX_FINAL_MULTIPLIER = 3.0;
|
|
4
|
+
/** The capped boost for one row whose tags match `matches` active goals. */
|
|
5
|
+
function goalBoostMultiplier(entry, tags, matches, goalsByTag, policiesByGoalId) {
|
|
6
|
+
// Base 2.0x for first match, +0.5x per additional, capped at 3.0x.
|
|
7
|
+
let multiplier = Math.min(2.0 + 0.5 * (matches.length - 1), MAX_FINAL_MULTIPLIER);
|
|
8
|
+
// Compose per-policy multipliers per matched tag.
|
|
9
|
+
for (const tag of matches) {
|
|
10
|
+
const goal = goalsByTag.get(tag);
|
|
11
|
+
const policy = policiesByGoalId.get(goal.id);
|
|
12
|
+
if (!policy)
|
|
13
|
+
continue;
|
|
14
|
+
if (policy.policyType === 'error-prioritized' && tags.includes('error')) {
|
|
15
|
+
multiplier *= policy.errorPriority;
|
|
16
|
+
}
|
|
17
|
+
else if (policy.policyType === 'schema-fit-biased') {
|
|
18
|
+
// Linearly weight schema_fit in [0,1] up to (weightSchemaFit)x.
|
|
19
|
+
// Default 1.0 is a no-op.
|
|
20
|
+
multiplier *=
|
|
21
|
+
1.0 +
|
|
22
|
+
Math.max(0, policy.weightSchemaFit - 1.0) *
|
|
23
|
+
(entry.schema_fit ?? 0.5);
|
|
24
|
+
}
|
|
25
|
+
else if (policy.policyType === 'recency-first') {
|
|
26
|
+
multiplier *= policy.weightRecency;
|
|
27
|
+
}
|
|
28
|
+
else if (policy.policyType === 'hybrid') {
|
|
29
|
+
multiplier *= policy.weightOutcome;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Hard cap AFTER all composition.
|
|
33
|
+
return Math.min(multiplier, MAX_FINAL_MULTIPLIER);
|
|
34
|
+
}
|
|
35
|
+
/** Log rows for the top `limit` boosted rows, one per matched goal. */
|
|
36
|
+
function buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) {
|
|
37
|
+
const { sessionId, tenantId, limit } = opts;
|
|
38
|
+
const recalledAt = new Date().toISOString();
|
|
39
|
+
const log = [];
|
|
40
|
+
for (const r of boosted.slice(0, limit)) {
|
|
41
|
+
const matches = matchesByEntryId.get(r.entry.id);
|
|
42
|
+
if (!matches || matches.length === 0)
|
|
43
|
+
continue;
|
|
44
|
+
for (const tag of matches) {
|
|
45
|
+
const goal = goalsByTag.get(tag);
|
|
46
|
+
if (!goal)
|
|
47
|
+
continue;
|
|
48
|
+
log.push({ goalId: goal.id, memoryId: r.entry.id, tenantId, sessionId, recalledAt, score: r.score });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return log;
|
|
52
|
+
}
|
|
53
|
+
/** The goal-stack boost over goals already read, touching no store; a caller skips it under an explicit goal tag. Its log covers the top
|
|
54
|
+
* `limit` rows and keeps those whose memory is global, since only the store can tell them apart; {@link localGoalRecallRows} drops those before the write. */
|
|
55
|
+
export function boostByGoals(results, active, opts) {
|
|
56
|
+
const { trace } = opts;
|
|
57
|
+
if (active.goals.length === 0)
|
|
58
|
+
return { results, log: [] };
|
|
59
|
+
const goalsByTag = new Map(active.goals.map((g) => [g.goalName, g]));
|
|
60
|
+
const policiesByGoalId = active.policies;
|
|
61
|
+
// Goal-tag matches per boosted row, keyed by entry id; a side table (not a spread-on marker property) so `boosted` stays exactly R[] with no cast-then-strip.
|
|
62
|
+
const matchesByEntryId = new Map();
|
|
63
|
+
const boosted = results
|
|
64
|
+
.map((r) => {
|
|
65
|
+
const tags = r.entry.tags ?? [];
|
|
66
|
+
const matches = tags.filter((t) => goalsByTag.has(t));
|
|
67
|
+
if (matches.length === 0)
|
|
68
|
+
return r;
|
|
69
|
+
const multiplier = goalBoostMultiplier(r.entry, tags, matches, goalsByTag, policiesByGoalId);
|
|
70
|
+
// Recall-trace side-channel: record the goal-boost step BEFORE the
|
|
71
|
+
// score is mutated, keyed by entry id; a pure read of r.score.
|
|
72
|
+
if (trace) {
|
|
73
|
+
trace.set(r.entry.id, {
|
|
74
|
+
stage: 'goal-boost',
|
|
75
|
+
multiplier,
|
|
76
|
+
scoreBefore: r.score,
|
|
77
|
+
scoreAfter: r.score * multiplier,
|
|
78
|
+
note: matches.join(', '),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
matchesByEntryId.set(r.entry.id, matches);
|
|
82
|
+
// SAFETY: spreading a generic-constrained `r: R` widens to the spread's plain object type; only `score` changes, so the value still satisfies R.
|
|
83
|
+
return { ...r, score: r.score * multiplier };
|
|
84
|
+
})
|
|
85
|
+
// Deliberately a PLAIN stable score sort with no compareEntryIdentity tail: re-sorting an already deterministic ranking inherits its determinism via
|
|
86
|
+
// stability, and ties keep the prior (meaningful) rank instead of reordering by content.
|
|
87
|
+
.sort((a, b) => compareScoresDesc(a.score, b.score));
|
|
88
|
+
return { results: boosted, log: buildGoalRecallLog(boosted, matchesByEntryId, goalsByTag, opts) };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=goal-boost.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type BoostContext } from './boosts.js';
|
|
3
3
|
import type { DenseScores } from './vector.js';
|
|
4
|
-
import type { SearchResult } from '
|
|
4
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
5
5
|
export interface HybridScoreInput {
|
|
6
6
|
entries: MemoryEntry[];
|
|
7
7
|
queryTerms: string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { estimateTokens } from '../token-
|
|
1
|
+
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';
|
package/dist/search/hybrid.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import type { RerankerFn, RerankerOptions } from '../rerankers/types.js';
|
|
3
3
|
import { type BM25Corpus } from './bm25.js';
|
|
4
4
|
import { type HybridVectorCandidates } from './vector.js';
|
|
5
5
|
import { type GraphStreamOptions } from './fusion.js';
|
|
6
|
-
import { type ResultCost, type SearchResult } from '
|
|
7
|
-
import type { HippoStore } from '../store
|
|
6
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
7
|
+
import type { HippoStore } from '../store/index.js';
|
|
8
8
|
export interface HybridSearchOptions {
|
|
9
9
|
budget?: number;
|
|
10
10
|
now?: Date;
|
|
@@ -37,12 +37,14 @@ export interface HybridSearchOptions {
|
|
|
37
37
|
summaryDeboost?: number;
|
|
38
38
|
/** 1.05 micro-boost for summaries rebuilt within 7 days. Default true. */
|
|
39
39
|
summaryFreshness?: boolean;
|
|
40
|
-
/** Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See src/graph
|
|
40
|
+
/** Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See src/graph/stream.ts. */
|
|
41
41
|
graphStream?: GraphStreamOptions;
|
|
42
42
|
/** Add the rows nearest the query vector, not only rescore `entries`; without it a row no query word matches cannot surface. */
|
|
43
43
|
vectorCandidates?: HybridVectorCandidates;
|
|
44
44
|
/** Where vectors are read; hippo.db under `hippoRoot` when unset. */
|
|
45
45
|
store?: HippoStore;
|
|
46
|
+
/** The deadline a caller already started for this recall's query embedding; a fresh budget when unset. */
|
|
47
|
+
queryEmbedDeadline?: AbortSignal;
|
|
46
48
|
}
|
|
47
49
|
/** BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency otherwise. */
|
|
48
50
|
export declare function hybridSearch(query: string, entries: MemoryEntry[], options?: HybridSearchOptions): Promise<SearchResult[]>;
|
package/dist/search/hybrid.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { tokenize } from '../tokenize.js';
|
|
2
|
-
import { evalNow } from '../ablation.js';
|
|
3
|
-
import { extractPathTags } from '
|
|
4
|
-
import { detectScope } from '../scope.js';
|
|
5
|
-
import { compareScoredResults } from '../compare.js';
|
|
1
|
+
import { tokenize } from '../util/tokenize.js';
|
|
2
|
+
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { extractPathTags } from './path-context.js';
|
|
4
|
+
import { detectScope } from '../sharing/scope.js';
|
|
5
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
6
6
|
import { bm25Score, buildCorpus, entryText } from './bm25.js';
|
|
7
7
|
import { currentEntries } from './as-of.js';
|
|
8
8
|
import { summaryScoring } from './boosts.js';
|
|
@@ -12,11 +12,14 @@ 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 '
|
|
15
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
16
|
+
// Share of the blended score that cosine takes, and the relevance side of the MMR relevance-versus-diversity trade.
|
|
17
|
+
const DEFAULT_EMBEDDING_WEIGHT = 0.6;
|
|
18
|
+
const DEFAULT_MMR_LAMBDA = 0.7;
|
|
16
19
|
/** BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency otherwise. */
|
|
17
20
|
export async function hybridSearch(query, entries, options = {}) {
|
|
18
21
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
19
|
-
const embeddingWeight = options.embeddingWeight ??
|
|
22
|
+
const embeddingWeight = options.embeddingWeight ?? DEFAULT_EMBEDDING_WEIGHT;
|
|
20
23
|
const pool = currentEntries(entries, options);
|
|
21
24
|
if (pool.length === 0)
|
|
22
25
|
return [];
|
|
@@ -57,7 +60,7 @@ function hybridBoostContext(query, pool, now, options) {
|
|
|
57
60
|
}
|
|
58
61
|
/** MMR when vectors are loaded, then the optional reranker. */
|
|
59
62
|
async function orderHybrid(query, scored, arm, options) {
|
|
60
|
-
const mmrLambda = options.mmrLambda ??
|
|
63
|
+
const mmrLambda = options.mmrLambda ?? DEFAULT_MMR_LAMBDA;
|
|
61
64
|
const applyMmr = (options.mmr ?? true) && arm.useEmbeddings && scored.length > 1 && mmrLambda < 1;
|
|
62
65
|
const ordered = applyMmr ? applyMmrWindow(scored, arm.embeddingIndex, mmrLambda, options.explain ?? false) : scored;
|
|
63
66
|
return options.reranker ? applyReranker(query, ordered, options.reranker, options.rerankerOptions) : ordered;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MemoryEntry } from '
|
|
2
|
-
import { type ResultCost, type SearchResult } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
3
3
|
export declare function multihopSearch(query: string, entries: MemoryEntry[], options?: {
|
|
4
4
|
budget?: number;
|
|
5
5
|
now?: Date;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
2
|
+
import { fitBudget } from './finalize.js';
|
|
3
|
+
import { search } from './bm25-search.js';
|
|
4
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
5
|
+
const PASS1_TOP_K = 10;
|
|
4
6
|
export function multihopSearch(query, entries, options = {}) {
|
|
5
7
|
const budget = options.budget ?? DEFAULT_RECALL_BUDGET;
|
|
6
8
|
// Pass 1 searches wide to find entities, so each return fits the caller's budget, as search() does.
|
|
7
9
|
const fit = (ordered) => fitBudget(ordered, budget, options.minResults ?? 1, options.cost);
|
|
8
10
|
const pass1 = search(query, entries, { ...options, budget: budget * 2 });
|
|
9
|
-
const topK = pass1.slice(0,
|
|
11
|
+
const topK = pass1.slice(0, PASS1_TOP_K);
|
|
10
12
|
if (topK.length === 0)
|
|
11
13
|
return [];
|
|
12
14
|
const entityTags = new Set();
|
|
@@ -32,9 +34,8 @@ export function multihopSearch(query, entries, options = {}) {
|
|
|
32
34
|
merged.set(r.entry.id, r);
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
|
-
// PLAIN stable score sort on purpose
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
return fit([...merged.values()].sort((a, b) => b.score - a.score));
|
|
37
|
+
// PLAIN stable score sort on purpose: pass1/pass2 inputs are already deterministically ordered (search() carries the content tail),
|
|
38
|
+
// stability inherits that, and ties keep pass-1 results ahead of pass-2 follow-ups.
|
|
39
|
+
return fit([...merged.values()].sort((a, b) => compareScoresDesc(a.score, b.score)));
|
|
39
40
|
}
|
|
40
41
|
//# sourceMappingURL=multihop.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Extracts meaningful path segments from a directory as tags like ['path:src', 'path:my-project']; filters noise (node_modules, .git, Users, home dirs,
|
|
2
|
+
* drive letters). */
|
|
3
|
+
export declare function extractPathTags(dirPath: string): string[];
|
|
4
|
+
/** Path overlap score in 0..1 (1 = perfect match), normalized by the MORE SPECIFIC side (the larger tag set),
|
|
5
|
+
* so a bare/generic path tag cannot score 1.0 against a deeply nested cwd just because its tiny tag set is contained in the query's. */
|
|
6
|
+
export declare function pathOverlapScore(memoryPathTags: string[], currentPathTags: string[]): number;
|
|
7
|
+
/** Weight applied to path overlap score when computing the recall boost multiplier. */
|
|
8
|
+
export declare const PATH_BOOST_WEIGHT = 0.3;
|
|
9
|
+
/** Multiplier (1.0..1.3) applied to a composite recall score for path locality; filters the memory's tags to path:* itself so call sites cannot drift. */
|
|
10
|
+
export declare function pathBoostMultiplier(memoryTags: string[], currentPathTags: string[]): number;
|
|
11
|
+
//# sourceMappingURL=path-context.d.ts.map
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
1
|
+
// Keeps the last meaningful segments, the most specific ones.
|
|
2
|
+
const PATH_SEGMENTS_KEPT = 4;
|
|
3
|
+
/** Extracts meaningful path segments from a directory as tags like ['path:src', 'path:my-project']; filters noise (node_modules, .git, Users, home dirs,
|
|
4
|
+
* drive letters). */
|
|
6
5
|
export function extractPathTags(dirPath) {
|
|
7
6
|
const normalized = dirPath.replace(/\\/g, '/');
|
|
8
7
|
const segments = normalized.split('/').filter(Boolean);
|
|
@@ -14,17 +13,11 @@ export function extractPathTags(dirPath) {
|
|
|
14
13
|
]);
|
|
15
14
|
return segments
|
|
16
15
|
.filter(s => s.length >= 2 && !noise.has(s.toLowerCase()))
|
|
17
|
-
.slice(-
|
|
16
|
+
.slice(-PATH_SEGMENTS_KEPT)
|
|
18
17
|
.map(s => `path:${s.toLowerCase()}`);
|
|
19
18
|
}
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* Returns 0..1 where 1 = perfect match.
|
|
23
|
-
* Normalizes by the MORE SPECIFIC side (the larger of the two tag sets),
|
|
24
|
-
* so a memory carrying only a bare/generic path tag can no longer score a
|
|
25
|
-
* full 1.0 against a deeply-nested cwd just because its own tiny tag set
|
|
26
|
-
* is fully contained in the query's — genericity is no longer rewarded.
|
|
27
|
-
*/
|
|
19
|
+
/** Path overlap score in 0..1 (1 = perfect match), normalized by the MORE SPECIFIC side (the larger tag set),
|
|
20
|
+
* so a bare/generic path tag cannot score 1.0 against a deeply nested cwd just because its tiny tag set is contained in the query's. */
|
|
28
21
|
export function pathOverlapScore(memoryPathTags, currentPathTags) {
|
|
29
22
|
if (memoryPathTags.length === 0 || currentPathTags.length === 0)
|
|
30
23
|
return 0;
|
|
@@ -36,11 +29,7 @@ export function pathOverlapScore(memoryPathTags, currentPathTags) {
|
|
|
36
29
|
}
|
|
37
30
|
/** Weight applied to path overlap score when computing the recall boost multiplier. */
|
|
38
31
|
export const PATH_BOOST_WEIGHT = 0.3;
|
|
39
|
-
/**
|
|
40
|
-
* Multiplier applied to a composite recall score for path locality.
|
|
41
|
-
* Filters the memory's tags to path:* itself so call sites cannot drift.
|
|
42
|
-
* Returns 1.0..1.3.
|
|
43
|
-
*/
|
|
32
|
+
/** Multiplier (1.0..1.3) applied to a composite recall score for path locality; filters the memory's tags to path:* itself so call sites cannot drift. */
|
|
44
33
|
export function pathBoostMultiplier(memoryTags, currentPathTags) {
|
|
45
34
|
const memPathTags = memoryTags.filter(t => t.startsWith('path:'));
|
|
46
35
|
return 1.0 + pathOverlapScore(memPathTags, currentPathTags) * PATH_BOOST_WEIGHT;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type PhysicsConfig } from '../physics-config.js';
|
|
3
|
-
import { type HippoStore } from '../store
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type PhysicsConfig } from '../core/physics-config.js';
|
|
3
|
+
import { type HippoStore } from '../store/index.js';
|
|
4
4
|
import { type HybridVectorCandidates } from './vector.js';
|
|
5
|
-
import { type ResultCost, type SearchResult } from '
|
|
5
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
6
6
|
export interface PhysicsSearchOptions {
|
|
7
7
|
budget?: number;
|
|
8
8
|
now?: Date;
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import { calculateStrength } from '../memory.js';
|
|
2
|
-
import { estimateTokens } from '../token-
|
|
3
|
-
import { evalNow, isRecallBoostAblated } from '../ablation.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
1
|
+
import { calculateStrength } from '../core/memory.js';
|
|
2
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
3
|
+
import { evalNow, isRecallBoostAblated } from '../core/ablation.js';
|
|
4
|
+
import { indexNeedsRebuild } from '../store/embeddings/index.js';
|
|
5
|
+
import { indexedModel } from '../store/vector-index.js';
|
|
6
|
+
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
7
|
+
import { physicsScore as computePhysicsScores, computeMass } from '../core/physics.js';
|
|
8
|
+
import { DEFAULT_PHYSICS_CONFIG } from '../core/physics-config.js';
|
|
9
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
10
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
11
|
+
import { errorMessage, log } from '../util/log.js';
|
|
12
|
+
import { sqliteStore } from '../store/index.js';
|
|
12
13
|
import { churnStaleFactor, summaryMultipliers, summaryScoring } from './boosts.js';
|
|
13
14
|
import { addDagFields, ageInDays } from './breakdown.js';
|
|
14
15
|
import { fitBudget } from './finalize.js';
|
|
15
16
|
import { hybridSearch } from './hybrid.js';
|
|
16
17
|
import { currentEntries } from './as-of.js';
|
|
17
|
-
import { requireVectorReads, vectorCandidatesOutside } from './vector.js';
|
|
18
|
-
import { DEFAULT_RECALL_BUDGET } from '
|
|
18
|
+
import { embedQueryBy, requireVectorReads, startQueryEmbedDeadline, vectorCandidatesOutside } from './vector.js';
|
|
19
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
19
20
|
/** Scores memories by gravity, momentum and cluster amplification; rows without physics state rank through hybridSearch. */
|
|
20
21
|
export async function physicsSearch(query, entries, options = {}) {
|
|
21
22
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
@@ -28,27 +29,29 @@ export async function physicsSearch(query, entries, options = {}) {
|
|
|
28
29
|
return hybridSearch(query, entries, options);
|
|
29
30
|
const root = options.hippoRoot;
|
|
30
31
|
const store = options.store ?? sqliteStore(root);
|
|
31
|
-
|
|
32
|
+
// Shared with every hybrid ranking below, so a provider that stalls here is not waited on a second time.
|
|
33
|
+
const queryEmbedDeadline = startQueryEmbedDeadline();
|
|
34
|
+
const queryVector = await physicsQueryVector(query, root, store, queryEmbedDeadline, options.queryEmbedding);
|
|
32
35
|
if (!queryVector)
|
|
33
|
-
return hybridSearch(query, entries, options);
|
|
36
|
+
return hybridSearch(query, entries, { ...options, queryEmbedDeadline });
|
|
34
37
|
// Checked here too, since a caller's own query vector skips the check inside physicsQueryVector.
|
|
35
38
|
const reads = requireVectorReads(store);
|
|
36
39
|
const pool = currentEntries(await withVectorCandidates(reads, entries, queryVector, options.vectorCandidates), options);
|
|
37
40
|
const physicsMap = await loadCandidateParticles(reads, pool);
|
|
38
41
|
if (!physicsMap)
|
|
39
|
-
return hybridSearch(query, pool, options);
|
|
42
|
+
return hybridSearch(query, pool, { ...options, queryEmbedDeadline });
|
|
40
43
|
const pools = splitByParticle(pool, physicsMap, queryVector, now);
|
|
41
44
|
const config = options.physicsConfig ?? DEFAULT_PHYSICS_CONFIG;
|
|
42
45
|
const physicsResults = scorePhysicsPool(pools, queryVector, config, scoring);
|
|
43
46
|
const classicResults = pools.classic.length > 0
|
|
44
|
-
? await hybridSearch(query, pools.classic, { ...options, vectorCandidates: undefined, budget: Infinity, explain })
|
|
47
|
+
? await hybridSearch(query, pools.classic, { ...options, queryEmbedDeadline, vectorCandidates: undefined, budget: Infinity, explain })
|
|
45
48
|
: [];
|
|
46
49
|
const merged = mergeScorePools(physicsResults, classicResults);
|
|
47
50
|
merged.sort(compareScoredResults);
|
|
48
51
|
return fitBudget(merged, options.budget ?? DEFAULT_RECALL_BUDGET, options.minResults ?? 1, options.cost);
|
|
49
52
|
}
|
|
50
53
|
/** The caller's vector, else the provider's; null sends the caller to hybridSearch. */
|
|
51
|
-
async function physicsQueryVector(query, root, store, given) {
|
|
54
|
+
async function physicsQueryVector(query, root, store, deadline, given) {
|
|
52
55
|
if (given && given.length > 0)
|
|
53
56
|
return given;
|
|
54
57
|
// Physics scores against particle positions, not the stored vector index, so a pruned index must not block it.
|
|
@@ -58,12 +61,12 @@ async function physicsQueryVector(query, root, store, given) {
|
|
|
58
61
|
return null;
|
|
59
62
|
if (indexNeedsRebuild(indexedModel(await requireVectorReads(store).embeddingIndexState()), provider.id))
|
|
60
63
|
return null;
|
|
61
|
-
const
|
|
64
|
+
const vec = await embedQueryBy(deadline, provider, query);
|
|
62
65
|
return vec && vec.length > 0 ? vec : null;
|
|
63
66
|
}
|
|
64
67
|
catch (err) {
|
|
65
68
|
rethrowIfSqliteBlocked(err);
|
|
66
|
-
log.debug(`physics search: query embed failed, using hybrid: ${
|
|
69
|
+
log.debug(`physics search: query embed failed, using hybrid: ${errorMessage(err)}`);
|
|
67
70
|
return null;
|
|
68
71
|
}
|
|
69
72
|
}
|
|
@@ -75,7 +78,7 @@ async function withVectorCandidates(reads, entries, queryVector, spec) {
|
|
|
75
78
|
}
|
|
76
79
|
catch (err) {
|
|
77
80
|
rethrowIfSqliteBlocked(err);
|
|
78
|
-
log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${
|
|
81
|
+
log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${errorMessage(err)}`);
|
|
79
82
|
return entries;
|
|
80
83
|
}
|
|
81
84
|
}
|
|
@@ -86,7 +89,7 @@ async function loadCandidateParticles(reads, pool) {
|
|
|
86
89
|
}
|
|
87
90
|
catch (err) {
|
|
88
91
|
rethrowIfSqliteBlocked(err);
|
|
89
|
-
log.debug(`physics search: state load failed, using hybrid: ${
|
|
92
|
+
log.debug(`physics search: state load failed, using hybrid: ${errorMessage(err)}`);
|
|
90
93
|
return null;
|
|
91
94
|
}
|
|
92
95
|
}
|
package/dist/search/rerank.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { RerankerFn, RerankerOptions } from '../rerankers/types.js';
|
|
2
|
-
import type { SearchResult } from '
|
|
2
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
3
3
|
/** MMR: repeatedly picks the candidate maximising lambda * relevance - (1 - lambda) * max(cos(cand, picked)).
|
|
4
4
|
* Input must be sorted by relevance; strict `>` keeps ties first-wins, so a deterministic input stays deterministic. */
|
|
5
|
-
export declare function mmrRerank(scored: SearchResult[], embeddingIndex: Record<string, number
|
|
5
|
+
export declare function mmrRerank(scored: SearchResult[], embeddingIndex: Record<string, ArrayLike<number>>, lambda: number, explain: boolean): SearchResult[];
|
|
6
6
|
/** MMR over the top window only; the tail keeps its relevance order. */
|
|
7
|
-
export declare function applyMmrWindow(scored: SearchResult[], embeddingIndex: Record<string, number
|
|
7
|
+
export declare function applyMmrWindow(scored: SearchResult[], embeddingIndex: Record<string, ArrayLike<number>>, lambda: number, explain: boolean): SearchResult[];
|
|
8
8
|
/** Runs the reranker over the top `topK` (default 50) and stamps pre and post ranks; see src/rerankers/types.ts. */
|
|
9
9
|
export declare function applyReranker(query: string, ordered: SearchResult[], reranker: RerankerFn, rerankerOptions?: RerankerOptions): Promise<SearchResult[]>;
|
|
10
10
|
//# sourceMappingURL=rerank.d.ts.map
|