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/goals.js
CHANGED
|
@@ -1,46 +1,48 @@
|
|
|
1
1
|
// `hippo goal`: the per-session goal stack that recall boosts.
|
|
2
|
-
import { envHippoSessionId } from '../util/env.js';
|
|
2
|
+
import { DEFAULT_TENANT_ID, envHippoSessionId } from '../util/env.js';
|
|
3
3
|
import * as api from '../api/index.js';
|
|
4
|
-
import {
|
|
4
|
+
import { cliApiContext } from './api-context.js';
|
|
5
5
|
import { printError } from './output.js';
|
|
6
|
-
import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
7
|
-
|
|
6
|
+
import { boolFlag, flagIsTrue, isStringFlag, stringFlag } from './flag-values.js';
|
|
7
|
+
import { CliExit } from './exit.js';
|
|
8
8
|
// `hippo goal <push|list|complete|suspend|resume>`
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
9
|
const GOAL_POLICY_TYPES = [
|
|
11
10
|
'schema-fit-biased',
|
|
12
11
|
'error-prioritized',
|
|
13
12
|
'recency-first',
|
|
14
13
|
'hybrid',
|
|
15
14
|
];
|
|
15
|
+
function isGoalPolicyType(value) {
|
|
16
|
+
return GOAL_POLICY_TYPES.some((type) => type === value);
|
|
17
|
+
}
|
|
16
18
|
function sanitizeGoalName(s) {
|
|
17
19
|
// Strip C0 control chars + DEL to prevent terminal escape injection.
|
|
18
|
-
return s.replace(/[\
|
|
20
|
+
return s.replace(/[^\x20-\x7e\u0080-\uffff]/g, '?');
|
|
19
21
|
}
|
|
20
|
-
function resolveGoalSession(flags) {
|
|
22
|
+
function resolveGoalSession(flags, defaultTenantId) {
|
|
21
23
|
const sessionId = (flags['session-id'] !== undefined
|
|
22
24
|
? String(flags['session-id'])
|
|
23
25
|
: envHippoSessionId() ?? '').trim();
|
|
24
26
|
if (!sessionId) {
|
|
25
27
|
printError('session id required (set HIPPO_SESSION_ID or pass --session-id)');
|
|
26
|
-
|
|
28
|
+
throw new CliExit(1);
|
|
27
29
|
}
|
|
28
30
|
const tenantId = (flags['tenant-id'] !== undefined
|
|
29
31
|
? String(flags['tenant-id'])
|
|
30
|
-
:
|
|
32
|
+
: defaultTenantId).trim() || DEFAULT_TENANT_ID;
|
|
31
33
|
return { sessionId, tenantId };
|
|
32
34
|
}
|
|
33
35
|
function readGoalPolicy(flags) {
|
|
34
36
|
const policyRaw = flags['policy'];
|
|
35
37
|
if (policyRaw === true) {
|
|
36
38
|
printError('--policy requires a value (e.g., --policy error-prioritized)');
|
|
37
|
-
|
|
39
|
+
throw new CliExit(1);
|
|
38
40
|
}
|
|
39
|
-
if (
|
|
41
|
+
if (!isStringFlag(policyRaw))
|
|
40
42
|
return undefined;
|
|
41
|
-
if (!
|
|
43
|
+
if (!isGoalPolicyType(policyRaw)) {
|
|
42
44
|
printError(`Unknown --policy '${policyRaw}'. Expected one of: ${GOAL_POLICY_TYPES.join(' | ')}.`);
|
|
43
|
-
|
|
45
|
+
throw new CliExit(1);
|
|
44
46
|
}
|
|
45
47
|
return { policyType: policyRaw };
|
|
46
48
|
}
|
|
@@ -48,44 +50,44 @@ function readGoalLevel(flags) {
|
|
|
48
50
|
const levelRaw = flags['level'];
|
|
49
51
|
if (levelRaw === true) {
|
|
50
52
|
printError('--level requires a value (e.g., --level 1)');
|
|
51
|
-
|
|
53
|
+
throw new CliExit(1);
|
|
52
54
|
}
|
|
53
55
|
if (levelRaw === undefined)
|
|
54
56
|
return undefined;
|
|
55
57
|
const parsed = Number(levelRaw);
|
|
56
58
|
if (!Number.isFinite(parsed) || parsed < 0 || parsed > 2 || !Number.isInteger(parsed)) {
|
|
57
59
|
printError('--level must be an integer in [0, 2]');
|
|
58
|
-
|
|
60
|
+
throw new CliExit(1);
|
|
59
61
|
}
|
|
60
62
|
return parsed;
|
|
61
63
|
}
|
|
62
|
-
function cmdGoalPush(hippoRoot, args, flags) {
|
|
64
|
+
function cmdGoalPush(hippoRoot, defaultTenantId, args, flags) {
|
|
63
65
|
const rawName = args.join(' ').trim();
|
|
64
66
|
if (!rawName) {
|
|
65
67
|
printError('Usage: hippo goal push <name> [--policy <type>] [--success "<condition>"] [--level N] [--parent <goalId>]');
|
|
66
|
-
|
|
68
|
+
throw new CliExit(1);
|
|
67
69
|
}
|
|
68
70
|
// Sanitize at WRITE time so corrupt names never enter the DB.
|
|
69
71
|
const name = sanitizeGoalName(rawName);
|
|
70
72
|
if (name !== rawName) {
|
|
71
73
|
printError('note: stripped control characters from goal name');
|
|
72
74
|
}
|
|
73
|
-
const { sessionId, tenantId } = resolveGoalSession(flags);
|
|
75
|
+
const { sessionId, tenantId } = resolveGoalSession(flags, defaultTenantId);
|
|
74
76
|
const policy = readGoalPolicy(flags);
|
|
75
77
|
const successRaw = flags['success'];
|
|
76
78
|
if (successRaw === true) {
|
|
77
79
|
printError('--success requires a value (e.g., --success "<condition>")');
|
|
78
|
-
|
|
80
|
+
throw new CliExit(1);
|
|
79
81
|
}
|
|
80
82
|
const successCondition = stringFlag(flags, 'success');
|
|
81
83
|
const level = readGoalLevel(flags);
|
|
82
84
|
const parentRaw = flags['parent'];
|
|
83
85
|
if (parentRaw === true) {
|
|
84
86
|
printError('--parent requires a value (e.g., --parent <goalId>)');
|
|
85
|
-
|
|
87
|
+
throw new CliExit(1);
|
|
86
88
|
}
|
|
87
89
|
const parentGoalId = stringFlag(flags, 'parent');
|
|
88
|
-
const goal = api.goalPush(
|
|
90
|
+
const goal = api.goalPush(cliApiContext(hippoRoot, tenantId), {
|
|
89
91
|
sessionId,
|
|
90
92
|
goalName: name,
|
|
91
93
|
level,
|
|
@@ -95,21 +97,15 @@ function cmdGoalPush(hippoRoot, args, flags) {
|
|
|
95
97
|
});
|
|
96
98
|
console.log(goal.id);
|
|
97
99
|
}
|
|
98
|
-
function
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
function cmdGoalList(hippoRoot, flags) {
|
|
102
|
-
const { sessionId, tenantId } = resolveGoalSession(flags);
|
|
100
|
+
function cmdGoalList(hippoRoot, defaultTenantId, flags) {
|
|
101
|
+
const { sessionId, tenantId } = resolveGoalSession(flags, defaultTenantId);
|
|
103
102
|
const showAll = boolFlag(flags, 'all');
|
|
104
|
-
const goals = api.goalList(
|
|
103
|
+
const goals = api.goalList(cliApiContext(hippoRoot, tenantId), { sessionId, all: showAll });
|
|
105
104
|
if (goals.length === 0) {
|
|
106
105
|
console.log('(no goals)');
|
|
107
106
|
return;
|
|
108
107
|
}
|
|
109
|
-
//
|
|
110
|
-
// table but the assertion list (id, status, goal_name, outcome) needs four;
|
|
111
|
-
// tests check for substrings ('active', '0.9', name) so column count is
|
|
112
|
-
// observably four but not asserted.
|
|
108
|
+
// Four columns (id, status, goal_name, outcome); tests only check substrings, so the count is not asserted.
|
|
113
109
|
const rows = goals.map(g => ({
|
|
114
110
|
id: g.id,
|
|
115
111
|
status: g.status,
|
|
@@ -128,74 +124,74 @@ function cmdGoalList(hippoRoot, flags) {
|
|
|
128
124
|
console.log(`${pad(r.id, widths.id)} ${pad(r.status, widths.status)} ${pad(r.name, widths.name)} ${pad(r.outcome, widths.outcome)}`);
|
|
129
125
|
}
|
|
130
126
|
}
|
|
131
|
-
function cmdGoalComplete(hippoRoot, args, flags) {
|
|
127
|
+
function cmdGoalComplete(hippoRoot, tenantId, args, flags) {
|
|
132
128
|
const id = args[0];
|
|
133
129
|
if (!id) {
|
|
134
130
|
printError('Usage: hippo goal complete <id> [--outcome <0..1>] [--no-propagate]');
|
|
135
|
-
|
|
131
|
+
throw new CliExit(1);
|
|
136
132
|
}
|
|
137
133
|
let outcomeScore;
|
|
138
134
|
const outcomeRaw = flags['outcome'];
|
|
139
135
|
if (outcomeRaw === true) {
|
|
140
136
|
printError('--outcome requires a value (e.g., --outcome 0.9)');
|
|
141
|
-
|
|
137
|
+
throw new CliExit(1);
|
|
142
138
|
}
|
|
143
139
|
if (outcomeRaw !== undefined) {
|
|
144
140
|
const parsed = Number(outcomeRaw);
|
|
145
141
|
if (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {
|
|
146
142
|
printError('--outcome must be a number in [0, 1]');
|
|
147
|
-
|
|
143
|
+
throw new CliExit(1);
|
|
148
144
|
}
|
|
149
145
|
outcomeScore = parsed;
|
|
150
146
|
}
|
|
151
147
|
const noPropagate = flagIsTrue(flags, 'no-propagate');
|
|
152
|
-
api.goalComplete(
|
|
148
|
+
api.goalComplete(cliApiContext(hippoRoot, tenantId), id, { outcomeScore, noPropagate });
|
|
153
149
|
console.log('ok');
|
|
154
150
|
}
|
|
155
|
-
function cmdGoalSuspend(hippoRoot, args) {
|
|
151
|
+
function cmdGoalSuspend(hippoRoot, tenantId, args) {
|
|
156
152
|
const id = args[0];
|
|
157
153
|
if (!id) {
|
|
158
154
|
printError('Usage: hippo goal suspend <id>');
|
|
159
|
-
|
|
155
|
+
throw new CliExit(1);
|
|
160
156
|
}
|
|
161
|
-
api.goalSuspend(
|
|
157
|
+
api.goalSuspend(cliApiContext(hippoRoot, tenantId), id);
|
|
162
158
|
console.log('ok');
|
|
163
159
|
}
|
|
164
|
-
function cmdGoalResume(hippoRoot, args) {
|
|
160
|
+
function cmdGoalResume(hippoRoot, tenantId, args) {
|
|
165
161
|
const id = args[0];
|
|
166
162
|
if (!id) {
|
|
167
163
|
printError('Usage: hippo goal resume <id>');
|
|
168
|
-
|
|
164
|
+
throw new CliExit(1);
|
|
169
165
|
}
|
|
170
|
-
api.goalResume(
|
|
166
|
+
api.goalResume(cliApiContext(hippoRoot, tenantId), id);
|
|
171
167
|
console.log('ok');
|
|
172
168
|
}
|
|
173
|
-
export function
|
|
169
|
+
export function handleGoal({ hippoRoot, tenantId, args, flags }) {
|
|
174
170
|
const sub = args[0];
|
|
175
171
|
if (!sub) {
|
|
176
172
|
printError('Usage: hippo goal <push|list|complete|suspend|resume> [args]');
|
|
177
|
-
|
|
173
|
+
throw new CliExit(1);
|
|
178
174
|
}
|
|
179
175
|
const subArgs = args.slice(1);
|
|
180
176
|
switch (sub) {
|
|
181
177
|
case 'push':
|
|
182
|
-
cmdGoalPush(hippoRoot, subArgs, flags);
|
|
178
|
+
cmdGoalPush(hippoRoot, tenantId, subArgs, flags);
|
|
183
179
|
return;
|
|
184
180
|
case 'list':
|
|
185
|
-
cmdGoalList(hippoRoot, flags);
|
|
181
|
+
cmdGoalList(hippoRoot, tenantId, flags);
|
|
186
182
|
return;
|
|
187
183
|
case 'complete':
|
|
188
|
-
cmdGoalComplete(hippoRoot, subArgs, flags);
|
|
184
|
+
cmdGoalComplete(hippoRoot, tenantId, subArgs, flags);
|
|
189
185
|
return;
|
|
190
186
|
case 'suspend':
|
|
191
|
-
cmdGoalSuspend(hippoRoot, subArgs);
|
|
187
|
+
cmdGoalSuspend(hippoRoot, tenantId, subArgs);
|
|
192
188
|
return;
|
|
193
189
|
case 'resume':
|
|
194
|
-
cmdGoalResume(hippoRoot, subArgs);
|
|
190
|
+
cmdGoalResume(hippoRoot, tenantId, subArgs);
|
|
195
191
|
return;
|
|
196
192
|
default:
|
|
197
193
|
printError(`Unknown goal subcommand: ${sub}. Expected: push | list | complete | suspend | resume.`);
|
|
198
|
-
|
|
194
|
+
throw new CliExit(1);
|
|
199
195
|
}
|
|
200
196
|
}
|
|
201
197
|
//# sourceMappingURL=goals.js.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// The entity graph verbs: rebuild it from the consolidated objects, print it, or write it out as a diagram.
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { extractGraph } from '../graph/extract.js';
|
|
4
|
+
import { buildGraphModel, renderGraphHtml, renderGraphCanvas, DEFAULT_VIEW_LIMIT } from '../graph/view.js';
|
|
5
|
+
import { printError } from './output.js';
|
|
6
|
+
import { stringFlag } from './flag-values.js';
|
|
7
|
+
import { requireInit } from './shared.js';
|
|
8
|
+
import { CliExit } from './exit.js';
|
|
9
|
+
import { openInBrowser } from './open-browser.js';
|
|
10
|
+
function graphExtract(hippoRoot, tenantId) {
|
|
11
|
+
const result = extractGraph(hippoRoot, tenantId);
|
|
12
|
+
const byType = Object.entries(result.byType)
|
|
13
|
+
.map(([t, n]) => `${t} ${n}`)
|
|
14
|
+
.join(', ');
|
|
15
|
+
const supersedes = result.relations - result.references;
|
|
16
|
+
const relations = `${result.relations} relations (${supersedes} supersedes, ${result.references} references)`;
|
|
17
|
+
console.log(`Graph extracted: ${result.entities} entities (${byType}) + ${relations}.`);
|
|
18
|
+
if (result.truncated.length > 0) {
|
|
19
|
+
printError(`WARNING: under-extracted (hit the per-type cap): ${result.truncated.join(', ')}. The graph is incomplete for those types.`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function graphShow(hippoRoot, tenantId, entity, flags) {
|
|
23
|
+
const model = buildGraphModel(hippoRoot, tenantId, { entity, limit: DEFAULT_VIEW_LIMIT });
|
|
24
|
+
if (flags['json']) {
|
|
25
|
+
console.log(JSON.stringify(model, null, 2));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (model.nodes.length === 0) {
|
|
29
|
+
console.log(entity ? `No entity named "${entity}".` : 'Graph is empty. Run `hippo graph extract` first.');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(`Graph: ${model.nodes.length} entities, ${model.edges.length} relations${model.truncated ? ' (truncated)' : ''}`);
|
|
33
|
+
const byType = new Map();
|
|
34
|
+
for (const n of model.nodes) {
|
|
35
|
+
const arr = byType.get(n.type) ?? [];
|
|
36
|
+
arr.push({ id: n.id, name: n.name });
|
|
37
|
+
byType.set(n.type, arr);
|
|
38
|
+
}
|
|
39
|
+
for (const [type, ns] of byType) {
|
|
40
|
+
console.log(`\n${type} (${ns.length}):`);
|
|
41
|
+
for (const n of ns)
|
|
42
|
+
console.log(` [${n.id}] ${n.name}`);
|
|
43
|
+
}
|
|
44
|
+
if (model.edges.length > 0) {
|
|
45
|
+
const nameById = new Map(model.nodes.map((n) => [n.id, n.name]));
|
|
46
|
+
console.log('\nrelations:');
|
|
47
|
+
for (const e of model.edges) {
|
|
48
|
+
console.log(` ${nameById.get(e.from)} --${e.relType}--> ${nameById.get(e.to)}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function graphView(hippoRoot, tenantId, entity, flags) {
|
|
53
|
+
const format = stringFlag(flags, 'format') ?? 'html';
|
|
54
|
+
if (format !== 'html' && format !== 'canvas') {
|
|
55
|
+
printError("graph view: --format must be 'html' or 'canvas'");
|
|
56
|
+
throw new CliExit(1);
|
|
57
|
+
}
|
|
58
|
+
const model = buildGraphModel(hippoRoot, tenantId, { entity, limit: DEFAULT_VIEW_LIMIT });
|
|
59
|
+
const content = format === 'canvas' ? renderGraphCanvas(model) : renderGraphHtml(model);
|
|
60
|
+
const defaultOut = format === 'canvas' ? 'hippo-graph.canvas' : 'hippo-graph.html';
|
|
61
|
+
const out = stringFlag(flags, 'out') ?? defaultOut;
|
|
62
|
+
fs.writeFileSync(out, content, 'utf8');
|
|
63
|
+
console.log(`Wrote ${model.nodes.length} entities + ${model.edges.length} relations to ${out}${model.truncated ? ' (truncated)' : ''}`);
|
|
64
|
+
if (flags['open'] && format === 'html')
|
|
65
|
+
openInBrowser(out);
|
|
66
|
+
}
|
|
67
|
+
export function handleGraph({ hippoRoot, tenantId, args, flags }) {
|
|
68
|
+
requireInit(hippoRoot);
|
|
69
|
+
const subcommand = args[0] ?? '';
|
|
70
|
+
if (subcommand === 'extract')
|
|
71
|
+
return graphExtract(hippoRoot, tenantId);
|
|
72
|
+
const entity = stringFlag(flags, 'entity');
|
|
73
|
+
if (subcommand === 'show')
|
|
74
|
+
return graphShow(hippoRoot, tenantId, entity, flags);
|
|
75
|
+
if (subcommand === 'view')
|
|
76
|
+
return graphView(hippoRoot, tenantId, entity, flags);
|
|
77
|
+
printError('Usage:\n' +
|
|
78
|
+
' hippo graph extract Rebuild the entity/relation graph from consolidated objects\n' +
|
|
79
|
+
' hippo graph show [--entity NAME] [--json] Inspect entities + their edges (text or JSON)\n' +
|
|
80
|
+
' hippo graph view [--out FILE] [--open] [--format html|canvas] [--entity NAME] Generate an interactive node-link diagram');
|
|
81
|
+
throw new CliExit(1);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -1,48 +1,28 @@
|
|
|
1
1
|
import type { HookRuntime } from '../core/capture-contract.js';
|
|
2
|
-
import { type DeliveryEventType, type DeliveryRecorder } from '../store/delivery-recorder.js';
|
|
3
2
|
import type { CliFlags } from './flag-values.js';
|
|
4
|
-
/**
|
|
5
|
-
* Detached worker that counts re-reads, runs sleep, then capture. Invoked via the internal
|
|
6
|
-
* `__session-end-worker` subcommand (not user-facing). Failures in one stage
|
|
7
|
-
* do not block the other.
|
|
8
|
-
*/
|
|
3
|
+
/** Detached worker (internal `__session-end-worker`): counts re-reads, runs sleep, then capture; one stage failing does not block the other. */
|
|
9
4
|
/** A folder without its own store never sleeps at session end, so its project's agent notes go to the global store here. */
|
|
10
5
|
export declare function logSessionEndImport(logFile: string | null, transcriptPath: string | undefined): void;
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* `cmdSessionEndWorker`. `cmdSleep`/`cmdCapture` each tee console output to
|
|
14
|
-
* `logFile` only for their own duration (the tee is restored before this
|
|
15
|
-
* runs), so a plain `console.log` here would be silently discarded under
|
|
16
|
-
* the detached worker's `stdio: 'ignore'` — write straight to the file
|
|
17
|
-
* instead, matching capture.ts's `appendPreCompactLog` convention.
|
|
18
|
-
*/
|
|
6
|
+
/** Best-effort log line for the cmdSessionEndWorker snapshot-close step: cmdSleep/cmdCapture restore their console tee before this runs,
|
|
7
|
+
* so console.log would be lost under the worker's `stdio: 'ignore'`; write to the file directly. */
|
|
19
8
|
export declare function appendSessionEndCloseLog(logFile: string | null, message: string, opts?: {
|
|
20
9
|
startFresh?: boolean;
|
|
21
10
|
}): void;
|
|
11
|
+
/** A session-end step that failed: one warn line, and the same text in the session log, the only place a detached worker's output survives. */
|
|
12
|
+
export declare function reportSessionEndFailure<E>(logFile: string | null, step: string, err: E): void;
|
|
22
13
|
export declare function hostSessionId(): string | undefined;
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
* Best-effort and silent: a malformed payload records nothing.
|
|
29
|
-
*/
|
|
30
|
-
export declare function resetHookInjection(hippoRoot: string, stdinText: string | undefined, requiredSource: string | null): void;
|
|
31
|
-
/**
|
|
32
|
-
* The store a Claude Code hook writes to: the project store when there is
|
|
33
|
-
* one, else an existing global store, else the project path (which the hook
|
|
34
|
-
* then skips, since hooks fire in every directory and must not create one).
|
|
35
|
-
* Pre-compact and compact-resume must agree, or a snapshot saved to one store
|
|
36
|
-
* is looked for in the other.
|
|
37
|
-
*/
|
|
14
|
+
/** Compaction drops the pinned blocks the per-prompt hook injected, so record a `reset` for the payload's session and the next prompt injects again.
|
|
15
|
+
* `requiredSource` limits it to payloads with that `source`; best-effort and silent on a malformed payload. */
|
|
16
|
+
export declare function resetHookInjection(hippoRoot: string, tenantId: string, stdinText: string | undefined, requiredSource: string | null): void;
|
|
17
|
+
/** Store a hook writes to: the project store, else an existing global one, else the project path (skipped: hooks must not create a store).
|
|
18
|
+
* Pre-compact and compact-resume must agree, or a snapshot is looked for in the other store. */
|
|
38
19
|
export declare function hookStoreRoot(hippoRoot: string): string;
|
|
39
20
|
/** `--runtime copilot`, or `--format copilot` on `hippo context`, marks a Copilot hook: the flag decides, never the payload. */
|
|
40
21
|
export declare function hookRuntime(flags: CliFlags): HookRuntime;
|
|
41
|
-
/** A delivery recorder when the ledger store enables one, else null; never throws. */
|
|
42
|
-
export declare function startDeliveryRecorder(hippoRoot: string, stdinText: string | undefined, runtime: HookRuntime, eventType?: DeliveryEventType): DeliveryRecorder | null;
|
|
43
22
|
/** A Copilot hook's project root, from the payload's `cwd`, since VS Code runs user-level hooks in the home folder; other runtimes keep `hippoRoot`. */
|
|
44
23
|
export declare function payloadCwdRoot(hippoRoot: string, stdinText: string | undefined, runtime: HookRuntime): string;
|
|
45
|
-
/** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's
|
|
24
|
+
/** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's
|
|
25
|
+
* work with one warning, exit 0. */
|
|
46
26
|
export declare function runHookWithStores<T>(fn: () => T | Promise<T>): Promise<T | undefined>;
|
|
47
27
|
/** Whether this session sits in the pilot's holdout arm; off at rate 0 and with no session id. */
|
|
48
28
|
export declare function inPilotHoldout(hippoRoot: string, tenantId: string, sessionId: string | undefined, write: boolean): boolean;
|
package/dist/cli/hook-runtime.js
CHANGED
|
@@ -2,27 +2,17 @@
|
|
|
2
2
|
import { envClaudeCodeSessionId, envHippoSessionId } from '../util/env.js';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
|
-
import { getHippoRoot, isInitialized } from '../store/open.js';
|
|
6
|
-
import { loadConfig } from '../core/config.js';
|
|
7
|
-
import { createDeliveryRecorder } from '../store/delivery-recorder.js';
|
|
8
5
|
import { isSqliteBusy, noteStoreBusy, runWithRequestStores, HOOK_DB_WAIT_MS } from '../db/index.js';
|
|
9
|
-
import { bookTokenUse
|
|
6
|
+
import { bookTokenUse } from '../api/ledger-db.js';
|
|
10
7
|
import { sessionPilotArm } from '../api/pilot-arm.js';
|
|
11
|
-
import { hookPayloadSessionId, hookPayloadString, isSubagentPayload } from '../
|
|
12
|
-
import { blockHash } from '../util/token-text.js';
|
|
8
|
+
import { hookPayloadSessionId, hookPayloadString, isSubagentPayload } from '../util/hook-payload.js';
|
|
13
9
|
import { importAtSessionEnd, currentMachine } from '../agent-memories/sync.js';
|
|
14
10
|
import { summaryLine } from '../agent-memories/report.js';
|
|
15
|
-
import {
|
|
16
|
-
import { getGlobalRoot } from '../sharing/
|
|
11
|
+
import { getHippoRoot, isInitialized } from '../core/project-identity.js';
|
|
12
|
+
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
17
13
|
import { sanitizeLogMessage } from '../capture/compact.js';
|
|
18
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
19
14
|
import { errorMessage, log } from '../util/log.js';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Detached worker that counts re-reads, runs sleep, then capture. Invoked via the internal
|
|
23
|
-
* `__session-end-worker` subcommand (not user-facing). Failures in one stage
|
|
24
|
-
* do not block the other.
|
|
25
|
-
*/
|
|
15
|
+
/** Detached worker (internal `__session-end-worker`): counts re-reads, runs sleep, then capture; one stage failing does not block the other. */
|
|
26
16
|
/** A folder without its own store never sleeps at session end, so its project's agent notes go to the global store here. */
|
|
27
17
|
export function logSessionEndImport(logFile, transcriptPath) {
|
|
28
18
|
try {
|
|
@@ -37,14 +27,8 @@ export function logSessionEndImport(logFile, transcriptPath) {
|
|
|
37
27
|
appendSessionEndCloseLog(logFile, `agent memory import failed: ${errorMessage(err)}`);
|
|
38
28
|
}
|
|
39
29
|
}
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* `cmdSessionEndWorker`. `cmdSleep`/`cmdCapture` each tee console output to
|
|
43
|
-
* `logFile` only for their own duration (the tee is restored before this
|
|
44
|
-
* runs), so a plain `console.log` here would be silently discarded under
|
|
45
|
-
* the detached worker's `stdio: 'ignore'` — write straight to the file
|
|
46
|
-
* instead, matching capture.ts's `appendPreCompactLog` convention.
|
|
47
|
-
*/
|
|
30
|
+
/** Best-effort log line for the cmdSessionEndWorker snapshot-close step: cmdSleep/cmdCapture restore their console tee before this runs,
|
|
31
|
+
* so console.log would be lost under the worker's `stdio: 'ignore'`; write to the file directly. */
|
|
48
32
|
export function appendSessionEndCloseLog(logFile, message, opts = {}) {
|
|
49
33
|
if (!logFile)
|
|
50
34
|
return;
|
|
@@ -60,33 +44,29 @@ export function appendSessionEndCloseLog(logFile, message, opts = {}) {
|
|
|
60
44
|
log.debug(`session-end log not written: ${errorMessage(err)}`);
|
|
61
45
|
}
|
|
62
46
|
}
|
|
47
|
+
/** A session-end step that failed: one warn line, and the same text in the session log, the only place a detached worker's output survives. */
|
|
48
|
+
export function reportSessionEndFailure(logFile, step, err) {
|
|
49
|
+
const line = `${step} failed: ${errorMessage(err)}`;
|
|
50
|
+
log.warn(line);
|
|
51
|
+
appendSessionEndCloseLog(logFile, line);
|
|
52
|
+
}
|
|
63
53
|
// Claude Code exports its own session var, not ours; without the fallback agent-run recalls trace with no session.
|
|
64
54
|
export function hostSessionId() {
|
|
65
55
|
return envHippoSessionId() ?? envClaudeCodeSessionId();
|
|
66
56
|
}
|
|
67
|
-
/**
|
|
68
|
-
*
|
|
69
|
-
|
|
70
|
-
* injects again even if nothing changed. `requiredSource` limits it to hook
|
|
71
|
-
* payloads with that `source` (SessionStart fires for other reasons too).
|
|
72
|
-
* Best-effort and silent: a malformed payload records nothing.
|
|
73
|
-
*/
|
|
74
|
-
export function resetHookInjection(hippoRoot, stdinText, requiredSource) {
|
|
57
|
+
/** Compaction drops the pinned blocks the per-prompt hook injected, so record a `reset` for the payload's session and the next prompt injects again.
|
|
58
|
+
* `requiredSource` limits it to payloads with that `source`; best-effort and silent on a malformed payload. */
|
|
59
|
+
export function resetHookInjection(hippoRoot, tenantId, stdinText, requiredSource) {
|
|
75
60
|
const sessionId = hookPayloadSessionId(stdinText, requiredSource);
|
|
76
61
|
// A sub-agent's compaction leaves its parent's context, and the blocks in it, as they were.
|
|
77
62
|
if (sessionId === null || isSubagentPayload(stdinText))
|
|
78
63
|
return;
|
|
79
64
|
bookTokenUse(hippoRoot, {
|
|
80
|
-
tenantId
|
|
65
|
+
tenantId, sessionId, surface: 'hook', event: 'reset', items: 0, tokens: 0,
|
|
81
66
|
});
|
|
82
67
|
}
|
|
83
|
-
/**
|
|
84
|
-
*
|
|
85
|
-
* one, else an existing global store, else the project path (which the hook
|
|
86
|
-
* then skips, since hooks fire in every directory and must not create one).
|
|
87
|
-
* Pre-compact and compact-resume must agree, or a snapshot saved to one store
|
|
88
|
-
* is looked for in the other.
|
|
89
|
-
*/
|
|
68
|
+
/** Store a hook writes to: the project store, else an existing global one, else the project path (skipped: hooks must not create a store).
|
|
69
|
+
* Pre-compact and compact-resume must agree, or a snapshot is looked for in the other store. */
|
|
90
70
|
export function hookStoreRoot(hippoRoot) {
|
|
91
71
|
if (isInitialized(hippoRoot))
|
|
92
72
|
return hippoRoot;
|
|
@@ -97,30 +77,6 @@ export function hookStoreRoot(hippoRoot) {
|
|
|
97
77
|
export function hookRuntime(flags) {
|
|
98
78
|
return flags['runtime'] === 'copilot' || flags['format'] === 'copilot' ? 'copilot' : 'claude-code';
|
|
99
79
|
}
|
|
100
|
-
/** A delivery recorder when the ledger store enables one, else null; never throws. */
|
|
101
|
-
export function startDeliveryRecorder(hippoRoot, stdinText, runtime, eventType) {
|
|
102
|
-
try {
|
|
103
|
-
// The same store withLedgerDb writes the token ledger to, so its config governs both.
|
|
104
|
-
const root = ledgerRoot(hippoRoot);
|
|
105
|
-
if (root === null || !loadConfig(root).deliveryLedger.enabled)
|
|
106
|
-
return null;
|
|
107
|
-
return createDeliveryRecorder({
|
|
108
|
-
root,
|
|
109
|
-
storeHash: blockHash(path.resolve(root)),
|
|
110
|
-
writeStore: isGlobalStoreRoot(root) ? 'global' : 'local',
|
|
111
|
-
tenantId: resolveTenantId({}),
|
|
112
|
-
stdinText,
|
|
113
|
-
envSessionId: hostSessionId(),
|
|
114
|
-
runtime: runtime === 'copilot' ? 'copilot' : undefined,
|
|
115
|
-
eventType,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
// The hook's one-line stderr contract pins this exact text, so it bypasses the leveled logger.
|
|
120
|
-
printError(`[hippo] delivery ledger skipped:${errorMessage(error)}`);
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
80
|
/** A Copilot hook's project root, from the payload's `cwd`, since VS Code runs user-level hooks in the home folder; other runtimes keep `hippoRoot`. */
|
|
125
81
|
export function payloadCwdRoot(hippoRoot, stdinText, runtime) {
|
|
126
82
|
const cwd = runtime === 'copilot' ? hookPayloadString(stdinText, 'cwd') : null;
|
|
@@ -136,7 +92,8 @@ export function payloadCwdRoot(hippoRoot, stdinText, runtime) {
|
|
|
136
92
|
}
|
|
137
93
|
return getHippoRoot(process.cwd());
|
|
138
94
|
}
|
|
139
|
-
/** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's
|
|
95
|
+
/** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's
|
|
96
|
+
* work with one warning, exit 0. */
|
|
140
97
|
export async function runHookWithStores(fn) {
|
|
141
98
|
try {
|
|
142
99
|
return await runWithRequestStores(fn, { busyWaitMs: HOOK_DB_WAIT_MS, failFastWhenBusy: true });
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// First-class object verbs for incidents: open one, resolve it, close it.
|
|
2
|
+
import { extractPathTags } from '../search/path-context.js';
|
|
3
|
+
import * as incidentsModule from '../objects/incidents.js';
|
|
4
|
+
import { printError } from './output.js';
|
|
5
|
+
import { nonEmptyStringFlag, isStringFlag, stringFlag } from './flag-values.js';
|
|
6
|
+
import { requireInit } from './shared.js';
|
|
7
|
+
import { closeObject, foundOrExit, idArgOrExit, listObjects } from './object-verbs.js';
|
|
8
|
+
import { CliExit } from './exit.js';
|
|
9
|
+
const INCIDENT = { cmd: 'incident', noun: 'Incident', idLabel: 'incident' };
|
|
10
|
+
function printIncidentRow(inc) {
|
|
11
|
+
const linkPart = inc.linkedMemoryIds.length > 0 ? ` links=${inc.linkedMemoryIds.length}` : '';
|
|
12
|
+
console.log(`#${inc.id} [${inc.status}]${linkPart} memory=${inc.memoryId ?? '-'}`);
|
|
13
|
+
console.log(` ${inc.incidentText}`);
|
|
14
|
+
if (inc.context)
|
|
15
|
+
console.log(` context: ${inc.context}`);
|
|
16
|
+
}
|
|
17
|
+
function incidentList(hippoRoot, tenantId, flags) {
|
|
18
|
+
listObjects(flags, {
|
|
19
|
+
plural: 'incidents',
|
|
20
|
+
states: incidentsModule.VALID_INCIDENT_STATES,
|
|
21
|
+
load: (opts) => incidentsModule.loadIncidents(hippoRoot, tenantId, opts),
|
|
22
|
+
printRow: printIncidentRow,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function incidentGet(hippoRoot, tenantId, args) {
|
|
26
|
+
const id = idArgOrExit(args, 'Usage: hippo incident get <id>', INCIDENT.idLabel);
|
|
27
|
+
const incident = foundOrExit(incidentsModule.loadIncidentById(hippoRoot, tenantId, id), INCIDENT.noun, id);
|
|
28
|
+
console.log(`Incident #${incident.id}`);
|
|
29
|
+
console.log(` status: ${incident.status}`);
|
|
30
|
+
console.log(` text: ${incident.incidentText}`);
|
|
31
|
+
if (incident.context)
|
|
32
|
+
console.log(` context: ${incident.context}`);
|
|
33
|
+
if (incident.resolutionText)
|
|
34
|
+
console.log(` resolution: ${incident.resolutionText}`);
|
|
35
|
+
if (incident.resolvedAt)
|
|
36
|
+
console.log(` resolved_at: ${incident.resolvedAt}`);
|
|
37
|
+
if (incident.closedAt)
|
|
38
|
+
console.log(` closed_at: ${incident.closedAt}`);
|
|
39
|
+
if (incident.linkedMemoryIds.length > 0) {
|
|
40
|
+
console.log(` linked memories: ${incident.linkedMemoryIds.join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
if (incident.memoryId)
|
|
43
|
+
console.log(` memory: ${incident.memoryId}`);
|
|
44
|
+
console.log(` created: ${incident.createdAt}`);
|
|
45
|
+
}
|
|
46
|
+
function incidentResolve(hippoRoot, tenantId, args, flags) {
|
|
47
|
+
const id = idArgOrExit(args, 'Usage: hippo incident resolve <id> --resolution "<text>"', INCIDENT.idLabel);
|
|
48
|
+
const resolutionRaw = stringFlag(flags, 'resolution');
|
|
49
|
+
if (!resolutionRaw?.trim()) {
|
|
50
|
+
printError('--resolution requires a non-empty value, e.g. hippo incident resolve <id> --resolution "root cause fixed".');
|
|
51
|
+
throw new CliExit(1);
|
|
52
|
+
}
|
|
53
|
+
const resolved = incidentsModule.resolveIncident(hippoRoot, tenantId, id, resolutionRaw);
|
|
54
|
+
console.log(`Incident #${resolved.id} resolved.`);
|
|
55
|
+
}
|
|
56
|
+
function incidentClose(hippoRoot, tenantId, args) {
|
|
57
|
+
closeObject(args, INCIDENT, (id) => incidentsModule.closeIncident(hippoRoot, tenantId, id));
|
|
58
|
+
}
|
|
59
|
+
export function handleIncident({ hippoRoot, tenantId, args, flags }) {
|
|
60
|
+
requireInit(hippoRoot);
|
|
61
|
+
const subcommand = args[0] ?? '';
|
|
62
|
+
if (subcommand === 'list')
|
|
63
|
+
return incidentList(hippoRoot, tenantId, flags);
|
|
64
|
+
if (subcommand === 'get')
|
|
65
|
+
return incidentGet(hippoRoot, tenantId, args);
|
|
66
|
+
if (subcommand === 'resolve')
|
|
67
|
+
return incidentResolve(hippoRoot, tenantId, args, flags);
|
|
68
|
+
if (subcommand === 'close')
|
|
69
|
+
return incidentClose(hippoRoot, tenantId, args);
|
|
70
|
+
// Default subcommand is open (create): accept both `incident open "<text>"` and bare `incident "<text>"`;
|
|
71
|
+
// for the `open` keyword the text is args[1], otherwise args[0] is the text.
|
|
72
|
+
incidentCreate(hippoRoot, tenantId, subcommand === 'open' ? (args[1] ?? '') : subcommand, flags);
|
|
73
|
+
}
|
|
74
|
+
function incidentCreate(hippoRoot, tenantId, incidentText, flags) {
|
|
75
|
+
if (!incidentText) {
|
|
76
|
+
printError('Usage: hippo incident "<incident>" [--context "<details>"] [--link <memory-id>]...');
|
|
77
|
+
printError(' hippo incident list [--status open|resolved|closed|all] [--limit N]');
|
|
78
|
+
printError(' hippo incident get <id>');
|
|
79
|
+
printError(' hippo incident resolve <id> --resolution "<text>"');
|
|
80
|
+
printError(' hippo incident close <id>');
|
|
81
|
+
throw new CliExit(1);
|
|
82
|
+
}
|
|
83
|
+
const context = nonEmptyStringFlag(flags, 'context');
|
|
84
|
+
// --link is a repeatable flag (collected into an array by parseArgs). A
|
|
85
|
+
// single --link <id> yields a string; normalize both to string[].
|
|
86
|
+
const linkRaw = flags['link'];
|
|
87
|
+
let linkedMemoryIds;
|
|
88
|
+
if (Array.isArray(linkRaw)) {
|
|
89
|
+
linkedMemoryIds = linkRaw;
|
|
90
|
+
}
|
|
91
|
+
else if (isStringFlag(linkRaw)) {
|
|
92
|
+
linkedMemoryIds = [linkRaw];
|
|
93
|
+
}
|
|
94
|
+
else if (linkRaw === true) {
|
|
95
|
+
printError('--link requires a memory id, e.g. hippo incident "<text>" --link mem_abc123.');
|
|
96
|
+
throw new CliExit(1);
|
|
97
|
+
}
|
|
98
|
+
const incidentPathTags = extractPathTags(process.cwd());
|
|
99
|
+
const created = incidentsModule.saveIncident(hippoRoot, tenantId, {
|
|
100
|
+
incidentText,
|
|
101
|
+
context,
|
|
102
|
+
linkedMemoryIds,
|
|
103
|
+
extraTags: incidentPathTags,
|
|
104
|
+
});
|
|
105
|
+
console.log(`Incident recorded: #${created.id}`);
|
|
106
|
+
if (created.memoryId)
|
|
107
|
+
console.log(` memory: ${created.memoryId}`);
|
|
108
|
+
if (created.linkedMemoryIds.length > 0) {
|
|
109
|
+
console.log(` linked memories: ${created.linkedMemoryIds.join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=incidents.js.map
|
package/dist/cli/init.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleInit({ hippoRoot, tenantId, flags }: CommandContext): void;
|
|
3
3
|
//# sourceMappingURL=init.d.ts.map
|