hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- 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 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
package/dist/cli/predictions.js
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
// First-class object verbs for predictions: record a claim, close it against the actual, and read the class base rate.
|
|
2
|
-
import * as predictionsApi from '../api/predictions.js';
|
|
2
|
+
import * as predictionsApi from '../api/objects/predictions.js';
|
|
3
3
|
import { VALID_CLOSURE_STATES } from '../core/prediction.js';
|
|
4
4
|
import { cliApiContext } from './api-context.js';
|
|
5
5
|
import { printError } from './output.js';
|
|
6
6
|
import { parseListLimit, stringFlag } from './flag-values.js';
|
|
7
7
|
import { requireInit } from './shared.js';
|
|
8
8
|
import { foundOrExit, idArgOrExit, requireStatus } from './object-verbs.js';
|
|
9
|
-
import {
|
|
10
|
-
import { CliExit } from './exit.js';
|
|
9
|
+
import { fail } from './exit.js';
|
|
11
10
|
const BASERATE_DECIMALS = 3;
|
|
12
11
|
const PREDICTION_NOUN = 'Prediction';
|
|
13
12
|
async function predictClose(ctx, args, flags) {
|
|
14
|
-
const id = idArgOrExit(args, 'Usage: hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]', 'prediction'
|
|
13
|
+
const id = idArgOrExit(args, 'Usage: hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]', 'prediction');
|
|
15
14
|
const stateRaw = (stringFlag(flags, 'state') ?? '').trim();
|
|
16
15
|
// SAFETY: Set.has only compares by value, so a string outside the closure states is a plain miss.
|
|
17
16
|
if (!VALID_CLOSURE_STATES.has(stateRaw) || stateRaw === 'open') {
|
|
18
|
-
|
|
19
|
-
throw new CliExit(1);
|
|
17
|
+
fail(`Invalid --state: "${stateRaw}". Must be one of: closed | closed-unknown.`);
|
|
20
18
|
}
|
|
21
19
|
const actualRaw = flags['actual'];
|
|
22
20
|
const actualValue = actualRaw !== undefined ? Number(actualRaw) : undefined;
|
|
23
21
|
if (actualRaw !== undefined && !Number.isFinite(actualValue)) {
|
|
24
|
-
|
|
25
|
-
throw new CliExit(1);
|
|
22
|
+
fail(`Invalid --actual: "${actualRaw}". Must be a number.`);
|
|
26
23
|
}
|
|
27
24
|
const closureNote = stringFlag(flags, 'note');
|
|
28
25
|
const closed = await predictionsApi.closePrediction(ctx, id, {
|
|
@@ -47,8 +44,7 @@ async function loadPredictionList(ctx, status, classTag, limit) {
|
|
|
47
44
|
const closureState = requireStatus(status, VALID_CLOSURE_STATES);
|
|
48
45
|
if (!classTag) {
|
|
49
46
|
// status filter without class: scan all classes is more complex; v1 requires --class for non-default status
|
|
50
|
-
|
|
51
|
-
throw new CliExit(1);
|
|
47
|
+
fail('--status filter (non-open) requires --class to be set.');
|
|
52
48
|
}
|
|
53
49
|
return predictionsApi.listPredictions(ctx, {
|
|
54
50
|
classTag,
|
|
@@ -77,14 +73,15 @@ async function predictList(ctx, flags) {
|
|
|
77
73
|
}
|
|
78
74
|
}
|
|
79
75
|
async function predictShow(ctx, args) {
|
|
80
|
-
const id = idArgOrExit(args, 'Usage: hippo predict show <id>', 'prediction'
|
|
76
|
+
const id = idArgOrExit(args, 'Usage: hippo predict show <id>', 'prediction');
|
|
81
77
|
const pred = foundOrExit(await predictionsApi.predictionById(ctx, id), PREDICTION_NOUN, id);
|
|
82
78
|
console.log(`Prediction #${pred.id}`);
|
|
83
79
|
console.log(` class: ${pred.classTag}`);
|
|
84
80
|
console.log(` claim: ${pred.claimText}`);
|
|
85
81
|
console.log(` state: ${pred.closureState}`);
|
|
86
|
-
if (pred.estimateValue !== null)
|
|
82
|
+
if (pred.estimateValue !== null) {
|
|
87
83
|
console.log(` estimate: ${pred.estimateValue}${pred.estimateUnit ? ' ' + pred.estimateUnit : ''}`);
|
|
84
|
+
}
|
|
88
85
|
if (pred.targetDate)
|
|
89
86
|
console.log(` target: ${pred.targetDate}`);
|
|
90
87
|
if (pred.actualValue !== null)
|
|
@@ -101,8 +98,7 @@ async function predictBaserate(ctx, flags) {
|
|
|
101
98
|
// Reference-class / planning-fallacy detector
|
|
102
99
|
const classTag = stringFlag(flags, 'class')?.trim();
|
|
103
100
|
if (!classTag) {
|
|
104
|
-
|
|
105
|
-
throw new CliExit(1);
|
|
101
|
+
fail('Usage: hippo predict baserate --class <c>');
|
|
106
102
|
}
|
|
107
103
|
const baserate = await predictionsApi.predictionBaserate(ctx, classTag);
|
|
108
104
|
if (baserate.nClosed === 0) {
|
|
@@ -114,10 +110,12 @@ async function predictBaserate(ctx, flags) {
|
|
|
114
110
|
console.log(baserate.summary);
|
|
115
111
|
console.log(` n_closed: ${baserate.nClosed}`);
|
|
116
112
|
console.log(` n_ratio_eligible: ${baserate.nRatioEligible}`);
|
|
117
|
-
if (baserate.meanEstimate !== null)
|
|
113
|
+
if (baserate.meanEstimate !== null) {
|
|
118
114
|
console.log(` mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
|
|
119
|
-
|
|
115
|
+
}
|
|
116
|
+
if (baserate.meanActual !== null) {
|
|
120
117
|
console.log(` mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
|
|
118
|
+
}
|
|
121
119
|
if (baserate.meanRatio !== null)
|
|
122
120
|
console.log(` mean_ratio: ${baserate.meanRatio.toFixed(BASERATE_DECIMALS)}x`);
|
|
123
121
|
if (baserate.p50Ratio !== null)
|
|
@@ -145,19 +143,16 @@ async function predictCreate(ctx, claimText, flags) {
|
|
|
145
143
|
printError('Usage: hippo predict "<claim>" --class <c> [--estimate <v>] [--unit <u>] [--target <YYYY-MM-DD>]');
|
|
146
144
|
printError(' hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]');
|
|
147
145
|
printError(' hippo predict list [--class X] [--status open|closed|closed-unknown|all] [--limit N]');
|
|
148
|
-
|
|
149
|
-
throw new CliExit(1);
|
|
146
|
+
fail(' hippo predict show <id>');
|
|
150
147
|
}
|
|
151
148
|
const classTag = stringFlag(flags, 'class')?.trim();
|
|
152
149
|
if (!classTag) {
|
|
153
|
-
|
|
154
|
-
throw new CliExit(1);
|
|
150
|
+
fail('--class is required for prediction creation.');
|
|
155
151
|
}
|
|
156
152
|
const estimateRaw = flags['estimate'];
|
|
157
153
|
const estimateValue = estimateRaw !== undefined ? Number(estimateRaw) : undefined;
|
|
158
154
|
if (estimateRaw !== undefined && !Number.isFinite(estimateValue)) {
|
|
159
|
-
|
|
160
|
-
throw new CliExit(1);
|
|
155
|
+
fail(`Invalid --estimate: "${estimateRaw}". Must be a number.`);
|
|
161
156
|
}
|
|
162
157
|
const estimateUnit = stringFlag(flags, 'unit');
|
|
163
158
|
const targetDate = stringFlag(flags, 'target');
|
package/dist/cli/print.js
CHANGED
|
@@ -15,9 +15,11 @@ export function recallEntryText(r, query, showWhy, isGlobal) {
|
|
|
15
15
|
const bars = Math.round(e.strength * 10);
|
|
16
16
|
const graphMark = r.graphVia ? ` [graph: ${r.graphVia.hops}hop ${r.graphVia.relType}]` : '';
|
|
17
17
|
const lines = [
|
|
18
|
-
`--- ${e.id} [${e.layer}]
|
|
18
|
+
`--- ${e.id} [${e.layer}] ` +
|
|
19
|
+
`${confLabel}${isGlobal ? ' [global]' : ''}${e.superseded_by ? ' [superseded]' : ''}${graphMark} ` +
|
|
19
20
|
`score=${fmt(r.score, 3)} strength=${fmt(e.strength)}`,
|
|
20
|
-
` [${'█'.repeat(bars)}${'░'.repeat(10 - bars)}] tags: ${e.tags.join(', ') || 'none'} | retrieved:
|
|
21
|
+
` [${'█'.repeat(bars)}${'░'.repeat(10 - bars)}] tags: ${e.tags.join(', ') || 'none'} | retrieved: ` +
|
|
22
|
+
`${e.retrieval_count}x`,
|
|
21
23
|
];
|
|
22
24
|
if (showWhy) {
|
|
23
25
|
const explanation = explainMatch(query, r);
|
package/dist/cli/projects.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// The `hippo projects` verb: list a store's project names, fold an old worktree name into its repo, repair old tags in
|
|
1
|
+
// The `hippo projects` verb: list a store's project names, fold an old worktree name into its repo, repair old tags in
|
|
2
|
+
// one pass.
|
|
2
3
|
import * as path from 'path';
|
|
3
4
|
import { execFileSync } from 'child_process';
|
|
4
5
|
import * as api from '../api/index.js';
|
|
@@ -17,7 +18,10 @@ function worktreeNames() {
|
|
|
17
18
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
18
19
|
windowsHide: true,
|
|
19
20
|
});
|
|
20
|
-
const paths = out
|
|
21
|
+
const paths = out
|
|
22
|
+
.split(/\r?\n/)
|
|
23
|
+
.filter((l) => l.startsWith('worktree '))
|
|
24
|
+
.map((l) => path.basename(l.slice('worktree '.length)));
|
|
21
25
|
return new Map(paths.slice(1).map((name) => [name, paths[0]]));
|
|
22
26
|
}
|
|
23
27
|
catch {
|
|
@@ -32,7 +36,9 @@ function hint(p, worktrees) {
|
|
|
32
36
|
const main = p.origin ? worktrees.get(p.origin) : undefined;
|
|
33
37
|
if (main)
|
|
34
38
|
return `\n a worktree of ${main}: hippo projects merge ${p.origin} ${main}`;
|
|
35
|
-
return p.copiesElsewhere > 0
|
|
39
|
+
return p.copiesElsewhere > 0
|
|
40
|
+
? `\n ${p.copiesElsewhere} of its imported notes are copies also held under another name`
|
|
41
|
+
: '';
|
|
36
42
|
}
|
|
37
43
|
function count(n, one, many = `${one}s`) {
|
|
38
44
|
return `${n} ${n === 1 ? one : many}`;
|
|
@@ -60,11 +66,12 @@ function projectsMerge(ctx, args, flags) {
|
|
|
60
66
|
return;
|
|
61
67
|
}
|
|
62
68
|
console.log(`${apply ? 'Merged' : 'Dry run: would merge'} ${from} into ${into}:`);
|
|
63
|
-
console.log(` ${count(r.setAside.length, 'imported note ' +
|
|
64
|
-
'copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
|
|
69
|
+
console.log(` ${count(r.setAside.length, 'imported note ' + 'copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
|
|
65
70
|
console.log(` ${count(r.restamped.length, 'memory', 'memories')} re-tagged, plus ${r.dormantRestamped.length} dormant ` +
|
|
66
71
|
`and ${count(r.compactions, 'compaction record')}`);
|
|
67
|
-
console.log(apply
|
|
72
|
+
console.log(apply
|
|
73
|
+
? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_merge`
|
|
74
|
+
: 'Nothing written. Add --apply to run it.');
|
|
68
75
|
}
|
|
69
76
|
function projectsRepair(ctx, flags) {
|
|
70
77
|
const root = ctx.hippoRoot;
|
|
@@ -75,17 +82,20 @@ function projectsRepair(ctx, flags) {
|
|
|
75
82
|
return;
|
|
76
83
|
}
|
|
77
84
|
console.log(`${apply ? 'Repaired' : 'Dry run: would repair'} ${root}:`);
|
|
78
|
-
console.log(` ${count(r.copies.length, 'imported note ' +
|
|
79
|
-
'copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
|
|
85
|
+
console.log(` ${count(r.copies.length, 'imported note ' + 'copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
|
|
80
86
|
for (const f of r.folds)
|
|
81
87
|
console.log(` ${f.from} folded into ${f.into} (its sessions' folders resolve there now)`);
|
|
82
88
|
for (const c of r.collisions) {
|
|
83
|
-
console.log(` ${c.name} left as it is: its folders now resolve to ${c.ids.join(', ')}; fold it by hand with hippo
|
|
89
|
+
console.log(` ${c.name} left as it is: its folders now resolve to ${c.ids.join(', ')}; fold it by hand with hippo ` +
|
|
90
|
+
`projects merge`);
|
|
84
91
|
}
|
|
85
92
|
console.log(` sleep's user-global merged rows: ${r.toProject.length} re-tagged to their parents' project`);
|
|
86
93
|
console.log(` ${r.setAside.length} set aside (parents in two projects; sleep re-merges them per project)`);
|
|
87
|
-
console.log(` ${r.untraced.length} left as they are (no parent left to show which project; check them with hippo inspect
|
|
88
|
-
|
|
94
|
+
console.log(` ${r.untraced.length} left as they are (no parent left to show which project; check them with hippo inspect ` +
|
|
95
|
+
`<id>)`);
|
|
96
|
+
console.log(apply
|
|
97
|
+
? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_repair`
|
|
98
|
+
: 'Nothing written. Add --apply to run it.');
|
|
89
99
|
}
|
|
90
100
|
export function handleProjects({ hippoRoot, tenantId, args, flags }) {
|
|
91
101
|
const ctx = cliApiContext(resolveAuthRoot(hippoRoot, flags), tenantId);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
|
|
2
|
-
export declare function repairQualityOnceAt(root: string, tenantId: string): void
|
|
2
|
+
export declare function repairQualityOnceAt(root: string, tenantId: string): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=quality-repair-once.d.ts.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// Sleep and the daily runner clean a store's old automatic memories once, so an upgrade needs no command.
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { errorMessage, log } from '../util/log.js';
|
|
3
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
4
4
|
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
5
|
-
import { repairMemoryQualityOnce } from '../api/audit.js';
|
|
5
|
+
import { repairMemoryQualityOnce } from '../api/auth/audit.js';
|
|
6
6
|
import { cliApiContext } from './api-context.js';
|
|
7
7
|
/** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
|
|
8
|
-
export function repairQualityOnceAt(root, tenantId) {
|
|
8
|
+
export async function repairQualityOnceAt(root, tenantId) {
|
|
9
9
|
try {
|
|
10
|
-
const result = repairMemoryQualityOnce(cliApiContext(root, tenantId));
|
|
10
|
+
const result = await repairMemoryQualityOnce(cliApiContext(root, tenantId));
|
|
11
11
|
if (result === null)
|
|
12
12
|
return;
|
|
13
13
|
if (!result.supported) {
|
|
@@ -25,13 +25,14 @@ export function repairQualityOnceAt(root, tenantId) {
|
|
|
25
25
|
const review = result.issues.filter((issue) => issue.disposition === 'review').length;
|
|
26
26
|
if (review > 0) {
|
|
27
27
|
const lead = moved > 0 ? ` ${review} more` : `Checked old automatic memories once after the upgrade: ${review}`;
|
|
28
|
-
console.log(`${lead} ${review === 1 ? 'looks' : 'look'} doubtful and ${review === 1 ? 'was' : 'were'} kept; hippo audit
|
|
28
|
+
console.log(`${lead} ${review === 1 ? 'looks' : 'look'} doubtful and ${review === 1 ? 'was' : 'were'} kept; hippo audit ` +
|
|
29
|
+
`repair${scope} lists them.`);
|
|
29
30
|
}
|
|
30
31
|
for (const warning of result.warnings)
|
|
31
32
|
log.warn(warning);
|
|
32
33
|
}
|
|
33
34
|
catch (err) {
|
|
34
|
-
log.warn(`memory quality repair skipped, tried again next time: ${errorMessage(err)}
|
|
35
|
+
log.warn(`memory quality repair skipped, tried again next time: ${errorMessage(err)}`, errorFields(err));
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
//# sourceMappingURL=quality-repair-once.js.map
|
package/dist/cli/recall.js
CHANGED
|
@@ -6,22 +6,20 @@ import { loadConfig } from '../core/config.js';
|
|
|
6
6
|
import { estimateTokens } from '../util/token-text.js';
|
|
7
7
|
import { dropHeldCopies } from '../util/same-text.js';
|
|
8
8
|
import * as api from '../api/index.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { detectAvailabilityBias } from '../api/availability.js';
|
|
12
|
-
import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall-cli.js';
|
|
9
|
+
import { availabilityPool, cutoffClauses, detectRecallHints, handoffText, hashQueryText, printedTokens, sessionRing, sessionTrailText, settleTokens, shownRecallRows, shrinkToFit, snapshotText, suppressionSummary, tokenPurse, } from '../api/cli-surface.js';
|
|
10
|
+
import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall/rows.js';
|
|
13
11
|
import { cliApiContext } from './api-context.js';
|
|
14
|
-
import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
|
|
15
12
|
import { printError } from './output.js';
|
|
16
|
-
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, numberFlag, } from './flag-values.js';
|
|
13
|
+
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, isStringFlag, numberFlag, stringFlag, stringFlagOrExit, } from './flag-values.js';
|
|
17
14
|
import { requireInit } from './shared.js';
|
|
18
|
-
import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
|
|
15
|
+
import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole, } from './print.js';
|
|
19
16
|
import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
|
|
20
|
-
import {
|
|
17
|
+
import { fail } from './exit.js';
|
|
21
18
|
// JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
|
|
22
19
|
function planningLine(p) {
|
|
23
|
-
if (p.hint)
|
|
20
|
+
if (p.hint) {
|
|
24
21
|
return `Planning fallacy hint (class: ${p.hint.classTag}): ${p.hint.baserateSummary} [detected: ${JSON.stringify(p.hint.detectedPhrase)}]`;
|
|
22
|
+
}
|
|
25
23
|
if (p.watching) {
|
|
26
24
|
return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion} ` +
|
|
27
25
|
`[detected: ${JSON.stringify(p.watching.detectedPhrase)}]`;
|
|
@@ -29,45 +27,38 @@ function planningLine(p) {
|
|
|
29
27
|
return null;
|
|
30
28
|
}
|
|
31
29
|
function cutoffLine(shown, s) {
|
|
32
|
-
const clauses =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (s.droppedPreRank > 0)
|
|
37
|
-
clauses.push(`${s.droppedPreRank} filtered pre-rank`);
|
|
38
|
-
if (s.summarySubstitutionsAdded > 0)
|
|
39
|
-
clauses.push(`${s.summarySubstitutionsAdded} summary substitutions added`);
|
|
40
|
-
if (s.freshTailAdded > 0)
|
|
41
|
-
clauses.push(`${s.freshTailAdded} fresh-tail added`);
|
|
42
|
-
if (s.suppressedByInterference > 0)
|
|
43
|
-
clauses.push(`${s.suppressedByInterference} suppressed by interference`);
|
|
44
|
-
return clauses.length > 0 ? `Cutoff: showing ${shown} of ${s.totalCandidates} candidates; ${clauses.join('; ')}.` : null;
|
|
30
|
+
const clauses = cutoffClauses(s);
|
|
31
|
+
return clauses.length > 0
|
|
32
|
+
? `Cutoff: showing ${shown} of ${s.totalCandidates} candidates; ${clauses.join('; ')}.`
|
|
33
|
+
: null;
|
|
45
34
|
}
|
|
46
35
|
function failWith(message) {
|
|
47
36
|
return () => {
|
|
48
|
-
|
|
49
|
-
throw new CliExit(1);
|
|
37
|
+
fail(message);
|
|
50
38
|
};
|
|
51
39
|
}
|
|
52
40
|
/** `--graph-stream` implies rrf fusion as well as the graph stream; the CLI fuses the local store only. */
|
|
53
41
|
function parseGraphStreamFlags(flags) {
|
|
54
42
|
let hops;
|
|
55
43
|
if (flags['graph-hops'] !== undefined) {
|
|
56
|
-
if (isBooleanFlag(flags['graph-hops']))
|
|
44
|
+
if (isBooleanFlag(flags['graph-hops'])) {
|
|
57
45
|
failWith(`--graph-hops requires an integer value 1..${MAX_HOPS} (e.g. --graph-hops 2).`)();
|
|
46
|
+
}
|
|
58
47
|
const h = Number(flags['graph-hops']);
|
|
59
48
|
if (!Number.isInteger(h) || h < 1 || h > MAX_HOPS) {
|
|
60
|
-
failWith(`Invalid --graph-hops: "${
|
|
49
|
+
failWith(`Invalid --graph-hops: "${stringFlag(flags, 'graph-hops')}". Must be an integer 1..${MAX_HOPS}.`)();
|
|
61
50
|
}
|
|
62
51
|
hops = h;
|
|
63
52
|
}
|
|
64
53
|
let seeds;
|
|
65
54
|
if (flags['graph-seeds'] !== undefined) {
|
|
66
|
-
if (isBooleanFlag(flags['graph-seeds']))
|
|
55
|
+
if (isBooleanFlag(flags['graph-seeds'])) {
|
|
67
56
|
failWith('--graph-seeds requires a positive integer value (e.g. --graph-seeds 10).')();
|
|
57
|
+
}
|
|
68
58
|
const s = Number(flags['graph-seeds']);
|
|
69
|
-
if (!Number.isInteger(s) || s < 1)
|
|
70
|
-
failWith(`Invalid --graph-seeds: "${
|
|
59
|
+
if (!Number.isInteger(s) || s < 1) {
|
|
60
|
+
failWith(`Invalid --graph-seeds: "${stringFlag(flags, 'graph-seeds')}". Must be a positive integer.`)();
|
|
61
|
+
}
|
|
71
62
|
seeds = s;
|
|
72
63
|
}
|
|
73
64
|
return { hops, seeds };
|
|
@@ -76,11 +67,12 @@ function parseHopsFlags(flags) {
|
|
|
76
67
|
if (flags['hops'] === undefined)
|
|
77
68
|
return {};
|
|
78
69
|
// A value-less `--hops` parses as true, and Number(true) === 1 would silently run a 1-hop expansion.
|
|
79
|
-
if (isBooleanFlag(flags['hops']))
|
|
70
|
+
if (isBooleanFlag(flags['hops'])) {
|
|
80
71
|
return { fail: failWith(`--hops requires an integer value 0..${MAX_HOPS} (e.g. --hops 1).`) };
|
|
72
|
+
}
|
|
81
73
|
const hops = Number(flags['hops']);
|
|
82
74
|
if (!Number.isInteger(hops) || hops < 0 || hops > MAX_HOPS) {
|
|
83
|
-
return { fail: failWith(`Invalid --hops: "${
|
|
75
|
+
return { fail: failWith(`Invalid --hops: "${stringFlag(flags, 'hops')}". Must be an integer 0..${MAX_HOPS}.`) };
|
|
84
76
|
}
|
|
85
77
|
const raw = flags['max-neighbors'];
|
|
86
78
|
if (raw === undefined)
|
|
@@ -94,7 +86,10 @@ function parseHopsFlags(flags) {
|
|
|
94
86
|
return { value: { hops, maxNeighbors } };
|
|
95
87
|
}
|
|
96
88
|
function parseRerankerFlag(flags) {
|
|
97
|
-
const
|
|
89
|
+
const nameRaw = flags['reranker'];
|
|
90
|
+
if (nameRaw !== undefined && !isStringFlag(nameRaw))
|
|
91
|
+
return { fail: failWith('--reranker requires a value.') };
|
|
92
|
+
const name = nameRaw?.trim() ?? '';
|
|
98
93
|
let picked;
|
|
99
94
|
try {
|
|
100
95
|
picked = cliRecallReranker(name);
|
|
@@ -125,11 +120,16 @@ function parseSalienceFlag(flags) {
|
|
|
125
120
|
return { value: threshold };
|
|
126
121
|
}
|
|
127
122
|
function parseChoiceFlag(flags, name, valid) {
|
|
128
|
-
const
|
|
123
|
+
const raw = flags[name];
|
|
124
|
+
if (raw !== undefined && !isStringFlag(raw)) {
|
|
125
|
+
return { fail: failWith(`--${name} requires a value. Must be one of: ${valid.join(', ')}.`) };
|
|
126
|
+
}
|
|
127
|
+
const value = raw?.trim() ?? '';
|
|
129
128
|
if (!value)
|
|
130
129
|
return {};
|
|
131
|
-
if (!valid.includes(value))
|
|
130
|
+
if (!valid.includes(value)) {
|
|
132
131
|
return { fail: failWith(`Invalid --${name}: "${value}". Must be one of: ${valid.join(', ')}.`) };
|
|
132
|
+
}
|
|
133
133
|
return { value };
|
|
134
134
|
}
|
|
135
135
|
/** Parses every flag a ranking stage reads; the first invalid one in pipeline order becomes `error`. */
|
|
@@ -140,7 +140,11 @@ function parseRecallLateFlags(flags) {
|
|
|
140
140
|
const outcome = parseChoiceFlag(flags, 'outcome', ['success', 'failure', 'partial']);
|
|
141
141
|
const layer = parseChoiceFlag(flags, 'layer', Object.values(Layer));
|
|
142
142
|
const staged = [
|
|
143
|
-
['expand', graphHops.fail],
|
|
143
|
+
['expand', graphHops.fail],
|
|
144
|
+
['rerank', reranker.fail],
|
|
145
|
+
['salience', salience.fail],
|
|
146
|
+
['outcome', outcome.fail],
|
|
147
|
+
['layer', layer.fail],
|
|
144
148
|
];
|
|
145
149
|
let error;
|
|
146
150
|
for (const [stage, fail] of staged) {
|
|
@@ -158,7 +162,8 @@ function parseRecallLateFlags(flags) {
|
|
|
158
162
|
error,
|
|
159
163
|
};
|
|
160
164
|
}
|
|
161
|
-
/** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records,
|
|
165
|
+
/** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records,
|
|
166
|
+
* then the block prints. */
|
|
162
167
|
async function cmdRecall(hippoRoot, tenantId, query, flags) {
|
|
163
168
|
requireInit(hippoRoot);
|
|
164
169
|
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
@@ -173,11 +178,13 @@ async function cmdRecall(hippoRoot, tenantId, query, flags) {
|
|
|
173
178
|
cliCore: {
|
|
174
179
|
rank: rankOptions(query, flags, o, priced),
|
|
175
180
|
// The global store is a second source for this surface alone, and never when it is the store being searched.
|
|
176
|
-
sources:
|
|
181
|
+
sources: globalRoot !== hippoRoot && priced.globalOn
|
|
182
|
+
? { globalRoot, globalStore: cliApiContext(globalRoot, tenantId).store }
|
|
183
|
+
: undefined,
|
|
177
184
|
note: (line) => printError(line),
|
|
178
185
|
hostSessionId: hostSessionId(),
|
|
179
|
-
show: (rank, planning) => {
|
|
180
|
-
slot.presented = presentRecall(ctx, query, o, { rank, ...priced }, planning);
|
|
186
|
+
show: async (rank, planning) => {
|
|
187
|
+
slot.presented = await presentRecall(ctx, query, o, { rank, ...priced }, planning);
|
|
181
188
|
return slot.presented.shown;
|
|
182
189
|
},
|
|
183
190
|
},
|
|
@@ -197,16 +204,14 @@ function parseRecallOptions(ctx, flags) {
|
|
|
197
204
|
const includeSuperseded = boolFlag(flags, 'include-superseded');
|
|
198
205
|
const asOf = parseAsOfFlag(flags);
|
|
199
206
|
// The explicit --scope is the filter input; the detected scope only boosts, so auto-detection never filters.
|
|
200
|
-
const explicitScope = flags
|
|
207
|
+
const explicitScope = stringFlagOrExit(flags, 'scope') ?? null;
|
|
201
208
|
const setting = cliRecallSetting(ctx, explicitScope);
|
|
202
209
|
const config = loadConfig(ctx.hippoRoot);
|
|
203
210
|
const minResults = numberFlag(flags, 'min-results');
|
|
204
211
|
const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
|
|
205
212
|
const late = parseRecallLateFlags(flags);
|
|
206
|
-
const goalTag = flags
|
|
207
|
-
const sessionId = (flags
|
|
208
|
-
? String(flags['session-id'])
|
|
209
|
-
: envHippoSessionId() ?? '').trim();
|
|
213
|
+
const goalTag = stringFlagOrExit(flags, 'goal') ?? '';
|
|
214
|
+
const sessionId = (stringFlagOrExit(flags, 'session-id') ?? envHippoSessionId() ?? '').trim();
|
|
210
215
|
return {
|
|
211
216
|
budget, limit, asJson, showWhy, includeSuperseded, asOf, setting, tenantId: ctx.tenantId,
|
|
212
217
|
explicitScope, config, minResults, graphStream, late, goalTag, sessionId,
|
|
@@ -226,8 +231,14 @@ function rankOptions(query, flags, o, priced) {
|
|
|
226
231
|
// Engines spend the budget on the text each result prints as, less the header, so selection and print agree.
|
|
227
232
|
const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
|
|
228
233
|
return {
|
|
229
|
-
budget: entryBudget,
|
|
230
|
-
|
|
234
|
+
budget: entryBudget,
|
|
235
|
+
cost: priced.printCost,
|
|
236
|
+
limit: o.limit,
|
|
237
|
+
why: o.showWhy,
|
|
238
|
+
includeSuperseded: o.includeSuperseded,
|
|
239
|
+
asOf: o.asOf,
|
|
240
|
+
explicitScope: o.explicitScope,
|
|
241
|
+
activeScope: o.setting.activeScope,
|
|
231
242
|
search: {
|
|
232
243
|
...engineFlags(flags, o.config),
|
|
233
244
|
multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled,
|
|
@@ -253,23 +264,17 @@ function recallHinter(query, o, rank) {
|
|
|
253
264
|
// HIPPO_ANCHORING=off and HIPPO_AVAILABILITY=off skip the work entirely.
|
|
254
265
|
const anchorRing = sessionRing('cli', tenantId, sessionId);
|
|
255
266
|
const queryHash = hashQueryText(query);
|
|
256
|
-
const
|
|
257
|
-
? [...rank.localEntries, ...rank.globalEntries].map((e) => ({ id: e.id, created: e.created }))
|
|
258
|
-
: null;
|
|
267
|
+
const pool = availabilityPool(() => [...rank.localEntries, ...rank.globalEntries]);
|
|
259
268
|
const hintsFor = (list, held) => {
|
|
260
|
-
const anchoring
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
: null;
|
|
264
|
-
const summary = {
|
|
265
|
-
// The published total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
|
|
269
|
+
const { anchoring, availability } = detectRecallHints({ list, pool, anchorRing, queryHash });
|
|
270
|
+
const summary = suppressionSummary({
|
|
271
|
+
// The total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
|
|
266
272
|
totalCandidates: rank.totalCandidates + rank.graphAdded,
|
|
267
273
|
droppedPreRank: rank.droppedPreRank + held,
|
|
268
274
|
droppedByBudget: Math.max(0, rank.totalCandidates + rank.graphAdded - rank.droppedPreRank - held - list.length),
|
|
269
275
|
summarySubstitutionsAdded: 0,
|
|
270
276
|
freshTailAdded: 0,
|
|
271
|
-
|
|
272
|
-
};
|
|
277
|
+
}, anchoring);
|
|
273
278
|
return { anchoring, availability, summary };
|
|
274
279
|
};
|
|
275
280
|
return { anchorRing, hintsFor };
|
|
@@ -325,59 +330,89 @@ function renderRecallBlock(list, h, v) {
|
|
|
325
330
|
console.log(entryText(r));
|
|
326
331
|
}));
|
|
327
332
|
}
|
|
328
|
-
/** Pays the continuity sections
|
|
329
|
-
function
|
|
330
|
-
const { budget } = o;
|
|
333
|
+
/** Pays the continuity sections in print order after the header; one that does not fit is dropped. */
|
|
334
|
+
function payContinuity(loaded, sectionBudget) {
|
|
331
335
|
let { activeSnapshot, sessionHandoff, recentSessionEvents } = loaded;
|
|
332
|
-
|
|
333
|
-
const sectionBudget = budget - printedTokens(recallHeading(budget, budget, query));
|
|
334
|
-
let left = sectionBudget;
|
|
335
|
-
const pays = (tokens) => { if (tokens > left)
|
|
336
|
-
return false; left -= tokens; return true; };
|
|
336
|
+
const { pays, left } = tokenPurse(sectionBudget);
|
|
337
337
|
if (activeSnapshot && !pays(printedTokens(snapshotText(activeSnapshot))))
|
|
338
338
|
activeSnapshot = null;
|
|
339
339
|
if (sessionHandoff && !pays(printedTokens(handoffText(sessionHandoff))))
|
|
340
340
|
sessionHandoff = null;
|
|
341
|
-
if (recentSessionEvents.length > 0 && !pays(printedTokens(sessionTrailText(recentSessionEvents))))
|
|
341
|
+
if (recentSessionEvents.length > 0 && !pays(printedTokens(sessionTrailText(recentSessionEvents)))) {
|
|
342
342
|
recentSessionEvents = [];
|
|
343
|
-
|
|
343
|
+
}
|
|
344
344
|
const continuity = { activeSnapshot, sessionHandoff, recentSessionEvents };
|
|
345
|
+
return { continuity, continuityTokens: sectionBudget - left() };
|
|
346
|
+
}
|
|
347
|
+
/** Drops the lowest-ranked entry until the whole block, hints and header included, fits the budget. */
|
|
348
|
+
function renderWithinBudget(fitted, hintsFor, view, floor, budget) {
|
|
349
|
+
// Copies go after every cut, so a merged row the budget drops never hides its sources.
|
|
350
|
+
const render = (kept) => {
|
|
351
|
+
const results = dropHeldCopies(fitted.slice(0, kept), (r) => r.entry);
|
|
352
|
+
const hints = hintsFor(results, kept - results.length);
|
|
353
|
+
return { results, hints, recallText: renderRecallBlock(results, hints, view) };
|
|
354
|
+
};
|
|
355
|
+
return shrinkToFit(fitted.length, floor, budget, render, (r) => r.recallText);
|
|
356
|
+
}
|
|
357
|
+
/** Pays the continuity sections and the plan hint first, then fits the memories into what is left. */
|
|
358
|
+
function fitRecallBlock(query, o, ranked, loaded, planning) {
|
|
359
|
+
const { budget } = o;
|
|
360
|
+
// Sections print ahead of the memories, so they are paid first, after the header; one that does not fit is dropped.
|
|
361
|
+
const sectionBudget = budget - printedTokens(recallHeading(budget, budget, query));
|
|
362
|
+
const { continuity, continuityTokens } = payContinuity(loaded, sectionBudget);
|
|
363
|
+
let left = sectionBudget - continuityTokens;
|
|
364
|
+
const { activeSnapshot, sessionHandoff, recentSessionEvents } = continuity;
|
|
345
365
|
const hasContinuity = activeSnapshot !== null || sessionHandoff !== null || recentSessionEvents.length > 0;
|
|
346
366
|
// The baserate hint depends on the query alone, so `retrieve` evaluates it and this only prices the line.
|
|
347
367
|
const planText = planningLine(planning);
|
|
348
|
-
const
|
|
349
|
-
const
|
|
350
|
-
|
|
368
|
+
const planTokens = planText === null ? 0 : printedTokens(`${planText}\n`);
|
|
369
|
+
const showPlan = planText !== null && planTokens <= left;
|
|
370
|
+
if (showPlan)
|
|
371
|
+
left -= planTokens;
|
|
372
|
+
const cmdPlanningFallacyHint = showPlan ? (planning.hint ?? null) : null;
|
|
373
|
+
const cmdPlanningFallacyWatching = showPlan ? (planning.watching ?? null) : null;
|
|
351
374
|
// The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
|
|
352
375
|
const floor = o.minResults ?? 1;
|
|
353
376
|
const fitted = fitRecallRows(ranked.rank.results, left, floor, ranked.printCost);
|
|
354
|
-
// Copies go after every cut, so a merged row the budget drops never hides its sources.
|
|
355
|
-
const shown = (n) => dropHeldCopies(fitted.slice(0, n), (r) => r.entry);
|
|
356
|
-
let kept = fitted.length;
|
|
357
|
-
let results = shown(kept);
|
|
358
377
|
const { anchorRing, hintsFor } = recallHinter(query, o, ranked.rank);
|
|
359
|
-
const view = {
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
}
|
|
369
|
-
return {
|
|
378
|
+
const view = {
|
|
379
|
+
query,
|
|
380
|
+
showWhy: o.showWhy,
|
|
381
|
+
showPlan,
|
|
382
|
+
planText,
|
|
383
|
+
hasContinuity,
|
|
384
|
+
continuity,
|
|
385
|
+
entryText: ranked.entryText,
|
|
386
|
+
};
|
|
387
|
+
const { results, hints, recallText } = renderWithinBudget(fitted, hintsFor, view, floor, budget);
|
|
388
|
+
return {
|
|
389
|
+
results,
|
|
390
|
+
hints,
|
|
391
|
+
recallText,
|
|
392
|
+
continuity,
|
|
393
|
+
continuityTokens,
|
|
394
|
+
cmdPlanningFallacyHint,
|
|
395
|
+
cmdPlanningFallacyWatching,
|
|
396
|
+
anchorRing,
|
|
397
|
+
};
|
|
370
398
|
}
|
|
371
|
-
/** The presenter `retrieve` calls once ranking ends: fits and
|
|
372
|
-
|
|
399
|
+
/** The presenter `retrieve` calls once ranking ends: fits and
|
|
400
|
+
* renders the block, and names the rows and hint rows to record. */
|
|
401
|
+
async function presentRecall(ctx, query, o, ranked, planning) {
|
|
373
402
|
// Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet.
|
|
374
|
-
const
|
|
403
|
+
const loaded = await loadCliRecallContinuity(ctx, o.setting, o.includeContinuity);
|
|
404
|
+
const fit = fitRecallBlock(query, o, ranked, loaded, planning);
|
|
375
405
|
const { results, hints } = fit;
|
|
376
406
|
const text = recallOutput(query, o, fit, ranked.isGlobal);
|
|
377
407
|
const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
|
|
378
|
-
query,
|
|
408
|
+
query,
|
|
409
|
+
ring: fit.anchorRing,
|
|
410
|
+
topId: results[0]?.entry.id ?? null,
|
|
411
|
+
anchoring: hints.anchoring,
|
|
412
|
+
availability: hints.availability,
|
|
379
413
|
});
|
|
380
|
-
// The token ledger books the text this recall prints, on whichever
|
|
414
|
+
// The token ledger books the text this recall prints, on whichever
|
|
415
|
+
// exit it takes; the ring keeps the hint the final detect made.
|
|
381
416
|
return { text, shown: { results, audit, tokens: estimateTokens(text), anchoredOn: hints.anchoring?.memoryId } };
|
|
382
417
|
}
|
|
383
418
|
/** What this recall prints: the JSON object, or the fitted block. */
|
|
@@ -386,7 +421,9 @@ function recallOutput(query, o, fit, isGlobal) {
|
|
|
386
421
|
const { results, recallText } = fit;
|
|
387
422
|
if (results.length === 0) {
|
|
388
423
|
// HTTP and MCP surface the hint whatever matched, so the zero-result JSON keeps it for parity.
|
|
389
|
-
return asJson
|
|
424
|
+
return asJson
|
|
425
|
+
? JSON.stringify({ query, results: [], total: 0, ...recallJsonTail(fit, includeContinuity) })
|
|
426
|
+
: recallText;
|
|
390
427
|
}
|
|
391
428
|
if (!asJson)
|
|
392
429
|
return recallText;
|
|
@@ -426,8 +463,7 @@ function recallJsonTail(fit, includeContinuity) {
|
|
|
426
463
|
export async function handleRecall({ hippoRoot, tenantId, args, flags }) {
|
|
427
464
|
const query = args.join(' ').trim();
|
|
428
465
|
if (!query) {
|
|
429
|
-
|
|
430
|
-
throw new CliExit(1);
|
|
466
|
+
fail('Please provide a search query.');
|
|
431
467
|
}
|
|
432
468
|
await cmdRecall(hookStoreRoot(hippoRoot), tenantId, query, flags);
|
|
433
469
|
}
|