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
|
@@ -28,16 +28,8 @@ export declare function sessionTail(turns: readonly SessionTurn[]): {
|
|
|
28
28
|
assistants: string[];
|
|
29
29
|
};
|
|
30
30
|
export declare function summariseSessionTurns(turns: readonly SessionTurn[]): string;
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* Priority, where the first source present is the only one tried:
|
|
35
|
-
* 1. Explicit `transcriptPath` option (from `--transcript <path>`)
|
|
36
|
-
* 2. Stdin JSON payload (Claude Code / OpenCode SessionEnd hook shape)
|
|
37
|
-
* 3. Most recent `.jsonl` under `<claude config dir>/projects/<any>/` (`~/.claude` unless CLAUDE_CONFIG_DIR is set), only when the caller passes `mayScan` (only the caller knows it is not a hook) and there is no path and no stdin text, because this scan spans every project on the box
|
|
38
|
-
*
|
|
39
|
-
* Returns null when nothing resolves, a named transcript or payload whose file is missing included. Never throws.
|
|
40
|
-
*/
|
|
31
|
+
/** Resolve a transcript path for `--last-session`: `transcriptPath`, then the stdin JSON payload, then the newest `.jsonl` in the Claude config dir.
|
|
32
|
+
* The scan runs only with `mayScan` (it spans every project on the box); returns null when nothing resolves, never throws. */
|
|
41
33
|
export declare function resolveLastSessionTranscript(explicit: string | undefined, stdinText: string | undefined, opts: {
|
|
42
34
|
mayScan: boolean;
|
|
43
35
|
}): string | null;
|
|
@@ -6,14 +6,8 @@ import { isObjectLike, isStringValue, readSessionEnd } from '../core/capture-con
|
|
|
6
6
|
import { copilotTurn } from './copilot-transcript.js';
|
|
7
7
|
const RECENT_USER_TURNS = 20;
|
|
8
8
|
const RECENT_ASSISTANT_TURNS = 10;
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* Keeps plain user messages and the final chunk of assistant text, drops
|
|
12
|
-
* thinking blocks, tool_use, and tool_result noise. Capture reads the same
|
|
13
|
-
* turns through `sessionTail`, one text per turn.
|
|
14
|
-
*
|
|
15
|
-
* Exported for tests.
|
|
16
|
-
*/
|
|
9
|
+
/** Build a compact text summary from a Claude Code / OpenCode / Copilot JSONL transcript: plain user messages and the final assistant text chunk,
|
|
10
|
+
* without thinking, tool_use and tool_result noise. Exported for tests. */
|
|
17
11
|
/** Leading markers of the command lines Claude Code writes with type 'user'. */
|
|
18
12
|
const CLAUDE_CODE_COMMAND_PREFIXES = ['<local-command-', '<command-name>', '<command-message>', '<command-args>'];
|
|
19
13
|
function isNonHumanUserLine(entry, content) {
|
|
@@ -145,16 +139,8 @@ export function summariseSessionTurns(turns) {
|
|
|
145
139
|
tailAssistants.join('\n\n'),
|
|
146
140
|
].join('\n');
|
|
147
141
|
}
|
|
148
|
-
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* Priority, where the first source present is the only one tried:
|
|
152
|
-
* 1. Explicit `transcriptPath` option (from `--transcript <path>`)
|
|
153
|
-
* 2. Stdin JSON payload (Claude Code / OpenCode SessionEnd hook shape)
|
|
154
|
-
* 3. Most recent `.jsonl` under `<claude config dir>/projects/<any>/` (`~/.claude` unless CLAUDE_CONFIG_DIR is set), only when the caller passes `mayScan` (only the caller knows it is not a hook) and there is no path and no stdin text, because this scan spans every project on the box
|
|
155
|
-
*
|
|
156
|
-
* Returns null when nothing resolves, a named transcript or payload whose file is missing included. Never throws.
|
|
157
|
-
*/
|
|
142
|
+
/** Resolve a transcript path for `--last-session`: `transcriptPath`, then the stdin JSON payload, then the newest `.jsonl` in the Claude config dir.
|
|
143
|
+
* The scan runs only with `mayScan` (it spans every project on the box); returns null when nothing resolves, never throws. */
|
|
158
144
|
export function resolveLastSessionTranscript(explicit, stdinText, opts) {
|
|
159
145
|
if (explicit)
|
|
160
146
|
return fs.existsSync(explicit) ? explicit : null;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { adminActor } from '../api/index.js';
|
|
2
|
+
// The one place the CLI names its audit actor; root is a parameter because some verbs target the global store.
|
|
3
|
+
export function cliApiContext(hippoRoot, tenantId) {
|
|
4
|
+
return { hippoRoot, tenantId, actor: adminActor('cli') };
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=api-context.js.map
|
|
@@ -1,28 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The `audit_log` table grows unbounded by default — every recall, write,
|
|
5
|
-
* outcome, sleep, supersede, promote, forget, archive_raw, auth_revoke,
|
|
6
|
-
* and auth_create emits a row. On a long-running deployment, this can
|
|
7
|
-
* accumulate to millions of rows and slow down both audit queries and
|
|
8
|
-
* incremental SQLite VACUUMs.
|
|
9
|
-
*
|
|
10
|
-
* Regulatory retention floors (HIPAA, SOX, GDPR) are why the prune is opt-in
|
|
11
|
-
* per tenant and emits its own audit trail event.
|
|
12
|
-
*
|
|
13
|
-
* Design notes:
|
|
14
|
-
* - Per-tenant by default (matches existing audit CLI conventions).
|
|
15
|
-
* - The prune itself emits an `audit_prune` audit row with metadata
|
|
16
|
-
* `{cutoff, count, dryRun}`, recursively recording the maintenance op
|
|
17
|
-
* in the audit trail. Operators investigating "where did old rows go"
|
|
18
|
-
* have one row left to find regardless of retention floor.
|
|
19
|
-
* - Dry-run mode returns the count without deleting — first-time
|
|
20
|
-
* operator safety.
|
|
21
|
-
* - DELETE is wrapped in a transaction so a mid-operation crash leaves
|
|
22
|
-
* audit_log in a consistent state.
|
|
23
|
-
* - The audit_prune row itself is NEVER pruned by the same call (it's
|
|
24
|
-
* written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
|
|
25
|
-
*/
|
|
1
|
+
/** Audit log retention pruning: opt-in per tenant because retention floors (HIPAA, SOX, GDPR) apply.
|
|
2
|
+
* The audit_prune row is written after the DELETE, so a call never prunes its own record. */
|
|
26
3
|
export interface PruneAuditOpts {
|
|
27
4
|
/** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
|
|
28
5
|
olderThanDays: number;
|
|
@@ -41,21 +18,11 @@ export interface PruneAuditResult {
|
|
|
41
18
|
/** Echo back whether this was a dry run. */
|
|
42
19
|
dryRun: boolean;
|
|
43
20
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
|
|
46
|
-
* testability so tests can pin "now" without mocking Date.
|
|
47
|
-
*/
|
|
21
|
+
/** Cutoff ISO timestamp for N days ago; exported so tests can pin "now" without mocking Date. */
|
|
48
22
|
export declare function computeCutoff(days: number, now?: Date): string;
|
|
49
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
* Emits an `audit_prune` event with metadata `{cutoff, count, dryRun}`.
|
|
52
|
-
*
|
|
53
|
-
* Throws on invalid inputs (non-positive days, missing tenantId).
|
|
54
|
-
*/
|
|
23
|
+
/** Delete audit_log rows older than `olderThanDays` for `tenantId`, emitting an `audit_prune` event.
|
|
24
|
+
* Throws on non-positive days or a missing tenantId. */
|
|
55
25
|
export declare function pruneAuditLog(hippoRoot: string, opts: PruneAuditOpts): PruneAuditResult;
|
|
56
|
-
/**
|
|
57
|
-
* Parse the `--older-than <value>` flag. Accepts either bare integer days
|
|
58
|
-
* (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
|
|
59
|
-
*/
|
|
26
|
+
/** Parse `--older-than`: bare integer days (`30`) or with a `d` suffix (`30d`); throws on any other format. */
|
|
60
27
|
export declare function parseOlderThanFlag(raw: string): number;
|
|
61
28
|
//# sourceMappingURL=audit-prune.d.ts.map
|
package/dist/cli/audit-prune.js
CHANGED
|
@@ -1,34 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The `audit_log` table grows unbounded by default — every recall, write,
|
|
5
|
-
* outcome, sleep, supersede, promote, forget, archive_raw, auth_revoke,
|
|
6
|
-
* and auth_create emits a row. On a long-running deployment, this can
|
|
7
|
-
* accumulate to millions of rows and slow down both audit queries and
|
|
8
|
-
* incremental SQLite VACUUMs.
|
|
9
|
-
*
|
|
10
|
-
* Regulatory retention floors (HIPAA, SOX, GDPR) are why the prune is opt-in
|
|
11
|
-
* per tenant and emits its own audit trail event.
|
|
12
|
-
*
|
|
13
|
-
* Design notes:
|
|
14
|
-
* - Per-tenant by default (matches existing audit CLI conventions).
|
|
15
|
-
* - The prune itself emits an `audit_prune` audit row with metadata
|
|
16
|
-
* `{cutoff, count, dryRun}`, recursively recording the maintenance op
|
|
17
|
-
* in the audit trail. Operators investigating "where did old rows go"
|
|
18
|
-
* have one row left to find regardless of retention floor.
|
|
19
|
-
* - Dry-run mode returns the count without deleting — first-time
|
|
20
|
-
* operator safety.
|
|
21
|
-
* - DELETE is wrapped in a transaction so a mid-operation crash leaves
|
|
22
|
-
* audit_log in a consistent state.
|
|
23
|
-
* - The audit_prune row itself is NEVER pruned by the same call (it's
|
|
24
|
-
* written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
|
|
25
|
-
*/
|
|
1
|
+
/** Audit log retention pruning: opt-in per tenant because retention floors (HIPAA, SOX, GDPR) apply.
|
|
2
|
+
* The audit_prune row is written after the DELETE, so a call never prunes its own record. */
|
|
26
3
|
import { pruneAuditRows } from '../store/audit.js';
|
|
27
4
|
import { DAY_MS } from '../util/time.js';
|
|
28
|
-
/**
|
|
29
|
-
* Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
|
|
30
|
-
* testability so tests can pin "now" without mocking Date.
|
|
31
|
-
*/
|
|
5
|
+
/** Cutoff ISO timestamp for N days ago; exported so tests can pin "now" without mocking Date. */
|
|
32
6
|
export function computeCutoff(days, now = new Date()) {
|
|
33
7
|
const cutoff = new Date(now.getTime() - days * DAY_MS);
|
|
34
8
|
return cutoff.toISOString();
|
|
@@ -36,12 +10,8 @@ export function computeCutoff(days, now = new Date()) {
|
|
|
36
10
|
function isTenantIdString(value) {
|
|
37
11
|
return typeof value === 'string';
|
|
38
12
|
}
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* Emits an `audit_prune` event with metadata `{cutoff, count, dryRun}`.
|
|
42
|
-
*
|
|
43
|
-
* Throws on invalid inputs (non-positive days, missing tenantId).
|
|
44
|
-
*/
|
|
13
|
+
/** Delete audit_log rows older than `olderThanDays` for `tenantId`, emitting an `audit_prune` event.
|
|
14
|
+
* Throws on non-positive days or a missing tenantId. */
|
|
45
15
|
export function pruneAuditLog(hippoRoot, opts) {
|
|
46
16
|
if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
|
|
47
17
|
throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
|
|
@@ -55,10 +25,7 @@ export function pruneAuditLog(hippoRoot, opts) {
|
|
|
55
25
|
const count = pruneAuditRows(hippoRoot, { tenantId: opts.tenantId, cutoff, actor, olderThanDays: opts.olderThanDays, dryRun });
|
|
56
26
|
return { cutoff, count, dryRun };
|
|
57
27
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Parse the `--older-than <value>` flag. Accepts either bare integer days
|
|
60
|
-
* (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
|
|
61
|
-
*/
|
|
28
|
+
/** Parse `--older-than`: bare integer days (`30`) or with a `d` suffix (`30d`); throws on any other format. */
|
|
62
29
|
export function parseOlderThanFlag(raw) {
|
|
63
30
|
const m = raw.match(/^(\d+)(d)?$/i);
|
|
64
31
|
if (!m) {
|
package/dist/cli/audit.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
2
|
+
export declare function handleAudit({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=audit.d.ts.map
|
package/dist/cli/audit.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
// `hippo audit`: list and prune the audit log.
|
|
2
2
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
3
|
-
import {
|
|
3
|
+
import { memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
4
4
|
import { auditMemories, AUDIT_OPS } from '../store/audit.js';
|
|
5
5
|
import * as api from '../api/index.js';
|
|
6
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
7
6
|
import { pruneAuditLog, parseOlderThanFlag } from './audit-prune.js';
|
|
8
7
|
import { printError } from './output.js';
|
|
9
|
-
import {
|
|
8
|
+
import { cliApiContext } from './api-context.js';
|
|
9
|
+
import { boolFlag, flagIsTrue, isBooleanFlag, stringFlag } from './flag-values.js';
|
|
10
10
|
import { requireInit, resolveAuthRoot } from './shared.js';
|
|
11
|
-
import { repairAutomaticMemories } from '
|
|
12
|
-
import { getGlobalRoot } from '../sharing/
|
|
11
|
+
import { repairAutomaticMemories } from '../store/quality-repair.js';
|
|
12
|
+
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
13
13
|
import { errorMessage } from '../util/log.js';
|
|
14
|
-
|
|
14
|
+
import { CliExit } from './exit.js';
|
|
15
15
|
// Audit log subcommands (`hippo audit list`)
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
16
|
const VALID_AUDIT_OPS = new Set(AUDIT_OPS);
|
|
18
17
|
function formatAuditRow(ev) {
|
|
19
18
|
const target = ev.targetId ?? '-';
|
|
@@ -22,40 +21,41 @@ function formatAuditRow(ev) {
|
|
|
22
21
|
}
|
|
23
22
|
function readAuditOp(flags) {
|
|
24
23
|
const opFlag = stringFlag(flags, 'op');
|
|
24
|
+
// SAFETY: Set.has only compares by value, so a string outside the audit ops is a plain miss.
|
|
25
25
|
if (opFlag && !VALID_AUDIT_OPS.has(opFlag)) {
|
|
26
26
|
// Built from the Set so the message cannot drift from the valid ops.
|
|
27
27
|
const expected = Array.from(VALID_AUDIT_OPS).join(' | ');
|
|
28
28
|
printError(`Unknown --op value: ${opFlag}. Expected one of: ${expected}.`);
|
|
29
|
-
|
|
29
|
+
throw new CliExit(1);
|
|
30
30
|
}
|
|
31
|
+
// SAFETY: the exit above rejects every non-empty opFlag outside VALID_AUDIT_OPS, and an empty one is returned as given.
|
|
31
32
|
return opFlag;
|
|
32
33
|
}
|
|
33
34
|
function readAuditLimit(flags) {
|
|
34
35
|
const limitRaw = flags['limit'];
|
|
35
36
|
let limit = 100;
|
|
36
|
-
if (limitRaw !== undefined &&
|
|
37
|
+
if (limitRaw !== undefined && !isBooleanFlag(limitRaw)) {
|
|
37
38
|
const parsed = parseInt(String(limitRaw), 10);
|
|
38
39
|
if (!Number.isFinite(parsed)) {
|
|
39
40
|
printError(`Invalid --limit value: ${String(limitRaw)} (expected a positive integer).`);
|
|
40
|
-
|
|
41
|
+
throw new CliExit(1);
|
|
41
42
|
}
|
|
42
43
|
limit = parsed;
|
|
43
44
|
}
|
|
44
45
|
if (limit < 1 || limit > 10000) {
|
|
45
46
|
printError(`--limit must be between 1 and 10000 (got ${limit}).`);
|
|
46
|
-
|
|
47
|
+
throw new CliExit(1);
|
|
47
48
|
}
|
|
48
49
|
return limit;
|
|
49
50
|
}
|
|
50
|
-
async function cmdAuditList(hippoRoot, flags) {
|
|
51
|
+
async function cmdAuditList(hippoRoot, tenantId, flags) {
|
|
51
52
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
52
53
|
const asJson = boolFlag(flags, 'json');
|
|
53
|
-
const tenantId = resolveTenantId({});
|
|
54
54
|
const op = readAuditOp(flags);
|
|
55
55
|
const since = stringFlag(flags, 'since');
|
|
56
56
|
if (since !== undefined && !Number.isFinite(new Date(since).getTime())) {
|
|
57
57
|
printError(`Invalid --since: ${since} (expected an ISO timestamp like 2026-04-22 or 2026-04-22T12:00:00Z).`);
|
|
58
|
-
|
|
58
|
+
throw new CliExit(1);
|
|
59
59
|
}
|
|
60
60
|
const limit = readAuditLimit(flags);
|
|
61
61
|
const ctx = { hippoRoot: root, tenantId, actor: { subject: 'cli', role: 'admin' } };
|
|
@@ -73,11 +73,11 @@ async function cmdAuditList(hippoRoot, flags) {
|
|
|
73
73
|
console.log(formatAuditRow(ev));
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
function cmdAuditPrune(hippoRoot, flags) {
|
|
76
|
+
function cmdAuditPrune(hippoRoot, ctxTenantId, flags) {
|
|
77
77
|
const olderThanRaw = stringFlag(flags, 'older-than') ?? '';
|
|
78
78
|
if (!olderThanRaw) {
|
|
79
79
|
printError('Usage: hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
|
|
80
|
-
|
|
80
|
+
throw new CliExit(1);
|
|
81
81
|
}
|
|
82
82
|
let olderThanDays;
|
|
83
83
|
try {
|
|
@@ -85,9 +85,9 @@ function cmdAuditPrune(hippoRoot, flags) {
|
|
|
85
85
|
}
|
|
86
86
|
catch (e) {
|
|
87
87
|
printError(errorMessage(e));
|
|
88
|
-
|
|
88
|
+
throw new CliExit(1);
|
|
89
89
|
}
|
|
90
|
-
const tenantId = stringFlag(flags, 'tenant')?.trim() ||
|
|
90
|
+
const tenantId = stringFlag(flags, 'tenant')?.trim() || ctxTenantId;
|
|
91
91
|
const dryRun = flagIsTrue(flags, 'dry-run');
|
|
92
92
|
const asJson = boolFlag(flags, 'json');
|
|
93
93
|
const result = pruneAuditLog(hippoRoot, { olderThanDays, tenantId, dryRun, actor: 'cli' });
|
|
@@ -101,22 +101,22 @@ function cmdAuditPrune(hippoRoot, flags) {
|
|
|
101
101
|
console.log('(dry-run; re-run without --dry-run to actually delete)');
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
async function cmdAuditLog(hippoRoot, args, flags) {
|
|
104
|
+
async function cmdAuditLog(hippoRoot, tenantId, args, flags) {
|
|
105
105
|
const sub = args[0];
|
|
106
106
|
if (sub === 'list') {
|
|
107
|
-
await cmdAuditList(hippoRoot, flags);
|
|
107
|
+
await cmdAuditList(hippoRoot, tenantId, flags);
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
110
|
if (sub === 'prune') {
|
|
111
|
-
cmdAuditPrune(hippoRoot, flags);
|
|
111
|
+
cmdAuditPrune(hippoRoot, tenantId, flags);
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
printError(`Unknown audit subcommand: ${sub}. Expected: list | prune.`);
|
|
115
|
-
|
|
115
|
+
throw new CliExit(1);
|
|
116
116
|
}
|
|
117
|
-
function auditRepair(hippoRoot, flags) {
|
|
117
|
+
function auditRepair(hippoRoot, tenantId, flags) {
|
|
118
118
|
const apply = flagIsTrue(flags, 'apply') && flags['dry-run'] !== true;
|
|
119
|
-
const result = repairAutomaticMemories(flags['global'] ? getGlobalRoot() : hippoRoot, { tenantId
|
|
119
|
+
const result = repairAutomaticMemories(flags['global'] ? getGlobalRoot() : hippoRoot, { tenantId, apply });
|
|
120
120
|
if (flags['json']) {
|
|
121
121
|
console.log(JSON.stringify(result));
|
|
122
122
|
return;
|
|
@@ -136,14 +136,15 @@ function auditRepair(hippoRoot, flags) {
|
|
|
136
136
|
if (!apply)
|
|
137
137
|
console.log('Preview only. Add --apply to move set-aside memories to dormant storage. Pin a review memory to keep it.');
|
|
138
138
|
}
|
|
139
|
-
function fixAuditErrors(hippoRoot, result, flags) {
|
|
139
|
+
function fixAuditErrors(hippoRoot, tenantId, result, flags) {
|
|
140
140
|
const errors = result.issues.filter(i => i.severity === 'error');
|
|
141
141
|
if (errors.length > 0 && flagIsTrue(flags, 'dry-run')) {
|
|
142
142
|
console.log(`\nWould remove ${errors.length} error-severity memories (dry run, nothing deleted).`);
|
|
143
143
|
console.log(`${result.issues.length - errors.length} warnings would remain (review manually).`);
|
|
144
144
|
}
|
|
145
145
|
else if (errors.length > 0) {
|
|
146
|
-
const
|
|
146
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
147
|
+
const removedCount = api.removeAuditErrors(ctx, 'audit --fix', errors).length;
|
|
147
148
|
console.log(`\nRemoved ${removedCount} error-severity memories.`);
|
|
148
149
|
console.log(`${result.issues.length - errors.length} warnings remain (review manually).`);
|
|
149
150
|
}
|
|
@@ -151,20 +152,18 @@ function fixAuditErrors(hippoRoot, result, flags) {
|
|
|
151
152
|
console.log(`\nNo error-severity issues. Warnings require manual review.`);
|
|
152
153
|
}
|
|
153
154
|
}
|
|
154
|
-
export async function handleAudit({ hippoRoot, args, flags }) {
|
|
155
|
+
export async function handleAudit({ hippoRoot, tenantId, args, flags }) {
|
|
155
156
|
if (args[0] === 'repair') {
|
|
156
|
-
auditRepair(hippoRoot, flags);
|
|
157
|
+
auditRepair(hippoRoot, tenantId, flags);
|
|
157
158
|
return;
|
|
158
159
|
}
|
|
159
|
-
// `audit list` and `audit prune`
|
|
160
|
-
// Other forms (no sub, --fix) keep the existing memory-quality auditor
|
|
161
|
-
// for backwards compatibility.
|
|
160
|
+
// `audit list` and `audit prune` are the audit-log subcommands; other forms (no sub, --fix) keep the memory-quality auditor.
|
|
162
161
|
if (args[0] === 'list' || args[0] === 'prune') {
|
|
163
|
-
await cmdAuditLog(hippoRoot, args, flags);
|
|
162
|
+
await cmdAuditLog(hippoRoot, tenantId, args, flags);
|
|
164
163
|
return;
|
|
165
164
|
}
|
|
166
165
|
requireInit(hippoRoot);
|
|
167
|
-
const entries = loadAllEntries(hippoRoot,
|
|
166
|
+
const entries = loadAllEntries(hippoRoot, tenantId);
|
|
168
167
|
const result = auditMemories(entries, memoriesBackingObjects(hippoRoot));
|
|
169
168
|
const shouldFix = boolFlag(flags, 'fix');
|
|
170
169
|
if (result.issues.length === 0) {
|
|
@@ -178,7 +177,7 @@ export async function handleAudit({ hippoRoot, args, flags }) {
|
|
|
178
177
|
console.log(` "${issue.content.slice(0, 80)}${issue.content.length > 80 ? '...' : ''}"`);
|
|
179
178
|
}
|
|
180
179
|
if (shouldFix) {
|
|
181
|
-
fixAuditErrors(hippoRoot, result, flags);
|
|
180
|
+
fixAuditErrors(hippoRoot, tenantId, result, flags);
|
|
182
181
|
}
|
|
183
182
|
else {
|
|
184
183
|
console.log(`\nRun with --fix to auto-remove error-severity issues.`);
|
package/dist/cli/auth.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 handleAuth({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
3
3
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/cli/auth.js
CHANGED
|
@@ -1,44 +1,60 @@
|
|
|
1
1
|
// `hippo auth`: create, list, revoke and scope API keys.
|
|
2
2
|
import { listApiKeys } from '../store/auth.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
6
|
import { boolFlag, stringFlag } from './flag-values.js';
|
|
7
7
|
import { resolveAuthRoot } from './shared.js';
|
|
8
8
|
import { errorMessage } from '../util/log.js';
|
|
9
|
+
import { CliExit } from './exit.js';
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Auth subcommands
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
|
-
|
|
13
|
+
/** --role as given, or undefined for the default; anything else exits 1, so a typo never picks a role. */
|
|
14
|
+
function roleFlagOrExit(flags) {
|
|
15
|
+
const roleFlag = stringFlag(flags, 'role');
|
|
16
|
+
if (roleFlag !== undefined && roleFlag !== 'admin' && roleFlag !== 'member') {
|
|
17
|
+
printError(`Invalid --role value: '${roleFlag}'. Use 'admin' or 'member'.`);
|
|
18
|
+
throw new CliExit(1);
|
|
19
|
+
}
|
|
20
|
+
return roleFlag;
|
|
21
|
+
}
|
|
22
|
+
/** Says which defaults a mint took and how to ask for the wider key. Stderr keeps --json output clean. */
|
|
23
|
+
function noteMintDefaults(roleGiven, expiryGiven) {
|
|
24
|
+
const notes = [];
|
|
25
|
+
if (!roleGiven)
|
|
26
|
+
notes.push('no --role given, so this is a member key (pass --role admin for an admin key)');
|
|
27
|
+
if (!expiryGiven)
|
|
28
|
+
notes.push('no --ttl-days or --no-expiry given, so it expires in 90 days');
|
|
29
|
+
if (notes.length > 0)
|
|
30
|
+
printError(`hippo auth create: ${notes.join('; ')}.`);
|
|
31
|
+
}
|
|
32
|
+
function cmdAuthCreate(hippoRoot, defaultTenantId, flags) {
|
|
13
33
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
14
34
|
const tenantFlag = stringFlag(flags, 'tenant');
|
|
15
35
|
const labelFlag = stringFlag(flags, 'label');
|
|
16
36
|
const asJson = boolFlag(flags, 'json');
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (roleFlag !== 'admin' && roleFlag !== 'member') {
|
|
22
|
-
printError(`Invalid --role value: '${roleFlag}'. Use 'admin' or 'member'.`);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
role = roleFlag;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
// The default is the widest key hippo mints, so the operator is told at the moment of choosing. Stderr keeps --json output clean.
|
|
29
|
-
printError('hippo auth create: no --role given, so this is an admin key, and it never expires. Pass --role member for a narrower key; revoke either with `hippo auth revoke <key_id>`.');
|
|
30
|
-
}
|
|
37
|
+
const role = roleFlagOrExit(flags);
|
|
38
|
+
const ttlFlag = stringFlag(flags, 'ttl-days');
|
|
39
|
+
const ttlDays = ttlFlag === undefined ? undefined : Number(ttlFlag);
|
|
40
|
+
const noExpiry = boolFlag(flags, 'no-expiry');
|
|
31
41
|
// The CLI's --tenant flag is the only legitimate cross-tenant override
|
|
32
42
|
// (admin minting a key for another tenant from the local machine). It
|
|
33
43
|
// flows through ctx.tenantId, NOT through opts — authCreate's opts no
|
|
34
44
|
// longer accepts a tenantId field, so the HTTP layer cannot smuggle a
|
|
35
45
|
// body.tenantId across.
|
|
36
|
-
const ctx =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
46
|
+
const ctx = cliApiContext(root, tenantFlag ?? defaultTenantId);
|
|
47
|
+
let result;
|
|
48
|
+
try {
|
|
49
|
+
result = api.authCreate(ctx, { label: labelFlag, role, ttlDays, noExpiry: noExpiry || undefined });
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if (!(err instanceof api.BadRequestError))
|
|
53
|
+
throw err;
|
|
54
|
+
printError(`hippo auth create: ${err.message} (--ttl-days, --no-expiry).`);
|
|
55
|
+
throw new CliExit(1);
|
|
56
|
+
}
|
|
57
|
+
noteMintDefaults(role !== undefined, ttlFlag !== undefined || noExpiry);
|
|
42
58
|
if (asJson) {
|
|
43
59
|
console.log(JSON.stringify({
|
|
44
60
|
keyId: result.keyId,
|
|
@@ -46,12 +62,14 @@ function cmdAuthCreate(hippoRoot, flags) {
|
|
|
46
62
|
tenantId: result.tenantId,
|
|
47
63
|
label: labelFlag ?? null,
|
|
48
64
|
role: result.role,
|
|
65
|
+
expiresAt: result.expiresAt,
|
|
49
66
|
}));
|
|
50
67
|
return;
|
|
51
68
|
}
|
|
52
69
|
console.log(`key_id: ${result.keyId}`);
|
|
53
70
|
console.log(`plaintext: ${result.plaintext}`);
|
|
54
71
|
console.log(`role: ${result.role}`);
|
|
72
|
+
console.log(`expires: ${result.expiresAt ?? 'never'}`);
|
|
55
73
|
console.log('');
|
|
56
74
|
console.log('!! WARNING: this is the ONLY time the plaintext key will be shown. !!');
|
|
57
75
|
console.log('!! Copy it now. Hippo stores only a scrypt hash and cannot recover it. !!');
|
|
@@ -82,24 +100,24 @@ function cmdAuthList(hippoRoot, flags) {
|
|
|
82
100
|
}
|
|
83
101
|
}
|
|
84
102
|
// The local CLI owns every tenant, so revoke and grant run in the key's own tenant.
|
|
85
|
-
function keyContext(root, keyId) {
|
|
86
|
-
const hostCtx =
|
|
103
|
+
function keyContext(root, tenantId, keyId) {
|
|
104
|
+
const hostCtx = cliApiContext(root, tenantId);
|
|
87
105
|
const keyTenant = api.authKeyTenant(hostCtx, keyId);
|
|
88
106
|
if (keyTenant === undefined) {
|
|
89
107
|
printError(`Unknown key_id: ${keyId}`);
|
|
90
|
-
|
|
108
|
+
throw new CliExit(1);
|
|
91
109
|
}
|
|
92
110
|
return { ...hostCtx, tenantId: keyTenant };
|
|
93
111
|
}
|
|
94
|
-
function cmdAuthRevoke(hippoRoot, keyId, flags) {
|
|
95
|
-
const ctx = keyContext(resolveAuthRoot(hippoRoot, flags), keyId);
|
|
112
|
+
function cmdAuthRevoke(hippoRoot, tenantId, keyId, flags) {
|
|
113
|
+
const ctx = keyContext(resolveAuthRoot(hippoRoot, flags), tenantId, keyId);
|
|
96
114
|
let revokedAt;
|
|
97
115
|
try {
|
|
98
116
|
revokedAt = api.authRevoke(ctx, keyId).revokedAt;
|
|
99
117
|
}
|
|
100
118
|
catch (err) {
|
|
101
119
|
printError(`Error: ${errorMessage(err)}`);
|
|
102
|
-
|
|
120
|
+
throw new CliExit(1);
|
|
103
121
|
}
|
|
104
122
|
if (flags['json']) {
|
|
105
123
|
console.log(JSON.stringify({ keyId, revokedAt }));
|
|
@@ -108,8 +126,8 @@ function cmdAuthRevoke(hippoRoot, keyId, flags) {
|
|
|
108
126
|
console.log(`Revoked ${keyId} at ${revokedAt}`);
|
|
109
127
|
}
|
|
110
128
|
/** `hippo auth grant|ungrant <key_id> <scope>`, routed through api so the tenant, restricted-scope and audit checks live in one place. */
|
|
111
|
-
function cmdAuthScopeGrant(hippoRoot, keyId, scope, grant, flags) {
|
|
112
|
-
const ctx = keyContext(resolveAuthRoot(hippoRoot, flags), keyId);
|
|
129
|
+
function cmdAuthScopeGrant(hippoRoot, tenantId, keyId, scope, grant, flags) {
|
|
130
|
+
const ctx = keyContext(resolveAuthRoot(hippoRoot, flags), tenantId, keyId);
|
|
113
131
|
try {
|
|
114
132
|
if (grant)
|
|
115
133
|
api.authGrant(ctx, keyId, scope);
|
|
@@ -118,7 +136,7 @@ function cmdAuthScopeGrant(hippoRoot, keyId, scope, grant, flags) {
|
|
|
118
136
|
}
|
|
119
137
|
catch (err) {
|
|
120
138
|
printError(`Error: ${errorMessage(err)}`);
|
|
121
|
-
|
|
139
|
+
throw new CliExit(1);
|
|
122
140
|
}
|
|
123
141
|
if (flags['json']) {
|
|
124
142
|
console.log(JSON.stringify({ keyId, scope, granted: grant }));
|
|
@@ -126,16 +144,16 @@ function cmdAuthScopeGrant(hippoRoot, keyId, scope, grant, flags) {
|
|
|
126
144
|
}
|
|
127
145
|
console.log(grant ? `Granted ${keyId} read access to ${scope}` : `Removed ${keyId}'s grant on ${scope}`);
|
|
128
146
|
}
|
|
129
|
-
export function
|
|
147
|
+
export function handleAuth({ hippoRoot, tenantId, args, flags }) {
|
|
130
148
|
const sub = args[0];
|
|
131
149
|
if (!sub) {
|
|
132
150
|
printError('Usage: hippo auth <create|list|revoke|grant|ungrant> [options]');
|
|
133
|
-
|
|
151
|
+
throw new CliExit(1);
|
|
134
152
|
}
|
|
135
153
|
const subArgs = args.slice(1);
|
|
136
154
|
switch (sub) {
|
|
137
155
|
case 'create':
|
|
138
|
-
cmdAuthCreate(hippoRoot, flags);
|
|
156
|
+
cmdAuthCreate(hippoRoot, tenantId, flags);
|
|
139
157
|
return;
|
|
140
158
|
case 'list':
|
|
141
159
|
cmdAuthList(hippoRoot, flags);
|
|
@@ -144,9 +162,9 @@ export function cmdAuth(hippoRoot, args, flags) {
|
|
|
144
162
|
const keyId = subArgs[0];
|
|
145
163
|
if (!keyId) {
|
|
146
164
|
printError('Usage: hippo auth revoke <key_id>');
|
|
147
|
-
|
|
165
|
+
throw new CliExit(1);
|
|
148
166
|
}
|
|
149
|
-
cmdAuthRevoke(hippoRoot, keyId, flags);
|
|
167
|
+
cmdAuthRevoke(hippoRoot, tenantId, keyId, flags);
|
|
150
168
|
return;
|
|
151
169
|
}
|
|
152
170
|
case 'grant':
|
|
@@ -154,14 +172,14 @@ export function cmdAuth(hippoRoot, args, flags) {
|
|
|
154
172
|
const [keyId, scope] = subArgs;
|
|
155
173
|
if (!keyId || !scope) {
|
|
156
174
|
printError(`Usage: hippo auth ${sub} <key_id> <scope>`);
|
|
157
|
-
|
|
175
|
+
throw new CliExit(1);
|
|
158
176
|
}
|
|
159
|
-
cmdAuthScopeGrant(hippoRoot, keyId, scope, sub === 'grant', flags);
|
|
177
|
+
cmdAuthScopeGrant(hippoRoot, tenantId, keyId, scope, sub === 'grant', flags);
|
|
160
178
|
return;
|
|
161
179
|
}
|
|
162
180
|
default:
|
|
163
181
|
printError(`Unknown auth subcommand: ${sub}. Expected: create | list | revoke | grant | ungrant.`);
|
|
164
|
-
|
|
182
|
+
throw new CliExit(1);
|
|
165
183
|
}
|
|
166
184
|
}
|
|
167
185
|
//# sourceMappingURL=auth.js.map
|
package/dist/cli/briefs.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleProjectBrief({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
3
|
+
export declare function handleGraph({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
4
|
+
export declare function handleCustomerNote({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
5
5
|
//# sourceMappingURL=briefs.d.ts.map
|