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/recall.js
CHANGED
|
@@ -1,41 +1,31 @@
|
|
|
1
1
|
// The `hippo recall` verb; main() loads it lazily from the command table.
|
|
2
2
|
import { envHippoSessionId } from '../util/env.js';
|
|
3
|
-
import {
|
|
4
|
-
import { isInitialized } from '../store/open.js';
|
|
5
|
-
import { loadIndex } from '../store/index-and-stats.js';
|
|
6
|
-
import { loadActiveTaskSnapshot, listSessionEvents } from '../store/sessions.js';
|
|
7
|
-
import { loadLatestHandoff } from '../store/handoffs.js';
|
|
8
|
-
import { passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
9
|
-
import { fitBudget } from '../search/finalize.js';
|
|
10
|
-
import { explainMatch } from '../search/explain.js';
|
|
3
|
+
import { Layer } from '../core/memory.js';
|
|
11
4
|
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
12
5
|
import { loadConfig } from '../core/config.js';
|
|
13
6
|
import { estimateTokens } from '../util/token-text.js';
|
|
14
7
|
import { dropHeldCopies } from '../util/same-text.js';
|
|
15
|
-
import { isGlobalStoreRoot } from '../core/project-identity.js';
|
|
16
|
-
import { detectScope } from '../sharing/scope.js';
|
|
17
|
-
import { getGlobalRoot } from '../sharing/shared.js';
|
|
18
8
|
import * as api from '../api/index.js';
|
|
19
9
|
import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
|
|
20
|
-
import {
|
|
10
|
+
import { sessionRing, shownRecallRows } from '../api/recall-record.js';
|
|
21
11
|
import { detectAvailabilityBias } from '../api/availability.js';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import { getReranker } from '../rerankers/index.js';
|
|
25
|
-
import { JEV_DEFAULT_TOP_K } from '../rerankers/jev.js';
|
|
26
|
-
import { isClefModel } from '../rerankers/clef.js';
|
|
12
|
+
import { cliRecallOrigin, cliRecallReranker, cliRecallSetting, DEFAULT_MAX_NEIGHBORS, fitRecallRows, loadCliRecallContinuity, MAX_HOPS, recallJsonRow, } from '../api/recall-cli.js';
|
|
13
|
+
import { cliApiContext } from './api-context.js';
|
|
27
14
|
import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
|
|
28
15
|
import { printError } from './output.js';
|
|
29
|
-
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue } from './flag-values.js';
|
|
16
|
+
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue, isBooleanFlag, numberFlag, } from './flag-values.js';
|
|
30
17
|
import { requireInit } from './shared.js';
|
|
31
18
|
import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
|
|
32
19
|
import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
|
|
20
|
+
import { CliExit } from './exit.js';
|
|
33
21
|
// JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
|
|
34
22
|
function planningLine(p) {
|
|
35
23
|
if (p.hint)
|
|
36
24
|
return `Planning fallacy hint (class: ${p.hint.classTag}): ${p.hint.baserateSummary} [detected: ${JSON.stringify(p.hint.detectedPhrase)}]`;
|
|
37
|
-
if (p.watching)
|
|
38
|
-
return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion}
|
|
25
|
+
if (p.watching) {
|
|
26
|
+
return `Planning fallacy: watching this query (reason: ${p.watching.reason}). ${p.watching.suggestion} ` +
|
|
27
|
+
`[detected: ${JSON.stringify(p.watching.detectedPhrase)}]`;
|
|
28
|
+
}
|
|
39
29
|
return null;
|
|
40
30
|
}
|
|
41
31
|
function cutoffLine(shown, s) {
|
|
@@ -56,14 +46,14 @@ function cutoffLine(shown, s) {
|
|
|
56
46
|
function failWith(message) {
|
|
57
47
|
return () => {
|
|
58
48
|
printError(message);
|
|
59
|
-
|
|
49
|
+
throw new CliExit(1);
|
|
60
50
|
};
|
|
61
51
|
}
|
|
62
52
|
/** `--graph-stream` implies rrf fusion as well as the graph stream; the CLI fuses the local store only. */
|
|
63
53
|
function parseGraphStreamFlags(flags) {
|
|
64
54
|
let hops;
|
|
65
55
|
if (flags['graph-hops'] !== undefined) {
|
|
66
|
-
if (
|
|
56
|
+
if (isBooleanFlag(flags['graph-hops']))
|
|
67
57
|
failWith(`--graph-hops requires an integer value 1..${MAX_HOPS} (e.g. --graph-hops 2).`)();
|
|
68
58
|
const h = Number(flags['graph-hops']);
|
|
69
59
|
if (!Number.isInteger(h) || h < 1 || h > MAX_HOPS) {
|
|
@@ -73,7 +63,7 @@ function parseGraphStreamFlags(flags) {
|
|
|
73
63
|
}
|
|
74
64
|
let seeds;
|
|
75
65
|
if (flags['graph-seeds'] !== undefined) {
|
|
76
|
-
if (
|
|
66
|
+
if (isBooleanFlag(flags['graph-seeds']))
|
|
77
67
|
failWith('--graph-seeds requires a positive integer value (e.g. --graph-seeds 10).')();
|
|
78
68
|
const s = Number(flags['graph-seeds']);
|
|
79
69
|
if (!Number.isInteger(s) || s < 1)
|
|
@@ -86,7 +76,7 @@ function parseHopsFlags(flags) {
|
|
|
86
76
|
if (flags['hops'] === undefined)
|
|
87
77
|
return {};
|
|
88
78
|
// A value-less `--hops` parses as true, and Number(true) === 1 would silently run a 1-hop expansion.
|
|
89
|
-
if (
|
|
79
|
+
if (isBooleanFlag(flags['hops']))
|
|
90
80
|
return { fail: failWith(`--hops requires an integer value 0..${MAX_HOPS} (e.g. --hops 1).`) };
|
|
91
81
|
const hops = Number(flags['hops']);
|
|
92
82
|
if (!Number.isInteger(hops) || hops < 0 || hops > MAX_HOPS) {
|
|
@@ -95,7 +85,7 @@ function parseHopsFlags(flags) {
|
|
|
95
85
|
const raw = flags['max-neighbors'];
|
|
96
86
|
if (raw === undefined)
|
|
97
87
|
return { value: { hops, maxNeighbors: DEFAULT_MAX_NEIGHBORS } };
|
|
98
|
-
if (
|
|
88
|
+
if (isBooleanFlag(raw))
|
|
99
89
|
return { fail: failWith(`--max-neighbors requires an integer value 1..200.`) };
|
|
100
90
|
const maxNeighbors = Number(raw);
|
|
101
91
|
if (!Number.isInteger(maxNeighbors) || maxNeighbors < 1 || maxNeighbors > 200) {
|
|
@@ -105,18 +95,19 @@ function parseHopsFlags(flags) {
|
|
|
105
95
|
}
|
|
106
96
|
function parseRerankerFlag(flags) {
|
|
107
97
|
const name = flags['reranker'] !== undefined ? String(flags['reranker']).trim() : '';
|
|
108
|
-
let
|
|
98
|
+
let picked;
|
|
109
99
|
try {
|
|
110
|
-
|
|
100
|
+
picked = cliRecallReranker(name);
|
|
111
101
|
}
|
|
112
102
|
catch (err) {
|
|
113
103
|
// An unknown name throws to the top-level handler, as it did when the lookup sat mid-pipeline.
|
|
114
104
|
return { fail: () => { throw err; } };
|
|
115
105
|
}
|
|
116
|
-
if (!
|
|
106
|
+
if (!picked)
|
|
117
107
|
return {};
|
|
108
|
+
const { fn } = picked;
|
|
118
109
|
const raw = flags['reranker-top-k'];
|
|
119
|
-
const topK = raw !== undefined ? Number(raw) :
|
|
110
|
+
const topK = raw !== undefined ? Number(raw) : picked.defaultTopK;
|
|
120
111
|
// slice(0, -1) would quietly drop the last candidate rather than fail.
|
|
121
112
|
if (!Number.isInteger(topK) || topK < 1) {
|
|
122
113
|
return { fail: failWith(`Invalid --reranker-top-k: "${String(raw)}". Must be a positive integer.`) };
|
|
@@ -168,23 +159,25 @@ function parseRecallLateFlags(flags) {
|
|
|
168
159
|
};
|
|
169
160
|
}
|
|
170
161
|
/** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
|
|
171
|
-
|
|
162
|
+
async function cmdRecall(hippoRoot, tenantId, query, flags) {
|
|
172
163
|
requireInit(hippoRoot);
|
|
173
|
-
const
|
|
174
|
-
const
|
|
164
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
165
|
+
const o = parseRecallOptions(ctx, flags);
|
|
166
|
+
const priced = priceRecallEntries(ctx, query, o);
|
|
167
|
+
const { globalRoot } = o.setting;
|
|
175
168
|
const slot = {};
|
|
176
|
-
await api.retrieve(
|
|
169
|
+
await api.retrieve(ctx, {
|
|
177
170
|
query,
|
|
178
171
|
goalTag: o.goalTag,
|
|
179
172
|
sessionId: o.sessionId,
|
|
180
173
|
cliCore: {
|
|
181
174
|
rank: rankOptions(query, flags, o, priced),
|
|
182
175
|
// The global store is a second source for this surface alone, and never when it is the store being searched.
|
|
183
|
-
sources: { globalRoot:
|
|
176
|
+
sources: { globalRoot: globalRoot !== hippoRoot && priced.globalOn ? globalRoot : undefined },
|
|
184
177
|
note: (line) => printError(line),
|
|
185
178
|
hostSessionId: hostSessionId(),
|
|
186
179
|
show: (rank, planning) => {
|
|
187
|
-
slot.presented = presentRecall(
|
|
180
|
+
slot.presented = presentRecall(ctx, query, o, { rank, ...priced }, planning);
|
|
188
181
|
return slot.presented.shown;
|
|
189
182
|
},
|
|
190
183
|
},
|
|
@@ -193,32 +186,21 @@ export async function cmdRecall(hippoRoot, query, flags) {
|
|
|
193
186
|
o.late.error?.fail();
|
|
194
187
|
if (!slot.presented)
|
|
195
188
|
throw new Error('recall ranked but presented nothing');
|
|
196
|
-
|
|
197
|
-
const { results, hints } = fit;
|
|
198
|
-
// Fed after the final detect, so the next recall's cooldown reads the top row and hint this one showed.
|
|
199
|
-
if (fit.anchorRing)
|
|
200
|
-
noteRecall(fit.anchorRing, query, results[0]?.entry.id ?? null, hints.anchoring?.memoryId);
|
|
201
|
-
console.log(text);
|
|
189
|
+
console.log(slot.presented.text);
|
|
202
190
|
}
|
|
203
191
|
/** Every flag recall reads, parsed in the order the single-body command checked them. */
|
|
204
|
-
function parseRecallOptions(
|
|
192
|
+
function parseRecallOptions(ctx, flags) {
|
|
205
193
|
const budget = parseBudgetFlag(flags['budget'], DEFAULT_RECALL_BUDGET);
|
|
206
194
|
const limit = parseLimitFlag(flags['limit']);
|
|
207
195
|
const asJson = boolFlag(flags, 'json');
|
|
208
196
|
const showWhy = boolFlag(flags, 'why');
|
|
209
197
|
const includeSuperseded = boolFlag(flags, 'include-superseded');
|
|
210
198
|
const asOf = parseAsOfFlag(flags);
|
|
211
|
-
const globalRoot = getGlobalRoot();
|
|
212
|
-
const primaryIsGlobal = isGlobalStoreRoot(hippoRoot);
|
|
213
|
-
// Cross-tenant rows must never surface, so the tenant is resolved once and threaded through every load.
|
|
214
|
-
const tenantId = resolveTenantId({});
|
|
215
199
|
// The explicit --scope is the filter input; the detected scope only boosts, so auto-detection never filters.
|
|
216
200
|
const explicitScope = flags['scope'] !== undefined ? String(flags['scope']).trim() : null;
|
|
217
|
-
const
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
: undefined;
|
|
221
|
-
const activeScope = explicitScope || detectScope();
|
|
201
|
+
const setting = cliRecallSetting(ctx, explicitScope);
|
|
202
|
+
const config = loadConfig(ctx.hippoRoot);
|
|
203
|
+
const minResults = numberFlag(flags, 'min-results');
|
|
222
204
|
const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
|
|
223
205
|
const late = parseRecallLateFlags(flags);
|
|
224
206
|
const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
|
|
@@ -226,19 +208,18 @@ function parseRecallOptions(hippoRoot, flags) {
|
|
|
226
208
|
? String(flags['session-id'])
|
|
227
209
|
: envHippoSessionId() ?? '').trim();
|
|
228
210
|
return {
|
|
229
|
-
budget, limit, asJson, showWhy, includeSuperseded, asOf,
|
|
230
|
-
explicitScope, config, minResults,
|
|
211
|
+
budget, limit, asJson, showWhy, includeSuperseded, asOf, setting, tenantId: ctx.tenantId,
|
|
212
|
+
explicitScope, config, minResults, graphStream, late, goalTag, sessionId,
|
|
231
213
|
includeContinuity: boolFlag(flags, 'continuity'),
|
|
232
214
|
};
|
|
233
215
|
}
|
|
234
216
|
/** Each entry priced as the line it prints, with the source marker `--why` shows. */
|
|
235
|
-
function priceRecallEntries(
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
const isGlobal = (r) => o.primaryIsGlobal || (globalOn && !localIndex.entries[r.entry.id]);
|
|
217
|
+
function priceRecallEntries(ctx, query, o) {
|
|
218
|
+
const origin = cliRecallOrigin(ctx, o.setting);
|
|
219
|
+
const isGlobal = (r) => origin.isGlobal(r.entry.id);
|
|
239
220
|
const entryText = (r) => recallEntryText(r, query, o.showWhy, isGlobal(r));
|
|
240
221
|
const printCost = (r) => printedTokens(entryText(r));
|
|
241
|
-
return { globalOn, isGlobal, entryText, printCost };
|
|
222
|
+
return { globalOn: origin.globalOn, isGlobal, entryText, printCost };
|
|
242
223
|
}
|
|
243
224
|
/** The ranking core's options; a late flag error halts it before the stage that reads the flag. */
|
|
244
225
|
function rankOptions(query, flags, o, priced) {
|
|
@@ -246,8 +227,14 @@ function rankOptions(query, flags, o, priced) {
|
|
|
246
227
|
const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
|
|
247
228
|
return {
|
|
248
229
|
budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
|
|
249
|
-
explicitScope: o.explicitScope, activeScope: o.activeScope,
|
|
250
|
-
search: {
|
|
230
|
+
explicitScope: o.explicitScope, activeScope: o.setting.activeScope,
|
|
231
|
+
search: {
|
|
232
|
+
...engineFlags(flags, o.config),
|
|
233
|
+
multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled,
|
|
234
|
+
graphStream: o.graphStream,
|
|
235
|
+
minResults: o.minResults,
|
|
236
|
+
explain: false,
|
|
237
|
+
},
|
|
251
238
|
graphHops: o.late.graphHops,
|
|
252
239
|
evcAdaptive: boolFlag(flags, 'evc-adaptive'),
|
|
253
240
|
filterConflicts: boolFlag(flags, 'filter-conflicts'),
|
|
@@ -260,27 +247,6 @@ function rankOptions(query, flags, o, priced) {
|
|
|
260
247
|
haltBefore: o.late.error?.stage,
|
|
261
248
|
};
|
|
262
249
|
}
|
|
263
|
-
/** Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet. */
|
|
264
|
-
function loadRecallContinuity(hippoRoot, o) {
|
|
265
|
-
if (!o.includeContinuity || o.primaryIsGlobal)
|
|
266
|
-
return { activeSnapshot: null, sessionHandoff: null, recentSessionEvents: [] };
|
|
267
|
-
const rawSnapshot = loadActiveTaskSnapshot(hippoRoot, o.tenantId);
|
|
268
|
-
const sessionId = rawSnapshot?.session_id ?? undefined;
|
|
269
|
-
const rawHandoff = sessionId
|
|
270
|
-
? loadLatestHandoff(hippoRoot, o.tenantId, sessionId)
|
|
271
|
-
: null;
|
|
272
|
-
const rawEvents = sessionId
|
|
273
|
-
? listSessionEvents(hippoRoot, o.tenantId, { session_id: sessionId, limit: 5 })
|
|
274
|
-
: [];
|
|
275
|
-
// The same shared scope rule as api.recall; the active scope merges --scope and detectScope().
|
|
276
|
-
const effectiveScope = o.activeScope || undefined;
|
|
277
|
-
const rowScope = (r) => r?.scope ?? null;
|
|
278
|
-
return {
|
|
279
|
-
activeSnapshot: rawSnapshot && passesScopeFilterForRecall(rowScope(rawSnapshot), effectiveScope) ? rawSnapshot : null,
|
|
280
|
-
sessionHandoff: rawHandoff && passesScopeFilterForRecall(rowScope(rawHandoff), effectiveScope) ? rawHandoff : null,
|
|
281
|
-
recentSessionEvents: rawEvents.filter((e) => passesScopeFilterForRecall(rowScope(e), effectiveScope)),
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
250
|
/** Each pipeline computes its hints over the list it returns, so they follow the list as it shrinks. */
|
|
285
251
|
function recallHinter(query, o, rank) {
|
|
286
252
|
const { tenantId, sessionId } = o;
|
|
@@ -295,7 +261,7 @@ function recallHinter(query, o, rank) {
|
|
|
295
261
|
const availability = availabilityPool
|
|
296
262
|
? detectAvailabilityBias({ topK: list.map((r) => ({ id: r.entry.id, created: r.entry.created })), pool: availabilityPool })
|
|
297
263
|
: null;
|
|
298
|
-
const summary =
|
|
264
|
+
const summary = {
|
|
299
265
|
// The published total includes graph-surfaced rows, so total == preRank + byBudget + returned holds for callers.
|
|
300
266
|
totalCandidates: rank.totalCandidates + rank.graphAdded,
|
|
301
267
|
droppedPreRank: rank.droppedPreRank + held,
|
|
@@ -303,7 +269,7 @@ function recallHinter(query, o, rank) {
|
|
|
303
269
|
summarySubstitutionsAdded: 0,
|
|
304
270
|
freshTailAdded: 0,
|
|
305
271
|
suppressedByInterference: anchoring?.reason === 'memory_dominance' ? 1 : 0, // a query_repeat is a re-ask, not competition
|
|
306
|
-
}
|
|
272
|
+
};
|
|
307
273
|
return { anchoring, availability, summary };
|
|
308
274
|
};
|
|
309
275
|
return { anchorRing, hintsFor };
|
|
@@ -384,7 +350,7 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
|
|
|
384
350
|
const cmdPlanningFallacyWatching = showPlan ? planning.watching ?? null : null;
|
|
385
351
|
// The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
|
|
386
352
|
const floor = o.minResults ?? 1;
|
|
387
|
-
const fitted =
|
|
353
|
+
const fitted = fitRecallRows(ranked.rank.results, left, floor, ranked.printCost);
|
|
388
354
|
// Copies go after every cut, so a merged row the budget drops never hides its sources.
|
|
389
355
|
const shown = (n) => dropHeldCopies(fitted.slice(0, n), (r) => r.entry);
|
|
390
356
|
let kept = fitted.length;
|
|
@@ -403,15 +369,16 @@ function fitRecallBlock(query, o, ranked, loaded, planning) {
|
|
|
403
369
|
return { results, hints, recallText, continuity, continuityTokens, cmdPlanningFallacyHint, cmdPlanningFallacyWatching, anchorRing };
|
|
404
370
|
}
|
|
405
371
|
/** The presenter `retrieve` calls once ranking ends: fits and renders the block, and names the rows and hint rows to record. */
|
|
406
|
-
function presentRecall(
|
|
407
|
-
|
|
372
|
+
function presentRecall(ctx, query, o, ranked, planning) {
|
|
373
|
+
// Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet.
|
|
374
|
+
const fit = fitRecallBlock(query, o, ranked, loadCliRecallContinuity(ctx, o.setting, o.includeContinuity), planning);
|
|
408
375
|
const { results, hints } = fit;
|
|
409
376
|
const text = recallOutput(query, o, fit, ranked.isGlobal);
|
|
410
377
|
const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
|
|
411
378
|
query, ring: fit.anchorRing, topId: results[0]?.entry.id ?? null, anchoring: hints.anchoring, availability: hints.availability,
|
|
412
379
|
});
|
|
413
|
-
// The token ledger books the text this recall prints, on whichever exit it takes.
|
|
414
|
-
return {
|
|
380
|
+
// The token ledger books the text this recall prints, on whichever exit it takes; the ring keeps the hint the final detect made.
|
|
381
|
+
return { text, shown: { results, audit, tokens: estimateTokens(text), anchoredOn: hints.anchoring?.memoryId } };
|
|
415
382
|
}
|
|
416
383
|
/** What this recall prints: the JSON object, or the fitted block. */
|
|
417
384
|
function recallOutput(query, o, fit, isGlobal) {
|
|
@@ -437,13 +404,15 @@ function recallJsonTail(fit, includeContinuity) {
|
|
|
437
404
|
const { cmdPlanningFallacyHint, cmdPlanningFallacyWatching, continuityTokens } = fit;
|
|
438
405
|
const { activeSnapshot, sessionHandoff, recentSessionEvents } = fit.continuity;
|
|
439
406
|
const { anchoring: cmdAnchoringHint, availability: cmdAvailabilityHint, summary: cmdSuppressionSummary } = fit.hints;
|
|
440
|
-
const tail = {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
407
|
+
const tail = { suppressionSummary: cmdSuppressionSummary };
|
|
408
|
+
if (cmdPlanningFallacyHint)
|
|
409
|
+
tail.planningFallacyHint = cmdPlanningFallacyHint;
|
|
410
|
+
if (cmdPlanningFallacyWatching)
|
|
411
|
+
tail.planningFallacyWatching = cmdPlanningFallacyWatching;
|
|
412
|
+
if (cmdAnchoringHint)
|
|
413
|
+
tail.anchoringHint = cmdAnchoringHint;
|
|
414
|
+
if (cmdAvailabilityHint)
|
|
415
|
+
tail.availabilityHint = cmdAvailabilityHint;
|
|
447
416
|
if (includeContinuity) {
|
|
448
417
|
tail.continuity = {
|
|
449
418
|
activeSnapshot,
|
|
@@ -454,51 +423,12 @@ function recallJsonTail(fit, includeContinuity) {
|
|
|
454
423
|
}
|
|
455
424
|
return tail;
|
|
456
425
|
}
|
|
457
|
-
function
|
|
458
|
-
const base = {
|
|
459
|
-
id: r.entry.id,
|
|
460
|
-
score: r.score,
|
|
461
|
-
strength: r.entry.strength,
|
|
462
|
-
tokens: r.tokens,
|
|
463
|
-
tags: r.entry.tags,
|
|
464
|
-
content: r.entry.content,
|
|
465
|
-
layer: r.entry.layer,
|
|
466
|
-
};
|
|
467
|
-
if (r.entry.layer === Layer.Trace) {
|
|
468
|
-
base.trace_outcome = r.entry.trace_outcome;
|
|
469
|
-
}
|
|
470
|
-
if (r.entry.superseded_by) {
|
|
471
|
-
base.superseded = true;
|
|
472
|
-
base.superseded_by = r.entry.superseded_by;
|
|
473
|
-
}
|
|
474
|
-
if (r.graphVia) {
|
|
475
|
-
base.graphVia = r.graphVia;
|
|
476
|
-
}
|
|
477
|
-
if (showWhy) {
|
|
478
|
-
const explanation = explainMatch(query, r);
|
|
479
|
-
const facets = confidenceFacets(r.entry);
|
|
480
|
-
base.confidence = facets.tier;
|
|
481
|
-
base.aged_out = facets.agedOut;
|
|
482
|
-
base.source = isGlobal ? 'global' : 'local';
|
|
483
|
-
base.reason = explanation.reason;
|
|
484
|
-
base.bm25 = r.bm25;
|
|
485
|
-
base.cosine = r.cosine;
|
|
486
|
-
if (explanation.envelope) {
|
|
487
|
-
base.envelope = explanation.envelope;
|
|
488
|
-
}
|
|
489
|
-
// The ordered lifecycle re-ranking steps, so a caller can see why a row moved.
|
|
490
|
-
if (r.rerankTrace && r.rerankTrace.length > 0) {
|
|
491
|
-
base.rerankTrace = r.rerankTrace;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
return base;
|
|
495
|
-
}
|
|
496
|
-
export async function handleRecall({ hippoRoot, args, flags }) {
|
|
426
|
+
export async function handleRecall({ hippoRoot, tenantId, args, flags }) {
|
|
497
427
|
const query = args.join(' ').trim();
|
|
498
428
|
if (!query) {
|
|
499
429
|
printError('Please provide a search query.');
|
|
500
|
-
|
|
430
|
+
throw new CliExit(1);
|
|
501
431
|
}
|
|
502
|
-
await cmdRecall(hookStoreRoot(hippoRoot), query, flags);
|
|
432
|
+
await cmdRecall(hookStoreRoot(hippoRoot), tenantId, query, flags);
|
|
503
433
|
}
|
|
504
434
|
//# sourceMappingURL=recall.js.map
|
package/dist/cli/refine-llm.d.ts
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The rule-based `mergeContents` in consolidate.ts produces functional but
|
|
5
|
-
* ugly semantic memories — typically "[Consolidated from N related memories]"
|
|
6
|
-
* prepended to the longest source, or a bulleted list. `hippo refine` takes
|
|
7
|
-
* those and asks Claude to synthesize a clean, generalized principle.
|
|
8
|
-
*
|
|
9
|
-
* Design choices:
|
|
10
|
-
* - Separate command (not baked into `hippo sleep`) so API-key users opt in.
|
|
11
|
-
* - Idempotent via the `llm-refined` tag — re-running skips already-refined.
|
|
12
|
-
* - Uses fetch directly so no SDK dependency.
|
|
13
|
-
* - On failure (API error, bad response), the original memory is untouched.
|
|
14
|
-
*/
|
|
1
|
+
/** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
|
|
2
|
+
* Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
|
|
15
3
|
import { MemoryEntry } from '../core/memory.js';
|
|
16
4
|
export interface RefineOptions {
|
|
17
5
|
apiKey: string;
|
|
@@ -22,13 +10,7 @@ export interface RefineOptions {
|
|
|
22
10
|
all?: boolean;
|
|
23
11
|
/** Injected for testing — defaults to the real fetch. */
|
|
24
12
|
fetcher?: typeof fetch;
|
|
25
|
-
/**
|
|
26
|
-
* Tenant scope. When provided, refineStore only scans consolidated
|
|
27
|
-
* entries belonging to this tenant, and parent lookups are scoped to the
|
|
28
|
-
* same tenant. Cross-tenant parents return null from readEntry and are
|
|
29
|
-
* silently skipped (refine still produces output from merged content).
|
|
30
|
-
* Undefined preserves pre-1.12.1 host-wide scan behaviour.
|
|
31
|
-
*/
|
|
13
|
+
/** Tenant scope: only that tenant's consolidated entries are scanned; cross-tenant parents return null and are skipped. */
|
|
32
14
|
tenantId?: string;
|
|
33
15
|
}
|
|
34
16
|
export interface RefineResult {
|
|
@@ -42,20 +24,12 @@ export interface RefineResult {
|
|
|
42
24
|
reason?: string;
|
|
43
25
|
}>;
|
|
44
26
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Ask Claude to synthesize a clean semantic memory from the merged content
|
|
47
|
-
* plus the original source memories. Returns the refined content string or
|
|
48
|
-
* `null` when the API call failed.
|
|
49
|
-
*/
|
|
27
|
+
/** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
|
|
50
28
|
export declare function refineSemanticMemory(merged: string, sources: MemoryEntry[], opts: {
|
|
51
29
|
apiKey: string;
|
|
52
30
|
model?: string;
|
|
53
31
|
fetcher?: typeof fetch;
|
|
54
32
|
}): Promise<string | null>;
|
|
55
|
-
/**
|
|
56
|
-
* Scan the store for consolidated semantic memories, refine each with the
|
|
57
|
-
* LLM, and write the refined content back. Tags with `llm-refined` so
|
|
58
|
-
* repeated runs are idempotent (unless `all` is set).
|
|
59
|
-
*/
|
|
33
|
+
/** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
|
|
60
34
|
export declare function refineStore(hippoRoot: string, opts: RefineOptions): Promise<RefineResult>;
|
|
61
35
|
//# sourceMappingURL=refine-llm.d.ts.map
|
package/dist/cli/refine-llm.js
CHANGED
|
@@ -1,26 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The rule-based `mergeContents` in consolidate.ts produces functional but
|
|
5
|
-
* ugly semantic memories — typically "[Consolidated from N related memories]"
|
|
6
|
-
* prepended to the longest source, or a bulleted list. `hippo refine` takes
|
|
7
|
-
* those and asks Claude to synthesize a clean, generalized principle.
|
|
8
|
-
*
|
|
9
|
-
* Design choices:
|
|
10
|
-
* - Separate command (not baked into `hippo sleep`) so API-key users opt in.
|
|
11
|
-
* - Idempotent via the `llm-refined` tag — re-running skips already-refined.
|
|
12
|
-
* - Uses fetch directly so no SDK dependency.
|
|
13
|
-
* - On failure (API error, bad response), the original memory is untouched.
|
|
14
|
-
*/
|
|
1
|
+
/** LLM refinement of consolidated semantic memories (`hippo refine`): a separate command so API-key users opt in; idempotent via the `llm-refined` tag.
|
|
2
|
+
* Uses fetch directly (no SDK dependency); on any failure the original memory is untouched. */
|
|
15
3
|
import { Layer } from '../core/memory.js';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
4
|
+
import { REFINED_TAG, storeRefinement } from '../api/index.js';
|
|
5
|
+
import { listMemories, listMemoriesByIds } from '../api/memories.js';
|
|
6
|
+
import { cliApiContext } from './api-context.js';
|
|
7
|
+
import { chunked } from '../util/chunked.js';
|
|
18
8
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
19
9
|
import { sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
20
10
|
import { log } from '../util/log.js';
|
|
21
11
|
const MAX_REFINE_SOURCES = 8;
|
|
22
12
|
const REFINE_SOURCE_CHARS = 400;
|
|
23
|
-
const REFINED_TAG = 'llm-refined';
|
|
24
13
|
// Output budget for one refined memory, and the shortest reply kept as a refinement.
|
|
25
14
|
const REFINE_MAX_TOKENS = 800;
|
|
26
15
|
const REFINE_MIN_CHARS = 10;
|
|
@@ -28,17 +17,15 @@ const CONSOLIDATED_MARKERS = [
|
|
|
28
17
|
'[Consolidated from',
|
|
29
18
|
'[Consolidated pattern from',
|
|
30
19
|
];
|
|
31
|
-
/**
|
|
32
|
-
* Ask Claude to synthesize a clean semantic memory from the merged content
|
|
33
|
-
* plus the original source memories. Returns the refined content string or
|
|
34
|
-
* `null` when the API call failed.
|
|
35
|
-
*/
|
|
20
|
+
/** Ask Claude to synthesize a clean semantic memory from the merged content and its sources; returns null when the API call failed. */
|
|
36
21
|
export async function refineSemanticMemory(merged, sources, opts) {
|
|
37
22
|
const sourceBlock = sources
|
|
38
23
|
.slice(0, MAX_REFINE_SOURCES)
|
|
39
24
|
.map((s, i) => `[source ${i + 1}] ${redactSecretsStrict(s.content).slice(0, REFINE_SOURCE_CHARS)}`)
|
|
40
25
|
.join('\n\n');
|
|
41
|
-
const prompt = `You are refining a semantic memory in an agent's memory store.
|
|
26
|
+
const prompt = `You are refining a semantic memory in an agent's memory store. ` +
|
|
27
|
+
`The rule-based consolidator merged several related episodic memories into one, but the output is clumsy. ` +
|
|
28
|
+
`Produce a single coherent semantic memory that captures the underlying principle.
|
|
42
29
|
|
|
43
30
|
Rules:
|
|
44
31
|
- Output ONLY the refined content — no preamble, no quote marks, no "Here is...".
|
|
@@ -72,7 +59,7 @@ ${sourceBlock}`;
|
|
|
72
59
|
function describeRefineFailure(failure) {
|
|
73
60
|
switch (failure.kind) {
|
|
74
61
|
case 'request': return `refine: request failed: ${failure.message}`;
|
|
75
|
-
case 'http': return `refine: API answered HTTP ${failure.status}`;
|
|
62
|
+
case 'http': return `refine: API answered HTTP ${failure.status}${failure.detail ? `: ${failure.detail}` : ''}`;
|
|
76
63
|
case 'unreadable': return `refine: unreadable response: ${failure.message}`;
|
|
77
64
|
}
|
|
78
65
|
}
|
|
@@ -81,11 +68,7 @@ function isConsolidated(entry) {
|
|
|
81
68
|
return false;
|
|
82
69
|
return CONSOLIDATED_MARKERS.some((m) => entry.content.startsWith(m));
|
|
83
70
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Scan the store for consolidated semantic memories, refine each with the
|
|
86
|
-
* LLM, and write the refined content back. Tags with `llm-refined` so
|
|
87
|
-
* repeated runs are idempotent (unless `all` is set).
|
|
88
|
-
*/
|
|
71
|
+
/** Refine each consolidated semantic memory with the LLM and write it back, tagging `llm-refined` so reruns skip it (unless `all`). */
|
|
89
72
|
export async function refineStore(hippoRoot, opts) {
|
|
90
73
|
const result = {
|
|
91
74
|
scanned: 0,
|
|
@@ -94,9 +77,10 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
94
77
|
failed: 0,
|
|
95
78
|
details: [],
|
|
96
79
|
};
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
const
|
|
80
|
+
// No tenant means every tenant, so the ctx's own tenant is never read.
|
|
81
|
+
const ctx = cliApiContext(hippoRoot, opts.tenantId ?? '');
|
|
82
|
+
const reach = { everyTenant: opts.tenantId === undefined };
|
|
83
|
+
const entries = listMemories(ctx, reach);
|
|
100
84
|
let processed = 0;
|
|
101
85
|
for (const entry of entries) {
|
|
102
86
|
if (!isConsolidated(entry))
|
|
@@ -110,24 +94,18 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
110
94
|
if (opts.limit !== undefined && processed >= opts.limit)
|
|
111
95
|
break;
|
|
112
96
|
processed++;
|
|
113
|
-
await refineOneEntry(
|
|
97
|
+
await refineOneEntry(ctx, reach, entry, opts, result);
|
|
114
98
|
}
|
|
115
99
|
return result;
|
|
116
100
|
}
|
|
117
|
-
async function refineOneEntry(
|
|
101
|
+
async function refineOneEntry(ctx, reach, entry, opts, result) {
|
|
118
102
|
// Best-effort: walk parents_json (schema v9) to fetch originals. When
|
|
119
103
|
// parents aren't recorded we still refine using just the merged content.
|
|
120
|
-
const sources = [];
|
|
121
104
|
const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
// degradation rather than refuse-to-refine).
|
|
127
|
-
const p = readEntry(hippoRoot, pid, opts.tenantId);
|
|
128
|
-
if (p)
|
|
129
|
-
sources.push(p);
|
|
130
|
-
}
|
|
105
|
+
// Parent lookup is tenant-scoped; cross-tenant parents are absent and skipped,
|
|
106
|
+
// so refine still works from the merged content alone.
|
|
107
|
+
const found = new Map(chunked(parentIds).flatMap((chunk) => listMemoriesByIds(ctx, chunk, reach)).map((p) => [p.id, p]));
|
|
108
|
+
const sources = parentIds.flatMap((pid) => found.get(pid) ?? []);
|
|
131
109
|
const refined = await refineSemanticMemory(entry.content, sources, {
|
|
132
110
|
apiKey: opts.apiKey,
|
|
133
111
|
model: opts.model,
|
|
@@ -143,12 +121,7 @@ async function refineOneEntry(hippoRoot, entry, opts, result) {
|
|
|
143
121
|
result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
|
|
144
122
|
return;
|
|
145
123
|
}
|
|
146
|
-
|
|
147
|
-
...entry,
|
|
148
|
-
content: refined,
|
|
149
|
-
tags: entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG],
|
|
150
|
-
};
|
|
151
|
-
writeEntry(hippoRoot, updated);
|
|
124
|
+
storeRefinement(cliApiContext(ctx.hippoRoot, entry.tenantId), entry, refined);
|
|
152
125
|
result.refined++;
|
|
153
126
|
result.details.push({ id: entry.id, status: 'refined' });
|
|
154
127
|
}
|
package/dist/cli/remember.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleRemember({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
3
|
-
export declare function handleSupersede({ hippoRoot, args, flags }: CommandContext): void
|
|
4
|
-
export declare function handleTrace({ hippoRoot, args, flags }: CommandContext): void
|
|
2
|
+
export declare function handleRemember({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
3
|
+
export declare function handleSupersede({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
4
|
+
export declare function handleTrace({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=remember.d.ts.map
|