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/rerank.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { cosineOf } from '../store/embeddings/index.js';
|
|
2
|
+
const DEFAULT_RERANK_TOP_K = 50;
|
|
2
3
|
// MMR is O(K^2) cosine ops; candidates below this window never survive budget filtering anyway.
|
|
3
4
|
const MMR_CANDIDATE_CAP = 100;
|
|
4
5
|
/** MMR: repeatedly picks the candidate maximising lambda * relevance - (1 - lambda) * max(cos(cand, picked)).
|
|
@@ -39,7 +40,7 @@ function maxSimilarityToPicked(vi, picked, embeddingIndex) {
|
|
|
39
40
|
const vp = embeddingIndex[p.entry.id];
|
|
40
41
|
if (!vp || vp.length !== vi.length)
|
|
41
42
|
continue;
|
|
42
|
-
const sim = Math.max(0,
|
|
43
|
+
const sim = Math.max(0, cosineOf(vi, vp));
|
|
43
44
|
if (sim > maxSim)
|
|
44
45
|
maxSim = sim;
|
|
45
46
|
}
|
|
@@ -63,7 +64,7 @@ export function applyMmrWindow(scored, embeddingIndex, lambda, explain) {
|
|
|
63
64
|
}
|
|
64
65
|
/** Runs the reranker over the top `topK` (default 50) and stamps pre and post ranks; see src/rerankers/types.ts. */
|
|
65
66
|
export async function applyReranker(query, ordered, reranker, rerankerOptions) {
|
|
66
|
-
const topK = rerankerOptions?.topK ??
|
|
67
|
+
const topK = rerankerOptions?.topK ?? DEFAULT_RERANK_TOP_K;
|
|
67
68
|
const head = ordered.slice(0, topK).map((r, i) => ({ ...r, preRerankRank: i + 1 }));
|
|
68
69
|
const tail = ordered.slice(topK);
|
|
69
70
|
const reranked = await reranker(query, head, { ...rerankerOptions, topK });
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Reciprocal Rank Fusion (Cormack, Clarke and Buettcher 2009): fuses N ranked lists by summing weighted 1/(k + rank) per candidate. K is the standard 60,
|
|
2
|
+
* the value hybridSearch already uses; do NOT tune it without a cross-corpus eval. Generic over the id type (hybridSearch uses number, the LongMemEval
|
|
3
|
+
* benchmark string). Behaviour MUST stay byte-identical to the inline hybridSearch code it replaced; tests/rrf.test.ts is the contract. */
|
|
4
|
+
export declare const RRF_K = 60;
|
|
5
|
+
export interface RrfFuseOptions {
|
|
6
|
+
/** Smoothing constant. Default RRF_K = 60. */
|
|
7
|
+
k?: number;
|
|
8
|
+
/** Rank assigned to candidates absent from a list; default `max(rankedLists.map(l => l.length)) + 1`, the convention hybridSearch used (`entries.length +
|
|
9
|
+
* 1`). */
|
|
10
|
+
absentRank?: number;
|
|
11
|
+
}
|
|
12
|
+
/** Fuses N ranked lists (each in descending-score order; index 0 is rank 1) into a Map of candidate id -> RRF score; sort by value descending for the fused
|
|
13
|
+
* order. `weights` has one entry per list and is summed without normalisation; `options` overrides k and absentRank. */
|
|
14
|
+
export declare function rrfFuse<T>(rankedLists: ReadonlyArray<ReadonlyArray<T>>, weights: ReadonlyArray<number>, options?: RrfFuseOptions): Map<T, number>;
|
|
15
|
+
//# sourceMappingURL=rrf.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** Reciprocal Rank Fusion (Cormack, Clarke and Buettcher 2009): fuses N ranked lists by summing weighted 1/(k + rank) per candidate. K is the standard 60,
|
|
2
|
+
* the value hybridSearch already uses; do NOT tune it without a cross-corpus eval. Generic over the id type (hybridSearch uses number, the LongMemEval
|
|
3
|
+
* benchmark string). Behaviour MUST stay byte-identical to the inline hybridSearch code it replaced; tests/rrf.test.ts is the contract. */
|
|
4
|
+
export const RRF_K = 60;
|
|
5
|
+
/** Fuses N ranked lists (each in descending-score order; index 0 is rank 1) into a Map of candidate id -> RRF score; sort by value descending for the fused
|
|
6
|
+
* order. `weights` has one entry per list and is summed without normalisation; `options` overrides k and absentRank. */
|
|
7
|
+
export function rrfFuse(rankedLists, weights, options) {
|
|
8
|
+
if (rankedLists.length !== weights.length) {
|
|
9
|
+
throw new Error(`rrfFuse: rankedLists.length (${rankedLists.length}) must match weights.length (${weights.length})`);
|
|
10
|
+
}
|
|
11
|
+
const k = options?.k ?? RRF_K;
|
|
12
|
+
const defaultAbsentRank = rankedLists.reduce((m, l) => Math.max(m, l.length), 0) + 1;
|
|
13
|
+
const absentRank = options?.absentRank ?? defaultAbsentRank;
|
|
14
|
+
const rankMaps = rankedLists.map((list) => {
|
|
15
|
+
const m = new Map();
|
|
16
|
+
for (let i = 0; i < list.length; i++) {
|
|
17
|
+
m.set(list[i], i + 1); // 1-indexed rank
|
|
18
|
+
}
|
|
19
|
+
return m;
|
|
20
|
+
});
|
|
21
|
+
const allCandidates = new Set();
|
|
22
|
+
for (const list of rankedLists)
|
|
23
|
+
for (const c of list)
|
|
24
|
+
allCandidates.add(c);
|
|
25
|
+
const scores = new Map();
|
|
26
|
+
for (const c of allCandidates) {
|
|
27
|
+
let score = 0;
|
|
28
|
+
for (let i = 0; i < rankMaps.length; i++) {
|
|
29
|
+
const rank = rankMaps[i].get(c) ?? absentRank;
|
|
30
|
+
score += weights[i] / (k + rank);
|
|
31
|
+
}
|
|
32
|
+
scores.set(c, score);
|
|
33
|
+
}
|
|
34
|
+
return scores;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=rrf.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
export type TemporalDirection = 'recent' | 'oldest' | null;
|
|
3
3
|
export declare function detectTemporalDirection(query: string): TemporalDirection;
|
|
4
4
|
export interface TemporalRange {
|
package/dist/search/temporal.js
CHANGED
|
@@ -22,6 +22,9 @@ export function computeTemporalRange(entries) {
|
|
|
22
22
|
}
|
|
23
23
|
return { minTime, maxTime };
|
|
24
24
|
}
|
|
25
|
+
// A temporal cue scales rank linearly across the pool time range, from the floor to floor + span.
|
|
26
|
+
const TEMPORAL_BOOST_FLOOR = 0.8;
|
|
27
|
+
const TEMPORAL_BOOST_SPAN = 0.4;
|
|
25
28
|
export function temporalBoost(entry, direction, range) {
|
|
26
29
|
if (!direction)
|
|
27
30
|
return 1.0;
|
|
@@ -31,10 +34,10 @@ export function temporalBoost(entry, direction, range) {
|
|
|
31
34
|
const entryTime = new Date(entry.created).getTime();
|
|
32
35
|
const normalized = (entryTime - range.minTime) / span;
|
|
33
36
|
if (direction === 'recent') {
|
|
34
|
-
return
|
|
37
|
+
return TEMPORAL_BOOST_FLOOR + TEMPORAL_BOOST_SPAN * normalized;
|
|
35
38
|
}
|
|
36
39
|
else {
|
|
37
|
-
return
|
|
40
|
+
return TEMPORAL_BOOST_FLOOR + TEMPORAL_BOOST_SPAN * (1 - normalized);
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
/** The query's temporal cue and, only when there is one, the pool's time range. */
|
package/dist/search/vector.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import type { VectorCandidateSpec } from '../store/search-rows.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type EmbeddingProvider } from '../store/embeddings/provider.js';
|
|
4
|
+
import { type HippoStore, type VectorReads } from '../store/index.js';
|
|
4
5
|
import { type CurrentnessOptions } from './as-of.js';
|
|
5
6
|
/** hybridSearch's vector arm: which rows it may add, plus the caller's JS admission rules (exact private regex, entry filters). */
|
|
6
7
|
export type HybridVectorCandidates = VectorCandidateSpec & {
|
|
@@ -11,7 +12,7 @@ export interface VectorArm {
|
|
|
11
12
|
entries: MemoryEntry[];
|
|
12
13
|
addedRows: boolean;
|
|
13
14
|
useEmbeddings: boolean;
|
|
14
|
-
embeddingIndex: Record<string, number
|
|
15
|
+
embeddingIndex: Record<string, ArrayLike<number>>;
|
|
15
16
|
queryVector: number[];
|
|
16
17
|
}
|
|
17
18
|
export interface VectorArmOptions extends CurrentnessOptions {
|
|
@@ -19,7 +20,13 @@ export interface VectorArmOptions extends CurrentnessOptions {
|
|
|
19
20
|
vectorCandidates?: HybridVectorCandidates;
|
|
20
21
|
/** Where vectors are read; hippo.db under `hippoRoot` when unset. */
|
|
21
22
|
store?: HippoStore;
|
|
23
|
+
/** The deadline a caller already started for this recall's query embedding; a fresh budget when unset. */
|
|
24
|
+
queryEmbedDeadline?: AbortSignal;
|
|
22
25
|
}
|
|
26
|
+
/** One deadline for every query embedding a recall makes, so two stores or a physics fallback share the budget. */
|
|
27
|
+
export declare function startQueryEmbedDeadline(): AbortSignal;
|
|
28
|
+
/** The query's vector, or null when an API provider outlasts `deadline`; any other provider failure throws as before. */
|
|
29
|
+
export declare function embedQueryBy(deadline: AbortSignal, provider: EmbeddingProvider, query: string): Promise<number[] | null>;
|
|
23
30
|
/** The store's vector reads; a store without them answers 501, as any unported path does. */
|
|
24
31
|
export declare function requireVectorReads(store: HippoStore): VectorReads;
|
|
25
32
|
/** The nearest admitted rows not already in `entries`. */
|
package/dist/search/vector.js
CHANGED
|
@@ -1,10 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { cosineOf, indexNeedsRebuild } from '../store/embeddings/index.js';
|
|
2
|
+
import { indexedModel } from '../store/vector-index.js';
|
|
3
|
+
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
4
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
import { envQueryEmbedTimeoutMs } from '../util/env.js';
|
|
7
|
+
import { requireGroup, sqliteStore } from '../store/index.js';
|
|
8
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
7
9
|
import { currentEntries } from './as-of.js';
|
|
10
|
+
// Jev's default budget (rerankers/jev.ts): each is one off-box call that a recall waits on.
|
|
11
|
+
const QUERY_EMBED_BUDGET_MS = 5_000;
|
|
12
|
+
/** How long one recall waits for its query vector, retries included; HIPPO_QUERY_EMBED_TIMEOUT_MS overrides the default. */
|
|
13
|
+
function queryEmbedBudgetMs() {
|
|
14
|
+
return envQueryEmbedTimeoutMs() ?? QUERY_EMBED_BUDGET_MS;
|
|
15
|
+
}
|
|
16
|
+
/** One deadline for every query embedding a recall makes, so two stores or a physics fallback share the budget. */
|
|
17
|
+
export function startQueryEmbedDeadline() {
|
|
18
|
+
return AbortSignal.timeout(queryEmbedBudgetMs());
|
|
19
|
+
}
|
|
20
|
+
/** The query's vector, or null when an API provider outlasts `deadline`; any other provider failure throws as before. */
|
|
21
|
+
export async function embedQueryBy(deadline, provider, query) {
|
|
22
|
+
// No signal stops an in-process model, so the local provider is not held to the deadline.
|
|
23
|
+
if (provider.kind === 'local')
|
|
24
|
+
return (await provider.embed([query], 'query'))[0] ?? [];
|
|
25
|
+
try {
|
|
26
|
+
return (await provider.embed([query], 'query', { signal: deadline }))[0] ?? [];
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (deadline.aborted)
|
|
30
|
+
return null;
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
8
34
|
// Search runs on every hook prompt, so one line per reason per process says why vectors went unused without flooding stderr.
|
|
9
35
|
function warnBm25Fallback(reason, detail) {
|
|
10
36
|
log.once(`search.bm25-fallback.${reason}`, 'warn', `hybrid search fell back to BM25 only: ${redactSecretsStrict(detail)}`);
|
|
@@ -23,7 +49,9 @@ export function requireVectorReads(store) {
|
|
|
23
49
|
/** The nearest admitted rows not already in `entries`. */
|
|
24
50
|
export async function vectorCandidatesOutside(reads, entries, queryVector, spec) {
|
|
25
51
|
const inPool = new Set(entries.map((e) => e.id));
|
|
26
|
-
|
|
52
|
+
// The port takes data alone: `admit` is this side's rule, and a function cannot be sent to a store on another thread.
|
|
53
|
+
const { admit, ...stored } = spec;
|
|
54
|
+
return (await reads.nearestEntries(queryVector, stored)).filter((e) => !inPool.has(e.id) && (admit?.(e) ?? true));
|
|
27
55
|
}
|
|
28
56
|
/** Embeds the query and loads stored vectors; any failure leaves BM25 to rank alone. */
|
|
29
57
|
export async function resolveVectorArm(query, entries, options) {
|
|
@@ -35,10 +63,14 @@ export async function resolveVectorArm(query, entries, options) {
|
|
|
35
63
|
}
|
|
36
64
|
catch (err) {
|
|
37
65
|
rethrowIfSqliteBlocked(err);
|
|
38
|
-
warnBm25Fallback('error',
|
|
66
|
+
warnBm25Fallback('error', errorMessage(err));
|
|
39
67
|
}
|
|
40
68
|
return arm;
|
|
41
69
|
}
|
|
70
|
+
// Views when the store has them, so a search copies no vector; the number[] copies score the same.
|
|
71
|
+
async function storedVectorsOf(store, reads, ids) {
|
|
72
|
+
return store.vectorViews ? store.vectorViews.storedVectorViews(ids) : reads.storedVectors(ids);
|
|
73
|
+
}
|
|
42
74
|
async function fillVectorArm(arm, query, root, options) {
|
|
43
75
|
const provider = resolveEmbeddingProvider(root);
|
|
44
76
|
if (!provider.isAvailable())
|
|
@@ -51,12 +83,16 @@ async function fillVectorArm(arm, query, root, options) {
|
|
|
51
83
|
return;
|
|
52
84
|
}
|
|
53
85
|
const spec = options.vectorCandidates;
|
|
54
|
-
const vectors = await reads
|
|
86
|
+
const vectors = await storedVectorsOf(store, reads, arm.entries.map((e) => e.id));
|
|
55
87
|
// Only spend a (possibly paid, off-box) query embedding when there is a stored vector this search can use.
|
|
56
88
|
if (vectors.size === 0 && !(spec !== undefined && index.hasVectors))
|
|
57
89
|
return;
|
|
58
|
-
const
|
|
59
|
-
|
|
90
|
+
const vec = await embedQueryBy(options.queryEmbedDeadline ?? startQueryEmbedDeadline(), provider, query);
|
|
91
|
+
if (vec === null) {
|
|
92
|
+
warnBm25Fallback('query-embed-budget', `the ${provider.kind} embedding provider gave no query vector within ${queryEmbedBudgetMs()} ms`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
arm.queryVector = vec;
|
|
60
96
|
if (arm.queryVector.length === 0) {
|
|
61
97
|
warnBm25Fallback('empty-query-vector', 'the embedding provider returned no vector for the query');
|
|
62
98
|
return;
|
|
@@ -65,7 +101,7 @@ async function fillVectorArm(arm, query, root, options) {
|
|
|
65
101
|
if (added.length > 0) {
|
|
66
102
|
arm.addedRows = true;
|
|
67
103
|
arm.entries = currentEntries([...arm.entries, ...added], options);
|
|
68
|
-
for (const [id, v] of await reads
|
|
104
|
+
for (const [id, v] of await storedVectorsOf(store, reads, added.map((e) => e.id)))
|
|
69
105
|
vectors.set(id, v);
|
|
70
106
|
}
|
|
71
107
|
arm.embeddingIndex = Object.fromEntries(vectors);
|
|
@@ -73,14 +109,14 @@ async function fillVectorArm(arm, query, root, options) {
|
|
|
73
109
|
}
|
|
74
110
|
export function denseScores(arm) {
|
|
75
111
|
const n = arm.entries.length;
|
|
76
|
-
const cosine =
|
|
77
|
-
const hadVec =
|
|
112
|
+
const cosine = Array(n).fill(0);
|
|
113
|
+
const hadVec = Array(n).fill(false);
|
|
78
114
|
if (!arm.useEmbeddings)
|
|
79
115
|
return { cosine, hadVec };
|
|
80
116
|
for (let i = 0; i < n; i++) {
|
|
81
117
|
const cached = arm.embeddingIndex[arm.entries[i].id];
|
|
82
118
|
hadVec[i] = Boolean(cached && arm.queryVector.length > 0);
|
|
83
|
-
cosine[i] = hadVec[i] ? Math.max(0,
|
|
119
|
+
cosine[i] = hadVec[i] ? Math.max(0, cosineOf(arm.queryVector, cached)) : 0;
|
|
84
120
|
}
|
|
85
121
|
return { cosine, hadVec };
|
|
86
122
|
}
|
package/dist/server/auth.d.ts
CHANGED
|
@@ -1,23 +1,12 @@
|
|
|
1
1
|
import type { IncomingMessage } from 'node:http';
|
|
2
|
-
import { type Context } from '../api.js';
|
|
2
|
+
import { type Context } from '../api/index.js';
|
|
3
3
|
import type { ResolvedServeOpts } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Recognise loopback remote addresses. Node reports IPv6-mapped IPv4 as
|
|
6
|
-
* '::ffff:127.0.0.1' on dual-stack sockets, so we accept that alongside
|
|
7
|
-
* the bare v4 and v6 loopbacks. Anything else is treated as remote.
|
|
8
|
-
*/
|
|
4
|
+
/** Recognises loopback remote addresses, including the IPv6-mapped '::ffff:127.0.0.1' Node reports on dual-stack sockets; anything else is remote. */
|
|
9
5
|
export declare function isLoopback(remoteAddress: string | undefined): boolean;
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
* - { kind: 'malformed' } when the header is set but not 'Bearer <token>'
|
|
15
|
-
* - { kind: 'bearer', token } when a non-empty bearer token is present
|
|
16
|
-
*
|
|
17
|
-
* The header NAME is case-insensitive (Node lowercases all header names on
|
|
18
|
-
* IncomingMessage.headers); the SCHEME ('Bearer') is also matched
|
|
19
|
-
* case-insensitively per RFC 6750.
|
|
20
|
-
*/
|
|
6
|
+
/** True only for a request made on this machine by its own user: a proxy and a browser page are loopback too, so the socket alone proves nothing. */
|
|
7
|
+
export declare function isLocalCaller(req: IncomingMessage): boolean;
|
|
8
|
+
/** Reads the Authorization header case-insensitively (name and RFC 6750 'Bearer' scheme): { kind: 'absent' }, { kind: 'malformed' } (set but not 'Bearer
|
|
9
|
+
* <token>'), or { kind: 'bearer', token } for a non-empty token. */
|
|
21
10
|
type AuthHeader = {
|
|
22
11
|
kind: 'absent';
|
|
23
12
|
} | {
|
|
@@ -32,19 +21,11 @@ type AuthOpts = Pick<ResolvedServeOpts, 'hippoRoot' | 'authResolver' | 'authReso
|
|
|
32
21
|
export declare function isReservedActor(subject: string): boolean;
|
|
33
22
|
/** Key cap for every serve() bucket, shared by the warn map so it never tracks more callers than the buckets do. */
|
|
34
23
|
export declare const LIMITER_MAX_KEYS = 10000;
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
37
|
-
* address. Throws HttpError(401) for invalid / missing credentials. Reads
|
|
38
|
-
* the store only for an API-key-shaped Bearer token (or any Bearer token when no
|
|
39
|
-
* auth resolver is registered), so loopback no-auth requests stay cheap.
|
|
40
|
-
*/
|
|
24
|
+
/** Builds a per-request Context from the Authorization header and remote address; throws HttpError(401) for invalid or missing credentials.
|
|
25
|
+
* Reads the store only for an API-key-shaped Bearer (or any Bearer when no auth resolver is registered), so keyless local requests stay cheap. */
|
|
41
26
|
export declare function buildContextWithAuth(req: IncomingMessage, opts: AuthOpts): Promise<Context>;
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
44
|
-
* which builds its own root resolution via findHippoRoot). Throws HttpError
|
|
45
|
-
* 401 the same way buildContextWithAuth does, but skips building the Context
|
|
46
|
-
* envelope. Loopback no-auth still passes.
|
|
47
|
-
*/
|
|
27
|
+
/** Auth check for routes that need no tenant Context (e.g. the MCP transport, which resolves its own root): throws HttpError 401 like buildContextWithAuth.
|
|
28
|
+
* A keyless local request passes only under HIPPO_ALLOW_KEYLESS_LOCAL=1. */
|
|
48
29
|
export declare function requireAuth(req: IncomingMessage, opts: AuthOpts): Promise<void>;
|
|
49
30
|
/** Never rejects or charges a caller bucket: an outage (5xx) or a throttle (429) skips one tick; only a definite 4xx denial closes the stream. */
|
|
50
31
|
export declare function heartbeatVerdict(req: IncomingMessage, opts: AuthOpts): Promise<'ok' | 'revoked' | 'unavailable'>;
|
package/dist/server/auth.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
// Bearer and loopback auth for the HTTP server.
|
|
2
|
-
import { envRequireAuth } from '../env.js';
|
|
3
|
-
import { resolveTenantId } from '../tenant.js';
|
|
4
|
-
import { log } from '../log.js';
|
|
5
|
-
import { API_KEY_PREFIX, verifyApiKeyCached } from '../auth.js';
|
|
6
|
-
import { ownerOrSubject } from '../api.js';
|
|
7
|
-
import { HttpError, isCrossSite, isHeaderString, LOOPBACK_HOST_HEADER, MAX_ID_LEN } from '../http-util.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { isJsonString } from '../json.js';
|
|
11
|
-
/**
|
|
12
|
-
* Recognise loopback remote addresses. Node reports IPv6-mapped IPv4 as
|
|
13
|
-
* '::ffff:127.0.0.1' on dual-stack sockets, so we accept that alongside
|
|
14
|
-
* the bare v4 and v6 loopbacks. Anything else is treated as remote.
|
|
15
|
-
*/
|
|
2
|
+
import { envAllowKeylessLocal, envRequireAuth } from '../util/env.js';
|
|
3
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
4
|
+
import { log } from '../util/log.js';
|
|
5
|
+
import { API_KEY_PREFIX, verifyApiKeyCached } from '../store/auth.js';
|
|
6
|
+
import { ownerOrSubject } from '../api/index.js';
|
|
7
|
+
import { HttpError, isCrossSite, isHeaderString, LOOPBACK_HOST_HEADER, MAX_ID_LEN } from '../util/http-util.js';
|
|
8
|
+
import { clientLimitKey } from './client-ip.js';
|
|
9
|
+
import { keyCheckBounds } from './key-check-bounds.js';
|
|
10
|
+
import { isJsonString } from '../util/json.js';
|
|
11
|
+
/** Recognises loopback remote addresses, including the IPv6-mapped '::ffff:127.0.0.1' Node reports on dual-stack sockets; anything else is remote. */
|
|
16
12
|
export function isLoopback(remoteAddress) {
|
|
17
13
|
if (!remoteAddress)
|
|
18
14
|
return false;
|
|
@@ -27,22 +23,38 @@ export function isLoopback(remoteAddress) {
|
|
|
27
23
|
// A proxy on this host (nginx, Caddy, cloudflared) connects from loopback, so these headers mean the caller is not local.
|
|
28
24
|
const PROXY_HEADERS = [
|
|
29
25
|
'forwarded', 'x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto', 'x-real-ip', 'cf-connecting-ip', 'true-client-ip',
|
|
26
|
+
'fly-client-ip',
|
|
30
27
|
];
|
|
31
|
-
|
|
28
|
+
function proxyHeaderOf(req) {
|
|
29
|
+
return PROXY_HEADERS.find((name) => req.headers[name] !== undefined);
|
|
30
|
+
}
|
|
31
|
+
/** A page in a browser on this machine: another site's request, or a hostile name resolved to loopback (DNS rebinding). */
|
|
32
|
+
function isForeignPage(req) {
|
|
33
|
+
const host = req.headers.host;
|
|
34
|
+
return (host !== undefined && !LOOPBACK_HOST_HEADER.test(host)) || isCrossSite(req);
|
|
35
|
+
}
|
|
36
|
+
/** True only for a request made on this machine by its own user: a proxy and a browser page are loopback too, so the socket alone proves nothing. */
|
|
37
|
+
export function isLocalCaller(req) {
|
|
38
|
+
return isLoopback(req.socket.remoteAddress) && proxyHeaderOf(req) === undefined && !isForeignPage(req);
|
|
39
|
+
}
|
|
40
|
+
// The throwing twin of isLocalCaller, for the no-key fallback: each refusal has its own status, and a proxied one is logged.
|
|
32
41
|
function assertLocalCaller(req) {
|
|
33
42
|
if (!isLoopback(req.socket.remoteAddress))
|
|
34
43
|
throw new HttpError(401, 'auth required');
|
|
35
|
-
const proxyHeader =
|
|
44
|
+
const proxyHeader = proxyHeaderOf(req);
|
|
36
45
|
if (proxyHeader !== undefined) {
|
|
37
46
|
log.warn(`proxied loopback request refused: it carries ${proxyHeader}, so the no-key local fallback does not apply. ` +
|
|
38
|
-
'Send an API key (hippo auth create, then Authorization: Bearer hk_...).'
|
|
47
|
+
'Send an API key (hippo auth create, then Authorization: Bearer hk_...).');
|
|
39
48
|
throw new HttpError(401, 'auth required');
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
if ((host !== undefined && !LOOPBACK_HOST_HEADER.test(host)) || isCrossSite(req)) {
|
|
50
|
+
if (isForeignPage(req)) {
|
|
43
51
|
throw new HttpError(403, 'cross-site or non-local request refused; send an API key');
|
|
44
52
|
}
|
|
45
53
|
}
|
|
54
|
+
/** The 401 a keyless request from this machine gets by default; it names both fixes, since an upgrade is where most people meet it. */
|
|
55
|
+
const KEY_REQUIRED_MESSAGE = 'auth required: this server takes no request without an API key. Mint one with `hippo auth create` and send it as ' +
|
|
56
|
+
'"Authorization: Bearer <key>" (the hippo CLI reads HIPPO_API_KEY), or start the server with HIPPO_ALLOW_KEYLESS_LOCAL=1 ' +
|
|
57
|
+
'to let requests from this machine in without a key.';
|
|
46
58
|
export function readAuthHeader(req) {
|
|
47
59
|
const raw = req.headers['authorization'];
|
|
48
60
|
if (raw === undefined)
|
|
@@ -140,7 +152,7 @@ const DEFAULT_RESOLVER_DEADLINE_MS = 5000;
|
|
|
140
152
|
function chargeScryptRun(req, opts) {
|
|
141
153
|
const limiter = opts.failedAuthLimiter;
|
|
142
154
|
// Reserving rather than peeking bounds scrypt runs exactly, even when concurrent misses await a slow store.
|
|
143
|
-
if (limiter && !limiter.check(
|
|
155
|
+
if (limiter && !limiter.check(clientLimitKey(req))) {
|
|
144
156
|
throw new HttpError(429, 'too many key checks from this address', limiter.retryAfterSec);
|
|
145
157
|
}
|
|
146
158
|
}
|
|
@@ -153,7 +165,12 @@ async function resolveBearer(req, token, opts) {
|
|
|
153
165
|
const clean = await askResolver(opts.authResolver, token, deadlineMs);
|
|
154
166
|
return { ...clean, viaAuthResolver: true, owner: clean.subject }; // a resolver vouches for a person, never names one
|
|
155
167
|
}
|
|
156
|
-
const key = await verifyApiKeyCached(
|
|
168
|
+
const key = await verifyApiKeyCached(token, opts.store, (keyId, derive) => {
|
|
169
|
+
// The key's own bucket first, so a flood on one key id ends at its five tries and leaves the address's budget to the callers who share it.
|
|
170
|
+
keyChecks.admit(keyId, clientLimitKey(req));
|
|
171
|
+
chargeScryptRun(req, opts);
|
|
172
|
+
return keyChecks.run(derive);
|
|
173
|
+
});
|
|
157
174
|
if (!key)
|
|
158
175
|
throw new HttpError(401, 'invalid api key');
|
|
159
176
|
const id = { tenantId: key.tenantId, subject: `api_key:${key.keyId}`, role: key.role, scopes: key.scopes };
|
|
@@ -161,7 +178,7 @@ async function resolveBearer(req, token, opts) {
|
|
|
161
178
|
id.owner = key.ownerSubject;
|
|
162
179
|
return id;
|
|
163
180
|
}
|
|
164
|
-
/** The auth check without a charge: the bearer's identity, or null for the
|
|
181
|
+
/** The auth check without a charge: the bearer's identity, or null for the keyless local fallback. */
|
|
165
182
|
async function checkAuth(req, opts) {
|
|
166
183
|
const auth = readAuthHeader(req);
|
|
167
184
|
if (auth.kind === 'malformed') {
|
|
@@ -169,10 +186,14 @@ async function checkAuth(req, opts) {
|
|
|
169
186
|
}
|
|
170
187
|
if (auth.kind === 'bearer')
|
|
171
188
|
return resolveBearer(req, auth.token, opts);
|
|
172
|
-
// No Authorization header
|
|
189
|
+
// No Authorization header. HIPPO_REQUIRE_AUTH=1 is checked first, so a deployment that sets both stays closed.
|
|
173
190
|
if (envRequireAuth()) {
|
|
174
191
|
throw new HttpError(401, 'auth required');
|
|
175
192
|
}
|
|
193
|
+
if (!envAllowKeylessLocal()) {
|
|
194
|
+
// Only this machine's own user is told how to switch the key off; a proxied caller or a page learns nothing.
|
|
195
|
+
throw new HttpError(401, isLocalCaller(req) ? KEY_REQUIRED_MESSAGE : 'auth required');
|
|
196
|
+
}
|
|
176
197
|
assertLocalCaller(req);
|
|
177
198
|
return null;
|
|
178
199
|
}
|
|
@@ -189,9 +210,11 @@ function bearerActor(id) {
|
|
|
189
210
|
}
|
|
190
211
|
/** Key cap for every serve() bucket, shared by the warn map so it never tracks more callers than the buckets do. */
|
|
191
212
|
export const LIMITER_MAX_KEYS = 10_000;
|
|
213
|
+
// One for the process, as the thread pool its derivations run on is.
|
|
214
|
+
const keyChecks = keyCheckBounds(LIMITER_MAX_KEYS);
|
|
192
215
|
const CALLER_WARN_EVERY_MS = 60_000;
|
|
193
216
|
const callerWarnedAt = new Map();
|
|
194
|
-
function warnCallerLimited(
|
|
217
|
+
function warnCallerLimited(key, tenantId, person) {
|
|
195
218
|
const now = Date.now();
|
|
196
219
|
const last = callerWarnedAt.get(key);
|
|
197
220
|
if (last !== undefined && now - last < CALLER_WARN_EVERY_MS)
|
|
@@ -203,9 +226,9 @@ function warnCallerLimited(req, key, tenantId, person) {
|
|
|
203
226
|
callerWarnedAt.delete(oldest.value);
|
|
204
227
|
}
|
|
205
228
|
callerWarnedAt.set(key, now);
|
|
206
|
-
log.warn('caller over its rate limit; its further 429s this minute are not logged', { tenant: tenantId, person
|
|
229
|
+
log.warn('caller over its rate limit; its further 429s this minute are not logged', { tenant: tenantId, person });
|
|
207
230
|
}
|
|
208
|
-
function chargeCaller(
|
|
231
|
+
function chargeCaller(tenantId, actor, opts) {
|
|
209
232
|
const limiter = opts.callerLimiter;
|
|
210
233
|
if (!limiter)
|
|
211
234
|
return;
|
|
@@ -213,23 +236,19 @@ function chargeCaller(req, tenantId, actor, opts) {
|
|
|
213
236
|
const key = `${tenantId}\u0000${person}`;
|
|
214
237
|
if (limiter.check(key))
|
|
215
238
|
return;
|
|
216
|
-
warnCallerLimited(
|
|
239
|
+
warnCallerLimited(key, tenantId, person);
|
|
217
240
|
throw new HttpError(429, 'rate limit exceeded for this caller', limiter.retryAfterSec);
|
|
218
241
|
}
|
|
219
|
-
/**
|
|
220
|
-
*
|
|
221
|
-
* address. Throws HttpError(401) for invalid / missing credentials. Reads
|
|
222
|
-
* the store only for an API-key-shaped Bearer token (or any Bearer token when no
|
|
223
|
-
* auth resolver is registered), so loopback no-auth requests stay cheap.
|
|
224
|
-
*/
|
|
242
|
+
/** Builds a per-request Context from the Authorization header and remote address; throws HttpError(401) for invalid or missing credentials.
|
|
243
|
+
* Reads the store only for an API-key-shaped Bearer (or any Bearer when no auth resolver is registered), so keyless local requests stay cheap. */
|
|
225
244
|
export async function buildContextWithAuth(req, opts) {
|
|
226
245
|
const id = await checkAuth(req, opts);
|
|
227
246
|
if (id !== null) {
|
|
228
247
|
const actor = bearerActor(id);
|
|
229
|
-
chargeCaller(
|
|
248
|
+
chargeCaller(id.tenantId, actor, opts);
|
|
230
249
|
return { hippoRoot: opts.hippoRoot, tenantId: id.tenantId, actor, store: opts.store };
|
|
231
250
|
}
|
|
232
|
-
//
|
|
251
|
+
// The keyless local fallback (HIPPO_ALLOW_KEYLESS_LOCAL=1) is this machine's own user, so it is host admin.
|
|
233
252
|
return {
|
|
234
253
|
hippoRoot: opts.hippoRoot,
|
|
235
254
|
tenantId: resolveTenantId({}),
|
|
@@ -237,16 +256,12 @@ export async function buildContextWithAuth(req, opts) {
|
|
|
237
256
|
store: opts.store,
|
|
238
257
|
};
|
|
239
258
|
}
|
|
240
|
-
/**
|
|
241
|
-
*
|
|
242
|
-
* which builds its own root resolution via findHippoRoot). Throws HttpError
|
|
243
|
-
* 401 the same way buildContextWithAuth does, but skips building the Context
|
|
244
|
-
* envelope. Loopback no-auth still passes.
|
|
245
|
-
*/
|
|
259
|
+
/** Auth check for routes that need no tenant Context (e.g. the MCP transport, which resolves its own root): throws HttpError 401 like buildContextWithAuth.
|
|
260
|
+
* A keyless local request passes only under HIPPO_ALLOW_KEYLESS_LOCAL=1. */
|
|
246
261
|
export async function requireAuth(req, opts) {
|
|
247
262
|
const id = await checkAuth(req, opts);
|
|
248
263
|
if (id !== null)
|
|
249
|
-
chargeCaller(
|
|
264
|
+
chargeCaller(id.tenantId, bearerActor(id), opts);
|
|
250
265
|
}
|
|
251
266
|
/** Never rejects or charges a caller bucket: an outage (5xx) or a throttle (429) skips one tick; only a definite 4xx denial closes the stream. */
|
|
252
267
|
export async function heartbeatVerdict(req, opts) {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ServeOpts, ServerHandle } from './types.js';
|
|
2
|
+
/** Boots the HTTP daemon on host:port and writes the pidfile under hippoRoot; refuses non-loopback hosts unless HIPPO_REQUIRE_AUTH=1.
|
|
3
|
+
* Use port: 0 in tests for an ephemeral port. See docs/ARCHITECTURE.md#srcserverbootts. */
|
|
4
|
+
export declare function serve(opts: ServeOpts): Promise<ServerHandle>;
|
|
5
|
+
//# sourceMappingURL=boot.d.ts.map
|