hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- 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 +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- 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 +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- 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/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- 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 +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- 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 +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- 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 +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/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 +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
package/dist/cli/eval.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// The `hippo eval` verb; main() loads it lazily from the command table.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import {
|
|
4
|
+
import { listMemories } from '../api/memories.js';
|
|
5
|
+
import { cliApiContext } from './api-context.js';
|
|
5
6
|
import { loadConfig } from '../core/config.js';
|
|
6
|
-
import { getGlobalRoot } from '../sharing/
|
|
7
|
+
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
7
8
|
import { runEval, bootstrapCorpus, compareSummaries } from '../eval/eval.js';
|
|
8
9
|
import { runFeatureEval, formatResult, resultToBaseline, detectRegressions } from '../eval/eval-suite.js';
|
|
9
10
|
import { PACKAGE_VERSION } from '../util/version.js';
|
|
10
11
|
import { printError } from './output.js';
|
|
11
12
|
import { requireInit } from './shared.js';
|
|
12
13
|
import { fmt } from './print.js';
|
|
13
|
-
import { boolFlag } from './flag-values.js';
|
|
14
|
+
import { boolFlag, numberFlag } from './flag-values.js';
|
|
14
15
|
import { errorMessage } from '../util/log.js';
|
|
16
|
+
import { CliExit } from './exit.js';
|
|
15
17
|
const HIT_TOP_K = 10;
|
|
16
18
|
const MAX_FAILING_SHOWN = 10;
|
|
17
19
|
const TOP_IDS_SHOWN = 3;
|
|
@@ -19,14 +21,14 @@ const MAX_MISSED_SHOWN = 4;
|
|
|
19
21
|
const QUERY_PREVIEW_CHARS = 60;
|
|
20
22
|
const MAX_DELTAS_SHOWN = 5;
|
|
21
23
|
/** Runs `hippo eval`: --bootstrap writes a corpus, --suite runs the built-in feature eval, else it scores a corpus file. */
|
|
22
|
-
async function cmdEval(hippoRoot, corpusPath, flags) {
|
|
24
|
+
async function cmdEval(hippoRoot, tenantId, corpusPath, flags) {
|
|
23
25
|
const asJson = boolFlag(flags, 'json');
|
|
24
|
-
const minMrr = flags
|
|
26
|
+
const minMrr = numberFlag(flags, 'min-mrr') ?? null;
|
|
25
27
|
const comparePath = flags['compare'] ? String(flags['compare']) : null;
|
|
26
28
|
// Suite mode doesn't need an initialized store
|
|
27
29
|
if (!flags['suite'])
|
|
28
30
|
requireInit(hippoRoot);
|
|
29
|
-
const entries = flags['suite'] ? [] :
|
|
31
|
+
const entries = flags['suite'] ? [] : listMemories(cliApiContext(hippoRoot, tenantId), { everyTenant: true });
|
|
30
32
|
if (flags['bootstrap']) {
|
|
31
33
|
writeBootstrapCorpus(entries, flags);
|
|
32
34
|
return;
|
|
@@ -44,7 +46,7 @@ async function cmdEval(hippoRoot, corpusPath, flags) {
|
|
|
44
46
|
}
|
|
45
47
|
if (minMrr !== null && summary.meanMrr < minMrr) {
|
|
46
48
|
printError(`MRR ${fmt(summary.meanMrr, 4)} below threshold ${minMrr}`);
|
|
47
|
-
|
|
49
|
+
throw new CliExit(1);
|
|
48
50
|
}
|
|
49
51
|
if (comparePath)
|
|
50
52
|
printEvalCompare(summary, comparePath, asJson);
|
|
@@ -54,22 +56,20 @@ async function runCorpusEval(hippoRoot, corpusPath, entries, flags) {
|
|
|
54
56
|
const globalRoot = getGlobalRoot();
|
|
55
57
|
const localBump = flags['equal-sources']
|
|
56
58
|
? 1.0
|
|
57
|
-
: flags
|
|
58
|
-
? parseFloat(String(flags['local-bump']))
|
|
59
|
-
: loadConfig(hippoRoot).search.localBump;
|
|
59
|
+
: numberFlag(flags, 'local-bump') ?? loadConfig(hippoRoot).search.localBump;
|
|
60
60
|
return runEval(cases, entries, {
|
|
61
61
|
hippoRoot,
|
|
62
62
|
globalRoot,
|
|
63
63
|
mmr: !flags['no-mmr'],
|
|
64
|
-
mmrLambda: flags
|
|
65
|
-
embeddingWeight: flags
|
|
64
|
+
mmrLambda: numberFlag(flags, 'mmr-lambda'),
|
|
65
|
+
embeddingWeight: numberFlag(flags, 'embedding-weight'),
|
|
66
66
|
localBump,
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
/** Bootstrap mode: emit a synthetic corpus built from the store's own memories. */
|
|
70
70
|
function writeBootstrapCorpus(entries, flags) {
|
|
71
71
|
const outPath = flags['out'] ? String(flags['out']) : null;
|
|
72
|
-
const max = flags
|
|
72
|
+
const max = numberFlag(flags, 'max-cases') ?? 50;
|
|
73
73
|
const corpus = bootstrapCorpus(entries, max);
|
|
74
74
|
const payload = JSON.stringify({ cases: corpus }, null, 2);
|
|
75
75
|
if (outPath) {
|
|
@@ -85,11 +85,12 @@ function writeBootstrapCorpus(entries, flags) {
|
|
|
85
85
|
async function runEvalSuite(hippoRoot, flags, asJson, minMrr) {
|
|
86
86
|
const baselinePath = flags['baseline'] ? String(flags['baseline']) : path.join(hippoRoot, 'eval-baseline.json');
|
|
87
87
|
let baseline;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
try {
|
|
89
|
+
baseline = JSON.parse(fs.readFileSync(baselinePath, 'utf8'));
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
// No baseline file is a first run and says nothing; a file that is there and cannot be used warns.
|
|
93
|
+
if (!(err instanceof Error && 'code' in err && err.code === 'ENOENT')) {
|
|
93
94
|
printError(`Warning: eval baseline ${baselinePath} is unreadable; running without it.`);
|
|
94
95
|
}
|
|
95
96
|
}
|
|
@@ -109,7 +110,7 @@ async function runEvalSuite(hippoRoot, flags, asJson, minMrr) {
|
|
|
109
110
|
if (baseline) {
|
|
110
111
|
const report = detectRegressions(baseline, result);
|
|
111
112
|
if (report.verdict === 'REGRESSION' && minMrr === null) {
|
|
112
|
-
|
|
113
|
+
throw new CliExit(1);
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
}
|
|
@@ -117,11 +118,11 @@ async function runEvalSuite(hippoRoot, flags, asJson, minMrr) {
|
|
|
117
118
|
function readCorpus(corpusPath) {
|
|
118
119
|
if (!corpusPath) {
|
|
119
120
|
printError('Usage: hippo eval <corpus.json> OR hippo eval --suite [--save-baseline] OR hippo eval --bootstrap');
|
|
120
|
-
|
|
121
|
+
throw new CliExit(1);
|
|
121
122
|
}
|
|
122
123
|
if (!fs.existsSync(corpusPath)) {
|
|
123
124
|
printError(`Corpus file not found: ${corpusPath}`);
|
|
124
|
-
|
|
125
|
+
throw new CliExit(1);
|
|
125
126
|
}
|
|
126
127
|
let cases;
|
|
127
128
|
try {
|
|
@@ -132,7 +133,7 @@ function readCorpus(corpusPath) {
|
|
|
132
133
|
}
|
|
133
134
|
catch (err) {
|
|
134
135
|
printError(`Failed to read corpus: ${errorMessage(err)}`);
|
|
135
|
-
|
|
136
|
+
throw new CliExit(1);
|
|
136
137
|
}
|
|
137
138
|
return cases;
|
|
138
139
|
}
|
|
@@ -176,7 +177,7 @@ function printEvalSummary(summary, showCases) {
|
|
|
176
177
|
function printEvalCompare(summary, comparePath, asJson) {
|
|
177
178
|
if (!fs.existsSync(comparePath)) {
|
|
178
179
|
printError(`Baseline file not found: ${comparePath}`);
|
|
179
|
-
|
|
180
|
+
throw new CliExit(1);
|
|
180
181
|
}
|
|
181
182
|
let baseline;
|
|
182
183
|
try {
|
|
@@ -184,7 +185,7 @@ function printEvalCompare(summary, comparePath, asJson) {
|
|
|
184
185
|
}
|
|
185
186
|
catch (err) {
|
|
186
187
|
printError(`Failed to parse baseline: ${errorMessage(err)}`);
|
|
187
|
-
|
|
188
|
+
throw new CliExit(1);
|
|
188
189
|
}
|
|
189
190
|
const cmp = compareSummaries(baseline, summary);
|
|
190
191
|
if (asJson) {
|
|
@@ -218,8 +219,8 @@ function printEvalCompare(summary, comparePath, asJson) {
|
|
|
218
219
|
}
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
|
-
export async function handleEval({ hippoRoot, args, flags }) {
|
|
222
|
+
export async function handleEval({ hippoRoot, tenantId, args, flags }) {
|
|
222
223
|
const corpusPath = args[0] ? String(args[0]) : null;
|
|
223
|
-
await cmdEval(hippoRoot, corpusPath, flags);
|
|
224
|
+
await cmdEval(hippoRoot, tenantId, corpusPath, flags);
|
|
224
225
|
}
|
|
225
226
|
//# sourceMappingURL=eval.js.map
|
package/dist/cli/exit.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// The one error a CLI verb throws to stop its command; runCli is the one place that turns it into the process exit code.
|
|
2
|
+
/** Thrown after the verb has printed its own message, so it carries the exit code and nothing for the entry to print. */
|
|
3
|
+
export class CliExit extends Error {
|
|
4
|
+
code;
|
|
5
|
+
constructor(code) {
|
|
6
|
+
super(`hippo exits with code ${code}`);
|
|
7
|
+
this.name = 'CliExit';
|
|
8
|
+
this.code = code;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=exit.js.map
|
package/dist/cli/explain.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function handleExplain({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleExplain({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
4
3
|
//# sourceMappingURL=explain.d.ts.map
|
package/dist/cli/explain.js
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
1
|
// The `hippo explain` verb; main() loads it lazily from the command table.
|
|
2
2
|
import { confidenceFacets } from '../core/memory.js';
|
|
3
|
-
import { isInitialized } from '../store/open.js';
|
|
4
|
-
import { loadSearchEntries } from '../store/search-rows.js';
|
|
5
|
-
import { loadIndex } from '../store/index-and-stats.js';
|
|
6
3
|
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
7
4
|
import { loadConfig } from '../core/config.js';
|
|
8
5
|
import { dropHeldCopies } from '../util/same-text.js';
|
|
9
|
-
import { detectScope } from '../
|
|
10
|
-
import { getGlobalRoot } from '../sharing/
|
|
6
|
+
import { detectScope } from '../core/active-scope.js';
|
|
7
|
+
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
11
8
|
import * as api from '../api/index.js';
|
|
12
|
-
import {
|
|
9
|
+
import { cliRecallOrigin, scopeHiddenCount } from '../api/recall-cli.js';
|
|
10
|
+
import { cliApiContext } from './api-context.js';
|
|
13
11
|
import { printedTokens } from '../api/context-render.js';
|
|
14
12
|
import { printError } from './output.js';
|
|
15
13
|
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag } from './flag-values.js';
|
|
16
14
|
import { requireInit } from './shared.js';
|
|
17
15
|
import { fmt, recallEntryText, recallHeading } from './print.js';
|
|
16
|
+
import { CliExit } from './exit.js';
|
|
18
17
|
const EXPLAIN_PREVIEW_CHARS = 48;
|
|
19
18
|
/** The SQL predicate drops denied rows before the window, so an unscoped probe counts what the policy hides. */
|
|
20
|
-
function noteScopeHidden(
|
|
21
|
-
const
|
|
22
|
-
...loadSearchEntries(hippoRoot, query, undefined, tenantId),
|
|
23
|
-
...(globalRoot ? loadSearchEntries(globalRoot, query, undefined, tenantId) : []),
|
|
24
|
-
];
|
|
25
|
-
// Window-capped, so the count is a floor on large stores; fine for a "why is my row missing" hint.
|
|
26
|
-
const hidden = probe.filter((e) => !api.passesCliRecallScopeFilter(e.scope ?? null, requested)).length;
|
|
19
|
+
function noteScopeHidden(ctx, globalRoot, query, requested) {
|
|
20
|
+
const hidden = scopeHiddenCount(ctx, query, globalRoot, requested);
|
|
27
21
|
if (hidden > 0) {
|
|
28
22
|
printError(`[note] ${hidden} candidate${hidden === 1 ? '' : 's'} hidden by recall scope policy (pass an explicit --scope to inspect).`);
|
|
29
23
|
}
|
|
30
24
|
}
|
|
31
|
-
|
|
25
|
+
async function cmdExplain(hippoRoot, tenantId, query, flags) {
|
|
32
26
|
requireInit(hippoRoot);
|
|
33
27
|
const budget = parseBudgetFlag(flags['budget'], DEFAULT_RECALL_BUDGET);
|
|
34
28
|
const limit = parseLimitFlag(flags['limit']);
|
|
@@ -36,25 +30,26 @@ export async function cmdExplain(hippoRoot, query, flags) {
|
|
|
36
30
|
const includeSuperseded = boolFlag(flags, 'include-superseded');
|
|
37
31
|
const asOf = parseAsOfFlag(flags);
|
|
38
32
|
const globalRoot = getGlobalRoot();
|
|
39
|
-
const
|
|
33
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
40
34
|
// Explain shows what recall would see, so it applies the same scope rule.
|
|
41
35
|
const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
|
|
36
|
+
const activeScope = explicitScope || detectScope();
|
|
42
37
|
// Unlike recall, explain reads the global store whenever it exists, even when it is the local root.
|
|
43
|
-
const
|
|
44
|
-
|
|
38
|
+
const origin = cliRecallOrigin(ctx, { globalRoot, primaryIsGlobal: false, activeScope });
|
|
39
|
+
const explainGlobalOn = origin.globalOn;
|
|
40
|
+
noteScopeHidden(ctx, explainGlobalOn ? globalRoot : undefined, query, explicitScope || undefined);
|
|
45
41
|
const config = loadConfig(hippoRoot);
|
|
46
42
|
const engine = engineFlags(flags, config);
|
|
47
43
|
// Priced as recall prints each result, so explain returns what recall's engines would.
|
|
48
|
-
const
|
|
49
|
-
const cost = (r) => printedTokens(recallEntryText(r, query, false, explainGlobalOn && !explainIndex.entries[r.entry.id]));
|
|
44
|
+
const cost = (r) => printedTokens(recallEntryText(r, query, false, origin.isGlobal(r.entry.id)));
|
|
50
45
|
const entryBudget = Math.max(0, budget - printedTokens(recallHeading(budget, budget, query)));
|
|
51
46
|
const slot = {};
|
|
52
|
-
await api.retrieve(
|
|
47
|
+
await api.retrieve(ctx, {
|
|
53
48
|
query,
|
|
54
49
|
cliCore: {
|
|
55
50
|
rank: {
|
|
56
51
|
budget: entryBudget, cost, limit, includeSuperseded, asOf,
|
|
57
|
-
explicitScope, activeScope
|
|
52
|
+
explicitScope, activeScope,
|
|
58
53
|
search: { ...engine, multihop: false, explain: true },
|
|
59
54
|
},
|
|
60
55
|
sources: { globalRoot: explainGlobalOn ? globalRoot : undefined },
|
|
@@ -117,7 +112,8 @@ function printExplainTable(results, query, modeUsed, candidates) {
|
|
|
117
112
|
const b = r.breakdown;
|
|
118
113
|
const preview = r.entry.content.replace(/\s+/g, ' ').slice(0, EXPLAIN_PREVIEW_CHARS);
|
|
119
114
|
const ageStr = b ? `${b.ageDays}d` : '?';
|
|
120
|
-
console.log(`${String(i + 1).padEnd(5)} ${fmt(r.score, 3).padEnd(7)} ${fmt(r.entry.strength).padEnd(9)} ${ageStr.padEnd(6)}
|
|
115
|
+
console.log(`${String(i + 1).padEnd(5)} ${fmt(r.score, 3).padEnd(7)} ${fmt(r.entry.strength).padEnd(9)} ${ageStr.padEnd(6)} ` +
|
|
116
|
+
`${r.entry.layer.padEnd(10)} ${r.entry.id.padEnd(17)} ${preview}`);
|
|
121
117
|
}
|
|
122
118
|
console.log();
|
|
123
119
|
}
|
|
@@ -150,8 +146,10 @@ function printExplainBreakdown(r, i) {
|
|
|
150
146
|
console.log(` path: x${fmt(b.pathBoost, 3)} (cwd path tag overlap)`);
|
|
151
147
|
if (b.sourceBump !== 1)
|
|
152
148
|
console.log(` source: x${fmt(b.sourceBump, 2)} (local priority bump over global)`);
|
|
153
|
-
if (b.outcomeBoost !== 1)
|
|
154
|
-
console.log(` outcome: x${fmt(b.outcomeBoost, 3)}
|
|
149
|
+
if (b.outcomeBoost !== 1) {
|
|
150
|
+
console.log(` outcome: x${fmt(b.outcomeBoost, 3)} ` +
|
|
151
|
+
`(user feedback: pos-neg = ${(r.entry.outcome_positive ?? 0) - (r.entry.outcome_negative ?? 0)})`);
|
|
152
|
+
}
|
|
155
153
|
if (b.churnStaleMultiplier !== 1)
|
|
156
154
|
console.log(` churn: x${fmt(b.churnStaleMultiplier, 2)} (tagged 'churn-stale')`);
|
|
157
155
|
if (b.preMmrRank !== undefined && b.postMmrRank !== undefined && b.preMmrRank !== b.postMmrRank) {
|
|
@@ -162,12 +160,12 @@ function printExplainBreakdown(r, i) {
|
|
|
162
160
|
}
|
|
163
161
|
console.log();
|
|
164
162
|
}
|
|
165
|
-
export async function handleExplain({ hippoRoot, args, flags }) {
|
|
163
|
+
export async function handleExplain({ hippoRoot, tenantId, args, flags }) {
|
|
166
164
|
const query = args.join(' ').trim();
|
|
167
165
|
if (!query) {
|
|
168
166
|
printError('Please provide a search query.');
|
|
169
|
-
|
|
167
|
+
throw new CliExit(1);
|
|
170
168
|
}
|
|
171
|
-
await cmdExplain(hippoRoot, query, flags);
|
|
169
|
+
await cmdExplain(hippoRoot, tenantId, query, flags);
|
|
172
170
|
}
|
|
173
171
|
//# sourceMappingURL=explain.js.map
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
import type { RecallSearchOpts } from '../api/recall-pipeline.js';
|
|
2
2
|
import type { HippoConfig } from '../core/config.js';
|
|
3
|
+
export declare function isBooleanFlag(value: string | boolean | string[] | undefined): value is boolean;
|
|
4
|
+
export declare function isStringFlag(value: string | boolean | string[] | undefined): value is string;
|
|
3
5
|
export declare function parseLimitFlag(value: string | boolean | string[] | undefined): number;
|
|
4
6
|
export declare function parseCountFlag(value: string | boolean | string[] | undefined): number;
|
|
5
7
|
export declare function parseBudgetFlag(value: string | boolean | string[] | undefined, fallback: number): number;
|
|
6
8
|
export type CliFlags = Record<string, string | boolean | string[]>;
|
|
7
|
-
export declare function parsePositiveId(idRaw:
|
|
9
|
+
export declare function parsePositiveId(idRaw: string | undefined, label: string): number;
|
|
8
10
|
export declare function parseListLimit(flags: CliFlags): number;
|
|
9
11
|
export declare function stringFlag(flags: CliFlags, name: string): string | undefined;
|
|
10
12
|
export declare function nonEmptyStringFlag(flags: CliFlags, name: string): string | undefined;
|
|
13
|
+
export declare function stringListFlag(flags: CliFlags, name: string): string[] | undefined;
|
|
14
|
+
export declare function isOneOf<T extends string>(allowed: readonly T[], value: string): value is T;
|
|
11
15
|
export declare function numberFlag(flags: CliFlags, name: string): number | undefined;
|
|
12
16
|
export declare function boolFlag(flags: CliFlags, name: string): boolean;
|
|
13
17
|
export declare function flagIsTrue(flags: CliFlags, name: string): boolean;
|
|
14
18
|
/** What the command table hands each verb's run(). */
|
|
15
19
|
export interface CommandContext {
|
|
16
20
|
readonly hippoRoot: string;
|
|
21
|
+
readonly tenantId: string;
|
|
17
22
|
readonly args: string[];
|
|
18
23
|
readonly flags: CliFlags;
|
|
19
24
|
}
|
package/dist/cli/flag-values.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
// Readers that turn parsed CLI flags into typed values, and the flag types they share.
|
|
2
|
+
import { resolveListLimit } from '../util/limits.js';
|
|
2
3
|
import { printError } from './output.js';
|
|
4
|
+
import { CliExit } from './exit.js';
|
|
5
|
+
export function isBooleanFlag(value) {
|
|
6
|
+
return typeof value === 'boolean';
|
|
7
|
+
}
|
|
8
|
+
export function isStringFlag(value) {
|
|
9
|
+
return typeof value === 'string';
|
|
10
|
+
}
|
|
3
11
|
export function parseLimitFlag(value) {
|
|
4
12
|
if (!value)
|
|
5
13
|
return Infinity;
|
|
@@ -16,49 +24,68 @@ export function parseBudgetFlag(value, fallback) {
|
|
|
16
24
|
if (value === undefined)
|
|
17
25
|
return fallback;
|
|
18
26
|
// A value-less flag and a junk value are different typos; the --hops guard already splits them.
|
|
19
|
-
if (
|
|
27
|
+
if (!isStringFlag(value)) {
|
|
20
28
|
printError('--budget requires an integer value (e.g. --budget 1500).');
|
|
21
|
-
|
|
29
|
+
throw new CliExit(1);
|
|
22
30
|
}
|
|
23
31
|
// Number(), like the --hops guard: parseInt('12abc') is 12, silently accepting what this message rejects.
|
|
24
32
|
const parsed = Number(value);
|
|
25
33
|
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
26
34
|
printError(`Invalid --budget: "${value}". Must be a non-negative integer.`);
|
|
27
|
-
|
|
35
|
+
throw new CliExit(1);
|
|
28
36
|
}
|
|
29
37
|
return parsed;
|
|
30
38
|
}
|
|
31
|
-
// Whole-arg digits only: parseInt alone reads "1abc" as 1 and a mutating verb would hit the wrong row.
|
|
39
|
+
// Whole-arg digits only: parseInt alone reads "1abc" as 1 and a mutating verb would hit the wrong row.
|
|
40
|
+
// Digits past 2^53 round to a neighbouring id, so they are refused too.
|
|
32
41
|
export function parsePositiveId(idRaw, label) {
|
|
33
42
|
const s = String(idRaw ?? '').trim();
|
|
34
43
|
const id = parseInt(s, 10);
|
|
35
44
|
if (!/^\d+$/.test(s) || id <= 0 || !Number.isSafeInteger(id)) {
|
|
36
45
|
printError(`Invalid ${label} id: "${idRaw}" (expected a positive integer).`);
|
|
37
|
-
|
|
46
|
+
throw new CliExit(1);
|
|
38
47
|
}
|
|
39
48
|
return id;
|
|
40
49
|
}
|
|
41
50
|
export function parseListLimit(flags) {
|
|
42
51
|
const limitRaw = flags['limit'];
|
|
43
|
-
const limit = limitRaw !== undefined ? parseInt(String(limitRaw), 10) :
|
|
44
|
-
if (
|
|
52
|
+
const limit = resolveListLimit(limitRaw !== undefined ? parseInt(String(limitRaw), 10) : undefined);
|
|
53
|
+
if (limit === undefined) {
|
|
45
54
|
printError(`Invalid --limit: "${limitRaw}". Must be a positive integer.`);
|
|
46
|
-
|
|
55
|
+
throw new CliExit(1);
|
|
47
56
|
}
|
|
48
57
|
return limit;
|
|
49
58
|
}
|
|
50
59
|
// A value-less flag is `true` and a repeated one is a string[]; only a string counts here.
|
|
51
60
|
export function stringFlag(flags, name) {
|
|
52
61
|
const v = flags[name];
|
|
53
|
-
return
|
|
62
|
+
return isStringFlag(v) ? v : undefined;
|
|
54
63
|
}
|
|
55
64
|
// An empty value reads as absent, so `--change ""` keeps the default.
|
|
56
65
|
export function nonEmptyStringFlag(flags, name) {
|
|
57
66
|
return stringFlag(flags, name) || undefined;
|
|
58
67
|
}
|
|
68
|
+
// A repeated flag is already a list; a single value is a comma-separated list.
|
|
69
|
+
export function stringListFlag(flags, name) {
|
|
70
|
+
const v = flags[name];
|
|
71
|
+
if (Array.isArray(v))
|
|
72
|
+
return v;
|
|
73
|
+
return isStringFlag(v) ? v.split(',').map((t) => t.trim()).filter(Boolean) : undefined;
|
|
74
|
+
}
|
|
75
|
+
export function isOneOf(allowed, value) {
|
|
76
|
+
return allowed.some((a) => a === value);
|
|
77
|
+
}
|
|
78
|
+
// A junk value exits instead of becoming NaN, which would pass every `<` gate.
|
|
59
79
|
export function numberFlag(flags, name) {
|
|
60
80
|
const v = flags[name];
|
|
61
|
-
|
|
81
|
+
if (!isStringFlag(v))
|
|
82
|
+
return undefined;
|
|
83
|
+
const parsed = Number(v);
|
|
84
|
+
if (v.trim() === '' || !Number.isFinite(parsed)) {
|
|
85
|
+
printError(`Invalid --${name}: "${v}". Must be a number.`);
|
|
86
|
+
throw new CliExit(1);
|
|
87
|
+
}
|
|
88
|
+
return parsed;
|
|
62
89
|
}
|
|
63
90
|
// Any truthy value counts, so a string value is true too.
|
|
64
91
|
export function boolFlag(flags, name) {
|
|
@@ -72,7 +99,7 @@ export function parseAsOfFlag(flags) {
|
|
|
72
99
|
const asOf = stringFlag(flags, 'as-of');
|
|
73
100
|
if (asOf !== undefined && Number.isNaN(new Date(asOf).getTime())) {
|
|
74
101
|
printError(`Error: --as-of value "${asOf}" is not a valid ISO date (e.g. 2026-04-22 or 2026-04-22T12:00:00Z).`);
|
|
75
|
-
|
|
102
|
+
throw new CliExit(1);
|
|
76
103
|
}
|
|
77
104
|
return asOf;
|
|
78
105
|
}
|
|
@@ -82,21 +109,21 @@ export function engineFlags(flags, config) {
|
|
|
82
109
|
usePhysics: boolFlag(flags, 'physics') || (!flags['classic'] && config.physics.enabled !== false),
|
|
83
110
|
physicsConfig: config.physics,
|
|
84
111
|
mmr: !flags['no-mmr'] && config.mmr.enabled,
|
|
85
|
-
mmrLambda: flags
|
|
112
|
+
mmrLambda: numberFlag(flags, 'mmr-lambda') ?? config.mmr.lambda,
|
|
86
113
|
localBump: flags['equal-sources']
|
|
87
114
|
? 1.0
|
|
88
|
-
: flags
|
|
115
|
+
: numberFlag(flags, 'local-bump') ?? config.search.localBump,
|
|
89
116
|
};
|
|
90
117
|
}
|
|
91
118
|
// parseArgs turns a value-less flag into `true`; refuse rather than silently
|
|
92
|
-
// stringifying it (String(true) === 'true'), mirroring
|
|
119
|
+
// stringifying it (String(true) === 'true'), mirroring handleHandoff's guard.
|
|
93
120
|
export function stringFlagOrExit(flags, key) {
|
|
94
121
|
const v = flags[key];
|
|
95
122
|
if (v === undefined)
|
|
96
123
|
return undefined;
|
|
97
124
|
if (v === true || v === false || Array.isArray(v)) {
|
|
98
125
|
printError(`--${key} requires a value`);
|
|
99
|
-
|
|
126
|
+
throw new CliExit(1);
|
|
100
127
|
}
|
|
101
128
|
return v.trim();
|
|
102
129
|
}
|