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/dormant.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { rejectionDigest } from './rejection.js';
|
|
2
|
-
import { escapeLike } from './escape.js';
|
|
3
|
-
const DEFAULT_LIST_LIMIT = 20;
|
|
4
|
-
/**
|
|
5
|
-
* Insert (or refresh) the dormant snapshot for `move.entry`. Does not touch
|
|
6
|
-
* the `memories` row: the caller deletes it in the same transaction, so the
|
|
7
|
-
* memory is never in both places or in neither.
|
|
8
|
-
*/
|
|
9
|
-
export function insertDormantRow(db, move) {
|
|
10
|
-
db.prepare(`
|
|
11
|
-
INSERT INTO dormant_memories (tenant_id, id, content, entry_json, reason, strength, dormant_at)
|
|
12
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
13
|
-
ON CONFLICT(tenant_id, id) DO UPDATE SET
|
|
14
|
-
content = excluded.content,
|
|
15
|
-
entry_json = excluded.entry_json,
|
|
16
|
-
reason = excluded.reason,
|
|
17
|
-
strength = excluded.strength,
|
|
18
|
-
dormant_at = excluded.dormant_at
|
|
19
|
-
`).run(move.entry.tenantId, move.entry.id, move.entry.content, JSON.stringify(move.entry), move.reason, move.strength, move.dormantAt);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Parse a stored snapshot back into a MemoryEntry, or null when the row no
|
|
23
|
-
* longer matches the snapshot it carries (edited by hand, or truncated).
|
|
24
|
-
*/
|
|
25
|
-
function parseSnapshot(row) {
|
|
26
|
-
try {
|
|
27
|
-
// SAFETY: entry_json is only written by insertDormantRow from a MemoryEntry;
|
|
28
|
-
// the id / tenant / content checks below reject a row edited out of shape.
|
|
29
|
-
const entry = JSON.parse(row.entry_json);
|
|
30
|
-
if (entry.id !== row.id || entry.tenantId !== row.tenant_id || entry.content !== row.content) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
return entry;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
// A row that will not parse is out of shape, so it is not restorable.
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function rowToDormantMemory(row) {
|
|
41
|
-
const entry = parseSnapshot(row);
|
|
42
|
-
return {
|
|
43
|
-
id: row.id,
|
|
44
|
-
tenantId: row.tenant_id,
|
|
45
|
-
content: row.content,
|
|
46
|
-
tags: entry && Array.isArray(entry.tags) ? entry.tags.map(String) : [],
|
|
47
|
-
strength: row.strength,
|
|
48
|
-
reason: row.reason,
|
|
49
|
-
dormantAt: row.dormant_at,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
// The snapshot's scope as a `scope` column, so recall-scope's SQL fragments read it as they read memories.scope.
|
|
53
|
-
const DORMANT_WITH_SCOPE = `(SELECT *, CASE WHEN json_valid(entry_json) THEN json_extract(entry_json, '$.scope') END AS scope FROM dormant_memories)`;
|
|
54
|
-
const EVERY_SCOPE = { sql: '1', params: [] };
|
|
55
|
-
/** A tenant's dormant memories whose scope `admit` passes, newest first, optionally filtered by search terms. */
|
|
56
|
-
export function listDormantRows(db, tenantId, opts = {}, admit = EVERY_SCOPE) {
|
|
57
|
-
const terms = (opts.query ?? '').trim().split(/\s+/).filter((t) => t.length > 0);
|
|
58
|
-
const limit = opts.limit !== undefined && Number.isFinite(opts.limit) && opts.limit >= 1
|
|
59
|
-
? Math.floor(opts.limit)
|
|
60
|
-
: DEFAULT_LIST_LIMIT;
|
|
61
|
-
const termClauses = terms.map(() => ` AND content LIKE ? ESCAPE '\\'`).join('');
|
|
62
|
-
// SAFETY: rows' shape matches the seven columns named in the SELECT.
|
|
63
|
-
const rows = db.prepare(`SELECT tenant_id, id, content, entry_json, reason, strength, dormant_at
|
|
64
|
-
FROM ${DORMANT_WITH_SCOPE}
|
|
65
|
-
WHERE tenant_id = ? AND ${admit.sql}${termClauses}
|
|
66
|
-
ORDER BY dormant_at DESC, id ASC
|
|
67
|
-
LIMIT ?`).all(tenantId, ...admit.params, ...terms.map((t) => `%${escapeLike(t)}%`), limit);
|
|
68
|
-
return rows.map(rowToDormantMemory);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* The stored snapshot for a tenant's dormant memory, or null when the tenant
|
|
72
|
-
* has no dormant memory with that id (another tenant's id reads as absent).
|
|
73
|
-
*/
|
|
74
|
-
export function readDormantSnapshot(db, tenantId, id) {
|
|
75
|
-
// SAFETY: row's shape matches the seven columns named in the SELECT.
|
|
76
|
-
const row = db.prepare(`SELECT tenant_id, id, content, entry_json, reason, strength, dormant_at
|
|
77
|
-
FROM dormant_memories WHERE tenant_id = ? AND id = ?`).get(tenantId, id);
|
|
78
|
-
return row ? toSnapshot(row) : null;
|
|
79
|
-
}
|
|
80
|
-
/** Every dormant memory of a tenant whose snapshot still reads back. */
|
|
81
|
-
export function listDormantSnapshots(db, tenantId) {
|
|
82
|
-
// SAFETY: rows' shape matches the seven columns named in the SELECT.
|
|
83
|
-
const rows = db.prepare(`SELECT tenant_id, id, content, entry_json, reason, strength, dormant_at
|
|
84
|
-
FROM dormant_memories WHERE tenant_id = ?`).all(tenantId);
|
|
85
|
-
return rows.flatMap((row) => toSnapshot(row) ?? []);
|
|
86
|
-
}
|
|
87
|
-
/** Readable snapshots whose entry's source starts with `prefix`; a malformed snapshot is passed over, not an error. */
|
|
88
|
-
export function dormantSnapshotsBySourcePrefix(db, tenantId, prefix) {
|
|
89
|
-
// SAFETY: rows' shape matches the seven columns named in the SELECT.
|
|
90
|
-
const rows = db.prepare(`SELECT tenant_id, id, content, entry_json, reason, strength, dormant_at
|
|
91
|
-
FROM dormant_memories
|
|
92
|
-
WHERE tenant_id = ?
|
|
93
|
-
AND CASE WHEN json_valid(entry_json) THEN json_extract(entry_json, '$.source') END LIKE ? ESCAPE '\\'`).all(tenantId, `${escapeLike(prefix)}%`);
|
|
94
|
-
return rows.flatMap((row) => toSnapshot(row) ?? []).filter((s) => String(s.entry.source).startsWith(prefix));
|
|
95
|
-
}
|
|
96
|
-
function toSnapshot(row) {
|
|
97
|
-
const entry = parseSnapshot(row);
|
|
98
|
-
return entry ? { entry, reason: row.reason, strength: row.strength, dormantAt: row.dormant_at } : null;
|
|
99
|
-
}
|
|
100
|
-
/** Put `entry` in place of a tenant's dormant memory `id`, keeping when and why that one went dormant. */
|
|
101
|
-
export function replaceDormantEntry(db, tenantId, id, entry) {
|
|
102
|
-
db.prepare(`UPDATE dormant_memories SET id = ?, content = ?, entry_json = ? WHERE tenant_id = ? AND id = ?`)
|
|
103
|
-
.run(entry.id, entry.content, JSON.stringify(entry), tenantId, id);
|
|
104
|
-
}
|
|
105
|
-
/** Whether a tenant has a dormant memory with this id whose scope `admit` passes (snapshot readable or not). */
|
|
106
|
-
export function hasDormantRow(db, tenantId, id, admit = EVERY_SCOPE) {
|
|
107
|
-
return db.prepare(`SELECT 1 FROM ${DORMANT_WITH_SCOPE} WHERE tenant_id = ? AND id = ? AND ${admit.sql}`).get(tenantId, id, ...admit.params) !== undefined;
|
|
108
|
-
}
|
|
109
|
-
/** Delete a tenant's dormant memory. Returns false when there was none. */
|
|
110
|
-
export function deleteDormantRow(db, tenantId, id) {
|
|
111
|
-
const result = db.prepare(`DELETE FROM dormant_memories WHERE tenant_id = ? AND id = ?`).run(tenantId, id);
|
|
112
|
-
return Number(result.changes ?? 0) > 0;
|
|
113
|
-
}
|
|
114
|
-
/** Deletes the tenant's dormant copies of a rejected digest whose snapshot scope `inReach` admits, so the value cannot linger; returns their ids. */
|
|
115
|
-
export function purgeDormantByDigest(db, tenantId, digest, inReach) {
|
|
116
|
-
// SAFETY: rows' shape matches the three columns named in the SELECT.
|
|
117
|
-
const rows = db.prepare(`SELECT id, content, CASE WHEN json_valid(entry_json) THEN json_extract(entry_json, '$.scope') END AS scope
|
|
118
|
-
FROM dormant_memories WHERE tenant_id = ?`).all(tenantId);
|
|
119
|
-
const removed = [];
|
|
120
|
-
for (const row of rows) {
|
|
121
|
-
if (rejectionDigest(row.content) !== digest || !inReach(row.scope))
|
|
122
|
-
continue;
|
|
123
|
-
deleteDormantRow(db, tenantId, row.id);
|
|
124
|
-
removed.push(row.id);
|
|
125
|
-
}
|
|
126
|
-
return removed;
|
|
127
|
-
}
|
|
128
|
-
export function expiredDormantKeys(db, cutoffIso) {
|
|
129
|
-
const sql = `SELECT tenant_id AS tenantId, id FROM dormant_memories WHERE dormant_at < ?`;
|
|
130
|
-
// SAFETY: rows' shape matches the two columns named in the SELECT.
|
|
131
|
-
return db.prepare(sql).all(cutoffIso);
|
|
132
|
-
}
|
|
133
|
-
export function deleteExpiredDormantRow(db, key, cutoffIso) {
|
|
134
|
-
const sql = `DELETE FROM dormant_memories WHERE tenant_id = ? AND id = ? AND dormant_at < ?`;
|
|
135
|
-
return Number(db.prepare(sql).run(key.tenantId, key.id, cutoffIso).changes ?? 0);
|
|
136
|
-
}
|
|
137
|
-
//# sourceMappingURL=dormant.js.map
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pluggable embedding providers for Hippo.
|
|
3
|
-
*
|
|
4
|
-
* The local `@huggingface/transformers` path stays the zero-DEPENDENCY DEFAULT. Opt-in
|
|
5
|
-
* API providers (OpenAI / Voyage / Cohere) let a user bring a frontier embedder
|
|
6
|
-
* (e.g. text-embedding-3-large) for frontier-class retrieval. They use the native
|
|
7
|
-
* `fetch` global (Node >= 22.16, see package.json engines; NO new dependency) and
|
|
8
|
-
* read their key from a conventional env var. The provider is selected by
|
|
9
|
-
* `config.embeddings.provider` (default `'local'`).
|
|
10
|
-
*
|
|
11
|
-
* Design contract:
|
|
12
|
-
* - Local provider `id` is the BARE model string; the STORED identity adds a `#t<N>`
|
|
13
|
-
* embed-text-format suffix (`embeddingIndexIdentity`), so older stores reindex once:
|
|
14
|
-
* their vectors were computed over path-contaminated text.
|
|
15
|
-
* - API provider `id` is `${kind}:${model}`; switching to/from an API embedder
|
|
16
|
-
* (or a dimension change) flips the identity and triggers the existing
|
|
17
|
-
* reindex-on-change path.
|
|
18
|
-
* - `resolveEmbeddingProvider` throws on an invalid config (unknown provider,
|
|
19
|
-
* bad apiBaseUrl); `embedMemory` turns that into a warning. `isAvailable()` is provider-aware
|
|
20
|
-
* (local -> dependency installed; api -> key present). `embed()` MAY throw on
|
|
21
|
-
* a hard transport/auth failure so a reindex can abort atomically; hot paths
|
|
22
|
-
* wrap it and fall back to BM25.
|
|
23
|
-
*
|
|
24
|
-
* The exact request/response shapes for the API providers are documented from each
|
|
25
|
-
* vendor's public embeddings API; they are unit-tested here against a mocked
|
|
26
|
-
* `fetch` and are integration-verified in Workstream C (real API calls are
|
|
27
|
-
* egress-blocked in the build sandbox).
|
|
28
|
-
*/
|
|
29
|
-
import { type EmbeddingRole } from './local-embedding.js';
|
|
30
|
-
export type EmbeddingProviderKind = 'local' | 'openai' | 'voyage' | 'cohere';
|
|
31
|
-
export declare const API_PROVIDER_KINDS: readonly EmbeddingProviderKind[];
|
|
32
|
-
export interface EmbeddingProvider {
|
|
33
|
-
readonly kind: EmbeddingProviderKind;
|
|
34
|
-
readonly model: string;
|
|
35
|
-
/**
|
|
36
|
-
* Identity recorded in DB meta to drive reindex-on-change.
|
|
37
|
-
* local -> bare model string (back-compat); api -> `${kind}:${model}`.
|
|
38
|
-
*/
|
|
39
|
-
readonly id: string;
|
|
40
|
-
/** Known fixed output dimension, if any (undefined for local / unknown). */
|
|
41
|
-
readonly dimensions?: number;
|
|
42
|
-
/** Env var holding this provider's API key (undefined for the local provider). */
|
|
43
|
-
readonly keyEnv?: string;
|
|
44
|
-
/** local -> dependency installed; api -> key present. NEVER throws. */
|
|
45
|
-
isAvailable(): boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Batch-embed. Returns one row per input in order; a row is `[]` when that
|
|
48
|
-
* single item could not be embedded. MAY throw on a hard transport/auth
|
|
49
|
-
* failure (so a reindex aborts before saving a partial index).
|
|
50
|
-
*/
|
|
51
|
-
embed(texts: string[], role?: EmbeddingRole): Promise<number[][]>;
|
|
52
|
-
}
|
|
53
|
-
export interface ResolveProviderOptions {
|
|
54
|
-
/** Explicit model override (mirrors resolveEmbeddingModel's explicitModel). */
|
|
55
|
-
model?: string;
|
|
56
|
-
/** Explicit provider override (mainly for tests). */
|
|
57
|
-
provider?: EmbeddingProviderKind;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Build the active embedding provider from config (or an explicit override).
|
|
61
|
-
* Never throws for a missing key — that surfaces via `isAvailable()` on the hot
|
|
62
|
-
* paths and as a hard error only from the explicit `hippo embed` command. The
|
|
63
|
-
* only hard throw is an invalid config (e.g. an insecure apiBaseUrl), a
|
|
64
|
-
* deliberate loud failure; hot-path callers (search) wrap this in try/catch.
|
|
65
|
-
*/
|
|
66
|
-
export declare function resolveEmbeddingProvider(hippoRoot: string, opts?: ResolveProviderOptions): EmbeddingProvider;
|
|
67
|
-
/**
|
|
68
|
-
* The reindex identity for the active provider. Use this (NOT resolveEmbeddingModel)
|
|
69
|
-
* everywhere `embeddingModelRequiresReindex` / stored-model comparisons happen.
|
|
70
|
-
*/
|
|
71
|
-
export declare function resolveEmbeddingIdentity(hippoRoot: string, opts?: ResolveProviderOptions): string;
|
|
72
|
-
/**
|
|
73
|
-
* Provider-aware availability for a store: local -> dependency installed;
|
|
74
|
-
* api -> key present. Use at the call sites that decide whether to embed.
|
|
75
|
-
*/
|
|
76
|
-
export declare function isEmbeddingConfigured(hippoRoot: string): boolean;
|
|
77
|
-
//# sourceMappingURL=embedding-provider.d.ts.map
|
package/dist/embeddings.d.ts
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Optional embedding-based semantic search for Hippo.
|
|
3
|
-
* Uses @huggingface/transformers (local, zero API keys, ~22MB model).
|
|
4
|
-
* Falls back silently if the library is not installed.
|
|
5
|
-
*/
|
|
6
|
-
import { MemoryEntry } from './memory.js';
|
|
7
|
-
import { type DatabaseSyncLike } from './db.js';
|
|
8
|
-
import { EMBEDDING_MODEL_META_KEY } from './vector-store.js';
|
|
9
|
-
import { type EmbeddingProvider } from './embedding-provider.js';
|
|
10
|
-
import type { HippoStore } from './store-port.js';
|
|
11
|
-
export { EMBEDDING_MODEL_META_KEY };
|
|
12
|
-
/**
|
|
13
|
-
* Bump whenever `embeddingInputText`'s composition changes in a way that
|
|
14
|
-
* changes the resulting vectors for existing entries. Folded into the stored
|
|
15
|
-
* index identity (see `embeddingIndexIdentity`) so a text-format change is
|
|
16
|
-
* treated exactly like an embedding-model change: the next embed-touching
|
|
17
|
-
* operation detects the mismatch and reindexes automatically. Format 2 =
|
|
18
|
-
* `path:*` tags excluded (see `embeddingInputText`); format 1 (implicit, no
|
|
19
|
-
* suffix) = `${content} ${tags.join(' ')}` including path tags.
|
|
20
|
-
*/
|
|
21
|
-
export declare const EMBED_TEXT_FORMAT = 2;
|
|
22
|
-
/**
|
|
23
|
-
* The stored-index identity for a given embedding provider id: folds
|
|
24
|
-
* `EMBED_TEXT_FORMAT` into the provider id so index-identity comparisons
|
|
25
|
-
* automatically invalidate on either a model change OR a text-format change.
|
|
26
|
-
* This is the ONE choke point both `embeddingModelRequiresReindex` (compare
|
|
27
|
-
* side) and `saveStoredEmbeddingModel` (save side) go through — they MUST
|
|
28
|
-
* version identically, or every call reindexes in a loop (or none ever do).
|
|
29
|
-
*/
|
|
30
|
-
export declare function embeddingIndexIdentity(providerId: string): string;
|
|
31
|
-
/**
|
|
32
|
-
* Build the text embedded for a memory entry: content plus its tags, joined
|
|
33
|
-
* by a space and trimmed — the same shape as the legacy
|
|
34
|
-
* `` `${e.content} ${e.tags.join(' ')}`.trim() `` composition, minus `path:*`
|
|
35
|
-
* tags.
|
|
36
|
-
*
|
|
37
|
-
* `path:*` tags are excluded because they are auto-derived from
|
|
38
|
-
* `process.cwd()` (see `extractPathTags` in cli.ts) and carry every path
|
|
39
|
-
* component of the store's location, INCLUDING the store directory name
|
|
40
|
-
* itself. That means identical content embeds to a DIFFERENT vector
|
|
41
|
-
* depending on WHERE the store happens to live — e.g. a fresh benchmark run
|
|
42
|
-
* under `tempfile.mkdtemp()` gets a new directory name (hence new path
|
|
43
|
-
* tokens, hence a new vector) every single run, even with byte-identical
|
|
44
|
-
* content ingested in byte-identical order. This was diagnosed as the
|
|
45
|
-
* DOMINANT root cause of cross-fresh-ingest recall-rank variance measured on
|
|
46
|
-
* LoCoMo (mean evidence-recall@5 stdev 0.0175 across 4 fresh re-ingests of
|
|
47
|
-
* identical data; see `benchmarks/LOCOMO_INVESTIGATION.md`, "Determinism
|
|
48
|
-
* characterization"). It is a real product defect beyond benchmarks too:
|
|
49
|
-
* retrieval semantics should not depend on a project directory's name.
|
|
50
|
-
*
|
|
51
|
-
* Only `path:*` is excluded. Other tags (`conv:`, `session:`, `speaker:`,
|
|
52
|
-
* `dia:`, `error`, `scope:`, etc.) remain embedded — they carry semantic
|
|
53
|
-
* meaning. Path relevance at recall time is already handled explicitly by
|
|
54
|
-
* the v39 scope-isolation layer (`origin_project`, `pathOverlapScore`), so
|
|
55
|
-
* embedding-level path tokens are redundant with a dedicated mechanism
|
|
56
|
-
* rather than a feature.
|
|
57
|
-
*/
|
|
58
|
-
export declare function embeddingInputText(entry: {
|
|
59
|
-
content: string;
|
|
60
|
-
tags: string[];
|
|
61
|
-
}): string;
|
|
62
|
-
/**
|
|
63
|
-
* Persist the stored-index identity for `model` (see `embeddingIndexIdentity`).
|
|
64
|
-
* Versioning happens INSIDE this function, not at call sites, so every caller
|
|
65
|
-
* — current and future — gets the identity format for free. Must stay
|
|
66
|
-
* consistent with the compare side in `embeddingModelRequiresReindex`.
|
|
67
|
-
*/
|
|
68
|
-
export declare function saveStoredEmbeddingModel(hippoRoot: string, model: string): void;
|
|
69
|
-
/** What a store's vector index was built by: the stored identity, and whether any vector exists. */
|
|
70
|
-
export interface EmbeddingIndexState {
|
|
71
|
-
readonly storedModel: string | null;
|
|
72
|
-
readonly hasVectors: boolean;
|
|
73
|
-
}
|
|
74
|
-
/** The model the index was built by: the stored identity, else the default model when vectors exist. */
|
|
75
|
-
export declare function indexedModel(state: EmbeddingIndexState): string | null;
|
|
76
|
-
/** The one rebuild rule every store applies to its indexed model. */
|
|
77
|
-
export declare function indexNeedsRebuild(indexed: string | null, providerId: string): boolean;
|
|
78
|
-
/** Whether a vector write under the index identity `model` first drops the stored index, which another model built. */
|
|
79
|
-
export declare function replacesIndex(state: EmbeddingIndexState, model: string): boolean;
|
|
80
|
-
export declare function resolveIndexedEmbeddingModel(hippoRoot: string, index?: Record<string, number[]>): string | null;
|
|
81
|
-
export declare function embeddingModelRequiresReindex(hippoRoot: string, model: string, index?: Record<string, number[]>): boolean;
|
|
82
|
-
/** hippo.db's index state, the meta row and the EXISTS on one handle. */
|
|
83
|
-
export declare function embeddingIndexStateAt(hippoRoot: string): EmbeddingIndexState;
|
|
84
|
-
export declare function embeddingIndexStateOn(db: DatabaseSyncLike): EmbeddingIndexState;
|
|
85
|
-
/**
|
|
86
|
-
* Cosine similarity between two vectors. Handles unnormalized vectors.
|
|
87
|
-
* Returns 0 for empty or mismatched vectors.
|
|
88
|
-
*/
|
|
89
|
-
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
90
|
-
/** Every stored vector keyed by memory id; `{}` when none. Search reads only the rows it ranks via `loadStoredVectors`. */
|
|
91
|
-
export declare function loadEmbeddingIndex(hippoRoot: string): Record<string, number[]>;
|
|
92
|
-
/** Stored vectors for `ids` only. */
|
|
93
|
-
export declare function loadStoredVectors(hippoRoot: string, ids: readonly string[]): Map<string, number[]>;
|
|
94
|
-
/** Replace every stored vector with `index`; `model` defaults to the stored index identity. */
|
|
95
|
-
export declare function saveEmbeddingIndex(hippoRoot: string, index: Record<string, number[]>, model?: string): void;
|
|
96
|
-
/** Embed a single memory entry and cache the result in the embedding index; with `store`, through its vectorWrites, never opening hippo.db. */
|
|
97
|
-
export declare function embedMemory(hippoRoot: string, entry: MemoryEntry, model?: string, store?: HippoStore): Promise<void>;
|
|
98
|
-
/** Embeds every entry with no cached vector, prunes vectors of deleted memories, and returns how many it embedded; `provider` defaults to the
|
|
99
|
-
* configured one. With `store`, every tenant's memories with no vector for the provider's model go through its `vectorWrites`, never hippo.db. */
|
|
100
|
-
export declare function embedAll(hippoRoot: string, model?: string, provider?: EmbeddingProvider, store?: HippoStore): Promise<number>;
|
|
101
|
-
//# sourceMappingURL=embeddings.d.ts.map
|
package/dist/extract.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { Layer, createMemory } from './memory.js';
|
|
2
|
-
import { writeEntry } from './store/entry-writes.js';
|
|
3
|
-
import { loadConfig } from './config.js';
|
|
4
|
-
import { RejectedValueError } from './rejection.js';
|
|
5
|
-
import { redactSecretsStrict } from './secret-detect.js';
|
|
6
|
-
import { fetchWithRetry, llmTimeoutMs } from './http-retry.js';
|
|
7
|
-
import { neverAutoShareTags } from './shared.js';
|
|
8
|
-
import { log } from './log.js';
|
|
9
|
-
import { isJsonString } from './json.js';
|
|
10
|
-
import { certainDefect } from './memory-quality.js';
|
|
11
|
-
const EXTRACTION_PROMPT = `You are extracting factual statements from a conversation or memory entry. Extract 1-8 standalone factual statements that would be useful to remember later.
|
|
12
|
-
|
|
13
|
-
Rules:
|
|
14
|
-
- Each fact must be a complete, standalone sentence
|
|
15
|
-
- Include the speaker's name in every fact (e.g. "Alice prefers..." not "She prefers...")
|
|
16
|
-
- Preserve specific details: names, numbers, dates, paths, IDs
|
|
17
|
-
- Return a JSON array of objects with: content (string), tags (array of "speaker:X" and "topic:Y" strings), valence ("neutral", "positive", "negative", or "critical")
|
|
18
|
-
- Return an empty array [] for small talk with no extractable facts
|
|
19
|
-
- Output ONLY the JSON array, no preamble or explanation
|
|
20
|
-
|
|
21
|
-
Input text:
|
|
22
|
-
`;
|
|
23
|
-
export async function extractFacts(text, opts) {
|
|
24
|
-
const model = opts.model ?? 'claude-sonnet-4-6';
|
|
25
|
-
const fetchFn = opts.fetcher ?? fetch;
|
|
26
|
-
let res;
|
|
27
|
-
try {
|
|
28
|
-
res = await fetchWithRetry('https://api.anthropic.com/v1/messages', {
|
|
29
|
-
method: 'POST',
|
|
30
|
-
headers: {
|
|
31
|
-
'content-type': 'application/json',
|
|
32
|
-
'x-api-key': opts.apiKey,
|
|
33
|
-
'anthropic-version': '2023-06-01',
|
|
34
|
-
},
|
|
35
|
-
body: JSON.stringify({
|
|
36
|
-
model,
|
|
37
|
-
max_tokens: 1200,
|
|
38
|
-
messages: [{ role: 'user', content: EXTRACTION_PROMPT + redactSecretsStrict(text) }],
|
|
39
|
-
}),
|
|
40
|
-
}, { timeoutMs: llmTimeoutMs(), fetchFn });
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
opts.onError?.(`request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
46
|
-
if (!res.ok) {
|
|
47
|
-
opts.onError?.(`HTTP ${res.status}`);
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
try {
|
|
51
|
-
const data = await res.json();
|
|
52
|
-
const raw = data.content?.[0]?.text?.trim() ?? '';
|
|
53
|
-
if (!raw)
|
|
54
|
-
return [];
|
|
55
|
-
const parsed = JSON.parse(raw);
|
|
56
|
-
if (!Array.isArray(parsed))
|
|
57
|
-
return [];
|
|
58
|
-
const validValences = new Set(['neutral', 'positive', 'negative', 'critical']);
|
|
59
|
-
const facts = [];
|
|
60
|
-
for (const item of parsed) {
|
|
61
|
-
if (facts.length >= 8)
|
|
62
|
-
break;
|
|
63
|
-
if (!item ||
|
|
64
|
-
!isJsonString(item.content) ||
|
|
65
|
-
item.content.length < 3)
|
|
66
|
-
continue;
|
|
67
|
-
const itemTags = item.tags;
|
|
68
|
-
const tags = Array.isArray(itemTags)
|
|
69
|
-
? itemTags.filter((t) => isJsonString(t))
|
|
70
|
-
: [];
|
|
71
|
-
// SAFETY: validValences.has(item.valence) above confirms item.valence is one of the four literal strings of EmotionalValence.
|
|
72
|
-
const valence = validValences.has(item.valence)
|
|
73
|
-
? item.valence
|
|
74
|
-
: 'neutral';
|
|
75
|
-
facts.push({ content: item.content, tags, valence });
|
|
76
|
-
}
|
|
77
|
-
return facts;
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
opts.onError?.(`unparseable response: ${err instanceof Error ? err.message : String(err)}`);
|
|
81
|
-
return [];
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const INHERITABLE_PREFIXES = ['conv:', 'session:', 'scope:', 'path:'];
|
|
85
|
-
export function storeExtractedFacts(hippoRoot, source, facts) {
|
|
86
|
-
const inheritedTags = [
|
|
87
|
-
...source.tags.filter((t) => INHERITABLE_PREFIXES.some((p) => t.startsWith(p))),
|
|
88
|
-
...neverAutoShareTags([source]),
|
|
89
|
-
];
|
|
90
|
-
const entries = [];
|
|
91
|
-
let rejected = 0;
|
|
92
|
-
const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
|
|
93
|
-
for (const fact of facts) {
|
|
94
|
-
const defect = certainDefect(fact.content);
|
|
95
|
-
if (defect !== null) {
|
|
96
|
-
log.warn(`storeExtractedFacts: skipped automatic quality defect (${defect})`);
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
const tags = ['extracted', ...inheritedTags, ...fact.tags];
|
|
100
|
-
const entry = { ...createMemory(fact.content, {
|
|
101
|
-
layer: Layer.Semantic,
|
|
102
|
-
tags,
|
|
103
|
-
emotional_valence: fact.valence,
|
|
104
|
-
confidence: 'inferred',
|
|
105
|
-
source: source.source,
|
|
106
|
-
extracted_from: source.id,
|
|
107
|
-
scope: source.scope,
|
|
108
|
-
// Without it createMemory stamps 'default', and extracted facts leave
|
|
109
|
-
// the tenant of the episodic memory they were extracted from.
|
|
110
|
-
tenantId: source.tenantId,
|
|
111
|
-
baseHalfLifeDays,
|
|
112
|
-
}), origin_project: source.origin_project };
|
|
113
|
-
// A refusal is per-VALUE: one rejected fact must not
|
|
114
|
-
// drop the rest of this batch. writeEntry has already audited the
|
|
115
|
-
// refusal (reject_refusal) before rethrowing, so skip-and-count here.
|
|
116
|
-
try {
|
|
117
|
-
writeEntry(hippoRoot, entry);
|
|
118
|
-
}
|
|
119
|
-
catch (err) {
|
|
120
|
-
if (err instanceof RejectedValueError) {
|
|
121
|
-
rejected++;
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
throw err;
|
|
125
|
-
}
|
|
126
|
-
entries.push(entry);
|
|
127
|
-
}
|
|
128
|
-
if (rejected > 0) {
|
|
129
|
-
log.warn(`storeExtractedFacts: skipped ${rejected} rejected value(s)`);
|
|
130
|
-
}
|
|
131
|
-
return entries;
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=extract.js.map
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Forward-claim detector: pure-function regex set + token extraction.
|
|
3
|
-
*
|
|
4
|
-
* No DB. No state. No dependencies beyond stdlib regex + String.
|
|
5
|
-
*
|
|
6
|
-
* The detector's job is to decide whether a recall query carries a
|
|
7
|
-
* forward-prediction phrase ("will take ~3 days", "ship by Friday",
|
|
8
|
-
* "ETA in 2 weeks"). Calibration is intentionally HIGH-PRECISION /
|
|
9
|
-
* LOW-RECALL: better to fire on 20% of real forward-claims than 80% with
|
|
10
|
-
* 40% noise. Cry-wolf failure dominates planning-fallacy hint UX (Lovallo-
|
|
11
|
-
* Kahneman 2003 inside-vs-outside view).
|
|
12
|
-
*
|
|
13
|
-
* Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
|
|
14
|
-
* (emitted by computePlanningFallacyOutput when a phrase matches but no class
|
|
15
|
-
* resolves) is the telemetry channel for deciding whether to add an
|
|
16
|
-
* embedding-based detector.
|
|
17
|
-
*/
|
|
18
|
-
export interface ForwardClaimMatch {
|
|
19
|
-
/** The regex match snippet, e.g. "will take" or "~3 days". Surfaced
|
|
20
|
-
* to the calling agent in `PlanningFallacyHint.detectedPhrase` so they
|
|
21
|
-
* see WHY the hint appeared. */
|
|
22
|
-
phrase: string;
|
|
23
|
-
/** Lower-cased non-stop-word tokens (len >= 3, alpha or alphanumeric)
|
|
24
|
-
* extracted from the FULL query, NOT just the match. Used by the
|
|
25
|
-
* orchestrator's class resolver to score overlap with class_tag tokens. */
|
|
26
|
-
classQueryTokens: string[];
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Detect whether a recall query carries a forward-prediction phrase.
|
|
30
|
-
*
|
|
31
|
-
* @returns first-match phrase + extracted class-resolution tokens when
|
|
32
|
-
* any pattern matches; null otherwise. Token extraction runs only on a
|
|
33
|
-
* match — non-forward queries pay zero work beyond the regex gate.
|
|
34
|
-
*/
|
|
35
|
-
export declare function detectForwardClaim(queryText: string): ForwardClaimMatch | null;
|
|
36
|
-
//# sourceMappingURL=forward-claim-detector.d.ts.map
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Forward-claim detector: pure-function regex set + token extraction.
|
|
3
|
-
*
|
|
4
|
-
* No DB. No state. No dependencies beyond stdlib regex + String.
|
|
5
|
-
*
|
|
6
|
-
* The detector's job is to decide whether a recall query carries a
|
|
7
|
-
* forward-prediction phrase ("will take ~3 days", "ship by Friday",
|
|
8
|
-
* "ETA in 2 weeks"). Calibration is intentionally HIGH-PRECISION /
|
|
9
|
-
* LOW-RECALL: better to fire on 20% of real forward-claims than 80% with
|
|
10
|
-
* 40% noise. Cry-wolf failure dominates planning-fallacy hint UX (Lovallo-
|
|
11
|
-
* Kahneman 2003 inside-vs-outside view).
|
|
12
|
-
*
|
|
13
|
-
* Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
|
|
14
|
-
* (emitted by computePlanningFallacyOutput when a phrase matches but no class
|
|
15
|
-
* resolves) is the telemetry channel for deciding whether to add an
|
|
16
|
-
* embedding-based detector.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Each pattern is intentionally narrow:
|
|
20
|
-
* adding a pattern should require evidence from the
|
|
21
|
-
* `recall_autodebias_hint_no_class_match` audit channel that real forward-
|
|
22
|
-
* claims are slipping through, NOT speculative "this might match more".
|
|
23
|
-
*
|
|
24
|
-
* Word boundaries (`\b`) are mandatory: prevent `~5 days` inside
|
|
25
|
-
* `~5 days_ago` from matching, and prevent `ETA` substring matches inside
|
|
26
|
-
* a longer token (e.g. `BETAtesting`).
|
|
27
|
-
*/
|
|
28
|
-
// Reused fragment for ALL duration-suffix patterns. Requires a digit + unit
|
|
29
|
-
// so 'will take ownership' / 'ship in Docker' (no time component) don't
|
|
30
|
-
// match: verb-only patterns fire on everyday non-estimate queries that share a class-token.
|
|
31
|
-
// Accepts `<N> unit` (3 days), `a/an unit` (a week — implicit 1), and
|
|
32
|
-
// `one unit` so natural English forward-claims aren't lost.
|
|
33
|
-
const DURATION_TAIL = String.raw `(?:about|around|~|≈)?\s*(?:\d+|a|an|one)\s*(?:day|week|month|hour|hr|min(?:ute)?|sec(?:ond)?)s?\b`;
|
|
34
|
-
const FORWARD_CLAIM_PATTERNS = [
|
|
35
|
-
// Verb + duration tail. Old pattern `/\b(?:will|should...) take\b/i`
|
|
36
|
-
// matched `who will take ownership of auth?` because there was no
|
|
37
|
-
// quantifier requirement. Now requires `<verb> take <N> <unit>`.
|
|
38
|
-
new RegExp(String.raw `\b(?:will|should|gonna|going\s+to)\s+take\s+${DURATION_TAIL}`, 'i'),
|
|
39
|
-
// Ship + by/in + duration-or-day. Old pattern `/\bship(?:ping)?\s+(?:by|in)\b/i`
|
|
40
|
-
// matched `how does this ship in Docker?`. Now requires either a
|
|
41
|
-
// duration tail OR a literal day-of-week reference.
|
|
42
|
-
new RegExp(String.raw `\bship(?:ping|s)?\s+(?:by|in)\s+(?:(?:about|around)\s+)?(?:next\s+)?(?:${DURATION_TAIL}|(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday))\b`, 'i'),
|
|
43
|
-
/\bestimate(?:d)?\s+(?:at\s+)?(?:~|≈|about|around)?\s*\d+/i,
|
|
44
|
-
/\b(?:by|in|within)\s+(?:about|around|~)?\s*\d+\s*(?:day|week|month|hour)s?\b/i,
|
|
45
|
-
/\bETA\s*(?:is|:)?\s*\d+/i,
|
|
46
|
-
/\b(?:by|before)\s+next\s+(?:week|month|sprint|monday|tuesday|wednesday|thursday|friday|saturday|sunday)\b/i,
|
|
47
|
-
// Standalone tilde duration: '~3 days for migration', 'estimate ~3 days'.
|
|
48
|
-
// Lookbehind asserts start-of-string OR whitespace before the tilde
|
|
49
|
-
// because \b before ~ requires a word char immediately preceding (~ is
|
|
50
|
-
// not a word character), so /\b~/ would only match in 'foo~3 days'
|
|
51
|
-
// (malformed) and silently miss the legitimate cases.
|
|
52
|
-
/(?<=^|\s)~\s*\d+\s*(?:day|week|month|hour)s?\b/i,
|
|
53
|
-
// Should + verb + duration tail. Same tightening as the leading 'will
|
|
54
|
-
// take' rule: 'should ship by EOD' must include a quantifier.
|
|
55
|
-
new RegExp(String.raw `\bshould\s+(?:be|ship|finish|complete|land)\s+(?:by|in|within)\s+(?:(?:about|around)\s+)?(?:next\s+)?(?:${DURATION_TAIL}|(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday))\b`, 'i'),
|
|
56
|
-
];
|
|
57
|
-
/**
|
|
58
|
-
* Pronouns + function words + modal verbs the regex set already gates on.
|
|
59
|
-
* Dropped before class-resolution so the overlap signal comes from
|
|
60
|
-
* domain tokens ("migration", "auth", "refactor") rather than connectives.
|
|
61
|
-
*/
|
|
62
|
-
const STOP_WORDS = new Set([
|
|
63
|
-
'the', 'a', 'an', 'and', 'or', 'but', 'for', 'to', 'in', 'on', 'at', 'of',
|
|
64
|
-
'by', 'with', 'my', 'your', 'our', 'their', 'its', 'it', 'this', 'that',
|
|
65
|
-
'these', 'those', 'will', 'should', 'can', 'i', 'we', 'they', 'he', 'she',
|
|
66
|
-
'is', 'be', 'was', 'are', 'were', 'has', 'have', 'had', 'do', 'does', 'did',
|
|
67
|
-
'from', 'as', 'so', 'than', 'then',
|
|
68
|
-
// Verbs that appear inside FORWARD_CLAIM_PATTERNS themselves — they're
|
|
69
|
-
// signal for the regex gate but NOT signal for class resolution (you
|
|
70
|
-
// wouldn't name a prediction class "take" or "ship"). Listing here so
|
|
71
|
-
// they don't pollute the classQueryTokens overlap score.
|
|
72
|
-
'take', 'taken', 'takes', 'ship', 'ships', 'finish', 'complete', 'land',
|
|
73
|
-
'eta', 'estimate', 'estimated', 'next', 'about', 'around',
|
|
74
|
-
// Duration units appear in every forward-claim phrase by design (the
|
|
75
|
-
// regex set REQUIRES a `<N> <unit>` quantifier after the verb). Letting
|
|
76
|
-
// them through to class resolution lets a class tag containing 'days'
|
|
77
|
-
// win or tie on the unit token instead of the domain token.
|
|
78
|
-
'day', 'days', 'week', 'weeks', 'month', 'months',
|
|
79
|
-
'hour', 'hours', 'hr', 'hrs',
|
|
80
|
-
'min', 'mins', 'minute', 'minutes', 'sec', 'secs', 'second', 'seconds',
|
|
81
|
-
]);
|
|
82
|
-
/**
|
|
83
|
-
* Detect whether a recall query carries a forward-prediction phrase.
|
|
84
|
-
*
|
|
85
|
-
* @returns first-match phrase + extracted class-resolution tokens when
|
|
86
|
-
* any pattern matches; null otherwise. Token extraction runs only on a
|
|
87
|
-
* match — non-forward queries pay zero work beyond the regex gate.
|
|
88
|
-
*/
|
|
89
|
-
export function detectForwardClaim(queryText) {
|
|
90
|
-
if (!queryText)
|
|
91
|
-
return null;
|
|
92
|
-
for (const pat of FORWARD_CLAIM_PATTERNS) {
|
|
93
|
-
const m = queryText.match(pat);
|
|
94
|
-
if (m) {
|
|
95
|
-
const tokens = extractClassQueryTokens(queryText);
|
|
96
|
-
return { phrase: m[0], classQueryTokens: tokens };
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
function extractClassQueryTokens(queryText) {
|
|
102
|
-
return queryText
|
|
103
|
-
.toLowerCase()
|
|
104
|
-
// Strip everything that's not alphanum or whitespace or hyphen / underscore.
|
|
105
|
-
.replace(/[^a-z0-9\s_-]/g, ' ')
|
|
106
|
-
// Split on whitespace AND hyphen AND underscore so `migration-effort`
|
|
107
|
-
// produces ['migration', 'effort'] — matching the class-tag split
|
|
108
|
-
// pattern in resolveClassFromTokens (split on /[-_\s]+/).
|
|
109
|
-
.split(/[\s_-]+/)
|
|
110
|
-
.filter((t) => t.length >= 3 && !STOP_WORDS.has(t) && !/^\d+$/.test(t));
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=forward-claim-detector.js.map
|