hippo-memory 1.69.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 +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 +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- 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 +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- 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 +2 -11
- package/dist/api/forget.js +13 -46
- 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 +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/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- 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 +10 -12
- package/dist/api/remember.js +29 -45
- 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 +40 -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.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} +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.js +6 -4
- 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 +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- 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 +4 -2
- 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 -83
- 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 -49
- 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 -91
- 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} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -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} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -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.js → core/prompt-recall.js} +1 -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 +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- 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.js +7 -27
- 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 +62 -60
- 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 +12 -14
- 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} +1 -1
- 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 +39 -61
- package/dist/server.js +24 -568
- 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 +11 -5
- package/dist/store/audit-event.js +5 -4
- 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 +1 -1
- package/dist/store/handoffs.js +39 -30
- 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 +6 -4
- package/dist/store/open.js +24 -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} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- 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 +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- 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 +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} +15 -2
- package/dist/{env.js → util/env.js} +20 -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/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/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /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/{prompt-recall.d.ts → core/prompt-recall.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
package/dist/search/explain.d.ts
CHANGED
package/dist/search/explain.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { tokenize } from '../tokenize.js';
|
|
1
|
+
import { tokenize } from '../util/tokenize.js';
|
|
2
2
|
import { matchedQueryTerms } from './bm25.js';
|
|
3
|
+
const COSINE_DECIMALS = 3;
|
|
3
4
|
/** Why a result matched: the overlapping query terms and whether BM25 and/or embedding similarity contributed. */
|
|
4
5
|
export function explainMatch(query, result) {
|
|
5
6
|
const matchedTerms = matchedQueryTerms(new Set(tokenize(query)), result.entry);
|
|
@@ -9,7 +10,7 @@ export function explainMatch(query, result) {
|
|
|
9
10
|
if (hasBm25)
|
|
10
11
|
parts.push(`BM25: matched terms [${matchedTerms.join(', ')}]`);
|
|
11
12
|
if (hasEmbedding)
|
|
12
|
-
parts.push(`embedding similarity: ${result.cosine.toFixed(
|
|
13
|
+
parts.push(`embedding similarity: ${result.cosine.toFixed(COSINE_DECIMALS)}`);
|
|
13
14
|
if (parts.length === 0)
|
|
14
15
|
parts.push('no direct term or embedding match');
|
|
15
16
|
return {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
2
|
-
import type { ResultCost, SearchResult } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { ResultCost, SearchResult } from '../core/search-types.js';
|
|
3
3
|
/** When an extracted fact and its source both match, keep only the higher-scoring one (usually the fact). */
|
|
4
4
|
export declare function dedupeExtracted(scored: SearchResult[]): SearchResult[];
|
|
5
5
|
/** DAG drill-down: a matched summary pulls its children from `pool` in at 0.9x its score; sorts `results` in place. */
|
package/dist/search/finalize.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { estimateTokens } from '../token-
|
|
2
|
-
import { compareScoredResults } from '../compare.js';
|
|
1
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
2
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
3
3
|
import { churnStaleFactor } from './boosts.js';
|
|
4
4
|
/** When an extracted fact and its source both match, keep only the higher-scoring one (usually the fact). */
|
|
5
5
|
export function dedupeExtracted(scored) {
|
|
@@ -20,6 +20,7 @@ export function dedupeExtracted(scored) {
|
|
|
20
20
|
}
|
|
21
21
|
return deduped;
|
|
22
22
|
}
|
|
23
|
+
const DAG_CHILD_SCORE_FACTOR = 0.9;
|
|
23
24
|
/** DAG drill-down: a matched summary pulls its children from `pool` in at 0.9x its score; sorts `results` in place. */
|
|
24
25
|
export function withDagChildren(results, pool) {
|
|
25
26
|
const summaryIds = results.filter((r) => r.entry.tags.includes('dag-summary')).map((r) => r.entry.id);
|
|
@@ -30,7 +31,7 @@ export function withDagChildren(results, pool) {
|
|
|
30
31
|
if (results.some((r) => r.entry.id === child.id))
|
|
31
32
|
continue;
|
|
32
33
|
const parentResult = results.find((r) => r.entry.id === child.dag_parent_id);
|
|
33
|
-
const childScore = parentResult ? parentResult.score *
|
|
34
|
+
const childScore = parentResult ? parentResult.score * DAG_CHILD_SCORE_FACTOR * churnStaleFactor(child) : 0;
|
|
34
35
|
results.push({ entry: child, score: childScore, bm25: 0, cosine: 0, tokens: estimateTokens(child.content) });
|
|
35
36
|
}
|
|
36
37
|
results.sort(compareScoredResults);
|
package/dist/search/fusion.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import type { DenseScores } from './vector.js';
|
|
3
3
|
/** Opt-in third RRF list ranking in-pool candidates by graph proximity to the strong lexical seeds. */
|
|
4
4
|
export interface GraphStreamOptions {
|
package/dist/search/fusion.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { rrfFuse } from '
|
|
2
|
-
import { graphRankStream, selectGraphSeeds, DEFAULT_GRAPH_SEED_COUNT } from '../graph
|
|
3
|
-
import { compareEntryIdentity } from '../compare.js';
|
|
1
|
+
import { rrfFuse } from './rrf.js';
|
|
2
|
+
import { graphRankStream, selectGraphSeeds, DEFAULT_GRAPH_SEED_COUNT } from '../graph/stream.js';
|
|
3
|
+
import { compareEntryIdentity } from '../core/compare.js';
|
|
4
4
|
// Score desc, then entry identity, so ties cannot leak fresh-ingest order into graph seeds or RRF ranks.
|
|
5
5
|
function rankBy(eligible, scores, entries) {
|
|
6
6
|
return [...eligible].sort((a, b) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type BoostContext } from './boosts.js';
|
|
3
3
|
import type { DenseScores } from './vector.js';
|
|
4
|
-
import type { SearchResult } from '
|
|
4
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
5
5
|
export interface HybridScoreInput {
|
|
6
6
|
entries: MemoryEntry[];
|
|
7
7
|
queryTerms: string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { estimateTokens } from '../token-
|
|
1
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
2
2
|
import { matchedQueryTerms } from './bm25.js';
|
|
3
3
|
import { applyRankBoosts, strengthRecencyMultipliers } from './boosts.js';
|
|
4
4
|
import { addDagFields, ageInDays } from './breakdown.js';
|
package/dist/search/hybrid.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import type { RerankerFn, RerankerOptions } from '../rerankers/types.js';
|
|
3
3
|
import { type BM25Corpus } from './bm25.js';
|
|
4
4
|
import { type HybridVectorCandidates } from './vector.js';
|
|
5
5
|
import { type GraphStreamOptions } from './fusion.js';
|
|
6
|
-
import { type ResultCost, type SearchResult } from '
|
|
7
|
-
import type { HippoStore } from '../store
|
|
6
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
7
|
+
import type { HippoStore } from '../store/index.js';
|
|
8
8
|
export interface HybridSearchOptions {
|
|
9
9
|
budget?: number;
|
|
10
10
|
now?: Date;
|
|
@@ -37,7 +37,7 @@ export interface HybridSearchOptions {
|
|
|
37
37
|
summaryDeboost?: number;
|
|
38
38
|
/** 1.05 micro-boost for summaries rebuilt within 7 days. Default true. */
|
|
39
39
|
summaryFreshness?: boolean;
|
|
40
|
-
/** Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See src/graph
|
|
40
|
+
/** Graph-proximity third RRF list; active only with `scoring: 'rrf'`, embeddings and a `hippoRoot`. See src/graph/stream.ts. */
|
|
41
41
|
graphStream?: GraphStreamOptions;
|
|
42
42
|
/** Add the rows nearest the query vector, not only rescore `entries`; without it a row no query word matches cannot surface. */
|
|
43
43
|
vectorCandidates?: HybridVectorCandidates;
|
package/dist/search/hybrid.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { tokenize } from '../tokenize.js';
|
|
2
|
-
import { evalNow } from '../ablation.js';
|
|
3
|
-
import { extractPathTags } from '
|
|
4
|
-
import { detectScope } from '../scope.js';
|
|
5
|
-
import { compareScoredResults } from '../compare.js';
|
|
1
|
+
import { tokenize } from '../util/tokenize.js';
|
|
2
|
+
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { extractPathTags } from './path-context.js';
|
|
4
|
+
import { detectScope } from '../sharing/scope.js';
|
|
5
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
6
6
|
import { bm25Score, buildCorpus, entryText } from './bm25.js';
|
|
7
7
|
import { currentEntries } from './as-of.js';
|
|
8
8
|
import { summaryScoring } from './boosts.js';
|
|
@@ -12,11 +12,14 @@ import { fuseRanks } from './fusion.js';
|
|
|
12
12
|
import { scoreHybridPool } from './hybrid-score.js';
|
|
13
13
|
import { applyMmrWindow, applyReranker } from './rerank.js';
|
|
14
14
|
import { dedupeExtracted, fitBudget, withDagChildren } from './finalize.js';
|
|
15
|
-
import { DEFAULT_RECALL_BUDGET } from '
|
|
15
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
16
|
+
// Share of the blended score that cosine takes, and the relevance side of the MMR relevance-versus-diversity trade.
|
|
17
|
+
const DEFAULT_EMBEDDING_WEIGHT = 0.6;
|
|
18
|
+
const DEFAULT_MMR_LAMBDA = 0.7;
|
|
16
19
|
/** BM25 blended with cosine similarity when stored vectors and a provider are available, BM25 * strength * recency otherwise. */
|
|
17
20
|
export async function hybridSearch(query, entries, options = {}) {
|
|
18
21
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
19
|
-
const embeddingWeight = options.embeddingWeight ??
|
|
22
|
+
const embeddingWeight = options.embeddingWeight ?? DEFAULT_EMBEDDING_WEIGHT;
|
|
20
23
|
const pool = currentEntries(entries, options);
|
|
21
24
|
if (pool.length === 0)
|
|
22
25
|
return [];
|
|
@@ -57,7 +60,7 @@ function hybridBoostContext(query, pool, now, options) {
|
|
|
57
60
|
}
|
|
58
61
|
/** MMR when vectors are loaded, then the optional reranker. */
|
|
59
62
|
async function orderHybrid(query, scored, arm, options) {
|
|
60
|
-
const mmrLambda = options.mmrLambda ??
|
|
63
|
+
const mmrLambda = options.mmrLambda ?? DEFAULT_MMR_LAMBDA;
|
|
61
64
|
const applyMmr = (options.mmr ?? true) && arm.useEmbeddings && scored.length > 1 && mmrLambda < 1;
|
|
62
65
|
const ordered = applyMmr ? applyMmrWindow(scored, arm.embeddingIndex, mmrLambda, options.explain ?? false) : scored;
|
|
63
66
|
return options.reranker ? applyReranker(query, ordered, options.reranker, options.rerankerOptions) : ordered;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MemoryEntry } from '
|
|
2
|
-
import { type ResultCost, type SearchResult } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
3
3
|
export declare function multihopSearch(query: string, entries: MemoryEntry[], options?: {
|
|
4
4
|
budget?: number;
|
|
5
5
|
now?: Date;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { compareScoresDesc } from '../core/compare.js';
|
|
2
|
+
import { fitBudget } from './finalize.js';
|
|
3
|
+
import { search } from './bm25-search.js';
|
|
4
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
5
|
+
const PASS1_TOP_K = 10;
|
|
4
6
|
export function multihopSearch(query, entries, options = {}) {
|
|
5
7
|
const budget = options.budget ?? DEFAULT_RECALL_BUDGET;
|
|
6
8
|
// Pass 1 searches wide to find entities, so each return fits the caller's budget, as search() does.
|
|
7
9
|
const fit = (ordered) => fitBudget(ordered, budget, options.minResults ?? 1, options.cost);
|
|
8
10
|
const pass1 = search(query, entries, { ...options, budget: budget * 2 });
|
|
9
|
-
const topK = pass1.slice(0,
|
|
11
|
+
const topK = pass1.slice(0, PASS1_TOP_K);
|
|
10
12
|
if (topK.length === 0)
|
|
11
13
|
return [];
|
|
12
14
|
const entityTags = new Set();
|
|
@@ -35,6 +37,6 @@ export function multihopSearch(query, entries, options = {}) {
|
|
|
35
37
|
// PLAIN stable score sort on purpose -- pass1/pass2 inputs are
|
|
36
38
|
// deterministically ordered (search() carries the content tail), stability
|
|
37
39
|
// inherits that, and ties keep pass-1 results ahead of pass-2 follow-ups.
|
|
38
|
-
return fit([...merged.values()].sort((a, b) =>
|
|
40
|
+
return fit([...merged.values()].sort((a, b) => compareScoresDesc(a.score, b.score)));
|
|
39
41
|
}
|
|
40
42
|
//# sourceMappingURL=multihop.js.map
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Keeps the last meaningful segments, the most specific ones.
|
|
2
|
+
const PATH_SEGMENTS_KEPT = 4;
|
|
1
3
|
/**
|
|
2
4
|
* Extract meaningful path segments from a directory path.
|
|
3
5
|
* Returns tags like ['path:src', 'path:api', 'path:my-project'].
|
|
@@ -14,7 +16,7 @@ export function extractPathTags(dirPath) {
|
|
|
14
16
|
]);
|
|
15
17
|
return segments
|
|
16
18
|
.filter(s => s.length >= 2 && !noise.has(s.toLowerCase()))
|
|
17
|
-
.slice(-
|
|
19
|
+
.slice(-PATH_SEGMENTS_KEPT)
|
|
18
20
|
.map(s => `path:${s.toLowerCase()}`);
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type PhysicsConfig } from '../physics-config.js';
|
|
3
|
-
import { type HippoStore } from '../store
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type PhysicsConfig } from '../core/physics-config.js';
|
|
3
|
+
import { type HippoStore } from '../store/index.js';
|
|
4
4
|
import { type HybridVectorCandidates } from './vector.js';
|
|
5
|
-
import { type ResultCost, type SearchResult } from '
|
|
5
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
6
6
|
export interface PhysicsSearchOptions {
|
|
7
7
|
budget?: number;
|
|
8
8
|
now?: Date;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { calculateStrength } from '../memory.js';
|
|
2
|
-
import { estimateTokens } from '../token-
|
|
3
|
-
import { evalNow, isRecallBoostAblated } from '../ablation.js';
|
|
4
|
-
import { indexedModel, indexNeedsRebuild } from '../embeddings.js';
|
|
5
|
-
import { resolveEmbeddingProvider } from '../
|
|
6
|
-
import { physicsScore as computePhysicsScores, computeMass } from '../physics.js';
|
|
7
|
-
import { DEFAULT_PHYSICS_CONFIG } from '../physics-config.js';
|
|
8
|
-
import { rethrowIfSqliteBlocked } from '../db.js';
|
|
9
|
-
import { compareScoredResults } from '../compare.js';
|
|
10
|
-
import { log } from '../log.js';
|
|
11
|
-
import { sqliteStore } from '../store
|
|
1
|
+
import { calculateStrength } from '../core/memory.js';
|
|
2
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
3
|
+
import { evalNow, isRecallBoostAblated } from '../core/ablation.js';
|
|
4
|
+
import { indexedModel, indexNeedsRebuild } from '../store/embeddings/index.js';
|
|
5
|
+
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
6
|
+
import { physicsScore as computePhysicsScores, computeMass } from '../core/physics.js';
|
|
7
|
+
import { DEFAULT_PHYSICS_CONFIG } from '../core/physics-config.js';
|
|
8
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
9
|
+
import { compareScoredResults } from '../core/compare.js';
|
|
10
|
+
import { errorMessage, log } from '../util/log.js';
|
|
11
|
+
import { sqliteStore } from '../store/index.js';
|
|
12
12
|
import { churnStaleFactor, summaryMultipliers, summaryScoring } from './boosts.js';
|
|
13
13
|
import { addDagFields, ageInDays } from './breakdown.js';
|
|
14
14
|
import { fitBudget } from './finalize.js';
|
|
15
15
|
import { hybridSearch } from './hybrid.js';
|
|
16
16
|
import { currentEntries } from './as-of.js';
|
|
17
17
|
import { requireVectorReads, vectorCandidatesOutside } from './vector.js';
|
|
18
|
-
import { DEFAULT_RECALL_BUDGET } from '
|
|
18
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
19
19
|
/** Scores memories by gravity, momentum and cluster amplification; rows without physics state rank through hybridSearch. */
|
|
20
20
|
export async function physicsSearch(query, entries, options = {}) {
|
|
21
21
|
const now = options.now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
@@ -63,7 +63,7 @@ async function physicsQueryVector(query, root, store, given) {
|
|
|
63
63
|
}
|
|
64
64
|
catch (err) {
|
|
65
65
|
rethrowIfSqliteBlocked(err);
|
|
66
|
-
log.debug(`physics search: query embed failed, using hybrid: ${
|
|
66
|
+
log.debug(`physics search: query embed failed, using hybrid: ${errorMessage(err)}`);
|
|
67
67
|
return null;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -75,7 +75,7 @@ async function withVectorCandidates(reads, entries, queryVector, spec) {
|
|
|
75
75
|
}
|
|
76
76
|
catch (err) {
|
|
77
77
|
rethrowIfSqliteBlocked(err);
|
|
78
|
-
log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${
|
|
78
|
+
log.warn(`physics search ranked the lexical pool only; the vector lookup failed: ${errorMessage(err)}`);
|
|
79
79
|
return entries;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
@@ -86,7 +86,7 @@ async function loadCandidateParticles(reads, pool) {
|
|
|
86
86
|
}
|
|
87
87
|
catch (err) {
|
|
88
88
|
rethrowIfSqliteBlocked(err);
|
|
89
|
-
log.debug(`physics search: state load failed, using hybrid: ${
|
|
89
|
+
log.debug(`physics search: state load failed, using hybrid: ${errorMessage(err)}`);
|
|
90
90
|
return null;
|
|
91
91
|
}
|
|
92
92
|
}
|
package/dist/search/rerank.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { RerankerFn, RerankerOptions } from '../rerankers/types.js';
|
|
2
|
-
import type { SearchResult } from '
|
|
2
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
3
3
|
/** MMR: repeatedly picks the candidate maximising lambda * relevance - (1 - lambda) * max(cos(cand, picked)).
|
|
4
4
|
* Input must be sorted by relevance; strict `>` keeps ties first-wins, so a deterministic input stays deterministic. */
|
|
5
|
-
export declare function mmrRerank(scored: SearchResult[], embeddingIndex: Record<string, number
|
|
5
|
+
export declare function mmrRerank(scored: SearchResult[], embeddingIndex: Record<string, ArrayLike<number>>, lambda: number, explain: boolean): SearchResult[];
|
|
6
6
|
/** MMR over the top window only; the tail keeps its relevance order. */
|
|
7
|
-
export declare function applyMmrWindow(scored: SearchResult[], embeddingIndex: Record<string, number
|
|
7
|
+
export declare function applyMmrWindow(scored: SearchResult[], embeddingIndex: Record<string, ArrayLike<number>>, lambda: number, explain: boolean): SearchResult[];
|
|
8
8
|
/** Runs the reranker over the top `topK` (default 50) and stamps pre and post ranks; see src/rerankers/types.ts. */
|
|
9
9
|
export declare function applyReranker(query: string, ordered: SearchResult[], reranker: RerankerFn, rerankerOptions?: RerankerOptions): Promise<SearchResult[]>;
|
|
10
10
|
//# sourceMappingURL=rerank.d.ts.map
|
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 });
|
|
@@ -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,6 @@
|
|
|
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 HippoStore, type VectorReads } from '../store
|
|
3
|
+
import { type HippoStore, type VectorReads } from '../store/index.js';
|
|
4
4
|
import { type CurrentnessOptions } from './as-of.js';
|
|
5
5
|
/** hybridSearch's vector arm: which rows it may add, plus the caller's JS admission rules (exact private regex, entry filters). */
|
|
6
6
|
export type HybridVectorCandidates = VectorCandidateSpec & {
|
|
@@ -11,7 +11,7 @@ export interface VectorArm {
|
|
|
11
11
|
entries: MemoryEntry[];
|
|
12
12
|
addedRows: boolean;
|
|
13
13
|
useEmbeddings: boolean;
|
|
14
|
-
embeddingIndex: Record<string, number
|
|
14
|
+
embeddingIndex: Record<string, ArrayLike<number>>;
|
|
15
15
|
queryVector: number[];
|
|
16
16
|
}
|
|
17
17
|
export interface VectorArmOptions extends CurrentnessOptions {
|
package/dist/search/vector.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolveEmbeddingProvider } from '../
|
|
3
|
-
import { rethrowIfSqliteBlocked } from '../db.js';
|
|
4
|
-
import { log } from '../log.js';
|
|
5
|
-
import { requireGroup, sqliteStore } from '../store
|
|
6
|
-
import { redactSecretsStrict } from '../secret-detect.js';
|
|
1
|
+
import { cosineOf, indexedModel, indexNeedsRebuild } from '../store/embeddings/index.js';
|
|
2
|
+
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
3
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
4
|
+
import { errorMessage, log } from '../util/log.js';
|
|
5
|
+
import { requireGroup, sqliteStore } from '../store/index.js';
|
|
6
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
7
7
|
import { currentEntries } from './as-of.js';
|
|
8
8
|
// Search runs on every hook prompt, so one line per reason per process says why vectors went unused without flooding stderr.
|
|
9
9
|
function warnBm25Fallback(reason, detail) {
|
|
@@ -23,7 +23,9 @@ export function requireVectorReads(store) {
|
|
|
23
23
|
/** The nearest admitted rows not already in `entries`. */
|
|
24
24
|
export async function vectorCandidatesOutside(reads, entries, queryVector, spec) {
|
|
25
25
|
const inPool = new Set(entries.map((e) => e.id));
|
|
26
|
-
|
|
26
|
+
// The port takes data alone: `admit` is this side's rule, and a function cannot be sent to a store on another thread.
|
|
27
|
+
const { admit, ...stored } = spec;
|
|
28
|
+
return (await reads.nearestEntries(queryVector, stored)).filter((e) => !inPool.has(e.id) && (admit?.(e) ?? true));
|
|
27
29
|
}
|
|
28
30
|
/** Embeds the query and loads stored vectors; any failure leaves BM25 to rank alone. */
|
|
29
31
|
export async function resolveVectorArm(query, entries, options) {
|
|
@@ -35,10 +37,14 @@ export async function resolveVectorArm(query, entries, options) {
|
|
|
35
37
|
}
|
|
36
38
|
catch (err) {
|
|
37
39
|
rethrowIfSqliteBlocked(err);
|
|
38
|
-
warnBm25Fallback('error',
|
|
40
|
+
warnBm25Fallback('error', errorMessage(err));
|
|
39
41
|
}
|
|
40
42
|
return arm;
|
|
41
43
|
}
|
|
44
|
+
// Views when the store has them, so a search copies no vector; the number[] copies score the same.
|
|
45
|
+
async function storedVectorsOf(store, reads, ids) {
|
|
46
|
+
return store.vectorViews ? store.vectorViews.storedVectorViews(ids) : reads.storedVectors(ids);
|
|
47
|
+
}
|
|
42
48
|
async function fillVectorArm(arm, query, root, options) {
|
|
43
49
|
const provider = resolveEmbeddingProvider(root);
|
|
44
50
|
if (!provider.isAvailable())
|
|
@@ -51,7 +57,7 @@ async function fillVectorArm(arm, query, root, options) {
|
|
|
51
57
|
return;
|
|
52
58
|
}
|
|
53
59
|
const spec = options.vectorCandidates;
|
|
54
|
-
const vectors = await reads
|
|
60
|
+
const vectors = await storedVectorsOf(store, reads, arm.entries.map((e) => e.id));
|
|
55
61
|
// Only spend a (possibly paid, off-box) query embedding when there is a stored vector this search can use.
|
|
56
62
|
if (vectors.size === 0 && !(spec !== undefined && index.hasVectors))
|
|
57
63
|
return;
|
|
@@ -65,7 +71,7 @@ async function fillVectorArm(arm, query, root, options) {
|
|
|
65
71
|
if (added.length > 0) {
|
|
66
72
|
arm.addedRows = true;
|
|
67
73
|
arm.entries = currentEntries([...arm.entries, ...added], options);
|
|
68
|
-
for (const [id, v] of await reads
|
|
74
|
+
for (const [id, v] of await storedVectorsOf(store, reads, added.map((e) => e.id)))
|
|
69
75
|
vectors.set(id, v);
|
|
70
76
|
}
|
|
71
77
|
arm.embeddingIndex = Object.fromEntries(vectors);
|
|
@@ -80,7 +86,7 @@ export function denseScores(arm) {
|
|
|
80
86
|
for (let i = 0; i < n; i++) {
|
|
81
87
|
const cached = arm.embeddingIndex[arm.entries[i].id];
|
|
82
88
|
hadVec[i] = Boolean(cached && arm.queryVector.length > 0);
|
|
83
|
-
cosine[i] = hadVec[i] ? Math.max(0,
|
|
89
|
+
cosine[i] = hadVec[i] ? Math.max(0, cosineOf(arm.queryVector, cached)) : 0;
|
|
84
90
|
}
|
|
85
91
|
return { cosine, hadVec };
|
|
86
92
|
}
|
package/dist/server/auth.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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
4
|
/**
|
|
5
5
|
* Recognise loopback remote addresses. Node reports IPv6-mapped IPv4 as
|
package/dist/server/auth.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
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';
|
|
2
|
+
import { 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
11
|
/**
|
|
12
12
|
* Recognise loopback remote addresses. Node reports IPv6-mapped IPv4 as
|
|
13
13
|
* '::ffff:127.0.0.1' on dual-stack sockets, so we accept that alongside
|
|
@@ -27,6 +27,7 @@ export function isLoopback(remoteAddress) {
|
|
|
27
27
|
// A proxy on this host (nginx, Caddy, cloudflared) connects from loopback, so these headers mean the caller is not local.
|
|
28
28
|
const PROXY_HEADERS = [
|
|
29
29
|
'forwarded', 'x-forwarded-for', 'x-forwarded-host', 'x-forwarded-proto', 'x-real-ip', 'cf-connecting-ip', 'true-client-ip',
|
|
30
|
+
'fly-client-ip',
|
|
30
31
|
];
|
|
31
32
|
// A browser on this machine is loopback too, so the no-key fallback also needs a local Host and a same-site caller.
|
|
32
33
|
function assertLocalCaller(req) {
|
|
@@ -35,7 +36,7 @@ function assertLocalCaller(req) {
|
|
|
35
36
|
const proxyHeader = PROXY_HEADERS.find((name) => req.headers[name] !== undefined);
|
|
36
37
|
if (proxyHeader !== undefined) {
|
|
37
38
|
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_...).'
|
|
39
|
+
'Send an API key (hippo auth create, then Authorization: Bearer hk_...).');
|
|
39
40
|
throw new HttpError(401, 'auth required');
|
|
40
41
|
}
|
|
41
42
|
const host = req.headers.host;
|
|
@@ -140,7 +141,7 @@ const DEFAULT_RESOLVER_DEADLINE_MS = 5000;
|
|
|
140
141
|
function chargeScryptRun(req, opts) {
|
|
141
142
|
const limiter = opts.failedAuthLimiter;
|
|
142
143
|
// Reserving rather than peeking bounds scrypt runs exactly, even when concurrent misses await a slow store.
|
|
143
|
-
if (limiter && !limiter.check(
|
|
144
|
+
if (limiter && !limiter.check(clientLimitKey(req))) {
|
|
144
145
|
throw new HttpError(429, 'too many key checks from this address', limiter.retryAfterSec);
|
|
145
146
|
}
|
|
146
147
|
}
|
|
@@ -153,7 +154,12 @@ async function resolveBearer(req, token, opts) {
|
|
|
153
154
|
const clean = await askResolver(opts.authResolver, token, deadlineMs);
|
|
154
155
|
return { ...clean, viaAuthResolver: true, owner: clean.subject }; // a resolver vouches for a person, never names one
|
|
155
156
|
}
|
|
156
|
-
const key = await verifyApiKeyCached(
|
|
157
|
+
const key = await verifyApiKeyCached(token, opts.store, (keyId, derive) => {
|
|
158
|
+
// 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.
|
|
159
|
+
keyChecks.admit(keyId, clientLimitKey(req));
|
|
160
|
+
chargeScryptRun(req, opts);
|
|
161
|
+
return keyChecks.run(derive);
|
|
162
|
+
});
|
|
157
163
|
if (!key)
|
|
158
164
|
throw new HttpError(401, 'invalid api key');
|
|
159
165
|
const id = { tenantId: key.tenantId, subject: `api_key:${key.keyId}`, role: key.role, scopes: key.scopes };
|
|
@@ -189,9 +195,11 @@ function bearerActor(id) {
|
|
|
189
195
|
}
|
|
190
196
|
/** Key cap for every serve() bucket, shared by the warn map so it never tracks more callers than the buckets do. */
|
|
191
197
|
export const LIMITER_MAX_KEYS = 10_000;
|
|
198
|
+
// One for the process, as the thread pool its derivations run on is.
|
|
199
|
+
const keyChecks = keyCheckBounds(LIMITER_MAX_KEYS);
|
|
192
200
|
const CALLER_WARN_EVERY_MS = 60_000;
|
|
193
201
|
const callerWarnedAt = new Map();
|
|
194
|
-
function warnCallerLimited(
|
|
202
|
+
function warnCallerLimited(key, tenantId, person) {
|
|
195
203
|
const now = Date.now();
|
|
196
204
|
const last = callerWarnedAt.get(key);
|
|
197
205
|
if (last !== undefined && now - last < CALLER_WARN_EVERY_MS)
|
|
@@ -203,9 +211,9 @@ function warnCallerLimited(req, key, tenantId, person) {
|
|
|
203
211
|
callerWarnedAt.delete(oldest.value);
|
|
204
212
|
}
|
|
205
213
|
callerWarnedAt.set(key, now);
|
|
206
|
-
log.warn('caller over its rate limit; its further 429s this minute are not logged', { tenant: tenantId, person
|
|
214
|
+
log.warn('caller over its rate limit; its further 429s this minute are not logged', { tenant: tenantId, person });
|
|
207
215
|
}
|
|
208
|
-
function chargeCaller(
|
|
216
|
+
function chargeCaller(tenantId, actor, opts) {
|
|
209
217
|
const limiter = opts.callerLimiter;
|
|
210
218
|
if (!limiter)
|
|
211
219
|
return;
|
|
@@ -213,7 +221,7 @@ function chargeCaller(req, tenantId, actor, opts) {
|
|
|
213
221
|
const key = `${tenantId}\u0000${person}`;
|
|
214
222
|
if (limiter.check(key))
|
|
215
223
|
return;
|
|
216
|
-
warnCallerLimited(
|
|
224
|
+
warnCallerLimited(key, tenantId, person);
|
|
217
225
|
throw new HttpError(429, 'rate limit exceeded for this caller', limiter.retryAfterSec);
|
|
218
226
|
}
|
|
219
227
|
/**
|
|
@@ -226,7 +234,7 @@ export async function buildContextWithAuth(req, opts) {
|
|
|
226
234
|
const id = await checkAuth(req, opts);
|
|
227
235
|
if (id !== null) {
|
|
228
236
|
const actor = bearerActor(id);
|
|
229
|
-
chargeCaller(
|
|
237
|
+
chargeCaller(id.tenantId, actor, opts);
|
|
230
238
|
return { hippoRoot: opts.hippoRoot, tenantId: id.tenantId, actor, store: opts.store };
|
|
231
239
|
}
|
|
232
240
|
// Loopback fallback is process-local, treat as admin.
|
|
@@ -246,7 +254,7 @@ export async function buildContextWithAuth(req, opts) {
|
|
|
246
254
|
export async function requireAuth(req, opts) {
|
|
247
255
|
const id = await checkAuth(req, opts);
|
|
248
256
|
if (id !== null)
|
|
249
|
-
chargeCaller(
|
|
257
|
+
chargeCaller(id.tenantId, bearerActor(id), opts);
|
|
250
258
|
}
|
|
251
259
|
/** 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
260
|
export async function heartbeatVerdict(req, opts) {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ServeOpts, ServerHandle } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Boot the HTTP daemon on host:port and write the pidfile under hippoRoot.
|
|
4
|
+
*
|
|
5
|
+
* Refuses non-loopback hosts at boot unless
|
|
6
|
+
* HIPPO_REQUIRE_AUTH=1 is set. The auth middleware (buildContextWithAuth /
|
|
7
|
+
* requireAuth) has shipped and every route checks it except GET /health
|
|
8
|
+
* (public by design for platform health checks) and the two connector
|
|
9
|
+
* webhooks in PUBLIC_ROUTES, which are HMAC-gated by their own signing
|
|
10
|
+
* secrets and 404 when those secrets are unset, and any publicJson GET path. But the loopback
|
|
11
|
+
* no-auth fallback inside buildContextWithAuth still admits unauthenticated
|
|
12
|
+
* requests from a loopback remote address (unless they carry Forwarded,
|
|
13
|
+
* X-Forwarded-For/-Host/-Proto, X-Real-IP, Cf-Connecting-Ip, True-Client-Ip or Fly-Client-Ip, which mark a same-host proxy and get
|
|
14
|
+
* a 401 like any keyless remote request), so binding to a non-loopback host
|
|
15
|
+
* is only safe once that fallback is disabled with HIPPO_REQUIRE_AUTH=1,
|
|
16
|
+
* which forces every request (loopback or not) through Bearer-token
|
|
17
|
+
* validation. Without that env var set, a non-loopback bind would expose the
|
|
18
|
+
* DB to the network with no auth, so we fail fast instead.
|
|
19
|
+
*
|
|
20
|
+
* Use port: 0 in tests to bind to an ephemeral port and read the actual
|
|
21
|
+
* port back via server.address() after listen.
|
|
22
|
+
*/
|
|
23
|
+
export declare function serve(opts: ServeOpts): Promise<ServerHandle>;
|
|
24
|
+
//# sourceMappingURL=boot.d.ts.map
|