hippo-memory 1.70.0 → 1.71.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 +1 -1
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +14 -5
- 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/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +10 -5
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +2 -22
- package/dist/api/audit.d.ts +5 -1
- package/dist/api/audit.js +9 -1
- package/dist/api/auth.d.ts +13 -22
- package/dist/api/auth.js +34 -24
- package/dist/api/auto-sleep.js +2 -2
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +2 -15
- package/dist/api/context-select.js +3 -4
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +21 -38
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +7 -26
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +5 -26
- package/dist/api/forget.d.ts +5 -24
- package/dist/api/forget.js +5 -28
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/instruction-detect.js +16 -5
- package/dist/api/ledger-db.d.ts +2 -1
- package/dist/api/ledger-db.js +5 -3
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -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/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +11 -19
- package/dist/api/prompt-hook.d.ts +4 -4
- package/dist/api/prompt-hook.js +10 -9
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.js +14 -6
- 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 +16 -9
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +59 -60
- 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 +18 -1
- package/dist/api/remember.js +13 -1
- package/dist/api/sleep-run.d.ts +1 -3
- package/dist/api/sleep-run.js +17 -21
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +3 -10
- package/dist/api/types.d.ts +6 -29
- package/dist/api/types.js +4 -22
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +6 -22
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +16 -25
- package/dist/capture/compaction-record.js +101 -69
- package/dist/capture/compaction-spool.d.ts +1 -1
- package/dist/capture/compaction-spool.js +1 -1
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +13 -7
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +4 -18
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +6 -39
- package/dist/cli/audit-prune.js +6 -39
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +33 -34
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +57 -39
- package/dist/cli/briefs.d.ts +4 -4
- package/dist/cli/briefs.js +18 -22
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +31 -32
- package/dist/cli/client.d.ts +7 -27
- package/dist/cli/client.js +24 -43
- package/dist/cli/compact-resume-payload.js +3 -2
- package/dist/cli/context.d.ts +1 -2
- package/dist/cli/context.js +12 -8
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +62 -64
- package/dist/cli/correction-latency.d.ts +2 -14
- package/dist/cli/correction-latency.js +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +68 -92
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +33 -27
- package/dist/cli/decisions.d.ts +4 -4
- package/dist/cli/decisions.js +33 -47
- package/dist/cli/eval.js +15 -13
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +6 -4
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +27 -10
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.js +1 -1
- 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/hook-runtime.d.ts +9 -27
- package/dist/cli/hook-runtime.js +15 -31
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +6 -12
- package/dist/cli/install-steps.js +3 -12
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +3 -0
- package/dist/cli/maintenance.d.ts +4 -4
- package/dist/cli/maintenance.js +14 -19
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +4 -4
- package/dist/cli/playbooks.js +23 -28
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +1 -4
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +1 -3
- package/dist/cli/provenance-coverage.d.ts +2 -6
- package/dist/cli/provenance-coverage.js +2 -6
- package/dist/cli/quality-repair-once.js +2 -2
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +55 -131
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +9 -36
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +122 -180
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +12 -18
- package/dist/cli/serve.js +21 -12
- package/dist/cli/session-hooks.d.ts +10 -18
- package/dist/cli/session-hooks.js +112 -113
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +19 -21
- package/dist/cli/shared.d.ts +9 -23
- package/dist/cli/shared.js +9 -32
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +15 -16
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +55 -98
- 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 +66 -89
- package/dist/cli/usage.js +11 -5
- package/dist/cli.d.ts +66 -448
- package/dist/cli.js +87 -263
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +14 -49
- 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 +12 -29
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +4 -10
- 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 +2 -16
- package/dist/connectors/github/webhook.js +6 -22
- 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 +2 -19
- package/dist/connectors/slack/ingest.d.ts +2 -3
- package/dist/connectors/slack/ingest.js +2 -3
- 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 +2 -19
- package/dist/connectors/slack/webhook.js +5 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +6 -14
- 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 +14 -75
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +6 -52
- package/dist/consolidate/dedupe.js +13 -71
- 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 +4 -21
- 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 +16 -104
- package/dist/consolidate/merge.js +10 -31
- package/dist/consolidate/merged-row.js +2 -1
- package/dist/consolidate/physics-pass.js +1 -3
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +14 -52
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +5 -17
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +6 -22
- package/dist/core/ablation.d.ts +4 -91
- package/dist/core/ablation.js +4 -91
- package/dist/core/ambient.d.ts +1 -8
- package/dist/core/ambient.js +1 -8
- 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 +8 -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 +13 -14
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +41 -164
- package/dist/core/memory.js +51 -221
- 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 +59 -122
- package/dist/core/project-identity.d.ts +17 -58
- package/dist/core/project-identity.js +17 -38
- 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/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 +1 -1
- package/dist/db/busy.js +17 -8
- package/dist/db/connect.d.ts +1 -0
- package/dist/db/connect.js +3 -3
- package/dist/db/migrate.js +3 -3
- 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/open.d.ts +2 -0
- package/dist/db/open.js +17 -1
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +25 -36
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +8 -1
- package/dist/doctor.js +74 -19
- package/dist/entry/session-text.js +2 -1
- 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 +74 -34
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +7 -34
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +19 -11
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +7 -33
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +14 -76
- 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 +11 -39
- package/dist/hooks/codex-wrapper.js +2 -2
- 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 +18 -57
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +9 -76
- package/dist/hooks/shared.d.ts +8 -17
- package/dist/hooks/shared.js +29 -20
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +9 -27
- 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 +7 -35
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +25 -81
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/learn/autolearn.d.ts +14 -41
- package/dist/learn/autolearn.js +14 -41
- package/dist/learn/extract.js +2 -4
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +14 -66
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +9 -26
- package/dist/mcp/admin-tools.js +3 -5
- package/dist/mcp/memory-tools.js +4 -9
- package/dist/mcp/protocol.d.ts +8 -26
- package/dist/mcp/protocol.js +3 -6
- package/dist/mcp/recall-tools.js +3 -3
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +10 -26
- 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 +48 -12
- package/dist/mcp/tools.js +5 -3
- package/dist/objects/customer-notes.d.ts +7 -42
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +12 -50
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/incidents.d.ts +7 -38
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/policies.d.ts +11 -89
- package/dist/objects/policies.js +11 -98
- package/dist/objects/processes.d.ts +7 -52
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +11 -55
- package/dist/objects/project-briefs.js +14 -75
- package/dist/objects/skills.d.ts +7 -42
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +6 -19
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +3 -31
- package/dist/rerankers/cross-encoder.js +4 -6
- package/dist/rerankers/jev.js +9 -6
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +2 -1
- package/dist/rerankers/outage-warning.js +2 -1
- 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/boosts.d.ts +0 -2
- package/dist/search/boosts.js +2 -2
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid.d.ts +2 -0
- 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.js +11 -8
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +7 -0
- package/dist/search/vector.js +35 -5
- package/dist/server/auth.d.ts +9 -28
- package/dist/server/auth.js +32 -25
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +63 -96
- package/dist/server/client-ip.d.ts +3 -19
- package/dist/server/client-ip.js +5 -28
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -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 +10 -44
- 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 +9 -17
- package/dist/server/route-table.js +42 -49
- package/dist/server/routes/admin.js +22 -28
- package/dist/server/routes/customer-notes.js +7 -12
- package/dist/server/routes/decisions.js +10 -17
- package/dist/server/routes/incidents.js +12 -20
- package/dist/server/routes/memories.js +12 -32
- package/dist/server/routes/object-routes.d.ts +0 -5
- package/dist/server/routes/object-routes.js +7 -15
- package/dist/server/routes/policies.js +10 -18
- package/dist/server/routes/predictions.js +13 -25
- package/dist/server/routes/processes.js +16 -26
- package/dist/server/routes/project-briefs.js +9 -16
- package/dist/server/routes/recall.js +10 -35
- package/dist/server/routes/skills.js +8 -18
- package/dist/server/server-detect.d.ts +9 -53
- package/dist/server/server-detect.js +24 -90
- package/dist/server/sleep-offload.js +4 -1
- package/dist/server/types.d.ts +12 -10
- package/dist/server/validation.d.ts +3 -1
- package/dist/server/validation.js +10 -23
- package/dist/server.d.ts +2 -2
- package/dist/server.js +3 -2
- 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 +80 -0
- package/dist/sharing/project-merge.d.ts +4 -5
- package/dist/sharing/project-merge.js +9 -7
- package/dist/sharing/scope.d.ts +4 -11
- package/dist/sharing/scope.js +4 -11
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/store/ambient.js +4 -9
- package/dist/store/audit-event.d.ts +4 -12
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -5
- package/dist/store/audit.js +4 -12
- package/dist/store/auth.d.ts +6 -6
- package/dist/store/auth.js +10 -9
- package/dist/store/candidates.d.ts +20 -3
- package/dist/store/candidates.js +77 -48
- 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/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +71 -150
- package/dist/store/connectors/github.d.ts +10 -10
- package/dist/store/connectors/github.js +10 -10
- package/dist/store/dashboard-reads.js +4 -8
- package/dist/store/delete-and-batch.d.ts +11 -31
- package/dist/store/delete-and-batch.js +48 -64
- package/dist/store/delivery-recorder.d.ts +8 -4
- package/dist/store/delivery-recorder.js +25 -15
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +7 -29
- package/dist/store/dormant.js +15 -56
- package/dist/store/embeddings/index.d.ts +11 -80
- package/dist/store/embeddings/index.js +71 -207
- package/dist/store/embeddings/local.js +15 -32
- package/dist/store/embeddings/provider.d.ts +16 -53
- package/dist/store/embeddings/provider.js +41 -69
- package/dist/store/entry-reads.d.ts +21 -57
- package/dist/store/entry-reads.js +65 -126
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +10 -16
- package/dist/store/entry-writes.js +17 -35
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +21 -160
- 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 +20 -58
- 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 +6 -31
- package/dist/store/graph-writes.js +13 -37
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +5 -11
- package/dist/store/handoffs.js +16 -34
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +34 -82
- package/dist/store/markdown.d.ts +2 -6
- package/dist/store/markdown.js +21 -20
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +14 -23
- package/dist/store/open.js +6 -13
- 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 +82 -79
- package/dist/store/predictions.d.ts +11 -51
- package/dist/store/predictions.js +38 -119
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-scope.d.ts +19 -79
- package/dist/store/recall-scope.js +21 -82
- package/dist/store/recall-trace.d.ts +10 -77
- package/dist/store/recall-trace.js +19 -95
- package/dist/store/rejected-values.js +7 -19
- package/dist/store/rejection.d.ts +12 -58
- package/dist/store/rejection.js +13 -65
- 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 +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +14 -50
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +17 -73
- package/dist/store/sqlite/connector-events-group.js +2 -2
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -2
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +2 -1
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.js +4 -2
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +2 -3
- 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 +10 -62
- package/dist/store/summaries.js +34 -146
- 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 -43
- package/dist/store/token-ledger.js +19 -50
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/store/yaml.d.ts +1 -5
- package/dist/store/yaml.js +2 -6
- package/dist/support-bundle.js +7 -5
- package/dist/trust/reject-flow.js +1 -3
- package/dist/util/anthropic-messages.js +14 -2
- 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/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/env.d.ts +13 -6
- package/dist/util/env.js +14 -7
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/http-retry.d.ts +3 -1
- package/dist/util/http-retry.js +26 -5
- package/dist/util/log.d.ts +3 -2
- package/dist/util/log.js +25 -9
- package/dist/util/request-scope.d.ts +2 -1
- package/dist/util/request-scope.js +2 -1
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +13 -39
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- 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/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 +1 -1
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/cli/briefs.js
CHANGED
|
@@ -6,12 +6,12 @@ import * as briefsModule from '../objects/project-briefs.js';
|
|
|
6
6
|
import * as customerNotesModule from '../objects/customer-notes.js';
|
|
7
7
|
import { extractGraph } from '../graph/extract.js';
|
|
8
8
|
import { buildGraphModel, renderGraphHtml, renderGraphCanvas, DEFAULT_VIEW_LIMIT } from '../graph/view.js';
|
|
9
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
10
9
|
import { errorMessage, log } from '../util/log.js';
|
|
11
10
|
import { printError } from './output.js';
|
|
12
11
|
import { nonEmptyStringFlag, boolFlag, stringFlag } from './flag-values.js';
|
|
13
12
|
import { requireInit } from './shared.js';
|
|
14
13
|
import { closeObject, foundOrExit, idArgOrExit, listObjects, printLifecycleTail } from './object-verbs.js';
|
|
14
|
+
import { CliExit } from './exit.js';
|
|
15
15
|
const BRIEF = { cmd: 'brief', noun: 'Project brief', idLabel: 'brief' };
|
|
16
16
|
const NOTE = { cmd: 'note', noun: 'Customer note', idLabel: 'note' };
|
|
17
17
|
function printBriefRow(b) {
|
|
@@ -40,7 +40,7 @@ function briefRefresh(hippoRoot, tenantId, args, flags) {
|
|
|
40
40
|
const repoRaw = args[1];
|
|
41
41
|
if (!repoRaw) {
|
|
42
42
|
printError('Usage: hippo brief refresh "<repo>" [--dry-run]');
|
|
43
|
-
|
|
43
|
+
throw new CliExit(1);
|
|
44
44
|
}
|
|
45
45
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
46
46
|
try {
|
|
@@ -59,7 +59,7 @@ function briefRefresh(hippoRoot, tenantId, args, flags) {
|
|
|
59
59
|
}
|
|
60
60
|
catch (e) {
|
|
61
61
|
printError(errorMessage(e));
|
|
62
|
-
|
|
62
|
+
throw new CliExit(1);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
function briefGet(hippoRoot, tenantId, args) {
|
|
@@ -77,7 +77,7 @@ function briefSupersede(hippoRoot, tenantId, args, flags) {
|
|
|
77
77
|
const summaryRaw = stringFlag(flags, 'summary');
|
|
78
78
|
if (!summaryRaw?.trim()) {
|
|
79
79
|
printError('hippo brief supersede requires --summary "<text>" for the new version.');
|
|
80
|
-
|
|
80
|
+
throw new CliExit(1);
|
|
81
81
|
}
|
|
82
82
|
const existing = foundOrExit(briefsModule.loadProjectBriefById(hippoRoot, tenantId, id), BRIEF.noun, id);
|
|
83
83
|
try {
|
|
@@ -94,7 +94,7 @@ function briefSupersede(hippoRoot, tenantId, args, flags) {
|
|
|
94
94
|
}
|
|
95
95
|
catch (e) {
|
|
96
96
|
printError(errorMessage(e));
|
|
97
|
-
|
|
97
|
+
throw new CliExit(1);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
function briefClose(hippoRoot, tenantId, args) {
|
|
@@ -108,7 +108,7 @@ function briefCreate(hippoRoot, tenantId, args, flags) {
|
|
|
108
108
|
const summaryRaw = stringFlag(flags, 'summary');
|
|
109
109
|
if (!repo || !summaryRaw?.trim()) {
|
|
110
110
|
briefUsage();
|
|
111
|
-
|
|
111
|
+
throw new CliExit(1);
|
|
112
112
|
}
|
|
113
113
|
try {
|
|
114
114
|
const created = briefsModule.saveProjectBrief(hippoRoot, tenantId, {
|
|
@@ -122,12 +122,11 @@ function briefCreate(hippoRoot, tenantId, args, flags) {
|
|
|
122
122
|
}
|
|
123
123
|
catch (e) {
|
|
124
124
|
printError(errorMessage(e));
|
|
125
|
-
|
|
125
|
+
throw new CliExit(1);
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
export function
|
|
128
|
+
export function handleProjectBrief({ hippoRoot, tenantId, args, flags }) {
|
|
129
129
|
requireInit(hippoRoot);
|
|
130
|
-
const tenantId = resolveTenantId({});
|
|
131
130
|
const subcommand = args[0] ?? '';
|
|
132
131
|
if (subcommand === 'list')
|
|
133
132
|
return briefList(hippoRoot, tenantId, flags);
|
|
@@ -203,9 +202,8 @@ function openInBrowser(out) {
|
|
|
203
202
|
? ['open', [out]]
|
|
204
203
|
: ['xdg-open', [out]];
|
|
205
204
|
const child = spawn(cmd, cmdArgs, { detached: true, stdio: 'ignore', windowsHide: true });
|
|
206
|
-
// A missing launcher (e.g. xdg-open absent) emits 'error' asynchronously;
|
|
207
|
-
//
|
|
208
|
-
// already written and its path printed above.
|
|
205
|
+
// A missing launcher (e.g. xdg-open absent) emits 'error' asynchronously; unhandled, it would throw,
|
|
206
|
+
// so swallow it: the file is already written and its path printed above.
|
|
209
207
|
child.on('error', () => { });
|
|
210
208
|
child.unref();
|
|
211
209
|
}
|
|
@@ -218,7 +216,7 @@ function graphView(hippoRoot, tenantId, entity, flags) {
|
|
|
218
216
|
const format = stringFlag(flags, 'format') ?? 'html';
|
|
219
217
|
if (format !== 'html' && format !== 'canvas') {
|
|
220
218
|
printError("graph view: --format must be 'html' or 'canvas'");
|
|
221
|
-
|
|
219
|
+
throw new CliExit(1);
|
|
222
220
|
}
|
|
223
221
|
const model = buildGraphModel(hippoRoot, tenantId, { entity, limit: DEFAULT_VIEW_LIMIT });
|
|
224
222
|
const content = format === 'canvas' ? renderGraphCanvas(model) : renderGraphHtml(model);
|
|
@@ -229,9 +227,8 @@ function graphView(hippoRoot, tenantId, entity, flags) {
|
|
|
229
227
|
if (flags['open'] && format === 'html')
|
|
230
228
|
openInBrowser(out);
|
|
231
229
|
}
|
|
232
|
-
export function
|
|
230
|
+
export function handleGraph({ hippoRoot, tenantId, args, flags }) {
|
|
233
231
|
requireInit(hippoRoot);
|
|
234
|
-
const tenantId = resolveTenantId({});
|
|
235
232
|
const subcommand = args[0] ?? '';
|
|
236
233
|
if (subcommand === 'extract')
|
|
237
234
|
return graphExtract(hippoRoot, tenantId);
|
|
@@ -244,7 +241,7 @@ export function cmdGraph(hippoRoot, args, flags) {
|
|
|
244
241
|
' hippo graph extract Rebuild the entity/relation graph from consolidated objects\n' +
|
|
245
242
|
' hippo graph show [--entity NAME] [--json] Inspect entities + their edges (text or JSON)\n' +
|
|
246
243
|
' hippo graph view [--out FILE] [--open] [--format html|canvas] [--entity NAME] Generate an interactive node-link diagram');
|
|
247
|
-
|
|
244
|
+
throw new CliExit(1);
|
|
248
245
|
}
|
|
249
246
|
function noteList(hippoRoot, tenantId, flags) {
|
|
250
247
|
const customer = stringFlag(flags, 'customer')?.trim() || undefined;
|
|
@@ -270,7 +267,7 @@ function noteSupersede(hippoRoot, tenantId, args, flags) {
|
|
|
270
267
|
const textRaw = stringFlag(flags, 'text');
|
|
271
268
|
if (!textRaw?.trim()) {
|
|
272
269
|
printError('hippo note supersede requires --text "<note>" for the new version.');
|
|
273
|
-
|
|
270
|
+
throw new CliExit(1);
|
|
274
271
|
}
|
|
275
272
|
const existing = foundOrExit(customerNotesModule.loadCustomerNoteById(hippoRoot, tenantId, id), NOTE.noun, id);
|
|
276
273
|
try {
|
|
@@ -287,15 +284,14 @@ function noteSupersede(hippoRoot, tenantId, args, flags) {
|
|
|
287
284
|
}
|
|
288
285
|
catch (e) {
|
|
289
286
|
printError(errorMessage(e));
|
|
290
|
-
|
|
287
|
+
throw new CliExit(1);
|
|
291
288
|
}
|
|
292
289
|
}
|
|
293
290
|
function noteClose(hippoRoot, tenantId, args) {
|
|
294
291
|
closeObject(args, NOTE, (id) => customerNotesModule.closeCustomerNote(hippoRoot, tenantId, id));
|
|
295
292
|
}
|
|
296
|
-
export function
|
|
293
|
+
export function handleCustomerNote({ hippoRoot, tenantId, args, flags }) {
|
|
297
294
|
requireInit(hippoRoot);
|
|
298
|
-
const tenantId = resolveTenantId({});
|
|
299
295
|
const subcommand = args[0] ?? '';
|
|
300
296
|
if (subcommand === 'list')
|
|
301
297
|
return noteList(hippoRoot, tenantId, flags);
|
|
@@ -311,7 +307,7 @@ export function cmdCustomerNote(hippoRoot, args, flags) {
|
|
|
311
307
|
const textRaw = stringFlag(flags, 'text');
|
|
312
308
|
if (!customer || !textRaw?.trim()) {
|
|
313
309
|
noteUsage();
|
|
314
|
-
|
|
310
|
+
throw new CliExit(1);
|
|
315
311
|
}
|
|
316
312
|
try {
|
|
317
313
|
const created = customerNotesModule.saveCustomerNote(hippoRoot, tenantId, {
|
|
@@ -325,7 +321,7 @@ export function cmdCustomerNote(hippoRoot, args, flags) {
|
|
|
325
321
|
}
|
|
326
322
|
catch (e) {
|
|
327
323
|
printError(errorMessage(e));
|
|
328
|
-
|
|
324
|
+
throw new CliExit(1);
|
|
329
325
|
}
|
|
330
326
|
}
|
|
331
327
|
//# sourceMappingURL=briefs.js.map
|
package/dist/cli/card.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
2
|
/** Runs `hippo card <subcommand>`: rejects flags the subcommand never reads, then hands off to its handler. */
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function handleCard({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
4
4
|
//# sourceMappingURL=card.d.ts.map
|
package/dist/cli/card.js
CHANGED
|
@@ -3,11 +3,11 @@ import { createCard, loadCard, listCards, loadCardRuns, claimCard, heartbeatCard
|
|
|
3
3
|
import { isHandoffOutcome } from '../core/handoff.js';
|
|
4
4
|
import { isCardStatus } from '../core/card.js';
|
|
5
5
|
import { loadCardDetail } from '../store/card-detail.js';
|
|
6
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
7
6
|
import { printError } from './output.js';
|
|
8
7
|
import { stringFlagOrExit } from './flag-values.js';
|
|
9
8
|
import { requireInit } from './shared.js';
|
|
10
9
|
import { errorMessage } from '../util/log.js';
|
|
10
|
+
import { CliExit } from './exit.js';
|
|
11
11
|
// Mirrors ARCHIVE_REASON_REQUIRED so the block message can't drift from its usage line.
|
|
12
12
|
const CARD_BLOCK_REASON_REQUIRED = 'hippo card block <id> requires --reason "<why>" (recorded as a comment).';
|
|
13
13
|
function printCard(detail) {
|
|
@@ -59,7 +59,7 @@ function cardRunFlag(flags) {
|
|
|
59
59
|
const n = Number(raw);
|
|
60
60
|
if (!/^\d+$/.test(raw) || !Number.isSafeInteger(n) || n <= 0) {
|
|
61
61
|
printError(`Invalid --run: "${raw}" (expected a positive integer).`);
|
|
62
|
-
|
|
62
|
+
throw new CliExit(1);
|
|
63
63
|
}
|
|
64
64
|
return n;
|
|
65
65
|
}
|
|
@@ -82,13 +82,12 @@ const CARD_SUBCOMMAND_FLAGS = {
|
|
|
82
82
|
comment: ['body', 'author'],
|
|
83
83
|
};
|
|
84
84
|
/** Runs `hippo card <subcommand>`: rejects flags the subcommand never reads, then hands off to its handler. */
|
|
85
|
-
export function
|
|
85
|
+
export function handleCard({ hippoRoot, tenantId, args, flags }) {
|
|
86
86
|
requireInit(hippoRoot);
|
|
87
|
-
const tenantId = resolveTenantId({});
|
|
88
87
|
const subcommand = args[0] ?? '';
|
|
89
88
|
if (!Object.hasOwn(CARD_SUBCOMMAND_FLAGS, subcommand)) {
|
|
90
89
|
printError('Usage: hippo card <create|show|list|claim|heartbeat|block|review|complete|reclaim|comment>');
|
|
91
|
-
|
|
90
|
+
throw new CliExit(1);
|
|
92
91
|
}
|
|
93
92
|
// SAFETY: hasOwn, unlike `in`, skips inherited keys such as constructor, so subcommand is a real key.
|
|
94
93
|
const known = subcommand;
|
|
@@ -97,7 +96,7 @@ export function cmdCard(hippoRoot, args, flags) {
|
|
|
97
96
|
if (!allowedFlags.includes(key)) {
|
|
98
97
|
const valid = allowedFlags.length > 0 ? allowedFlags.map((f) => `--${f}`).join(', ') : '(none)';
|
|
99
98
|
printError(`Unknown flag --${key} for hippo card ${subcommand}. Valid flags: ${valid}`);
|
|
100
|
-
|
|
99
|
+
throw new CliExit(1);
|
|
101
100
|
}
|
|
102
101
|
}
|
|
103
102
|
CARD_HANDLERS[known](hippoRoot, tenantId, args, flags);
|
|
@@ -106,7 +105,7 @@ function cardCreate(hippoRoot, tenantId, _args, flags) {
|
|
|
106
105
|
const title = stringFlagOrExit(flags, 'title') ?? '';
|
|
107
106
|
if (!title) {
|
|
108
107
|
printError('Usage: hippo card create --title "..." [--repo <name>] [--contract <text>] [--budget <n>] [--depends-on <id>...]');
|
|
109
|
-
|
|
108
|
+
throw new CliExit(1);
|
|
110
109
|
}
|
|
111
110
|
const repo = stringFlagOrExit(flags, 'repo') || undefined;
|
|
112
111
|
const contract = stringFlagOrExit(flags, 'contract') || undefined;
|
|
@@ -115,14 +114,14 @@ function cardCreate(hippoRoot, tenantId, _args, flags) {
|
|
|
115
114
|
if (budgetRaw !== undefined) {
|
|
116
115
|
if (!/^\d+$/.test(budgetRaw)) {
|
|
117
116
|
printError(`Invalid budget: "${budgetRaw}" (expected a positive integer)`);
|
|
118
|
-
|
|
117
|
+
throw new CliExit(1);
|
|
119
118
|
}
|
|
120
119
|
budget = Number(budgetRaw);
|
|
121
120
|
}
|
|
122
121
|
const dependsOnFlag = flags['depends-on'];
|
|
123
122
|
if (dependsOnFlag === true) {
|
|
124
123
|
printError('--depends-on requires a value');
|
|
125
|
-
|
|
124
|
+
throw new CliExit(1);
|
|
126
125
|
}
|
|
127
126
|
const dependsOn = Array.isArray(dependsOnFlag) ? dependsOnFlag : [];
|
|
128
127
|
let card;
|
|
@@ -131,7 +130,7 @@ function cardCreate(hippoRoot, tenantId, _args, flags) {
|
|
|
131
130
|
}
|
|
132
131
|
catch (error) {
|
|
133
132
|
printError(errorMessage(error));
|
|
134
|
-
|
|
133
|
+
throw new CliExit(1);
|
|
135
134
|
}
|
|
136
135
|
console.log(`Created card ${card.id} (status: ${card.status})`);
|
|
137
136
|
}
|
|
@@ -139,12 +138,12 @@ function cardShow(hippoRoot, tenantId, args, flags) {
|
|
|
139
138
|
const id = args[1];
|
|
140
139
|
if (!id) {
|
|
141
140
|
printError('Usage: hippo card show <id> [--json]');
|
|
142
|
-
|
|
141
|
+
throw new CliExit(1);
|
|
143
142
|
}
|
|
144
143
|
const detail = loadCardDetail(hippoRoot, tenantId, id);
|
|
145
144
|
if (!detail) {
|
|
146
145
|
printError(`No card found with id ${id}.`);
|
|
147
|
-
|
|
146
|
+
throw new CliExit(1);
|
|
148
147
|
}
|
|
149
148
|
if (flags['json']) {
|
|
150
149
|
console.log(JSON.stringify(detail, null, 2));
|
|
@@ -156,7 +155,7 @@ function cardList(hippoRoot, tenantId, _args, flags) {
|
|
|
156
155
|
const status = stringFlagOrExit(flags, 'status');
|
|
157
156
|
if (status !== undefined && !isCardStatus(status)) {
|
|
158
157
|
printError(`Invalid status: "${status}".`);
|
|
159
|
-
|
|
158
|
+
throw new CliExit(1);
|
|
160
159
|
}
|
|
161
160
|
const cards = listCards(hippoRoot, tenantId, { status });
|
|
162
161
|
if (flags['json']) {
|
|
@@ -176,7 +175,7 @@ function cardClaim(hippoRoot, tenantId, args, flags) {
|
|
|
176
175
|
const runtime = stringFlagOrExit(flags, 'runtime') ?? '';
|
|
177
176
|
if (!id || !runtime) {
|
|
178
177
|
printError('Usage: hippo card claim <id> --runtime <name> [--session <id>]');
|
|
179
|
-
|
|
178
|
+
throw new CliExit(1);
|
|
180
179
|
}
|
|
181
180
|
const sessionId = stringFlagOrExit(flags, 'session') || undefined;
|
|
182
181
|
let card;
|
|
@@ -185,11 +184,11 @@ function cardClaim(hippoRoot, tenantId, args, flags) {
|
|
|
185
184
|
}
|
|
186
185
|
catch (error) {
|
|
187
186
|
printError(errorMessage(error));
|
|
188
|
-
|
|
187
|
+
throw new CliExit(1);
|
|
189
188
|
}
|
|
190
189
|
if (!card) {
|
|
191
190
|
printError(`Could not claim card ${id} (not ready/blocked, or already claimed).`);
|
|
192
|
-
|
|
191
|
+
throw new CliExit(1);
|
|
193
192
|
}
|
|
194
193
|
console.log(`Claimed card ${card.id} for ${runtime} (run ${card.runId}, lease until ${card.leaseUntil})`);
|
|
195
194
|
}
|
|
@@ -198,7 +197,7 @@ function cardHeartbeat(hippoRoot, tenantId, args, flags) {
|
|
|
198
197
|
const runId = cardRunFlag(flags);
|
|
199
198
|
if (!id || runId === undefined) {
|
|
200
199
|
printError('Usage: hippo card heartbeat <id> --run <n>');
|
|
201
|
-
|
|
200
|
+
throw new CliExit(1);
|
|
202
201
|
}
|
|
203
202
|
let card;
|
|
204
203
|
try {
|
|
@@ -206,11 +205,11 @@ function cardHeartbeat(hippoRoot, tenantId, args, flags) {
|
|
|
206
205
|
}
|
|
207
206
|
catch (error) {
|
|
208
207
|
printError(errorMessage(error));
|
|
209
|
-
|
|
208
|
+
throw new CliExit(1);
|
|
210
209
|
}
|
|
211
210
|
if (!card) {
|
|
212
211
|
printError(`Could not heartbeat card ${id} (${cardRefusal(hippoRoot, tenantId, id)}).`);
|
|
213
|
-
|
|
212
|
+
throw new CliExit(1);
|
|
214
213
|
}
|
|
215
214
|
console.log(`Heartbeat card ${card.id}: lease until ${card.leaseUntil}`);
|
|
216
215
|
}
|
|
@@ -219,7 +218,7 @@ function cardBlock(hippoRoot, tenantId, args, flags) {
|
|
|
219
218
|
const reason = stringFlagOrExit(flags, 'reason') ?? '';
|
|
220
219
|
if (!id || !reason) {
|
|
221
220
|
printError(CARD_BLOCK_REASON_REQUIRED);
|
|
222
|
-
|
|
221
|
+
throw new CliExit(1);
|
|
223
222
|
}
|
|
224
223
|
const runId = cardRunFlag(flags);
|
|
225
224
|
let card;
|
|
@@ -228,12 +227,12 @@ function cardBlock(hippoRoot, tenantId, args, flags) {
|
|
|
228
227
|
}
|
|
229
228
|
catch (error) {
|
|
230
229
|
printError(errorMessage(error));
|
|
231
|
-
|
|
230
|
+
throw new CliExit(1);
|
|
232
231
|
}
|
|
233
232
|
if (!card) {
|
|
234
233
|
const why = runId === undefined ? 'not running' : cardRefusal(hippoRoot, tenantId, id);
|
|
235
234
|
printError(`Could not block card ${id} (${why}).`);
|
|
236
|
-
|
|
235
|
+
throw new CliExit(1);
|
|
237
236
|
}
|
|
238
237
|
console.log(`Blocked card ${card.id}`);
|
|
239
238
|
}
|
|
@@ -241,7 +240,7 @@ function cardReview(hippoRoot, tenantId, args, flags) {
|
|
|
241
240
|
const id = args[1];
|
|
242
241
|
if (!id) {
|
|
243
242
|
printError('Usage: hippo card review <id> [--run <n>]');
|
|
244
|
-
|
|
243
|
+
throw new CliExit(1);
|
|
245
244
|
}
|
|
246
245
|
const runId = cardRunFlag(flags);
|
|
247
246
|
let card;
|
|
@@ -250,12 +249,12 @@ function cardReview(hippoRoot, tenantId, args, flags) {
|
|
|
250
249
|
}
|
|
251
250
|
catch (error) {
|
|
252
251
|
printError(errorMessage(error));
|
|
253
|
-
|
|
252
|
+
throw new CliExit(1);
|
|
254
253
|
}
|
|
255
254
|
if (!card) {
|
|
256
255
|
const why = runId === undefined ? 'not running' : cardRefusal(hippoRoot, tenantId, id);
|
|
257
256
|
printError(`Could not move card ${id} to review (${why}).`);
|
|
258
|
-
|
|
257
|
+
throw new CliExit(1);
|
|
259
258
|
}
|
|
260
259
|
console.log(`Card ${card.id} moved to review`);
|
|
261
260
|
}
|
|
@@ -264,7 +263,7 @@ function cardComplete(hippoRoot, tenantId, args, flags) {
|
|
|
264
263
|
const outcomeRaw = flags['outcome'];
|
|
265
264
|
if (!id || !isHandoffOutcome(outcomeRaw)) {
|
|
266
265
|
printError('Usage: hippo card complete <id> --outcome <success|failure|partial> [--run <n>]');
|
|
267
|
-
|
|
266
|
+
throw new CliExit(1);
|
|
268
267
|
}
|
|
269
268
|
const runId = cardRunFlag(flags);
|
|
270
269
|
let result;
|
|
@@ -273,12 +272,12 @@ function cardComplete(hippoRoot, tenantId, args, flags) {
|
|
|
273
272
|
}
|
|
274
273
|
catch (error) {
|
|
275
274
|
printError(errorMessage(error));
|
|
276
|
-
|
|
275
|
+
throw new CliExit(1);
|
|
277
276
|
}
|
|
278
277
|
if (!result) {
|
|
279
278
|
const why = runId === undefined ? 'not in review' : cardRefusal(hippoRoot, tenantId, id);
|
|
280
279
|
printError(`Could not complete card ${id} (${why}).`);
|
|
281
|
-
|
|
280
|
+
throw new CliExit(1);
|
|
282
281
|
}
|
|
283
282
|
console.log(`Completed card ${result.card.id} (status: ${result.card.status})`);
|
|
284
283
|
if (result.promotedChildren.length > 0) {
|
|
@@ -288,7 +287,7 @@ function cardComplete(hippoRoot, tenantId, args, flags) {
|
|
|
288
287
|
function cardReclaim(hippoRoot, tenantId, args) {
|
|
289
288
|
if (args.length > 1) {
|
|
290
289
|
printError('Usage: hippo card reclaim (sweeps every expired lease; use hippo card block <id> for one card)');
|
|
291
|
-
|
|
290
|
+
throw new CliExit(1);
|
|
292
291
|
}
|
|
293
292
|
const ids = reclaimExpiredCards(hippoRoot, tenantId);
|
|
294
293
|
if (ids.length === 0) {
|
|
@@ -303,18 +302,18 @@ function cardComment(hippoRoot, tenantId, args, flags) {
|
|
|
303
302
|
const id = args[1];
|
|
304
303
|
if (!id) {
|
|
305
304
|
printError('Usage: hippo card comment <id> --body "..." [--author <name>]');
|
|
306
|
-
|
|
305
|
+
throw new CliExit(1);
|
|
307
306
|
}
|
|
308
307
|
// Only show and comment look the card up directly; claim/heartbeat/block/review/complete throw from the store instead.
|
|
309
308
|
const card = loadCard(hippoRoot, tenantId, id);
|
|
310
309
|
if (!card) {
|
|
311
310
|
printError(`No card found with id ${id}.`);
|
|
312
|
-
|
|
311
|
+
throw new CliExit(1);
|
|
313
312
|
}
|
|
314
313
|
const body = stringFlagOrExit(flags, 'body') ?? '';
|
|
315
314
|
if (!body) {
|
|
316
315
|
printError('Usage: hippo card comment <id> --body "..." [--author <name>]');
|
|
317
|
-
|
|
316
|
+
throw new CliExit(1);
|
|
318
317
|
}
|
|
319
318
|
const author = stringFlagOrExit(flags, 'author') || 'cli';
|
|
320
319
|
const comment = addCardComment(hippoRoot, tenantId, id, author, body);
|
package/dist/cli/client.d.ts
CHANGED
|
@@ -1,22 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Only the writes the CLI routes (remember, forget, archive, promote), which are
|
|
5
|
-
* also all HIPPO_REQUIRE_SERVER covers; every other command opens the store
|
|
6
|
-
* directly. Each call returns the same shape that api.ts would.
|
|
7
|
-
*
|
|
8
|
-
* Errors from the server (4xx/5xx) are mapped back into thrown Errors with
|
|
9
|
-
* the server's `error` message preserved verbatim so existing CLI handlers
|
|
10
|
-
* that match on substrings (e.g. "not found", "already superseded") still
|
|
11
|
-
* work unchanged.
|
|
12
|
-
*
|
|
13
|
-
* Network errors (ECONNREFUSED on a stale pidfile, etc.) propagate as the
|
|
14
|
-
* native fetch failure so the caller can detect them and self-heal.
|
|
15
|
-
*/
|
|
1
|
+
/** HTTP client wrapper for `hippo serve`: only the routed writes (remember, forget, archive, promote); every other command opens the store directly.
|
|
2
|
+
* Server errors rethrow with the message verbatim so CLI substring matches still work; network errors propagate as the native fetch failure. */
|
|
16
3
|
import type { RememberOpts, RememberResult } from '../api/index.js';
|
|
17
|
-
/** An error the server answered with, not one the transport raised
|
|
18
|
-
*
|
|
19
|
-
* quotes the caller's own id or content back verbatim. */
|
|
4
|
+
/** An error the server answered with, not one the transport raised: the refused-connection classifier sniffs message text,
|
|
5
|
+
* and a server message quotes the caller's own id or content back verbatim. */
|
|
20
6
|
export declare class HttpResponseError extends Error {
|
|
21
7
|
readonly status: number;
|
|
22
8
|
constructor(message: string, status: number);
|
|
@@ -35,14 +21,8 @@ export declare function archiveRaw(serverUrl: string, apiKey: string | undefined
|
|
|
35
21
|
ok: true;
|
|
36
22
|
archivedAt: string;
|
|
37
23
|
}>;
|
|
38
|
-
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* 'never-sent' means the connection never opened, so the caller may safely
|
|
42
|
-
* replay the call locally. 'delivery-unknown' means the socket broke with the
|
|
43
|
-
* request already on the wire: the server may have committed it, so replaying a
|
|
44
|
-
* write would store it twice. 'none' means this was not a transport failure.
|
|
45
|
-
*/
|
|
24
|
+
/** 'never-sent': connection never opened, safe to replay locally. 'delivery-unknown': the request was on the wire and may have
|
|
25
|
+
* committed, so never replay a write. 'none': not a transport failure. */
|
|
46
26
|
export type TransportFailure = 'none' | 'never-sent' | 'delivery-unknown';
|
|
47
|
-
export declare function classifyTransportFailure(err:
|
|
27
|
+
export declare function classifyTransportFailure(err: Error): TransportFailure;
|
|
48
28
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/cli/client.js
CHANGED
|
@@ -1,23 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Only the writes the CLI routes (remember, forget, archive, promote), which are
|
|
5
|
-
* also all HIPPO_REQUIRE_SERVER covers; every other command opens the store
|
|
6
|
-
* directly. Each call returns the same shape that api.ts would.
|
|
7
|
-
*
|
|
8
|
-
* Errors from the server (4xx/5xx) are mapped back into thrown Errors with
|
|
9
|
-
* the server's `error` message preserved verbatim so existing CLI handlers
|
|
10
|
-
* that match on substrings (e.g. "not found", "already superseded") still
|
|
11
|
-
* work unchanged.
|
|
12
|
-
*
|
|
13
|
-
* Network errors (ECONNREFUSED on a stale pidfile, etc.) propagate as the
|
|
14
|
-
* native fetch failure so the caller can detect them and self-heal.
|
|
15
|
-
*/
|
|
1
|
+
/** HTTP client wrapper for `hippo serve`: only the routed writes (remember, forget, archive, promote); every other command opens the store directly.
|
|
2
|
+
* Server errors rethrow with the message verbatim so CLI substring matches still work; network errors propagate as the native fetch failure. */
|
|
16
3
|
import { fetchWithRetry } from '../util/http-retry.js';
|
|
4
|
+
import { readCappedJson } from '../util/capped-json.js';
|
|
5
|
+
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
17
6
|
/** A write the local server has not answered in this long is stuck; the caller treats it as delivery-unknown. */
|
|
18
7
|
const SERVER_TIMEOUT_MS = 30_000;
|
|
19
8
|
/** Five tries at the server's 1 s Retry-After keeps the roughly 5 s wait the CLI had before the server answered busy with 503. */
|
|
20
9
|
const STORE_BUSY_ATTEMPTS = 5;
|
|
10
|
+
/** Every routed write answers with a few short fields; the pidfile's port may now be another process, so cap what it sends. */
|
|
11
|
+
const MAX_REPLY_BYTES = 1024 * 1024;
|
|
21
12
|
/** The server sets Retry-After on a 503 only for a held write lock (server.ts replyFor); the auth-provider 503 has none. */
|
|
22
13
|
function isStoreBusy(res) {
|
|
23
14
|
return res.status === 503 && res.headers.has('retry-after');
|
|
@@ -34,12 +25,8 @@ function buildHeaders(apiKey, withBody) {
|
|
|
34
25
|
headers['authorization'] = `Bearer ${apiKey}`;
|
|
35
26
|
return headers;
|
|
36
27
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
/** An error the server answered with, not one the transport raised. The
|
|
41
|
-
* refused-connection classifier sniffs message text, and a server message
|
|
42
|
-
* quotes the caller's own id or content back verbatim. */
|
|
28
|
+
/** An error the server answered with, not one the transport raised: the refused-connection classifier sniffs message text,
|
|
29
|
+
* and a server message quotes the caller's own id or content back verbatim. */
|
|
43
30
|
export class HttpResponseError extends Error {
|
|
44
31
|
status;
|
|
45
32
|
constructor(message, status) {
|
|
@@ -48,25 +35,26 @@ export class HttpResponseError extends Error {
|
|
|
48
35
|
this.name = 'HttpResponseError';
|
|
49
36
|
}
|
|
50
37
|
}
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
53
|
-
* intact so cli.ts handlers can match on the same substrings ("not found",
|
|
54
|
-
* "already superseded", "Unknown key_id") whether the call went through
|
|
55
|
-
* api.ts or client.ts.
|
|
56
|
-
*/
|
|
38
|
+
/** Throw an Error carrying the server's message verbatim, so cli.ts handlers can match the same substrings
|
|
39
|
+
* ("not found", "already superseded") as on the direct path. */
|
|
57
40
|
async function throwForStatus(res) {
|
|
58
41
|
let message = `${res.status} ${res.statusText}`;
|
|
59
42
|
try {
|
|
60
|
-
const body = await res
|
|
61
|
-
if (body &&
|
|
43
|
+
const body = await readCappedJson(res, MAX_REPLY_BYTES);
|
|
44
|
+
if (isJsonObject(body) && isJsonString(body.error) && body.error.length > 0) {
|
|
62
45
|
message = body.error;
|
|
63
46
|
}
|
|
64
47
|
}
|
|
65
48
|
catch {
|
|
66
|
-
// body wasn't JSON; fall back to status line.
|
|
49
|
+
// body wasn't JSON or ran past the cap; fall back to status line.
|
|
67
50
|
}
|
|
68
51
|
throw new HttpResponseError(message, res.status);
|
|
69
52
|
}
|
|
53
|
+
/** A 2xx reply's body, read under the cap. */
|
|
54
|
+
async function readReply(res) {
|
|
55
|
+
// SAFETY: the reply comes from hippo's own server, whose route returns this api result as JSON.
|
|
56
|
+
return (await readCappedJson(res, MAX_REPLY_BYTES));
|
|
57
|
+
}
|
|
70
58
|
export async function remember(serverUrl, apiKey, opts) {
|
|
71
59
|
const res = await sendWrite(`${serverUrl}/v1/memories`, {
|
|
72
60
|
method: 'POST',
|
|
@@ -75,8 +63,7 @@ export async function remember(serverUrl, apiKey, opts) {
|
|
|
75
63
|
});
|
|
76
64
|
if (!res.ok)
|
|
77
65
|
await throwForStatus(res);
|
|
78
|
-
|
|
79
|
-
return result;
|
|
66
|
+
return readReply(res);
|
|
80
67
|
}
|
|
81
68
|
export async function forget(serverUrl, apiKey, id) {
|
|
82
69
|
const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}`, {
|
|
@@ -85,8 +72,7 @@ export async function forget(serverUrl, apiKey, id) {
|
|
|
85
72
|
});
|
|
86
73
|
if (!res.ok)
|
|
87
74
|
await throwForStatus(res);
|
|
88
|
-
|
|
89
|
-
return result;
|
|
75
|
+
return readReply(res);
|
|
90
76
|
}
|
|
91
77
|
export async function promote(serverUrl, apiKey, id) {
|
|
92
78
|
const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}/promote`, {
|
|
@@ -95,8 +81,7 @@ export async function promote(serverUrl, apiKey, id) {
|
|
|
95
81
|
});
|
|
96
82
|
if (!res.ok)
|
|
97
83
|
await throwForStatus(res);
|
|
98
|
-
|
|
99
|
-
return result;
|
|
84
|
+
return readReply(res);
|
|
100
85
|
}
|
|
101
86
|
export async function archiveRaw(serverUrl, apiKey, id, reason) {
|
|
102
87
|
const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}/archive`, {
|
|
@@ -106,18 +91,14 @@ export async function archiveRaw(serverUrl, apiKey, id, reason) {
|
|
|
106
91
|
});
|
|
107
92
|
if (!res.ok)
|
|
108
93
|
await throwForStatus(res);
|
|
109
|
-
|
|
110
|
-
return result;
|
|
94
|
+
return readReply(res);
|
|
111
95
|
}
|
|
112
96
|
function hasObjectCause(e) {
|
|
113
|
-
// Node's fs/net system errors (ECONNREFUSED, ECONNRESET) attach the syscall
|
|
114
|
-
//
|
|
115
|
-
// validate the code value before it is used for anything.
|
|
97
|
+
// Node's fs/net system errors (ECONNREFUSED, ECONNRESET) attach the syscall code on a non-null object `cause`;
|
|
98
|
+
// the strict-equality checks below validate it before use.
|
|
116
99
|
return typeof e.cause === 'object' && e.cause !== null;
|
|
117
100
|
}
|
|
118
101
|
export function classifyTransportFailure(err) {
|
|
119
|
-
if (!(err instanceof Error))
|
|
120
|
-
return 'none';
|
|
121
102
|
// The server answered, so the transport worked, whatever the message says.
|
|
122
103
|
if (err instanceof HttpResponseError)
|
|
123
104
|
return 'none';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// The payload gate for `hippo compact-resume`.
|
|
2
2
|
import { isSubagentPayload } from '../store/token-ledger.js';
|
|
3
|
+
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
3
4
|
/** Fail-closed read of the SessionStart payload: only a manual run or a main-session `source: 'compact'` payload may print. */
|
|
4
5
|
export function readCompactResumePayload(stdinText, stdinTimedOut) {
|
|
5
6
|
// An older Claude Code that ignores `matcher: 'compact'` runs this on every SessionStart, so a parsed payload with any other source stays silent.
|
|
@@ -18,7 +19,7 @@ export function readCompactResumePayload(stdinText, stdinTimedOut) {
|
|
|
18
19
|
// Malformed JSON is handled as a null payload by the fail-closed check below.
|
|
19
20
|
payload = null;
|
|
20
21
|
}
|
|
21
|
-
if (!payload
|
|
22
|
+
if (!isJsonObject(payload)) {
|
|
22
23
|
// Fail closed on malformed non-empty stdin; only a TTY/no-stdin manual run, which never reaches here, prints.
|
|
23
24
|
suppressOutput = true;
|
|
24
25
|
}
|
|
@@ -29,7 +30,7 @@ export function readCompactResumePayload(stdinText, stdinTimedOut) {
|
|
|
29
30
|
if (payload.source !== 'compact' || isSubagentPayload(stdinText)) {
|
|
30
31
|
suppressOutput = true;
|
|
31
32
|
}
|
|
32
|
-
if (
|
|
33
|
+
if (isJsonString(payload.session_id)) {
|
|
33
34
|
payloadSessionId = payload.session_id;
|
|
34
35
|
}
|
|
35
36
|
}
|
package/dist/cli/context.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function cmdContext(hippoRoot: string, args: string[], flags: CliFlags, stdinText?: string): Promise<void>;
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
3
2
|
export declare function handleContext({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
4
3
|
//# sourceMappingURL=context.d.ts.map
|