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/dag.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
// DAG summary verbs: `hippo dag`, `hippo assemble` and `hippo drill`.
|
|
2
|
-
import {
|
|
2
|
+
import { truncateWithEllipsis } from '../util/ellipsize.js';
|
|
3
3
|
import * as api from '../api/index.js';
|
|
4
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
5
4
|
import { assembleCost, assembleHeading, drillCost, settleTokens } from '../api/context-render.js';
|
|
5
|
+
import { listMemories } from '../api/memories.js';
|
|
6
|
+
import { cliApiContext } from './api-context.js';
|
|
6
7
|
import { printError } from './output.js';
|
|
7
8
|
import { parseBudgetFlag, flagIsTrue, stringFlag, numberFlag } from './flag-values.js';
|
|
8
9
|
import { requireInit } from './shared.js';
|
|
9
10
|
import { captureConsole } from './print.js';
|
|
10
11
|
import { CONTENT_PREVIEW_CHARS } from '../util/token-text.js';
|
|
12
|
+
import { CliExit } from './exit.js';
|
|
11
13
|
const TREE_CHILD_PREVIEW_CHARS = 70;
|
|
12
14
|
const TREE_LEAF_PREVIEW_CHARS = 60;
|
|
13
15
|
const DAG_HEAD_CHARS = 120;
|
|
14
16
|
const DAG_SUMMARY_PREVIEW_CHARS = 200;
|
|
15
17
|
const DAG_CHILD_PREVIEW_CHARS = 100;
|
|
16
|
-
export function
|
|
18
|
+
export function handleDag({ hippoRoot, tenantId, flags }) {
|
|
17
19
|
requireInit(hippoRoot);
|
|
18
|
-
const entries =
|
|
20
|
+
const entries = listMemories(cliApiContext(hippoRoot, tenantId), { everyTenant: true });
|
|
19
21
|
const isStats = flagIsTrue(flags, 'stats');
|
|
20
22
|
const byLevel = new Map();
|
|
21
23
|
let unlinked = 0;
|
|
@@ -39,6 +41,17 @@ function printDagStats(byLevel, unlinked) {
|
|
|
39
41
|
console.log(` Level 0 (raw memories): ${byLevel.get(0) ?? 0}`);
|
|
40
42
|
console.log(` Unlinked facts: ${unlinked}`);
|
|
41
43
|
}
|
|
44
|
+
function groupByParent(entries) {
|
|
45
|
+
const byParent = new Map();
|
|
46
|
+
for (const e of entries) {
|
|
47
|
+
if (!e.dag_parent_id)
|
|
48
|
+
continue;
|
|
49
|
+
const list = byParent.get(e.dag_parent_id) ?? [];
|
|
50
|
+
list.push(e);
|
|
51
|
+
byParent.set(e.dag_parent_id, list);
|
|
52
|
+
}
|
|
53
|
+
return byParent;
|
|
54
|
+
}
|
|
42
55
|
function printDagTree(entries) {
|
|
43
56
|
// Tree view: L3 entity profiles as roots with L2 children indented, then orphan L2 summaries at top level.
|
|
44
57
|
const profiles = entries.filter((e) => e.dag_level === 3);
|
|
@@ -52,6 +65,7 @@ function printDagTree(entries) {
|
|
|
52
65
|
list.push(l2);
|
|
53
66
|
childL2ByProfile.set(l2.dag_parent_id, list);
|
|
54
67
|
}
|
|
68
|
+
const childrenByParent = groupByParent(entries);
|
|
55
69
|
if (profiles.length === 0 && orphanL2.length === 0) {
|
|
56
70
|
console.log('No DAG summaries yet. Run `hippo sleep` with ANTHROPIC_API_KEY set.');
|
|
57
71
|
return;
|
|
@@ -68,7 +82,7 @@ function printDagTree(entries) {
|
|
|
68
82
|
console.log(` └─ 📌 ${l2.content.slice(0, TREE_CHILD_PREVIEW_CHARS)}`);
|
|
69
83
|
if (l2Tags)
|
|
70
84
|
console.log(` [${l2Tags}]`);
|
|
71
|
-
const facts =
|
|
85
|
+
const facts = childrenByParent.get(l2.id) ?? [];
|
|
72
86
|
for (const f of facts) {
|
|
73
87
|
console.log(` └─ ${f.content.slice(0, TREE_LEAF_PREVIEW_CHARS)}`);
|
|
74
88
|
}
|
|
@@ -80,13 +94,13 @@ function printDagTree(entries) {
|
|
|
80
94
|
console.log(`\n📌 ${summary.content.slice(0, CONTENT_PREVIEW_CHARS)}`);
|
|
81
95
|
if (summaryTags)
|
|
82
96
|
console.log(` [${summaryTags}]`);
|
|
83
|
-
const children =
|
|
97
|
+
const children = childrenByParent.get(summary.id) ?? [];
|
|
84
98
|
for (const child of children) {
|
|
85
99
|
console.log(` └─ ${child.content.slice(0, TREE_CHILD_PREVIEW_CHARS)}`);
|
|
86
100
|
}
|
|
87
101
|
}
|
|
88
102
|
}
|
|
89
|
-
async function cmdAssemble(hippoRoot, sessionId, flags) {
|
|
103
|
+
async function cmdAssemble(hippoRoot, tenantId, sessionId, flags) {
|
|
90
104
|
requireInit(hippoRoot);
|
|
91
105
|
// Absent stays undefined so the api default applies; the 0 fallback is unreachable.
|
|
92
106
|
const budget = flags['budget'] === undefined ? undefined : parseBudgetFlag(flags['budget'], 0);
|
|
@@ -95,16 +109,19 @@ async function cmdAssemble(hippoRoot, sessionId, flags) {
|
|
|
95
109
|
const scope = stringFlag(flags, 'scope') || undefined;
|
|
96
110
|
const ctx = {
|
|
97
111
|
hippoRoot,
|
|
98
|
-
tenantId
|
|
112
|
+
tenantId,
|
|
99
113
|
actor: api.adminActor('cli:assemble'),
|
|
100
114
|
};
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
115
|
+
const opts = {};
|
|
116
|
+
if (Number.isFinite(budget) && budget > 0)
|
|
117
|
+
opts.budget = budget;
|
|
118
|
+
if (Number.isFinite(freshTailCount) && freshTailCount >= 0)
|
|
119
|
+
opts.freshTailCount = freshTailCount;
|
|
120
|
+
opts.summarizeOlder = summarizeOlder;
|
|
121
|
+
if (scope !== undefined)
|
|
122
|
+
opts.scope = scope;
|
|
123
|
+
opts.cost = assembleCost(sessionId);
|
|
124
|
+
const r = await api.assemble(ctx, sessionId, opts);
|
|
108
125
|
if (flags['json']) {
|
|
109
126
|
console.log(JSON.stringify(r, null, 2));
|
|
110
127
|
return;
|
|
@@ -118,7 +135,7 @@ async function cmdAssemble(hippoRoot, sessionId, flags) {
|
|
|
118
135
|
}
|
|
119
136
|
})));
|
|
120
137
|
}
|
|
121
|
-
async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
138
|
+
async function cmdDrillDown(hippoRoot, tenantId, summaryId, flags) {
|
|
122
139
|
requireInit(hippoRoot);
|
|
123
140
|
const limit = numberFlag(flags, 'limit');
|
|
124
141
|
// Absent stays undefined so the api default applies; the 0 fallback is unreachable.
|
|
@@ -129,21 +146,24 @@ async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
|
129
146
|
if (rawDepth !== undefined) {
|
|
130
147
|
if (!Number.isInteger(rawDepth) || rawDepth < 1 || rawDepth > 10) {
|
|
131
148
|
printError(`--depth must be an integer between 1 and 10 (got ${flags['depth']})`);
|
|
132
|
-
|
|
149
|
+
throw new CliExit(2);
|
|
133
150
|
}
|
|
134
151
|
depth = rawDepth;
|
|
135
152
|
}
|
|
136
153
|
const ctx = {
|
|
137
154
|
hippoRoot,
|
|
138
|
-
tenantId
|
|
155
|
+
tenantId,
|
|
139
156
|
actor: api.adminActor('cli:drill'),
|
|
140
157
|
};
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
158
|
+
const opts = {};
|
|
159
|
+
if (Number.isFinite(limit) && limit > 0)
|
|
160
|
+
opts.limit = limit;
|
|
161
|
+
if (Number.isFinite(budget) && budget > 0)
|
|
162
|
+
opts.budget = budget;
|
|
163
|
+
if (depth !== undefined)
|
|
164
|
+
opts.depth = depth;
|
|
165
|
+
opts.cost = drillCost;
|
|
166
|
+
const r = await api.drillDown(ctx, summaryId, opts);
|
|
147
167
|
if ('failure' in r) {
|
|
148
168
|
// Only `not_drillable` is caller-actionable. `not_found` collapses cross-tenant, scope-blocked
|
|
149
169
|
// and missing on purpose: telling scope_blocked apart would leak that the row exists.
|
|
@@ -153,33 +173,34 @@ async function cmdDrillDown(hippoRoot, summaryId, flags) {
|
|
|
153
173
|
else {
|
|
154
174
|
printError(`No drillable summary at id=${summaryId}.`);
|
|
155
175
|
}
|
|
156
|
-
|
|
176
|
+
throw new CliExit(1);
|
|
157
177
|
}
|
|
158
178
|
if (flags['json']) {
|
|
159
179
|
console.log(JSON.stringify(r, null, 2));
|
|
160
180
|
return;
|
|
161
181
|
}
|
|
162
|
-
console.log(`Summary ${r.summary.id} — ${r.summary.descendantCount} descendants
|
|
163
|
-
|
|
182
|
+
console.log(`Summary ${r.summary.id} — ${r.summary.descendantCount} descendants` +
|
|
183
|
+
`${r.summary.earliestAt ? ` (${r.summary.earliestAt} → ${r.summary.latestAt})` : ''}`);
|
|
184
|
+
console.log(` ${truncateWithEllipsis(r.summary.content, DAG_SUMMARY_PREVIEW_CHARS, '…')}`);
|
|
164
185
|
console.log(`\nChildren (${r.children.length}/${r.totalChildren}${r.truncated ? ', truncated' : ''}):`);
|
|
165
186
|
for (const c of r.children) {
|
|
166
|
-
console.log(` [L${c.dagLevel}] ${c.id} — ${c.content
|
|
187
|
+
console.log(` [L${c.dagLevel}] ${c.id} — ${truncateWithEllipsis(c.content, DAG_CHILD_PREVIEW_CHARS, '…')}`);
|
|
167
188
|
}
|
|
168
189
|
}
|
|
169
|
-
export async function handleDrill({ hippoRoot, args, flags }) {
|
|
190
|
+
export async function handleDrill({ hippoRoot, tenantId, args, flags }) {
|
|
170
191
|
const summaryId = args[0];
|
|
171
192
|
if (!summaryId) {
|
|
172
193
|
printError('Usage: hippo drill <summary-id> [--limit N] [--budget N]');
|
|
173
|
-
|
|
194
|
+
throw new CliExit(1);
|
|
174
195
|
}
|
|
175
|
-
await cmdDrillDown(hippoRoot, summaryId, flags);
|
|
196
|
+
await cmdDrillDown(hippoRoot, tenantId, summaryId, flags);
|
|
176
197
|
}
|
|
177
|
-
export async function handleAssemble({ hippoRoot, args, flags }) {
|
|
198
|
+
export async function handleAssemble({ hippoRoot, tenantId, args, flags }) {
|
|
178
199
|
const sessionId = stringFlag(flags, 'session') ?? args[0];
|
|
179
200
|
if (!sessionId) {
|
|
180
201
|
printError('Usage: hippo assemble --session <id> [--budget N] [--fresh-tail N] [--no-summarize-older] [--json]');
|
|
181
|
-
|
|
202
|
+
throw new CliExit(1);
|
|
182
203
|
}
|
|
183
|
-
await cmdAssemble(hippoRoot, sessionId, flags);
|
|
204
|
+
await cmdAssemble(hippoRoot, tenantId, sessionId, flags);
|
|
184
205
|
}
|
|
185
206
|
//# sourceMappingURL=dag.js.map
|
package/dist/cli/decisions.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function cmdDecide(hippoRoot: string, args: string[], flags: CliFlags): void;
|
|
4
|
-
export declare function cmdIncident(hippoRoot: string, args: string[], flags: CliFlags): void;
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleDecide({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
5
3
|
//# sourceMappingURL=decisions.d.ts.map
|
package/dist/cli/decisions.js
CHANGED
|
@@ -1,192 +1,16 @@
|
|
|
1
|
-
// First-class object verbs for
|
|
2
|
-
import {
|
|
3
|
-
import { readEntry } from '../store/entry-reads.js';
|
|
1
|
+
// First-class object verbs for decisions: record one (optionally superseding an older one's memory), list, get, close.
|
|
2
|
+
import { getMemory } from '../api/memories.js';
|
|
4
3
|
import { extractPathTags } from '../search/path-context.js';
|
|
5
|
-
import * as predictionsModule from '../store/predictions.js';
|
|
6
4
|
import * as decisionsModule from '../objects/decisions.js';
|
|
7
|
-
import * as incidentsModule from '../objects/incidents.js';
|
|
8
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
9
5
|
import { printError } from './output.js';
|
|
10
|
-
import { nonEmptyStringFlag,
|
|
6
|
+
import { nonEmptyStringFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
11
7
|
import { requireInit } from './shared.js';
|
|
12
|
-
import {
|
|
8
|
+
import { cliApiContext } from './api-context.js';
|
|
9
|
+
import { closeObject, foundOrExit, idArgOrExit, listObjects, printLifecycleTail } from './object-verbs.js';
|
|
10
|
+
import { parseObjectId } from './lenient-id.js';
|
|
13
11
|
import { errorMessage } from '../util/log.js';
|
|
14
|
-
|
|
12
|
+
import { CliExit } from './exit.js';
|
|
15
13
|
const DECISION = { cmd: 'decide', noun: 'Decision', idLabel: 'decision' };
|
|
16
|
-
const INCIDENT = { cmd: 'incident', noun: 'Incident', idLabel: 'incident' };
|
|
17
|
-
const PREDICTION_NOUN = 'Prediction';
|
|
18
|
-
// Lenient on purpose (parseInt reads "1abc" as 1) until the next major version; incidents use the strict parser.
|
|
19
|
-
function parseObjectId(idRaw, noun) {
|
|
20
|
-
const id = parseInt(String(idRaw), 10);
|
|
21
|
-
if (!Number.isFinite(id) || id <= 0) {
|
|
22
|
-
printError(`Invalid ${noun} id: "${idRaw}"`);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
return id;
|
|
26
|
-
}
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
// Prediction first-class object
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
function predictClose(hippoRoot, tenantId, args, flags) {
|
|
31
|
-
const id = idArgOrExit(args, 'Usage: hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]', 'prediction', parseObjectId);
|
|
32
|
-
const stateRaw = (stringFlag(flags, 'state') ?? '').trim();
|
|
33
|
-
if (!predictionsModule.VALID_CLOSURE_STATES.has(stateRaw) || stateRaw === 'open') {
|
|
34
|
-
printError(`Invalid --state: "${stateRaw}". Must be one of: closed | closed-unknown.`);
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
const actualRaw = flags['actual'];
|
|
38
|
-
const actualValue = actualRaw !== undefined ? Number(actualRaw) : undefined;
|
|
39
|
-
if (actualRaw !== undefined && !Number.isFinite(actualValue)) {
|
|
40
|
-
printError(`Invalid --actual: "${actualRaw}". Must be a number.`);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
const closureNote = stringFlag(flags, 'note');
|
|
44
|
-
const closed = predictionsModule.closePrediction(hippoRoot, tenantId, id, {
|
|
45
|
-
closureState: stateRaw,
|
|
46
|
-
actualValue,
|
|
47
|
-
closureNote,
|
|
48
|
-
});
|
|
49
|
-
console.log(`Prediction ${closed.id} closed: state=${closed.closureState}${closed.actualValue !== null ? ` actual=${closed.actualValue}` : ''}`);
|
|
50
|
-
}
|
|
51
|
-
function loadPredictionList(hippoRoot, tenantId, status, classTag, limit) {
|
|
52
|
-
if (status === 'open') {
|
|
53
|
-
return predictionsModule.loadOpenPredictions(hippoRoot, tenantId, {
|
|
54
|
-
classTag: classTag || undefined,
|
|
55
|
-
limit,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
if (status === 'all') {
|
|
59
|
-
return classTag
|
|
60
|
-
? predictionsModule.loadPredictionsByClass(hippoRoot, tenantId, classTag, { limit })
|
|
61
|
-
: predictionsModule.loadAllPredictions(hippoRoot, tenantId, { limit });
|
|
62
|
-
}
|
|
63
|
-
const closureState = requireStatus(status, predictionsModule.VALID_CLOSURE_STATES);
|
|
64
|
-
if (!classTag) {
|
|
65
|
-
// status filter without class — scan all classes is more complex; v1 requires --class for non-default status
|
|
66
|
-
printError('--status filter (non-open) requires --class to be set.');
|
|
67
|
-
process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
return predictionsModule.loadPredictionsByClass(hippoRoot, tenantId, classTag, {
|
|
70
|
-
closureState,
|
|
71
|
-
limit,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
function predictList(hippoRoot, tenantId, flags) {
|
|
75
|
-
const classTag = stringFlag(flags, 'class')?.trim() ?? '';
|
|
76
|
-
const status = stringFlag(flags, 'status')?.trim() ?? 'all';
|
|
77
|
-
const limit = parseListLimit(flags);
|
|
78
|
-
const results = loadPredictionList(hippoRoot, tenantId, status, classTag, limit);
|
|
79
|
-
if (results.length === 0) {
|
|
80
|
-
console.log(classTag ? `No predictions in class "${classTag}".` : 'No predictions.');
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
console.log(`Found ${results.length} predictions:\n`);
|
|
84
|
-
for (const p of results) {
|
|
85
|
-
const estPart = p.estimateValue !== null ? ` estimate=${p.estimateValue}${p.estimateUnit ? ` ${p.estimateUnit}` : ''}` : '';
|
|
86
|
-
const actPart = p.actualValue !== null ? ` actual=${p.actualValue}` : '';
|
|
87
|
-
const tgtPart = p.targetDate ? ` target=${p.targetDate}` : '';
|
|
88
|
-
console.log(`#${p.id} [${p.closureState}] class=${p.classTag}${estPart}${actPart}${tgtPart}`);
|
|
89
|
-
console.log(` ${p.claimText}`);
|
|
90
|
-
if (p.closureNote)
|
|
91
|
-
console.log(` note: ${p.closureNote}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
function predictShow(hippoRoot, tenantId, args) {
|
|
95
|
-
const id = idArgOrExit(args, 'Usage: hippo predict show <id>', 'prediction', parseObjectId);
|
|
96
|
-
const pred = foundOrExit(predictionsModule.loadPredictionById(hippoRoot, tenantId, id), PREDICTION_NOUN, id);
|
|
97
|
-
console.log(`Prediction #${pred.id}`);
|
|
98
|
-
console.log(` class: ${pred.classTag}`);
|
|
99
|
-
console.log(` claim: ${pred.claimText}`);
|
|
100
|
-
console.log(` state: ${pred.closureState}`);
|
|
101
|
-
if (pred.estimateValue !== null)
|
|
102
|
-
console.log(` estimate: ${pred.estimateValue}${pred.estimateUnit ? ' ' + pred.estimateUnit : ''}`);
|
|
103
|
-
if (pred.targetDate)
|
|
104
|
-
console.log(` target: ${pred.targetDate}`);
|
|
105
|
-
if (pred.actualValue !== null)
|
|
106
|
-
console.log(` actual: ${pred.actualValue}`);
|
|
107
|
-
if (pred.closedAt)
|
|
108
|
-
console.log(` closed: ${pred.closedAt}`);
|
|
109
|
-
if (pred.closureNote)
|
|
110
|
-
console.log(` note: ${pred.closureNote}`);
|
|
111
|
-
if (pred.memoryId)
|
|
112
|
-
console.log(` memory: ${pred.memoryId}`);
|
|
113
|
-
console.log(` created: ${pred.createdAt}`);
|
|
114
|
-
}
|
|
115
|
-
function predictBaserate(hippoRoot, tenantId, flags) {
|
|
116
|
-
// Reference-class / planning-fallacy detector
|
|
117
|
-
const classTag = stringFlag(flags, 'class')?.trim();
|
|
118
|
-
if (!classTag) {
|
|
119
|
-
printError('Usage: hippo predict baserate --class <c>');
|
|
120
|
-
process.exit(1);
|
|
121
|
-
}
|
|
122
|
-
const baserate = predictionsModule.computePredictionBaserate(hippoRoot, tenantId, classTag);
|
|
123
|
-
if (baserate.nClosed === 0) {
|
|
124
|
-
console.log(`No closed predictions in class "${baserate.classTag}" yet.`);
|
|
125
|
-
console.log(` Create one with: hippo predict "<claim>" --class ${baserate.classTag} --estimate N`);
|
|
126
|
-
console.log(` Close it later: hippo predict close <id> --state closed --actual N`);
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
console.log(baserate.summary);
|
|
130
|
-
console.log(` n_closed: ${baserate.nClosed}`);
|
|
131
|
-
console.log(` n_ratio_eligible: ${baserate.nRatioEligible}`);
|
|
132
|
-
if (baserate.meanEstimate !== null)
|
|
133
|
-
console.log(` mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
|
|
134
|
-
if (baserate.meanActual !== null)
|
|
135
|
-
console.log(` mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
|
|
136
|
-
if (baserate.meanRatio !== null)
|
|
137
|
-
console.log(` mean_ratio: ${baserate.meanRatio.toFixed(BASERATE_DECIMALS)}x`);
|
|
138
|
-
if (baserate.p50Ratio !== null)
|
|
139
|
-
console.log(` p50_ratio: ${baserate.p50Ratio.toFixed(BASERATE_DECIMALS)}x`);
|
|
140
|
-
if (baserate.mae !== null)
|
|
141
|
-
console.log(` mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
|
|
142
|
-
}
|
|
143
|
-
export function cmdPredict(hippoRoot, args, flags) {
|
|
144
|
-
requireInit(hippoRoot);
|
|
145
|
-
const tenantId = resolveTenantId({});
|
|
146
|
-
const subcommand = args[0] ?? '';
|
|
147
|
-
if (subcommand === 'close')
|
|
148
|
-
return predictClose(hippoRoot, tenantId, args, flags);
|
|
149
|
-
if (subcommand === 'list')
|
|
150
|
-
return predictList(hippoRoot, tenantId, flags);
|
|
151
|
-
if (subcommand === 'show')
|
|
152
|
-
return predictShow(hippoRoot, tenantId, args);
|
|
153
|
-
if (subcommand === 'baserate')
|
|
154
|
-
return predictBaserate(hippoRoot, tenantId, flags);
|
|
155
|
-
// Default subcommand: create. args[0] is the claim text.
|
|
156
|
-
predictCreate(hippoRoot, tenantId, subcommand, flags);
|
|
157
|
-
}
|
|
158
|
-
function predictCreate(hippoRoot, tenantId, claimText, flags) {
|
|
159
|
-
if (!claimText) {
|
|
160
|
-
printError('Usage: hippo predict "<claim>" --class <c> [--estimate <v>] [--unit <u>] [--target <YYYY-MM-DD>]');
|
|
161
|
-
printError(' hippo predict close <id> --state <closed|closed-unknown> [--actual <v>] [--note "..."]');
|
|
162
|
-
printError(' hippo predict list [--class X] [--status open|closed|closed-unknown|all] [--limit N]');
|
|
163
|
-
printError(' hippo predict show <id>');
|
|
164
|
-
process.exit(1);
|
|
165
|
-
}
|
|
166
|
-
const classTag = stringFlag(flags, 'class')?.trim();
|
|
167
|
-
if (!classTag) {
|
|
168
|
-
printError('--class is required for prediction creation.');
|
|
169
|
-
process.exit(1);
|
|
170
|
-
}
|
|
171
|
-
const estimateRaw = flags['estimate'];
|
|
172
|
-
const estimateValue = estimateRaw !== undefined ? Number(estimateRaw) : undefined;
|
|
173
|
-
if (estimateRaw !== undefined && !Number.isFinite(estimateValue)) {
|
|
174
|
-
printError(`Invalid --estimate: "${estimateRaw}". Must be a number.`);
|
|
175
|
-
process.exit(1);
|
|
176
|
-
}
|
|
177
|
-
const estimateUnit = stringFlag(flags, 'unit');
|
|
178
|
-
const targetDate = stringFlag(flags, 'target');
|
|
179
|
-
const created = predictionsModule.savePrediction(hippoRoot, tenantId, {
|
|
180
|
-
classTag,
|
|
181
|
-
claimText,
|
|
182
|
-
estimateValue,
|
|
183
|
-
estimateUnit,
|
|
184
|
-
targetDate,
|
|
185
|
-
});
|
|
186
|
-
console.log(`Prediction recorded: #${created.id} class=${created.classTag}`);
|
|
187
|
-
if (created.memoryId)
|
|
188
|
-
console.log(` memory: ${created.memoryId}`);
|
|
189
|
-
}
|
|
190
14
|
function printDecisionRow(d) {
|
|
191
15
|
const supPart = d.supersededBy !== null ? ` superseded_by=#${d.supersededBy}` : '';
|
|
192
16
|
console.log(`#${d.id} [${d.status}]${supPart} memory=${d.memoryId ?? '-'}`);
|
|
@@ -215,9 +39,8 @@ function decideGet(hippoRoot, tenantId, args) {
|
|
|
215
39
|
function decideClose(hippoRoot, tenantId, args) {
|
|
216
40
|
closeObject(args, DECISION, (id) => decisionsModule.closeDecision(hippoRoot, tenantId, id), parseObjectId);
|
|
217
41
|
}
|
|
218
|
-
export function
|
|
42
|
+
export async function handleDecide({ hippoRoot, tenantId, args, flags }) {
|
|
219
43
|
requireInit(hippoRoot);
|
|
220
|
-
const tenantId = resolveTenantId({});
|
|
221
44
|
const subcommand = args[0] ?? '';
|
|
222
45
|
if (subcommand === 'list')
|
|
223
46
|
return decideList(hippoRoot, tenantId, flags);
|
|
@@ -226,9 +49,9 @@ export function cmdDecide(hippoRoot, args, flags) {
|
|
|
226
49
|
if (subcommand === 'close')
|
|
227
50
|
return decideClose(hippoRoot, tenantId, args);
|
|
228
51
|
// Default subcommand: create. args[0] is the decision text.
|
|
229
|
-
decideCreate(hippoRoot, tenantId, subcommand, flags);
|
|
52
|
+
await decideCreate(hippoRoot, tenantId, subcommand, flags);
|
|
230
53
|
}
|
|
231
|
-
function decideCreate(hippoRoot, tenantId, decisionText, flags) {
|
|
54
|
+
async function decideCreate(hippoRoot, tenantId, decisionText, flags) {
|
|
232
55
|
if (!decisionText)
|
|
233
56
|
exitWithDecideUsage();
|
|
234
57
|
const context = nonEmptyStringFlag(flags, 'context');
|
|
@@ -236,21 +59,18 @@ function decideCreate(hippoRoot, tenantId, decisionText, flags) {
|
|
|
236
59
|
// than silently creating a non-superseding decision.
|
|
237
60
|
if (flagIsTrue(flags, 'supersedes')) {
|
|
238
61
|
printError('--supersedes requires a memory id, e.g. hippo decide "<text>" --supersedes mem_abc123.');
|
|
239
|
-
|
|
62
|
+
throw new CliExit(1);
|
|
240
63
|
}
|
|
241
64
|
const supersedesMemId = stringFlag(flags, 'supersedes') ?? null;
|
|
242
|
-
//
|
|
243
|
-
//
|
|
244
|
-
// canonical table create+supersede FIRST (inside saveDecision's SAVEPOINT),
|
|
245
|
-
// weaken the old memory LAST (best-effort) so a memory-write failure cannot
|
|
246
|
-
// leave the memory stale without the table reflecting the supersession.
|
|
65
|
+
// Commit the table create+supersede first (inside saveDecision's SAVEPOINT) and weaken the old memory last, best-effort,
|
|
66
|
+
// so a memory-write failure cannot leave the memory stale while the table shows the supersession.
|
|
247
67
|
let supersedesDecisionId;
|
|
248
68
|
let oldEntry = null;
|
|
249
69
|
if (supersedesMemId) {
|
|
250
|
-
oldEntry =
|
|
70
|
+
oldEntry = await getMemory(cliApiContext(hippoRoot, tenantId), supersedesMemId);
|
|
251
71
|
if (!oldEntry) {
|
|
252
72
|
printError(`Memory ${supersedesMemId} not found.`);
|
|
253
|
-
|
|
73
|
+
throw new CliExit(1);
|
|
254
74
|
}
|
|
255
75
|
supersedesDecisionId =
|
|
256
76
|
decisionsModule.resolveActiveDecisionIdByMemory(hippoRoot, tenantId, supersedesMemId) ?? undefined;
|
|
@@ -275,20 +95,13 @@ function exitWithDecideUsage() {
|
|
|
275
95
|
printError(' hippo decide list [--status active|superseded|closed|all] [--limit N]');
|
|
276
96
|
printError(' hippo decide get <id>');
|
|
277
97
|
printError(' hippo decide close <id>');
|
|
278
|
-
|
|
98
|
+
throw new CliExit(1);
|
|
279
99
|
}
|
|
280
100
|
function weakenSupersededMemory(hippoRoot, oldEntry, supersedesMemId) {
|
|
281
|
-
//
|
|
282
|
-
// 'superseded' tag. Preserves the exact pre-promotion behavior for the memory
|
|
283
|
-
// mirror; the canonical table supersession already committed above.
|
|
284
|
-
// Best-effort: saveDecision already committed. Failing here would make a retry find no active
|
|
101
|
+
// Best-effort and last: saveDecision already committed. Failing here would make a retry find no active
|
|
285
102
|
// decision for the old memory and create a duplicate active successor, so warn instead.
|
|
286
103
|
try {
|
|
287
|
-
|
|
288
|
-
oldEntry.confidence = 'stale';
|
|
289
|
-
if (!oldEntry.tags.includes('superseded'))
|
|
290
|
-
oldEntry.tags.push('superseded');
|
|
291
|
-
writeEntry(hippoRoot, oldEntry);
|
|
104
|
+
decisionsModule.weakenSupersededMemory(hippoRoot, oldEntry);
|
|
292
105
|
}
|
|
293
106
|
catch (e) {
|
|
294
107
|
printError(` warning: decision recorded and superseded, but failed to weaken the prior memory ${supersedesMemId}: ${errorMessage(e)}`);
|
|
@@ -300,108 +113,4 @@ function printSupersedes(supersedesMemId, supersedesDecisionId) {
|
|
|
300
113
|
: ' (no active decision row; memory weakened only)';
|
|
301
114
|
console.log(` supersedes memory: ${supersedesMemId}${tail}`);
|
|
302
115
|
}
|
|
303
|
-
function printIncidentRow(inc) {
|
|
304
|
-
const linkPart = inc.linkedMemoryIds.length > 0 ? ` links=${inc.linkedMemoryIds.length}` : '';
|
|
305
|
-
console.log(`#${inc.id} [${inc.status}]${linkPart} memory=${inc.memoryId ?? '-'}`);
|
|
306
|
-
console.log(` ${inc.incidentText}`);
|
|
307
|
-
if (inc.context)
|
|
308
|
-
console.log(` context: ${inc.context}`);
|
|
309
|
-
}
|
|
310
|
-
function incidentList(hippoRoot, tenantId, flags) {
|
|
311
|
-
listObjects(flags, {
|
|
312
|
-
plural: 'incidents',
|
|
313
|
-
states: incidentsModule.VALID_INCIDENT_STATES,
|
|
314
|
-
load: (opts) => incidentsModule.loadIncidents(hippoRoot, tenantId, opts),
|
|
315
|
-
printRow: printIncidentRow,
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
function incidentGet(hippoRoot, tenantId, args) {
|
|
319
|
-
const id = idArgOrExit(args, 'Usage: hippo incident get <id>', INCIDENT.idLabel);
|
|
320
|
-
const incident = foundOrExit(incidentsModule.loadIncidentById(hippoRoot, tenantId, id), INCIDENT.noun, id);
|
|
321
|
-
console.log(`Incident #${incident.id}`);
|
|
322
|
-
console.log(` status: ${incident.status}`);
|
|
323
|
-
console.log(` text: ${incident.incidentText}`);
|
|
324
|
-
if (incident.context)
|
|
325
|
-
console.log(` context: ${incident.context}`);
|
|
326
|
-
if (incident.resolutionText)
|
|
327
|
-
console.log(` resolution: ${incident.resolutionText}`);
|
|
328
|
-
if (incident.resolvedAt)
|
|
329
|
-
console.log(` resolved_at: ${incident.resolvedAt}`);
|
|
330
|
-
if (incident.closedAt)
|
|
331
|
-
console.log(` closed_at: ${incident.closedAt}`);
|
|
332
|
-
if (incident.linkedMemoryIds.length > 0) {
|
|
333
|
-
console.log(` linked memories: ${incident.linkedMemoryIds.join(', ')}`);
|
|
334
|
-
}
|
|
335
|
-
if (incident.memoryId)
|
|
336
|
-
console.log(` memory: ${incident.memoryId}`);
|
|
337
|
-
console.log(` created: ${incident.createdAt}`);
|
|
338
|
-
}
|
|
339
|
-
function incidentResolve(hippoRoot, tenantId, args, flags) {
|
|
340
|
-
const id = idArgOrExit(args, 'Usage: hippo incident resolve <id> --resolution "<text>"', INCIDENT.idLabel);
|
|
341
|
-
const resolutionRaw = stringFlag(flags, 'resolution');
|
|
342
|
-
if (!resolutionRaw?.trim()) {
|
|
343
|
-
printError('--resolution requires a non-empty value, e.g. hippo incident resolve <id> --resolution "root cause fixed".');
|
|
344
|
-
process.exit(1);
|
|
345
|
-
}
|
|
346
|
-
const resolved = incidentsModule.resolveIncident(hippoRoot, tenantId, id, resolutionRaw);
|
|
347
|
-
console.log(`Incident #${resolved.id} resolved.`);
|
|
348
|
-
}
|
|
349
|
-
function incidentClose(hippoRoot, tenantId, args) {
|
|
350
|
-
closeObject(args, INCIDENT, (id) => incidentsModule.closeIncident(hippoRoot, tenantId, id));
|
|
351
|
-
}
|
|
352
|
-
export function cmdIncident(hippoRoot, args, flags) {
|
|
353
|
-
requireInit(hippoRoot);
|
|
354
|
-
const tenantId = resolveTenantId({});
|
|
355
|
-
const subcommand = args[0] ?? '';
|
|
356
|
-
if (subcommand === 'list')
|
|
357
|
-
return incidentList(hippoRoot, tenantId, flags);
|
|
358
|
-
if (subcommand === 'get')
|
|
359
|
-
return incidentGet(hippoRoot, tenantId, args);
|
|
360
|
-
if (subcommand === 'resolve')
|
|
361
|
-
return incidentResolve(hippoRoot, tenantId, args, flags);
|
|
362
|
-
if (subcommand === 'close')
|
|
363
|
-
return incidentClose(hippoRoot, tenantId, args);
|
|
364
|
-
// Default subcommand: open (create). Accept both the documented
|
|
365
|
-
// `incident open "<text>"` form and the bare `incident "<text>"` form: for the
|
|
366
|
-
// `open` keyword the text is args[1], otherwise args[0] IS the text.
|
|
367
|
-
incidentCreate(hippoRoot, tenantId, subcommand === 'open' ? (args[1] ?? '') : subcommand, flags);
|
|
368
|
-
}
|
|
369
|
-
function incidentCreate(hippoRoot, tenantId, incidentText, flags) {
|
|
370
|
-
if (!incidentText) {
|
|
371
|
-
printError('Usage: hippo incident "<incident>" [--context "<details>"] [--link <memory-id>]...');
|
|
372
|
-
printError(' hippo incident list [--status open|resolved|closed|all] [--limit N]');
|
|
373
|
-
printError(' hippo incident get <id>');
|
|
374
|
-
printError(' hippo incident resolve <id> --resolution "<text>"');
|
|
375
|
-
printError(' hippo incident close <id>');
|
|
376
|
-
process.exit(1);
|
|
377
|
-
}
|
|
378
|
-
const context = nonEmptyStringFlag(flags, 'context');
|
|
379
|
-
// --link is a repeatable flag (collected into an array by parseArgs). A
|
|
380
|
-
// single --link <id> yields a string; normalize both to string[].
|
|
381
|
-
const linkRaw = flags['link'];
|
|
382
|
-
let linkedMemoryIds;
|
|
383
|
-
if (Array.isArray(linkRaw)) {
|
|
384
|
-
linkedMemoryIds = linkRaw;
|
|
385
|
-
}
|
|
386
|
-
else if (typeof linkRaw === 'string') {
|
|
387
|
-
linkedMemoryIds = [linkRaw];
|
|
388
|
-
}
|
|
389
|
-
else if (linkRaw === true) {
|
|
390
|
-
printError('--link requires a memory id, e.g. hippo incident "<text>" --link mem_abc123.');
|
|
391
|
-
process.exit(1);
|
|
392
|
-
}
|
|
393
|
-
const incidentPathTags = extractPathTags(process.cwd());
|
|
394
|
-
const created = incidentsModule.saveIncident(hippoRoot, tenantId, {
|
|
395
|
-
incidentText,
|
|
396
|
-
context,
|
|
397
|
-
linkedMemoryIds,
|
|
398
|
-
extraTags: incidentPathTags,
|
|
399
|
-
});
|
|
400
|
-
console.log(`Incident recorded: #${created.id}`);
|
|
401
|
-
if (created.memoryId)
|
|
402
|
-
console.log(` memory: ${created.memoryId}`);
|
|
403
|
-
if (created.linkedMemoryIds.length > 0) {
|
|
404
|
-
console.log(` linked memories: ${created.linkedMemoryIds.join(', ')}`);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
116
|
//# sourceMappingURL=decisions.js.map
|
package/dist/cli/eval.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleEval({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
2
|
+
export declare function handleEval({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=eval.d.ts.map
|