hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- 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 +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- 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/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- 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} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- 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/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- 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 +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- 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 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- 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 +1 -1
- package/dist/capture/command.js +54 -41
- 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 +4 -1
- package/dist/capture/compact.js +59 -22
- 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} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- 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.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- 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} +5 -5
- 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} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -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 +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- 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/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- 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} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- 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 +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- 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} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- 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 +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- 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 +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -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/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- 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 -1
- package/dist/search/boosts.js +34 -13
- 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/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -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} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- 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/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- 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 +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- 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 +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- 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 +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- 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/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- 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 +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -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 +28 -0
- package/dist/store/sqlite/executor.js +286 -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 +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -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 +26 -0
- package/dist/store/sqlite/store.js +295 -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 +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- 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} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- 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 +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- 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 +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- 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} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- 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 +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- 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/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- 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/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{recall-history.d.ts → api/recall-history.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/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +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/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +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/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.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.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +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/{secret-detect.d.ts → util/secret-detect.d.ts} +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/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.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
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
import { pathToFileURL } from 'node:url';
|
|
3
|
-
import {
|
|
3
|
+
import { createOutageWarning } from './outage-warning.js';
|
|
4
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
const DEFAULT_CROSS_ENCODER_TOP_K = 50;
|
|
4
7
|
const MODEL_NAME = 'Xenova/ms-marco-MiniLM-L-6-v2';
|
|
5
8
|
const _require = createRequire(import.meta.url);
|
|
6
9
|
const TRANSFORMERS_PACKAGES = ['@huggingface/transformers', '@xenova/transformers'];
|
|
7
|
-
// Returns the ESM entry URL, the same build src/embeddings.ts imports. A
|
|
10
|
+
// Returns the ESM entry URL, the same build src/store/embeddings/index.ts imports. A
|
|
8
11
|
// require-style resolve picks the CommonJS build and puts a second copy of
|
|
9
12
|
// the library, with its own ONNX sessions, in the process.
|
|
10
13
|
function resolveTransformersPackage() {
|
|
@@ -38,21 +41,12 @@ async function loadTransformersModule() {
|
|
|
38
41
|
return tok && seq ? { AutoTokenizer: tok, AutoModelForSequenceClassification: seq } : null;
|
|
39
42
|
}
|
|
40
43
|
catch (err) {
|
|
41
|
-
log.debug(`cross-encoder: transformers import failed: ${
|
|
44
|
+
log.debug(`cross-encoder: transformers import failed: ${errorMessage(err)}`);
|
|
42
45
|
return null;
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
let pipelineLoading = null;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* True if a Transformers.js backend is importable. Note: this does NOT confirm
|
|
49
|
-
* that the model is downloadable from Hugging Face CDN — in sandboxed
|
|
50
|
-
* environments the package may import but the model fetch may be blocked.
|
|
51
|
-
* The reranker silently falls back to identity ordering in that case.
|
|
52
|
-
*/
|
|
53
|
-
export async function isCrossEncoderAvailable() {
|
|
54
|
-
return (await loadTransformersModule()) !== null;
|
|
55
|
-
}
|
|
49
|
+
const outage = createOutageWarning('cross-encoder', 'falling back to identity ordering');
|
|
56
50
|
// NOT the text-classification pipeline: this model is a num_labels=1
|
|
57
51
|
// regression head, and that pipeline softmaxes a length-1 logit vector, which
|
|
58
52
|
// is identically 1.0 for every input. Read the logit, then squash it.
|
|
@@ -81,7 +75,7 @@ async function buildPipeline() {
|
|
|
81
75
|
};
|
|
82
76
|
}
|
|
83
77
|
catch (err) {
|
|
84
|
-
log.debug(`cross-encoder: model load failed: ${
|
|
78
|
+
log.debug(`cross-encoder: model load failed: ${errorMessage(err)}`);
|
|
85
79
|
return null;
|
|
86
80
|
}
|
|
87
81
|
}
|
|
@@ -97,16 +91,12 @@ function loadPipeline() {
|
|
|
97
91
|
}
|
|
98
92
|
/** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. */
|
|
99
93
|
export const crossEncoderReranker = async (query, results, options) => {
|
|
100
|
-
const topK = options?.topK ??
|
|
94
|
+
const topK = options?.topK ?? DEFAULT_CROSS_ENCODER_TOP_K;
|
|
101
95
|
const head = results.slice(0, topK);
|
|
102
96
|
const pipe = await loadPipeline();
|
|
103
97
|
if (!pipe) {
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
if (!warnedOnFallback) {
|
|
107
|
-
warnedOnFallback = true;
|
|
108
|
-
log.warn('cross-encoder reranker unavailable (no Transformers.js backend, or model fetch blocked); falling back to identity ordering. Subsequent calls will not repeat this warning.');
|
|
109
|
-
}
|
|
98
|
+
// A silent identity fallback otherwise reads as a working reranker.
|
|
99
|
+
outage.failed('no Transformers.js backend, or model fetch blocked');
|
|
110
100
|
return head.map((r, i) => ({
|
|
111
101
|
...r,
|
|
112
102
|
rerankScore: r.score,
|
|
@@ -114,13 +104,15 @@ export const crossEncoderReranker = async (query, results, options) => {
|
|
|
114
104
|
postRerankRank: i + 1,
|
|
115
105
|
}));
|
|
116
106
|
}
|
|
107
|
+
outage.answered();
|
|
117
108
|
const scored = await Promise.all(head.map(async (r, i) => {
|
|
118
109
|
let ceScore;
|
|
119
110
|
try {
|
|
120
111
|
ceScore = await pipe(query, r.entry.content);
|
|
121
112
|
}
|
|
122
|
-
catch {
|
|
113
|
+
catch (err) {
|
|
123
114
|
// One bad inference must not sink the whole pass.
|
|
115
|
+
log.debug(`cross-encoder inference failed, keeping the base score: ${errorMessage(err)}`);
|
|
124
116
|
ceScore = r.score;
|
|
125
117
|
}
|
|
126
118
|
return {
|
|
@@ -132,7 +124,7 @@ export const crossEncoderReranker = async (query, results, options) => {
|
|
|
132
124
|
}));
|
|
133
125
|
// Plain stable sort on purpose: tied scores MUST fall back to the prior
|
|
134
126
|
// relevance order, never an arbitrary content order.
|
|
135
|
-
scored.sort((a, b) =>
|
|
127
|
+
scored.sort((a, b) => compareScoresDesc(a.rerankScore, b.rerankScore));
|
|
136
128
|
scored.forEach((r, i) => (r.postRerankRank = i + 1));
|
|
137
129
|
return scored;
|
|
138
130
|
};
|
package/dist/rerankers/index.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createClefReranker } from './clef.js';
|
|
2
2
|
import { crossEncoderReranker } from './cross-encoder.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { createJevReranker } from './jev.js';
|
|
4
|
+
import { createLlmReranker } from './llm.js';
|
|
5
|
+
// Each hosted reranker is built once here, so its outage warning lasts the process.
|
|
5
6
|
const REGISTRY = {
|
|
6
|
-
clef:
|
|
7
|
-
'clef-flash':
|
|
7
|
+
clef: createClefReranker('clef'),
|
|
8
|
+
'clef-flash': createClefReranker('clef-flash'),
|
|
8
9
|
'cross-encoder': crossEncoderReranker,
|
|
9
|
-
jev:
|
|
10
|
-
llm:
|
|
10
|
+
jev: createJevReranker(crossEncoderReranker),
|
|
11
|
+
llm: createLlmReranker(),
|
|
11
12
|
};
|
|
12
13
|
function isRegisteredRerankerName(name) {
|
|
13
14
|
return Object.hasOwn(REGISTRY, name);
|
package/dist/rerankers/jev.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RerankerFn, RerankResult } from './types.js';
|
|
2
|
-
import type { SearchResult } from '../search
|
|
2
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
3
3
|
export declare const JEV_DEFAULT_TOP_K = 40;
|
|
4
4
|
/** The System One `state` and one `noul` question per candidate (`c1`..`cN`). */
|
|
5
5
|
export interface RelevanceRequest {
|
|
@@ -15,7 +15,4 @@ export declare function buildRelevanceRequest(query: string, head: readonly Sear
|
|
|
15
15
|
export declare function createJevReranker(localFallback: RerankerFn): RerankerFn;
|
|
16
16
|
/** Orders `head` by `scores[i]`, keeping any upstream pre-rerank rank. Shared with CLEF. */
|
|
17
17
|
export declare function rankByScores(head: readonly SearchResult[], scores: readonly number[]): RerankResult[];
|
|
18
|
-
/** Track 4 reranker: hosted TypeSafe Jev, opt-in and paid (TYPESAFE_API_KEY), one batched call per recall.
|
|
19
|
-
* Any failure warns once and delegates to the local cross-encoder. Scores are not bit-stable run to run. */
|
|
20
|
-
export declare const jevReranker: RerankerFn;
|
|
21
18
|
//# sourceMappingURL=jev.d.ts.map
|
package/dist/rerankers/jev.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { envJevModel, envJevTimeoutMs, envTypesafeApiKey } from '../env.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { envJevModel, envJevTimeoutMs, envTypesafeApiKey } from '../util/env.js';
|
|
2
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
3
|
+
import { createOutageWarning } from './outage-warning.js';
|
|
4
|
+
import { rerankerPost } from './remote.js';
|
|
5
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
6
|
+
import { errorMessage } from '../util/log.js';
|
|
7
|
+
const REQUEST_ID_MAX_CHARS = 64;
|
|
5
8
|
const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
|
|
6
9
|
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
7
10
|
const TRUNCATE_CHARS = 1200;
|
|
@@ -50,45 +53,29 @@ async function requestScores(query, head) {
|
|
|
50
53
|
if (!key)
|
|
51
54
|
throw new Error('TYPESAFE_API_KEY not set');
|
|
52
55
|
const { state, questions } = buildRelevanceRequest(query, head);
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
});
|
|
67
|
-
if (!resp.ok) {
|
|
68
|
-
// A third-party header ends up on stderr, so keep printable ASCII only.
|
|
69
|
-
const requestId = resp.headers.get('x-request-id')?.replace(/[^\x20-\x7e]/g, '').slice(0, 64);
|
|
70
|
-
await resp.body?.cancel();
|
|
71
|
-
throw new Error(`HTTP ${resp.status}${requestId ? `, request ${requestId}` : ''}`);
|
|
72
|
-
}
|
|
73
|
-
const body = await resp.json();
|
|
74
|
-
const scores = parseScores(body.answers, head.length);
|
|
75
|
-
if (!scores)
|
|
76
|
-
throw new Error('incomplete or out-of-range answers');
|
|
77
|
-
return scores;
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
if (err instanceof Error && err.name === 'AbortError') {
|
|
81
|
-
throw new Error(`no answer within ${timeoutMs} ms`);
|
|
82
|
-
}
|
|
83
|
-
throw err;
|
|
84
|
-
}
|
|
85
|
-
finally {
|
|
86
|
-
clearTimeout(timer);
|
|
56
|
+
const resp = await rerankerPost(ENDPOINT, {
|
|
57
|
+
headers: { 'content-type': 'application/json', authorization: `Bearer ${key}` },
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
state,
|
|
60
|
+
model: envJevModel() ?? DEFAULT_MODEL,
|
|
61
|
+
questions,
|
|
62
|
+
}),
|
|
63
|
+
}, envJevTimeoutMs() ?? DEFAULT_TIMEOUT_MS);
|
|
64
|
+
if (!resp.ok) {
|
|
65
|
+
// A third-party header ends up on stderr, so keep printable ASCII only.
|
|
66
|
+
const requestId = resp.headers.get('x-request-id')?.replace(/[^\x20-\x7e]/g, '').slice(0, REQUEST_ID_MAX_CHARS);
|
|
67
|
+
await resp.body?.cancel();
|
|
68
|
+
throw new Error(`HTTP ${resp.status}${requestId ? `, request ${requestId}` : ''}`);
|
|
87
69
|
}
|
|
70
|
+
const body = await resp.json();
|
|
71
|
+
const scores = parseScores(body.answers, head.length);
|
|
72
|
+
if (!scores)
|
|
73
|
+
throw new Error('incomplete or out-of-range answers');
|
|
74
|
+
return scores;
|
|
88
75
|
}
|
|
89
76
|
/** Builds a Jev reranker around the reranker it degrades to. Exported so a test can pass a stand-in. */
|
|
90
77
|
export function createJevReranker(localFallback) {
|
|
91
|
-
|
|
78
|
+
const outage = createOutageWarning('jev', 'falling back to the local cross-encoder');
|
|
92
79
|
return async (query, results, options) => {
|
|
93
80
|
const head = results.slice(0, options?.topK ?? JEV_DEFAULT_TOP_K);
|
|
94
81
|
if (head.length === 0)
|
|
@@ -96,15 +83,12 @@ export function createJevReranker(localFallback) {
|
|
|
96
83
|
let scores;
|
|
97
84
|
try {
|
|
98
85
|
scores = await requestScores(query, head);
|
|
86
|
+
outage.answered();
|
|
99
87
|
}
|
|
100
88
|
catch (err) {
|
|
101
89
|
// A read path never throws, and never hands back the unranked order
|
|
102
|
-
// without saying so: warn
|
|
103
|
-
|
|
104
|
-
warned = true;
|
|
105
|
-
const reason = err instanceof Error ? err.message : 'unknown error';
|
|
106
|
-
log.warn(`jev reranker unavailable (${reason}); falling back to the local cross-encoder. Subsequent calls will not repeat this warning.`);
|
|
107
|
-
}
|
|
90
|
+
// without saying so: warn, then use the free local reranker.
|
|
91
|
+
outage.failed(errorMessage(err));
|
|
108
92
|
return localFallback(query, head, options);
|
|
109
93
|
}
|
|
110
94
|
return rankByScores(head, scores);
|
|
@@ -119,11 +103,8 @@ export function rankByScores(head, scores) {
|
|
|
119
103
|
postRerankRank: 0,
|
|
120
104
|
}));
|
|
121
105
|
// Stable sort: ties fall back to the prior relevance order.
|
|
122
|
-
scored.sort((a, b) =>
|
|
106
|
+
scored.sort((a, b) => compareScoresDesc(a.rerankScore, b.rerankScore));
|
|
123
107
|
scored.forEach((r, i) => (r.postRerankRank = i + 1));
|
|
124
108
|
return scored;
|
|
125
109
|
}
|
|
126
|
-
/** Track 4 reranker: hosted TypeSafe Jev, opt-in and paid (TYPESAFE_API_KEY), one batched call per recall.
|
|
127
|
-
* Any failure warns once and delegates to the local cross-encoder. Scores are not bit-stable run to run. */
|
|
128
|
-
export const jevReranker = createJevReranker(crossEncoderReranker);
|
|
129
110
|
//# sourceMappingURL=jev.js.map
|
package/dist/rerankers/llm.d.ts
CHANGED
|
@@ -6,11 +6,9 @@ import type { RerankerFn } from './types.js';
|
|
|
6
6
|
*
|
|
7
7
|
* Skeleton only; full characterisation is deferred.
|
|
8
8
|
*
|
|
9
|
-
* Timeout: defaults to 30s; overridable
|
|
10
|
-
* On timeout or any
|
|
9
|
+
* Timeout: defaults to 30s for the whole call, retries included; overridable
|
|
10
|
+
* via HIPPO_LLM_RERANKER_TIMEOUT_MS. On timeout or any failure the reranker
|
|
11
11
|
* falls back to identity ordering; recall must not hang on a wedged endpoint.
|
|
12
12
|
*/
|
|
13
13
|
export declare function createLlmReranker(): RerankerFn;
|
|
14
|
-
/** The instance the reranker registry serves; its warn-once flag lasts the process. */
|
|
15
|
-
export declare const llmReranker: RerankerFn;
|
|
16
14
|
//# sourceMappingURL=llm.d.ts.map
|
package/dist/rerankers/llm.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { envLlmRerankerKey, envLlmRerankerModel, envLlmRerankerTimeoutMs, envLlmRerankerUrl } from '../env.js';
|
|
2
|
-
import { redactSecretsStrict } from '../secret-detect.js';
|
|
3
|
-
import {
|
|
1
|
+
import { envLlmRerankerKey, envLlmRerankerModel, envLlmRerankerTimeoutMs, envLlmRerankerUrl } from '../util/env.js';
|
|
2
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
3
|
+
import { createOutageWarning } from './outage-warning.js';
|
|
4
|
+
import { rerankerPost } from './remote.js';
|
|
5
|
+
import { errorMessage } from '../util/log.js';
|
|
6
|
+
const DEFAULT_LLM_RERANK_TOP_K = 20;
|
|
4
7
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
5
8
|
/**
|
|
6
9
|
* Track 3 reranker: listwise LLM rerank. Uses a customer-supplied
|
|
@@ -9,29 +12,26 @@ const DEFAULT_TIMEOUT_MS = 30_000;
|
|
|
9
12
|
*
|
|
10
13
|
* Skeleton only; full characterisation is deferred.
|
|
11
14
|
*
|
|
12
|
-
* Timeout: defaults to 30s; overridable
|
|
13
|
-
* On timeout or any
|
|
15
|
+
* Timeout: defaults to 30s for the whole call, retries included; overridable
|
|
16
|
+
* via HIPPO_LLM_RERANKER_TIMEOUT_MS. On timeout or any failure the reranker
|
|
14
17
|
* falls back to identity ordering; recall must not hang on a wedged endpoint.
|
|
15
18
|
*/
|
|
16
19
|
export function createLlmReranker() {
|
|
17
|
-
|
|
20
|
+
const outage = createOutageWarning('llm', 'keeping the input order');
|
|
18
21
|
return async (query, results, options) => {
|
|
19
22
|
const url = envLlmRerankerUrl();
|
|
20
23
|
if (!url) {
|
|
21
24
|
throw new Error('HIPPO_LLM_RERANKER_URL not set; refusing to run LLM reranker.');
|
|
22
25
|
}
|
|
23
|
-
const head = results.slice(0, options?.topK ??
|
|
26
|
+
const head = results.slice(0, options?.topK ?? DEFAULT_LLM_RERANK_TOP_K);
|
|
24
27
|
let permutation = null;
|
|
25
28
|
try {
|
|
26
29
|
permutation = await requestPermutation(url, query, head);
|
|
30
|
+
outage.answered();
|
|
27
31
|
}
|
|
28
32
|
catch (err) {
|
|
29
33
|
// A read path never throws, and never hands back the unranked order without saying so.
|
|
30
|
-
|
|
31
|
-
warned = true;
|
|
32
|
-
const reason = err instanceof Error ? err.message : 'unknown error';
|
|
33
|
-
log.warn(`llm reranker unavailable (${reason}); keeping the input order. Subsequent calls will not repeat this warning.`);
|
|
34
|
-
}
|
|
34
|
+
outage.failed(errorMessage(err));
|
|
35
35
|
}
|
|
36
36
|
const ordered = permutation ? permutation.map((idx) => head[idx]) : head;
|
|
37
37
|
return ordered.map((r, i) => ({
|
|
@@ -42,8 +42,6 @@ export function createLlmReranker() {
|
|
|
42
42
|
}));
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
/** The instance the reranker registry serves; its warn-once flag lasts the process. */
|
|
46
|
-
export const llmReranker = createLlmReranker();
|
|
47
45
|
/** One chat-completions call; rejects with the reason when the reply holds no usable permutation. */
|
|
48
46
|
async function requestPermutation(url, query, head) {
|
|
49
47
|
const key = envLlmRerankerKey();
|
|
@@ -53,48 +51,33 @@ async function requestPermutation(url, query, head) {
|
|
|
53
51
|
...head.map((r, i) => `[${i}] ${redactSecretsStrict(r.entry.content)}`),
|
|
54
52
|
`Output format: [<int>, <int>, ...] with all ${head.length} indices.`,
|
|
55
53
|
].join('\n');
|
|
56
|
-
const timeoutMs = envLlmRerankerTimeoutMs() ?? DEFAULT_TIMEOUT_MS;
|
|
57
|
-
const controller = new AbortController();
|
|
58
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
59
54
|
const headers = {
|
|
60
55
|
'content-type': 'application/json',
|
|
61
56
|
};
|
|
62
57
|
if (key) {
|
|
63
58
|
headers.authorization = `Bearer ${key}`;
|
|
64
59
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
});
|
|
76
|
-
if (!resp.ok) {
|
|
77
|
-
await resp.body?.cancel();
|
|
78
|
-
throw new Error(`HTTP ${resp.status}`);
|
|
79
|
-
}
|
|
80
|
-
const j = await resp.json();
|
|
81
|
-
const txt = j.choices?.[0]?.message?.content ?? '';
|
|
82
|
-
const m = txt.match(/\[\s*(\d+(?:\s*,\s*\d+)*)\s*\]/);
|
|
83
|
-
const parsed = m ? m[1].split(',').map((s) => parseInt(s.trim(), 10)) : [];
|
|
84
|
-
const isPermutation = parsed.length === head.length &&
|
|
85
|
-
parsed.every((n) => Number.isInteger(n) && n >= 0 && n < head.length) &&
|
|
86
|
-
new Set(parsed).size === head.length;
|
|
87
|
-
if (!isPermutation)
|
|
88
|
-
throw new Error('reply is not a permutation of the candidates');
|
|
89
|
-
return parsed;
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
if (err instanceof Error && err.name === 'AbortError')
|
|
93
|
-
throw new Error(`no answer within ${timeoutMs} ms`);
|
|
94
|
-
throw err;
|
|
95
|
-
}
|
|
96
|
-
finally {
|
|
97
|
-
clearTimeout(timer);
|
|
60
|
+
const resp = await rerankerPost(`${url.replace(/\/$/, '')}/chat/completions`, {
|
|
61
|
+
headers: { ...headers },
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
model: envLlmRerankerModel() ?? 'gpt-4o-mini',
|
|
64
|
+
messages: [{ role: 'user', content: prompt }],
|
|
65
|
+
temperature: 0,
|
|
66
|
+
}),
|
|
67
|
+
}, envLlmRerankerTimeoutMs() ?? DEFAULT_TIMEOUT_MS);
|
|
68
|
+
if (!resp.ok) {
|
|
69
|
+
await resp.body?.cancel();
|
|
70
|
+
throw new Error(`HTTP ${resp.status}`);
|
|
98
71
|
}
|
|
72
|
+
const j = await resp.json();
|
|
73
|
+
const txt = j.choices?.[0]?.message?.content ?? '';
|
|
74
|
+
const m = txt.match(/\[\s*(\d+(?:\s*,\s*\d+)*)\s*\]/);
|
|
75
|
+
const parsed = m ? m[1].split(',').map((s) => parseInt(s.trim(), 10)) : [];
|
|
76
|
+
const isPermutation = parsed.length === head.length &&
|
|
77
|
+
parsed.every((n) => Number.isInteger(n) && n >= 0 && n < head.length) &&
|
|
78
|
+
new Set(parsed).size === head.length;
|
|
79
|
+
if (!isPermutation)
|
|
80
|
+
throw new Error('reply is not a permutation of the candidates');
|
|
81
|
+
return parsed;
|
|
99
82
|
}
|
|
100
83
|
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface OutageWarning {
|
|
2
|
+
failed(reason: string): void;
|
|
3
|
+
answered(): void;
|
|
4
|
+
}
|
|
5
|
+
/** Warns when `name` starts failing, at most every five minutes while it keeps failing, and once when it answers again. `fallback` says what recall does meanwhile. */
|
|
6
|
+
export declare function createOutageWarning(name: string, fallback: string): OutageWarning;
|
|
7
|
+
//# sourceMappingURL=outage-warning.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// One way for a reranker to report that it stopped working, without a line per recall.
|
|
2
|
+
import { log } from '../util/log.js';
|
|
3
|
+
const REPEAT_MS = 5 * 60_000;
|
|
4
|
+
/** Warns when `name` starts failing, at most every five minutes while it keeps failing, and once when it answers again. `fallback` says what recall does meanwhile. */
|
|
5
|
+
export function createOutageWarning(name, fallback) {
|
|
6
|
+
let failures = 0;
|
|
7
|
+
let unreported = 0;
|
|
8
|
+
let warnedAt = 0;
|
|
9
|
+
return {
|
|
10
|
+
failed(reason) {
|
|
11
|
+
failures++;
|
|
12
|
+
if (failures > 1 && Date.now() - warnedAt < REPEAT_MS) {
|
|
13
|
+
unreported++;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const skipped = unreported > 0 ? ` ${unreported} more calls failed since the last warning.` : '';
|
|
17
|
+
log.warn(`${name} reranker unavailable (${reason}); ${fallback}.${skipped} While it fails this repeats at most every ${REPEAT_MS / 60_000} minutes.`);
|
|
18
|
+
warnedAt = Date.now();
|
|
19
|
+
unreported = 0;
|
|
20
|
+
},
|
|
21
|
+
answered() {
|
|
22
|
+
if (failures === 0)
|
|
23
|
+
return;
|
|
24
|
+
// At warn so it shows at the default level, next to the outage line it closes.
|
|
25
|
+
log.warn(`${name} reranker is answering again after ${failures} failed ${failures === 1 ? 'call' : 'calls'}.`);
|
|
26
|
+
failures = 0;
|
|
27
|
+
unreported = 0;
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=outage-warning.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// The one bounded, retried POST every remote reranker sends.
|
|
2
|
+
import { fetchWithRetry } from '../util/http-retry.js';
|
|
3
|
+
// A Retry-After longer than this would outlast most budgets, so the answer is handed back and the reranker falls back.
|
|
4
|
+
const RETRY_WAIT_CAP_MS = 2_000;
|
|
5
|
+
/** POST a scoring request. A dropped connection, 429 or 5xx is retried, since scoring changes nothing on the far side. */
|
|
6
|
+
export async function rerankerPost(url, init, budgetMs) {
|
|
7
|
+
// The budget bounds the whole call, retries included, so recall never waits past the configured timeout.
|
|
8
|
+
const budget = AbortSignal.timeout(budgetMs);
|
|
9
|
+
try {
|
|
10
|
+
return await fetchWithRetry(url, { ...init, method: 'POST', signal: budget }, {
|
|
11
|
+
timeoutMs: budgetMs,
|
|
12
|
+
retryTransport: true,
|
|
13
|
+
maxDelayMs: RETRY_WAIT_CAP_MS,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {
|
|
18
|
+
throw new Error(`no answer within ${budgetMs} ms`, { cause: err });
|
|
19
|
+
}
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SearchResult } from '../search
|
|
1
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
2
2
|
/**
|
|
3
3
|
* A reranker reorders (and optionally rescales) the candidate set produced
|
|
4
4
|
* by hybridSearch's BM25 + cosine + MMR pipeline. Rerankers run AFTER MMR
|
package/dist/search/as-of.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
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 interface SearchOptions {
|
|
4
4
|
budget?: number;
|
|
5
5
|
now?: Date;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { estimateTokens } from '../token-
|
|
2
|
-
import { tokenize } from '../tokenize.js';
|
|
3
|
-
import { evalNow } from '../ablation.js';
|
|
4
|
-
import { extractPathTags } from '
|
|
5
|
-
import { detectScope } from '../scope.js';
|
|
6
|
-
import { compareScoredResults } from '../compare.js';
|
|
1
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
2
|
+
import { tokenize } from '../util/tokenize.js';
|
|
3
|
+
import { evalNow } from '../core/ablation.js';
|
|
4
|
+
import { extractPathTags } from './path-context.js';
|
|
5
|
+
import { detectScope } from '../sharing/scope.js';
|
|
6
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
7
7
|
import { bm25Score, buildCorpus, entryText } from './bm25.js';
|
|
8
8
|
import { currentEntries } from './as-of.js';
|
|
9
9
|
import { applyRankBoosts, strengthRecencyMultipliers, NO_SUMMARY_SCORING } from './boosts.js';
|
|
10
10
|
import { temporalContext } from './temporal.js';
|
|
11
11
|
import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
|
|
12
|
-
import { DEFAULT_RECALL_BUDGET } from '
|
|
12
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
13
13
|
/** Synchronous BM25 search: relevance * strength * recency and the rank boosts, without embeddings or the outcome nudge. */
|
|
14
14
|
export function search(query, entries, options = {}) {
|
|
15
15
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
package/dist/search/bm25.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
/** Tokenized BM25 corpus; build it once with `buildCorpus` and reuse it across queries on the same entry set. */
|
|
3
3
|
export interface BM25Corpus {
|
|
4
4
|
docs: string[][];
|
package/dist/search/bm25.js
CHANGED
package/dist/search/boosts.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type TemporalDirection, type TemporalRange } from './temporal.js';
|
|
3
3
|
export declare const CHURN_STALE_RANK_MULTIPLIER = 0.5;
|
|
4
|
+
export declare const STRENGTH_RANK_FLOOR = 0.5;
|
|
5
|
+
export declare const STRENGTH_RANK_SPAN = 0.5;
|
|
4
6
|
export declare function churnStaleFactor(entry: MemoryEntry): number;
|
|
5
7
|
export declare function recencyBoost(entry: MemoryEntry, now: Date): number;
|
|
6
8
|
/** Retrieval-time outcome nudge in [0.85, 1.15]; the bm25-outcome eval baseline ranks with it too. */
|
|
@@ -27,6 +29,8 @@ export declare function strengthRecencyMultipliers(entry: MemoryEntry, now: Date
|
|
|
27
29
|
strength: number;
|
|
28
30
|
recency: number;
|
|
29
31
|
};
|
|
32
|
+
/** The rank multiplier for a scopeMatch signal: match, mismatch or neutral. */
|
|
33
|
+
export declare function scopeBoostFor(signal: -1 | 0 | 1): number;
|
|
30
34
|
export interface BoostContext {
|
|
31
35
|
now: Date;
|
|
32
36
|
pathTags: string[];
|
package/dist/search/boosts.js
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
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
|
+
import { DAY_MS } from '../util/time.js';
|
|
7
8
|
export 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
|
}
|
|
@@ -16,8 +31,8 @@ export 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) {
|