hippo-memory 1.60.0 → 1.61.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/ablation.js +9 -27
- package/dist/agent-memories/apply.js +4 -1
- package/dist/agent-memories/claude-code.js +1 -1
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/gemini.js +1 -1
- package/dist/agent-memories/legacy.js +1 -1
- package/dist/agent-memories/source.js +1 -1
- package/dist/agent-memories/sync.js +8 -3
- package/dist/ambient-store.d.ts +14 -0
- package/dist/ambient-store.js +90 -0
- package/dist/ambient.d.ts +23 -0
- package/dist/ambient.js +72 -50
- package/dist/api/assemble.d.ts +93 -0
- package/dist/api/assemble.js +152 -0
- package/dist/api/audit.d.ts +17 -0
- package/dist/api/audit.js +23 -0
- package/dist/api/auth.d.ts +79 -0
- package/dist/api/auth.js +178 -0
- package/dist/api/context-types.d.ts +105 -0
- package/dist/api/context-types.js +3 -0
- package/dist/api/context.d.ts +31 -0
- package/dist/api/context.js +705 -0
- package/dist/api/dormant.d.ts +30 -0
- package/dist/api/dormant.js +140 -0
- package/dist/api/drill-down.d.ts +84 -0
- package/dist/api/drill-down.js +123 -0
- package/dist/api/forget.d.ts +57 -0
- package/dist/api/forget.js +87 -0
- package/dist/api/goals.d.ts +18 -0
- package/dist/api/goals.js +33 -0
- package/dist/api/learn.d.ts +31 -0
- package/dist/api/learn.js +88 -0
- package/dist/api/outcome.d.ts +61 -0
- package/dist/api/outcome.js +66 -0
- package/dist/api/promote.d.ts +54 -0
- package/dist/api/promote.js +203 -0
- package/dist/api/quarantine.d.ts +24 -0
- package/dist/api/quarantine.js +121 -0
- package/dist/api/recall-types.d.ts +390 -0
- package/dist/api/recall-types.js +3 -0
- package/dist/api/recall.d.ts +36 -0
- package/dist/api/recall.js +634 -0
- package/dist/api/remember.d.ts +35 -0
- package/dist/api/remember.js +43 -0
- package/dist/api/sleep.d.ts +136 -0
- package/dist/api/sleep.js +271 -0
- package/dist/api/tokens.d.ts +26 -0
- package/dist/api/tokens.js +60 -0
- package/dist/api/types.d.ts +56 -0
- package/dist/api/types.js +38 -0
- package/dist/api.d.ts +20 -1262
- package/dist/api.js +25 -2727
- package/dist/audit.d.ts +3 -0
- package/dist/audit.js +6 -3
- package/dist/auth.d.ts +45 -4
- package/dist/auth.js +125 -48
- package/dist/autolearn.js +2 -2
- package/dist/capture/command.d.ts +33 -0
- package/dist/capture/command.js +264 -0
- package/dist/capture/compact.d.ts +44 -0
- package/dist/capture/compact.js +354 -0
- package/dist/capture/extract.d.ts +21 -0
- package/dist/capture/extract.js +464 -0
- package/dist/capture/transcript.d.ts +40 -0
- package/dist/capture/transcript.js +193 -0
- package/dist/capture-error.js +2 -1
- package/dist/churn-git.js +4 -2
- package/dist/cli/audit.d.ts +3 -0
- package/dist/cli/audit.js +159 -0
- package/dist/cli/auth.d.ts +2 -0
- package/dist/cli/auth.js +171 -0
- package/dist/cli/briefs.d.ts +4 -0
- package/dist/cli/briefs.js +435 -0
- package/dist/cli/card.d.ts +3 -0
- package/dist/cli/card.js +333 -0
- package/dist/cli/context.d.ts +15 -0
- package/dist/cli/context.js +366 -0
- package/dist/cli/continuity.d.ts +6 -0
- package/dist/cli/continuity.js +445 -0
- package/dist/cli/curate.d.ts +19 -0
- package/dist/cli/curate.js +555 -0
- package/dist/cli/dag.d.ts +5 -0
- package/dist/cli/dag.js +177 -0
- package/dist/cli/decisions.d.ts +4 -0
- package/dist/cli/decisions.js +528 -0
- package/dist/cli/eval.d.ts +5 -0
- package/dist/cli/eval.js +213 -0
- package/dist/cli/explain.d.ts +4 -0
- package/dist/cli/explain.js +150 -0
- package/dist/cli/goals.d.ts +2 -0
- package/dist/cli/goals.js +196 -0
- package/dist/cli/hook-blocks.d.ts +18 -0
- package/dist/cli/hook-blocks.js +233 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.js +305 -0
- package/dist/cli/maintenance.d.ts +4 -0
- package/dist/cli/maintenance.js +179 -0
- package/dist/cli/playbooks.d.ts +4 -0
- package/dist/cli/playbooks.js +556 -0
- package/dist/cli/projects.js +1 -1
- package/dist/cli/recall.d.ts +7 -0
- package/dist/cli/recall.js +597 -0
- package/dist/cli/remember.d.ts +5 -0
- package/dist/cli/remember.js +442 -0
- package/dist/cli/serve.d.ts +5 -0
- package/dist/cli/serve.js +40 -0
- package/dist/cli/session-hooks.d.ts +29 -0
- package/dist/cli/session-hooks.js +637 -0
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.js +376 -0
- package/dist/cli/shared.d.ts +15 -19
- package/dist/cli/shared.js +50 -341
- package/dist/cli/slack.d.ts +2 -0
- package/dist/cli/slack.js +171 -0
- package/dist/cli/status.d.ts +18 -0
- package/dist/cli/status.js +400 -0
- package/dist/cli/transfer.d.ts +10 -0
- package/dist/cli/transfer.js +438 -0
- package/dist/cli/usage.d.ts +85 -0
- package/dist/cli/usage.js +741 -0
- package/dist/cli.d.ts +71 -120
- package/dist/cli.js +170 -8469
- package/dist/client.js +15 -8
- package/dist/compaction-record.js +6 -4
- package/dist/connectors/github/backfill.js +94 -87
- package/dist/connectors/github/cli-impl.js +4 -3
- package/dist/connectors/github/dlq.js +67 -54
- package/dist/connectors/github/ingest.js +34 -35
- package/dist/connectors/github/tenant-routing.js +3 -2
- package/dist/connectors/github/webhook.js +135 -216
- package/dist/connectors/slack/dlq.js +49 -61
- package/dist/connectors/slack/ingest.js +55 -48
- package/dist/connectors/slack/tenant-routing.js +4 -3
- package/dist/connectors/slack/webhook.js +72 -74
- package/dist/consolidate/conflicts.d.ts +10 -0
- package/dist/consolidate/conflicts.js +178 -0
- package/dist/consolidate/decay.d.ts +12 -0
- package/dist/consolidate/decay.js +145 -0
- package/dist/consolidate/llm-passes.d.ts +3 -0
- package/dist/consolidate/llm-passes.js +141 -0
- package/dist/consolidate/merge.d.ts +7 -0
- package/dist/consolidate/merge.js +251 -0
- package/dist/consolidate/physics-pass.d.ts +3 -0
- package/dist/consolidate/physics-pass.js +60 -0
- package/dist/consolidate/run.d.ts +69 -0
- package/dist/consolidate/run.js +76 -0
- package/dist/consolidate/sleep.d.ts +18 -0
- package/dist/consolidate/sleep.js +209 -0
- package/dist/consolidate/traces.d.ts +4 -0
- package/dist/consolidate/traces.js +178 -0
- package/dist/context-auto.js +7 -11
- package/dist/context-render.d.ts +1 -1
- package/dist/context-render.js +1 -1
- package/dist/customer-notes.d.ts +3 -0
- package/dist/customer-notes.js +6 -4
- package/dist/dag.js +6 -5
- package/dist/dashboard-actions.d.ts +20 -0
- package/dist/dashboard-actions.js +88 -0
- package/dist/dashboard-params.d.ts +45 -0
- package/dist/dashboard-params.js +127 -0
- package/dist/dashboard-queries.d.ts +15 -0
- package/dist/dashboard-queries.js +355 -0
- package/dist/dashboard-snapshot.d.ts +138 -0
- package/dist/dashboard-snapshot.js +308 -0
- package/dist/dashboard-types.d.ts +163 -0
- package/dist/dashboard-types.js +3 -0
- package/dist/dashboard.d.ts +6 -7
- package/dist/dashboard.js +228 -202
- package/dist/db/busy.d.ts +5 -0
- package/dist/db/busy.js +24 -0
- package/dist/db/continuity.d.ts +5 -0
- package/dist/db/continuity.js +145 -0
- package/dist/db/meta.d.ts +8 -0
- package/dist/db/meta.js +35 -0
- package/dist/db/migrate.d.ts +9 -0
- package/dist/db/migrate.js +138 -0
- package/dist/db/migrations/index.d.ts +5 -0
- package/dist/db/migrations/index.js +109 -0
- package/dist/db/migrations/types.d.ts +14 -0
- package/dist/db/migrations/types.js +2 -0
- package/dist/db/migrations/v01.d.ts +3 -0
- package/dist/db/migrations/v01.js +38 -0
- package/dist/db/migrations/v02.d.ts +3 -0
- package/dist/db/migrations/v02.js +21 -0
- package/dist/db/migrations/v03.d.ts +3 -0
- package/dist/db/migrations/v03.js +22 -0
- package/dist/db/migrations/v04.d.ts +3 -0
- package/dist/db/migrations/v04.js +28 -0
- package/dist/db/migrations/v05.d.ts +3 -0
- package/dist/db/migrations/v05.js +21 -0
- package/dist/db/migrations/v06.d.ts +3 -0
- package/dist/db/migrations/v06.js +25 -0
- package/dist/db/migrations/v07.d.ts +3 -0
- package/dist/db/migrations/v07.js +13 -0
- package/dist/db/migrations/v08.d.ts +3 -0
- package/dist/db/migrations/v08.js +8 -0
- package/dist/db/migrations/v09.d.ts +3 -0
- package/dist/db/migrations/v09.js +13 -0
- package/dist/db/migrations/v10.d.ts +3 -0
- package/dist/db/migrations/v10.js +17 -0
- package/dist/db/migrations/v11.d.ts +3 -0
- package/dist/db/migrations/v11.js +15 -0
- package/dist/db/migrations/v12.d.ts +3 -0
- package/dist/db/migrations/v12.js +11 -0
- package/dist/db/migrations/v13.d.ts +3 -0
- package/dist/db/migrations/v13.js +15 -0
- package/dist/db/migrations/v14.d.ts +3 -0
- package/dist/db/migrations/v14.js +66 -0
- package/dist/db/migrations/v15.d.ts +3 -0
- package/dist/db/migrations/v15.js +42 -0
- package/dist/db/migrations/v16.d.ts +3 -0
- package/dist/db/migrations/v16.js +61 -0
- package/dist/db/migrations/v17.d.ts +3 -0
- package/dist/db/migrations/v17.js +46 -0
- package/dist/db/migrations/v18.d.ts +3 -0
- package/dist/db/migrations/v18.js +60 -0
- package/dist/db/migrations/v19.d.ts +3 -0
- package/dist/db/migrations/v19.js +28 -0
- package/dist/db/migrations/v20.d.ts +3 -0
- package/dist/db/migrations/v20.js +42 -0
- package/dist/db/migrations/v21.d.ts +3 -0
- package/dist/db/migrations/v21.js +16 -0
- package/dist/db/migrations/v22.d.ts +3 -0
- package/dist/db/migrations/v22.js +82 -0
- package/dist/db/migrations/v23.d.ts +3 -0
- package/dist/db/migrations/v23.js +48 -0
- package/dist/db/migrations/v24.d.ts +3 -0
- package/dist/db/migrations/v24.js +72 -0
- package/dist/db/migrations/v25.d.ts +3 -0
- package/dist/db/migrations/v25.js +46 -0
- package/dist/db/migrations/v26.d.ts +3 -0
- package/dist/db/migrations/v26.js +23 -0
- package/dist/db/migrations/v27.d.ts +3 -0
- package/dist/db/migrations/v27.js +57 -0
- package/dist/db/migrations/v28.d.ts +3 -0
- package/dist/db/migrations/v28.js +38 -0
- package/dist/db/migrations/v29.d.ts +3 -0
- package/dist/db/migrations/v29.js +78 -0
- package/dist/db/migrations/v30.d.ts +3 -0
- package/dist/db/migrations/v30.js +92 -0
- package/dist/db/migrations/v31.d.ts +3 -0
- package/dist/db/migrations/v31.js +74 -0
- package/dist/db/migrations/v32.d.ts +3 -0
- package/dist/db/migrations/v32.js +102 -0
- package/dist/db/migrations/v33.d.ts +3 -0
- package/dist/db/migrations/v33.js +104 -0
- package/dist/db/migrations/v34.d.ts +3 -0
- package/dist/db/migrations/v34.js +93 -0
- package/dist/db/migrations/v35.d.ts +3 -0
- package/dist/db/migrations/v35.js +98 -0
- package/dist/db/migrations/v36.d.ts +3 -0
- package/dist/db/migrations/v36.js +98 -0
- package/dist/db/migrations/v37.d.ts +3 -0
- package/dist/db/migrations/v37.js +219 -0
- package/dist/db/migrations/v38.d.ts +3 -0
- package/dist/db/migrations/v38.js +277 -0
- package/dist/db/migrations/v39.d.ts +3 -0
- package/dist/db/migrations/v39.js +59 -0
- package/dist/db/migrations/v40.d.ts +3 -0
- package/dist/db/migrations/v40.js +74 -0
- package/dist/db/migrations/v41.d.ts +3 -0
- package/dist/db/migrations/v41.js +43 -0
- package/dist/db/migrations/v42.d.ts +3 -0
- package/dist/db/migrations/v42.js +41 -0
- package/dist/db/migrations/v43.d.ts +3 -0
- package/dist/db/migrations/v43.js +67 -0
- package/dist/db/migrations/v44.d.ts +3 -0
- package/dist/db/migrations/v44.js +28 -0
- package/dist/db/migrations/v45.d.ts +3 -0
- package/dist/db/migrations/v45.js +30 -0
- package/dist/db/migrations/v46.d.ts +3 -0
- package/dist/db/migrations/v46.js +25 -0
- package/dist/db/migrations/v47.d.ts +3 -0
- package/dist/db/migrations/v47.js +17 -0
- package/dist/db/migrations/v48.d.ts +3 -0
- package/dist/db/migrations/v48.js +10 -0
- package/dist/db/migrations/v49.d.ts +3 -0
- package/dist/db/migrations/v49.js +31 -0
- package/dist/db/migrations/v50.d.ts +3 -0
- package/dist/db/migrations/v50.js +67 -0
- package/dist/db/migrations/v51.d.ts +3 -0
- package/dist/db/migrations/v51.js +14 -0
- package/dist/db/migrations/v52.d.ts +3 -0
- package/dist/db/migrations/v52.js +7 -0
- package/dist/db/open.d.ts +23 -0
- package/dist/db/open.js +146 -0
- package/dist/db/sqlite.d.ts +21 -0
- package/dist/db/sqlite.js +8 -0
- package/dist/db/tables.d.ts +7 -0
- package/dist/db/tables.js +38 -0
- package/dist/db.d.ts +6 -46
- package/dist/db.js +5 -3049
- package/dist/decisions.d.ts +4 -1
- package/dist/decisions.js +9 -7
- package/dist/dedupe.js +3 -2
- package/dist/delivery-recorder.js +4 -1
- package/dist/doctor.js +3 -3
- package/dist/embedding-provider.d.ts +1 -1
- package/dist/embedding-provider.js +4 -3
- package/dist/embeddings.d.ts +9 -52
- package/dist/embeddings.js +43 -297
- package/dist/env.d.ts +75 -0
- package/dist/env.js +119 -0
- package/dist/eval-suite.js +1 -1
- package/dist/eval.js +2 -2
- package/dist/extract.js +1 -1
- package/dist/gated-write.js +3 -1
- package/dist/goals.d.ts +3 -1
- package/dist/goals.js +18 -0
- package/dist/graph/read.d.ts +73 -0
- package/dist/graph/read.js +325 -0
- package/dist/graph/rows.d.ts +45 -0
- package/dist/graph/rows.js +51 -0
- package/dist/graph/types.d.ts +83 -0
- package/dist/graph/types.js +11 -0
- package/dist/graph/write.d.ts +93 -0
- package/dist/{graph.js → graph/write.js} +6 -384
- package/dist/graph-extract.js +2 -1
- package/dist/graph-recall.d.ts +1 -1
- package/dist/graph-recall.js +2 -2
- package/dist/graph-stream.js +1 -1
- package/dist/graph-view.d.ts +1 -1
- package/dist/graph-view.js +1 -1
- package/dist/half-life-migration.d.ts +1 -1
- package/dist/half-life-migration.js +2 -1
- package/dist/hooks/codex-session.d.ts +8 -0
- package/dist/hooks/codex-session.js +76 -0
- package/dist/hooks/codex-wrapper.d.ts +55 -0
- package/dist/hooks/codex-wrapper.js +288 -0
- package/dist/hooks/json-hooks.d.ts +63 -0
- package/dist/hooks/json-hooks.js +356 -0
- package/dist/hooks/opencode.d.ts +50 -0
- package/dist/hooks/opencode.js +202 -0
- package/dist/hooks/shared.d.ts +54 -0
- package/dist/hooks/shared.js +77 -0
- package/dist/http-retry.d.ts +2 -0
- package/dist/http-retry.js +4 -3
- package/dist/http-util.d.ts +3 -0
- package/dist/http-util.js +10 -0
- package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
- package/dist/importers/core.js +141 -0
- package/dist/importers/markdown-parse.d.ts +41 -0
- package/dist/importers/markdown-parse.js +132 -0
- package/dist/importers/markdown.d.ts +3 -0
- package/dist/importers/markdown.js +92 -0
- package/dist/importers/sources.d.ts +7 -0
- package/dist/importers/sources.js +229 -0
- package/dist/importers/vault.d.ts +11 -0
- package/dist/importers/vault.js +352 -0
- package/dist/incidents.d.ts +3 -0
- package/dist/incidents.js +7 -5
- package/dist/index.d.ts +25 -6
- package/dist/index.js +23 -6
- package/dist/invalidation.js +2 -1
- package/dist/judgment.js +2 -1
- package/dist/keyset.d.ts +13 -0
- package/dist/keyset.js +8 -0
- package/dist/local-embedding.d.ts +13 -0
- package/dist/local-embedding.js +165 -0
- package/dist/log.d.ts +7 -0
- package/dist/log.js +19 -1
- package/dist/mcp/admin-tools.d.ts +8 -0
- package/dist/mcp/admin-tools.js +116 -0
- package/dist/mcp/format.d.ts +27 -0
- package/dist/mcp/format.js +135 -0
- package/dist/mcp/memory-tools.d.ts +5 -0
- package/dist/mcp/memory-tools.js +83 -0
- package/dist/mcp/protocol.d.ts +83 -0
- package/dist/mcp/protocol.js +55 -0
- package/dist/mcp/recall-tools.d.ts +6 -0
- package/dist/mcp/recall-tools.js +320 -0
- package/dist/mcp/request.d.ts +10 -0
- package/dist/mcp/request.js +163 -0
- package/dist/mcp/server.d.ts +4 -75
- package/dist/mcp/server.js +7 -1190
- package/dist/mcp/session-state.d.ts +11 -0
- package/dist/mcp/session-state.js +28 -0
- package/dist/mcp/stdio.d.ts +8 -0
- package/dist/mcp/stdio.js +79 -0
- package/dist/mcp/tools.d.ts +11 -0
- package/dist/mcp/tools.js +247 -0
- package/dist/memory.d.ts +3 -0
- package/dist/memory.js +27 -1
- package/dist/multihop.d.ts +1 -1
- package/dist/multihop.js +2 -1
- package/dist/owner-validation.js +2 -1
- package/dist/physics-state.js +10 -7
- package/dist/policies.d.ts +3 -0
- package/dist/policies.js +8 -6
- package/dist/postinstall.js +3 -2
- package/dist/predictions/planning-fallacy.d.ts +100 -0
- package/dist/predictions/planning-fallacy.js +190 -0
- package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
- package/dist/predictions/store.js +434 -0
- package/dist/processes.d.ts +3 -0
- package/dist/processes.js +7 -5
- package/dist/project-briefs.d.ts +3 -0
- package/dist/project-briefs.js +7 -5
- package/dist/project-identity.js +3 -2
- package/dist/project-merge.js +3 -1
- package/dist/quarantine.d.ts +2 -1
- package/dist/quarantine.js +8 -5
- package/dist/raw-archive.js +1 -1
- package/dist/recall-history.js +3 -2
- package/dist/recall-pipeline.d.ts +2 -2
- package/dist/recall-pipeline.js +16 -8
- package/dist/recall-scope.js +1 -1
- package/dist/recall-trace.d.ts +1 -1
- package/dist/refine-llm.js +2 -1
- package/dist/reject-flow.js +6 -1
- package/dist/rerankers/clef.js +6 -5
- package/dist/rerankers/jev.d.ts +1 -1
- package/dist/rerankers/jev.js +4 -4
- package/dist/rerankers/llm.d.ts +4 -2
- package/dist/rerankers/llm.js +58 -38
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/salience.js +1 -1
- package/dist/scheduler.d.ts +1 -0
- package/dist/scheduler.js +26 -4
- package/dist/scope.js +4 -3
- package/dist/search/as-of.d.ts +10 -0
- package/dist/search/as-of.js +22 -0
- package/dist/search/bm25-search.d.ts +14 -0
- package/dist/search/bm25-search.js +43 -0
- package/dist/search/bm25.d.ts +15 -0
- package/dist/search/bm25.js +54 -0
- package/dist/search/boosts.d.ts +54 -0
- package/dist/search/boosts.js +94 -0
- package/dist/search/breakdown.d.ts +7 -0
- package/dist/search/breakdown.js +20 -0
- package/dist/search/explain.d.ts +25 -0
- package/dist/search/explain.js +31 -0
- package/dist/search/finalize.d.ts +8 -0
- package/dist/search/finalize.js +52 -0
- package/dist/search/fusion.d.ts +27 -0
- package/dist/search/fusion.js +42 -0
- package/dist/search/hybrid-score.d.ts +20 -0
- package/dist/search/hybrid-score.js +73 -0
- package/dist/search/hybrid.d.ts +46 -0
- package/dist/search/hybrid.js +64 -0
- package/dist/search/physics-search.d.ts +29 -0
- package/dist/search/physics-search.js +162 -0
- package/dist/search/rerank.d.ts +10 -0
- package/dist/search/rerank.js +72 -0
- package/dist/search/temporal.d.ts +15 -0
- package/dist/search/temporal.js +45 -0
- package/dist/search/types.d.ts +91 -0
- package/dist/search/types.js +2 -0
- package/dist/search/vector.d.ts +30 -0
- package/dist/search/vector.js +71 -0
- package/dist/secret-detect.d.ts +2 -0
- package/dist/secret-detect.js +2 -1
- package/dist/server/auth.d.ts +52 -0
- package/dist/server/auth.js +221 -0
- package/dist/server/client-ip.d.ts +25 -0
- package/dist/server/client-ip.js +92 -0
- package/dist/server/cursor.d.ts +23 -0
- package/dist/server/cursor.js +58 -0
- package/dist/server/lifecycle.d.ts +7 -0
- package/dist/server/lifecycle.js +29 -0
- package/dist/server/mcp-http.d.ts +5 -0
- package/dist/server/mcp-http.js +199 -0
- package/dist/server/request.d.ts +33 -0
- package/dist/server/request.js +103 -0
- package/dist/server/routes/admin.d.ts +9 -0
- package/dist/server/routes/admin.js +158 -0
- package/dist/server/routes/customer-notes.d.ts +7 -0
- package/dist/server/routes/customer-notes.js +112 -0
- package/dist/server/routes/decisions.d.ts +7 -0
- package/dist/server/routes/decisions.js +133 -0
- package/dist/server/routes/incidents.d.ts +7 -0
- package/dist/server/routes/incidents.js +126 -0
- package/dist/server/routes/memories.d.ts +10 -0
- package/dist/server/routes/memories.js +179 -0
- package/dist/server/routes/policies.d.ts +8 -0
- package/dist/server/routes/policies.js +151 -0
- package/dist/server/routes/predictions.d.ts +7 -0
- package/dist/server/routes/predictions.js +164 -0
- package/dist/server/routes/processes.d.ts +7 -0
- package/dist/server/routes/processes.js +161 -0
- package/dist/server/routes/project-briefs.d.ts +8 -0
- package/dist/server/routes/project-briefs.js +136 -0
- package/dist/server/routes/recall.d.ts +8 -0
- package/dist/server/routes/recall.js +340 -0
- package/dist/server/routes/skills.d.ts +8 -0
- package/dist/server/routes/skills.js +150 -0
- package/dist/server/types.d.ts +56 -0
- package/dist/server/types.js +2 -0
- package/dist/server/validation.d.ts +14 -0
- package/dist/server/validation.js +91 -0
- package/dist/server.d.ts +7 -61
- package/dist/server.js +69 -2362
- package/dist/session-digest.d.ts +1 -1
- package/dist/session-digest.js +9 -2
- package/dist/shared.d.ts +3 -1
- package/dist/shared.js +26 -22
- package/dist/skills.d.ts +3 -0
- package/dist/skills.js +7 -5
- package/dist/stdin.js +2 -2
- package/dist/store/audit-event.d.ts +19 -0
- package/dist/store/audit-event.js +33 -0
- package/dist/store/candidates.d.ts +42 -0
- package/dist/store/candidates.js +152 -0
- package/dist/store/conflicts.d.ts +44 -0
- package/dist/store/conflicts.js +444 -0
- package/dist/store/delete-and-batch.d.ts +63 -0
- package/dist/store/delete-and-batch.js +310 -0
- package/dist/store/entry-reads.d.ts +92 -0
- package/dist/store/entry-reads.js +255 -0
- package/dist/store/entry-row.d.ts +67 -0
- package/dist/store/entry-row.js +208 -0
- package/dist/store/entry-writes.d.ts +46 -0
- package/dist/store/entry-writes.js +148 -0
- package/dist/store/handoffs.d.ts +26 -0
- package/dist/store/handoffs.js +184 -0
- package/dist/store/index-and-stats.d.ts +52 -0
- package/dist/store/index-and-stats.js +214 -0
- package/dist/store/markdown.d.ts +10 -0
- package/dist/store/markdown.js +108 -0
- package/dist/store/mirrors.d.ts +49 -0
- package/dist/store/mirrors.js +312 -0
- package/dist/store/open.d.ts +15 -0
- package/dist/store/open.js +223 -0
- package/dist/store/rows.d.ts +178 -0
- package/dist/store/rows.js +158 -0
- package/dist/store/search-rows.d.ts +86 -0
- package/dist/store/search-rows.js +254 -0
- package/dist/store/sessions.d.ts +83 -0
- package/dist/store/sessions.js +272 -0
- package/dist/store/summaries.d.ts +94 -0
- package/dist/store/summaries.js +377 -0
- package/dist/store/tenant-lookup.d.ts +12 -0
- package/dist/store/tenant-lookup.js +16 -0
- package/dist/store-cards.js +2 -1
- package/dist/summary-dirty.d.ts +4 -0
- package/dist/summary-dirty.js +32 -0
- package/dist/support-bundle.js +4 -3
- package/dist/tenant.js +2 -2
- package/dist/tokenize.d.ts +2 -0
- package/dist/tokenize.js +16 -0
- package/dist/transcript-tail.d.ts +7 -0
- package/dist/transcript-tail.js +48 -0
- package/dist/vector-store.d.ts +27 -0
- package/dist/vector-store.js +210 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/dist/working-memory.js +1 -1
- package/dist/yaml.js +36 -11
- package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- package/dist-ui/assets/index-DPN7cP19.js +33 -0
- package/dist-ui/assets/index-dFloKRVr.css +1 -0
- package/dist-ui/index.html +3 -25
- 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/capture.d.ts +0 -155
- package/dist/capture.js +0 -1295
- package/dist/consolidate.d.ts +0 -58
- package/dist/consolidate.js +0 -1124
- package/dist/graph.d.ts +0 -245
- package/dist/hooks.d.ts +0 -208
- package/dist/hooks.js +0 -1076
- package/dist/importers.js +0 -900
- package/dist/predictions.js +0 -620
- package/dist/search.d.ts +0 -320
- package/dist/search.js +0 -970
- package/dist/store.d.ts +0 -776
- package/dist/store.js +0 -3473
- package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
- package/dist-ui/assets/index-BhT8RvO6.js +0 -61
- package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
- package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
package/dist/cli/shared.js
CHANGED
|
@@ -1,32 +1,30 @@
|
|
|
1
1
|
// Helpers two or more CLI verbs use, split from cli.ts so a verb can move to its own file without importing cli.ts.
|
|
2
2
|
// This module must never import cli.ts.
|
|
3
|
+
import { envApiKey, envClaudeCodeSessionId, envHippoSessionId, envRequireServer } from '../env.js';
|
|
3
4
|
import * as path from 'path';
|
|
4
5
|
import * as fs from 'fs';
|
|
5
6
|
import { execFileSync, execSync } from 'child_process';
|
|
6
|
-
import { installJsonHooks
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { explainMatch } from '../search.js';
|
|
11
|
-
import { embedMemory } from '../embeddings.js';
|
|
7
|
+
import { installJsonHooks } from '../hooks/json-hooks.js';
|
|
8
|
+
import { CODEX_TRUST_LINE } from '../hooks/shared.js';
|
|
9
|
+
import { confidenceLabel } from '../memory.js';
|
|
10
|
+
import { isInitialized } from '../store/open.js';
|
|
11
|
+
import { explainMatch } from '../search/explain.js';
|
|
12
12
|
import { loadConfig } from '../config.js';
|
|
13
|
-
import { openHippoDb, closeHippoDb, isSqliteBusy, noteStoreBusy } from '../db.js';
|
|
13
|
+
import { openHippoDb, closeHippoDb, isSqliteBusy, noteStoreBusy, withSharedStoreHandles, HOOK_DB_WAIT_MS } from '../db.js';
|
|
14
|
+
import { ensurePilotArm, hashArm, readPilotArm } from '../pilot-arm.js';
|
|
14
15
|
import { hookPayloadSessionId, isSubagentPayload, recordTokenUse } from '../token-ledger.js';
|
|
15
|
-
import { isGitRepo, fetchGitLog, extractLessons, partitionLessons } from '../autolearn.js';
|
|
16
|
-
import { storedTextKeys, duplicateKey } from '../same-text.js';
|
|
17
16
|
import { importAtSessionEnd, currentMachine } from '../agent-memories/sync.js';
|
|
18
17
|
import { summaryLine } from '../agent-memories/report.js';
|
|
19
|
-
import { detectChurnStale
|
|
18
|
+
import { detectChurnStale } from '../invalidation.js';
|
|
20
19
|
import { resolveProjectIdentity } from '../project-identity.js';
|
|
21
|
-
import { extractPathTags } from '../path-context.js';
|
|
22
20
|
import { getGlobalRoot, initGlobal } from '../shared.js';
|
|
23
21
|
import { DAILY_TASK_NAME, buildDailyRunnerCommand, buildSchtasksCreateArgs, buildWindowsTaskRun } from '../scheduler.js';
|
|
24
|
-
import { sanitizeLogMessage } from '../capture.js';
|
|
22
|
+
import { sanitizeLogMessage } from '../capture/compact.js';
|
|
25
23
|
import { appendAuditEvent, reportAuditWriteFailure } from '../audit.js';
|
|
26
|
-
import { createHash } from 'node:crypto';
|
|
27
24
|
import * as client from '../client.js';
|
|
28
25
|
import { detectServer, removePidfileIfOwned } from '../server-detect.js';
|
|
29
26
|
import { resolveTenantId } from '../tenant.js';
|
|
27
|
+
import { adminActor, learn, CLI_LEARN } from '../api.js';
|
|
30
28
|
import { snapshotText, sessionTrailText, handoffText } from '../context-render.js';
|
|
31
29
|
import { log } from '../log.js';
|
|
32
30
|
import { printError } from './output.js';
|
|
@@ -92,7 +90,7 @@ export function requireInit(hippoRoot) {
|
|
|
92
90
|
}
|
|
93
91
|
/** Runs detectChurnStale against every store this repo's memories can live in. */
|
|
94
92
|
export function runChurnStaleForRepo(hippoRoot, dryRun) {
|
|
95
|
-
const repoRoot = execFileSync('git', ['rev-parse', '--show-toplevel'], { cwd: process.cwd(), encoding: 'utf8', windowsHide: true }).trim();
|
|
93
|
+
const repoRoot = execFileSync('git', ['rev-parse', '--show-toplevel'], { cwd: process.cwd(), encoding: 'utf8', timeout: 10_000, windowsHide: true }).trim();
|
|
96
94
|
const projectName = resolveProjectIdentity(process.cwd()).name;
|
|
97
95
|
const globalRoot = getGlobalRoot();
|
|
98
96
|
const roots = globalRoot !== hippoRoot && isInitialized(globalRoot) ? [hippoRoot, globalRoot] : [hippoRoot];
|
|
@@ -116,7 +114,7 @@ export function runChurnStaleForRepo(hippoRoot, dryRun) {
|
|
|
116
114
|
* promote); every other command opens the store directly, knob or not.
|
|
117
115
|
*/
|
|
118
116
|
function failIfServerRequired(reason) {
|
|
119
|
-
if (
|
|
117
|
+
if (envRequireServer()) {
|
|
120
118
|
throw new Error(`hippo: HIPPO_REQUIRE_SERVER is set but ${reason}. ` +
|
|
121
119
|
`Start \`hippo serve\`, or unset HIPPO_REQUIRE_SERVER to allow direct-mode fallback.`);
|
|
122
120
|
}
|
|
@@ -142,7 +140,7 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
|
|
|
142
140
|
failIfServerRequired('no running server was detected for this hippoRoot');
|
|
143
141
|
return false;
|
|
144
142
|
}
|
|
145
|
-
const apiKey =
|
|
143
|
+
const apiKey = envApiKey();
|
|
146
144
|
try {
|
|
147
145
|
await httpFn(info, apiKey);
|
|
148
146
|
return true;
|
|
@@ -220,19 +218,6 @@ export function printAgentImport(report, indent = ' ') {
|
|
|
220
218
|
for (const warning of report.warnings)
|
|
221
219
|
printError(`hippo: agent memories: ${warning}`);
|
|
222
220
|
}
|
|
223
|
-
/** The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited block. */
|
|
224
|
-
export function hippoBlock(text) {
|
|
225
|
-
const at = text.indexOf(HOOK_MARKERS.start);
|
|
226
|
-
const start = at + HOOK_MARKERS.start.length;
|
|
227
|
-
const end = text.indexOf(HOOK_MARKERS.end, start);
|
|
228
|
-
if (at < 0 || end < 0)
|
|
229
|
-
return null;
|
|
230
|
-
// git autocrlf checks these files out with CRLF: match as LF, write back in the file's own ending.
|
|
231
|
-
const raw = text.slice(start, end);
|
|
232
|
-
const inner = raw.replace(/\r\n/g, '\n').trim();
|
|
233
|
-
const owner = Object.keys(HOOKS).find((k) => HOOKS[k].content === inner) ?? SHIPPED_HOOK_HASHES.get(createHash('sha256').update(inner).digest('hex'));
|
|
234
|
-
return { start, end, eol: raw.includes('\r\n') ? '\r\n' : '\n', inner, owner };
|
|
235
|
-
}
|
|
236
221
|
/** Adds hippo's two Codex hooks and says what changed; each install ends on the trust reminder, since Codex skips an untrusted hook. */
|
|
237
222
|
export function installCodexMemoryHooks(indent) {
|
|
238
223
|
const result = installJsonHooks('codex');
|
|
@@ -420,7 +405,7 @@ export function cardStringFlag(flags, key) {
|
|
|
420
405
|
}
|
|
421
406
|
// Claude Code exports its own session var, not ours; without the fallback agent-run recalls trace with no session.
|
|
422
407
|
export function hostSessionId() {
|
|
423
|
-
return
|
|
408
|
+
return envHippoSessionId()?.trim() || envClaudeCodeSessionId()?.trim() || undefined;
|
|
424
409
|
}
|
|
425
410
|
/**
|
|
426
411
|
* Compaction drops the pinned blocks the per-prompt hook injected
|
|
@@ -505,106 +490,19 @@ export function withLedgerDb(hippoRoot, fn) {
|
|
|
505
490
|
}
|
|
506
491
|
export function learnFromRepo(hippoRoot, repoPath, days, label) {
|
|
507
492
|
const prefix = label ? `[${label}] ` : '';
|
|
508
|
-
|
|
493
|
+
const ctx = { hippoRoot, tenantId: resolveTenantId({}), actor: adminActor('cli') };
|
|
494
|
+
const result = learn(ctx, { repoPath, days, profile: CLI_LEARN });
|
|
495
|
+
if (result.status === 'not-a-repo') {
|
|
509
496
|
console.log(`${prefix}No git history found (or not a git repository).`);
|
|
510
497
|
return { added: 0, skipped: 0, lowInfo: 0 };
|
|
511
498
|
}
|
|
512
|
-
|
|
513
|
-
if (!gitLog.trim()) {
|
|
514
|
-
console.log(`${prefix}No fix/revert/bug commits found in the specified period.`);
|
|
515
|
-
return { added: 0, skipped: 0, lowInfo: 0 };
|
|
516
|
-
}
|
|
517
|
-
// Same patterns as MCP hippo_learn: config.gitLearnPatterns (whose default
|
|
518
|
-
// equals extractLessons' built-in list) so a custom list applies everywhere.
|
|
519
|
-
const config = loadConfig(hippoRoot);
|
|
520
|
-
const parsedLessons = extractLessons(gitLog, config.gitLearnPatterns);
|
|
521
|
-
if (parsedLessons.length === 0) {
|
|
499
|
+
if (result.status !== 'scanned') {
|
|
522
500
|
console.log(`${prefix}No fix/revert/bug commits found in the specified period.`);
|
|
523
501
|
return { added: 0, skipped: 0, lowInfo: 0 };
|
|
524
502
|
}
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
// The gate filters the loop INPUT, so a dropped lesson neither stores nor
|
|
529
|
-
// invalidates. That is deliberate, and it was argued both ways.
|
|
530
|
-
//
|
|
531
|
-
// One review called the lost invalidation serious: a migration subject
|
|
532
|
-
// too thin to store ("replace webpack with vite") would stop weakening
|
|
533
|
-
// stale webpack memories. True. So the loop was widened to walk every
|
|
534
|
-
// parsed lesson with the gate on the write alone.
|
|
535
|
-
//
|
|
536
|
-
// A second review found the cure was worse. STORAGE is what makes invalidation
|
|
537
|
-
// idempotent here: a stored lesson is recognised by its same-text key on
|
|
538
|
-
// the next scan and short-circuits before invalidating again. A lesson that
|
|
539
|
-
// invalidates but is never stored has no such record, so every rescan
|
|
540
|
-
// re-invalidates, and invalidateMatching halves half_life_days each time.
|
|
541
|
-
// Measured: 7 -> 3 -> 1 over two runs. That is compounding data damage.
|
|
542
|
-
//
|
|
543
|
-
// Measured frequency decided it. Across 413 real auto-learn rows in 4
|
|
544
|
-
// stores, 24 are gated and ZERO of those carry an invalidation target; the
|
|
545
|
-
// 45 lessons that do carry targets all pass the gate and are unaffected
|
|
546
|
-
// either way. Both failure modes are empty on real data, so the tie breaks
|
|
547
|
-
// on which one is benign if it ever fires: not invalidating is a missed
|
|
548
|
-
// improvement, re-invalidating forever is damage.
|
|
549
|
-
//
|
|
550
|
-
// Documented limitation, pinned by test: a migration subject too thin to
|
|
551
|
-
// store also does not invalidate. Making invalidateMatching idempotent
|
|
552
|
-
// would allow both, and is backlogged - it is a latent issue for the manual
|
|
553
|
-
// `hippo invalidate` path too, not just this one.
|
|
554
|
-
const { kept: lessons, dropped } = partitionLessons(parsedLessons);
|
|
555
|
-
const lowInfo = dropped.length;
|
|
556
|
-
let added = 0;
|
|
557
|
-
let skipped = 0;
|
|
558
|
-
// Containment: per-lesson refusal must not abort the rest
|
|
559
|
-
// of the git-log scan. No signature change (added/skipped return shape
|
|
560
|
-
// used by cmdLearn + cmdSleepCore callers) — counted locally, folded into
|
|
561
|
-
// the existing summary line.
|
|
562
|
-
let rejected = 0;
|
|
563
|
-
const gitLearnTags = ['error', 'git-learned'];
|
|
564
|
-
const existingForSchema = loadAllEntries(hippoRoot, resolveTenantId({}));
|
|
565
|
-
const keys = storedTextKeys(existingForSchema);
|
|
566
|
-
for (const lesson of lessons) {
|
|
567
|
-
if (keys.has(duplicateKey(lesson))) {
|
|
568
|
-
skipped++;
|
|
569
|
-
continue;
|
|
570
|
-
}
|
|
571
|
-
const target = extractInvalidationTarget(lesson);
|
|
572
|
-
if (target) {
|
|
573
|
-
const invResult = invalidateMatching(hippoRoot, target, resolveTenantId({}));
|
|
574
|
-
if (invResult.invalidated > 0) {
|
|
575
|
-
console.log(`${prefix} Invalidated ${invResult.invalidated} memories referencing "${target.from}"`);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
const schemaFitVal = computeSchemaFit(lesson, gitLearnTags, existingForSchema);
|
|
579
|
-
const entry = createMemory(lesson, {
|
|
580
|
-
layer: Layer.Episodic,
|
|
581
|
-
tags: [...gitLearnTags],
|
|
582
|
-
source: 'git-learn',
|
|
583
|
-
confidence: 'observed',
|
|
584
|
-
schema_fit: schemaFitVal,
|
|
585
|
-
tenantId: resolveTenantId({}),
|
|
586
|
-
baseHalfLifeDays: config.defaultHalfLifeDays,
|
|
587
|
-
});
|
|
588
|
-
// Auto-tag with path context from the repo being learned
|
|
589
|
-
const learnPathTags = extractPathTags(repoPath);
|
|
590
|
-
for (const pt of learnPathTags) {
|
|
591
|
-
if (!entry.tags.includes(pt))
|
|
592
|
-
entry.tags.push(pt);
|
|
593
|
-
}
|
|
594
|
-
try {
|
|
595
|
-
writeEntry(hippoRoot, entry);
|
|
596
|
-
}
|
|
597
|
-
catch (err) {
|
|
598
|
-
if (err instanceof RejectedValueError) {
|
|
599
|
-
rejected++;
|
|
600
|
-
continue;
|
|
601
|
-
}
|
|
602
|
-
throw err;
|
|
603
|
-
}
|
|
604
|
-
updateStats(hippoRoot, { remembered: 1 });
|
|
605
|
-
keys.add(duplicateKey(lesson));
|
|
606
|
-
void embedMemory(hippoRoot, entry);
|
|
607
|
-
added++;
|
|
503
|
+
const { added, skipped, rejected, lowInfo } = result;
|
|
504
|
+
for (const { from, count } of result.invalidations) {
|
|
505
|
+
console.log(`${prefix} Invalidated ${count} memories referencing "${from}"`);
|
|
608
506
|
}
|
|
609
507
|
console.log(`${prefix}${added} new lessons added, ${skipped} duplicates skipped` +
|
|
610
508
|
(rejected > 0 ? `, ${rejected} rejected value(s) skipped` : '') +
|
|
@@ -612,223 +510,6 @@ export function learnFromRepo(hippoRoot, repoPath, days, label) {
|
|
|
612
510
|
'.');
|
|
613
511
|
return { added, skipped, lowInfo };
|
|
614
512
|
}
|
|
615
|
-
export const HOOK_MARKERS = {
|
|
616
|
-
start: '<!-- hippo:start -->',
|
|
617
|
-
end: '<!-- hippo:end -->',
|
|
618
|
-
};
|
|
619
|
-
export const HOOKS = {
|
|
620
|
-
'claude-code': {
|
|
621
|
-
file: 'CLAUDE.md',
|
|
622
|
-
description: 'Claude Code',
|
|
623
|
-
content: `
|
|
624
|
-
## Project Memory (Hippo)
|
|
625
|
-
|
|
626
|
-
Pinned rules and recent writes auto-inject at every prompt via the installed
|
|
627
|
-
UserPromptSubmit hook; never re-run that part manually. At the START of a
|
|
628
|
-
task (not per prompt), additionally load task-specific context: git-aware
|
|
629
|
-
recall over the full store that per-prompt injection does not cover. Also
|
|
630
|
-
run it if the hook is not installed:
|
|
631
|
-
\`\`\`bash
|
|
632
|
-
hippo context --auto --budget 1500
|
|
633
|
-
\`\`\`
|
|
634
|
-
|
|
635
|
-
When you find out why something failed, record it right then, while you
|
|
636
|
-
work, never as a closing step:
|
|
637
|
-
\`\`\`bash
|
|
638
|
-
hippo remember "<what went wrong and why>" --error
|
|
639
|
-
\`\`\`
|
|
640
|
-
|
|
641
|
-
The installed hooks store failed tool calls and capture the session when it
|
|
642
|
-
ends, so there is nothing to run before you finish.
|
|
643
|
-
`.trim(),
|
|
644
|
-
},
|
|
645
|
-
'codex': {
|
|
646
|
-
file: 'AGENTS.md',
|
|
647
|
-
description: 'OpenAI Codex',
|
|
648
|
-
content: `
|
|
649
|
-
## Project Memory (Hippo)
|
|
650
|
-
|
|
651
|
-
At the start of every task, run:
|
|
652
|
-
\`\`\`bash
|
|
653
|
-
hippo context --auto --budget 1500
|
|
654
|
-
\`\`\`
|
|
655
|
-
Read the output before writing any code.
|
|
656
|
-
|
|
657
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
658
|
-
never as a closing step:
|
|
659
|
-
\`\`\`bash
|
|
660
|
-
hippo remember "<description of what went wrong>" --error
|
|
661
|
-
\`\`\`
|
|
662
|
-
|
|
663
|
-
When you learn something that should outlive this session (a decision and
|
|
664
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
665
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
666
|
-
\`\`\`bash
|
|
667
|
-
hippo remember "<what you learned and why>"
|
|
668
|
-
\`\`\`
|
|
669
|
-
|
|
670
|
-
When Hippo's Codex wrapper is installed, session-end capture runs automatically.
|
|
671
|
-
If the wrapper is not installed, capture a brief summary manually:
|
|
672
|
-
\`\`\`bash
|
|
673
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
674
|
-
\`\`\`
|
|
675
|
-
`.trim(),
|
|
676
|
-
},
|
|
677
|
-
'cursor': {
|
|
678
|
-
file: 'AGENTS.md',
|
|
679
|
-
description: 'Cursor',
|
|
680
|
-
content: `
|
|
681
|
-
## Project Memory (Hippo)
|
|
682
|
-
|
|
683
|
-
At the start of every task, run:
|
|
684
|
-
\`\`\`bash
|
|
685
|
-
hippo context --auto --budget 1500
|
|
686
|
-
\`\`\`
|
|
687
|
-
Read the output before writing any code.
|
|
688
|
-
|
|
689
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
690
|
-
never as a closing step:
|
|
691
|
-
\`\`\`bash
|
|
692
|
-
hippo remember "<description of what went wrong>" --error
|
|
693
|
-
\`\`\`
|
|
694
|
-
|
|
695
|
-
When you learn something that should outlive this session (a decision and
|
|
696
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
697
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
698
|
-
\`\`\`bash
|
|
699
|
-
hippo remember "<what you learned and why>"
|
|
700
|
-
\`\`\`
|
|
701
|
-
|
|
702
|
-
When ending a session, capture a brief summary:
|
|
703
|
-
\`\`\`bash
|
|
704
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
705
|
-
\`\`\`
|
|
706
|
-
`.trim(),
|
|
707
|
-
},
|
|
708
|
-
'openclaw': {
|
|
709
|
-
file: 'AGENTS.md',
|
|
710
|
-
description: 'OpenClaw',
|
|
711
|
-
content: `
|
|
712
|
-
## Project Memory (Hippo)
|
|
713
|
-
|
|
714
|
-
At the start of every session, run:
|
|
715
|
-
\`\`\`bash
|
|
716
|
-
hippo context --auto --budget 1500
|
|
717
|
-
\`\`\`
|
|
718
|
-
Read the output before writing any code.
|
|
719
|
-
|
|
720
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
721
|
-
never as a closing step:
|
|
722
|
-
\`\`\`bash
|
|
723
|
-
hippo remember "<description of what went wrong>" --error
|
|
724
|
-
\`\`\`
|
|
725
|
-
|
|
726
|
-
When you learn something that should outlive this session (a decision and
|
|
727
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
728
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
729
|
-
\`\`\`bash
|
|
730
|
-
hippo remember "<what you learned and why>"
|
|
731
|
-
\`\`\`
|
|
732
|
-
|
|
733
|
-
When ending a session, capture a brief summary:
|
|
734
|
-
\`\`\`bash
|
|
735
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
736
|
-
\`\`\`
|
|
737
|
-
`.trim(),
|
|
738
|
-
},
|
|
739
|
-
'opencode': {
|
|
740
|
-
file: 'AGENTS.md',
|
|
741
|
-
description: 'OpenCode',
|
|
742
|
-
content: `
|
|
743
|
-
## Project Memory (Hippo)
|
|
744
|
-
|
|
745
|
-
At the start of every task, run:
|
|
746
|
-
\`\`\`bash
|
|
747
|
-
hippo context --auto --budget 1500
|
|
748
|
-
\`\`\`
|
|
749
|
-
Read the output before writing any code.
|
|
750
|
-
|
|
751
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
752
|
-
never as a closing step:
|
|
753
|
-
\`\`\`bash
|
|
754
|
-
hippo remember "<description of what went wrong>" --error
|
|
755
|
-
\`\`\`
|
|
756
|
-
|
|
757
|
-
When you learn something that should outlive this session (a decision and
|
|
758
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
759
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
760
|
-
\`\`\`bash
|
|
761
|
-
hippo remember "<what you learned and why>"
|
|
762
|
-
\`\`\`
|
|
763
|
-
|
|
764
|
-
When stuck or repeating yourself, check if this happened before:
|
|
765
|
-
\`\`\`bash
|
|
766
|
-
hippo recall "<what's going wrong>" --budget 2000
|
|
767
|
-
\`\`\`
|
|
768
|
-
|
|
769
|
-
When ending a session, capture a brief summary:
|
|
770
|
-
\`\`\`bash
|
|
771
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
772
|
-
\`\`\`
|
|
773
|
-
`.trim(),
|
|
774
|
-
},
|
|
775
|
-
'pi': {
|
|
776
|
-
file: 'AGENTS.md',
|
|
777
|
-
description: 'Pi',
|
|
778
|
-
content: `
|
|
779
|
-
## Project Memory (Hippo)
|
|
780
|
-
|
|
781
|
-
At the start of every session, run:
|
|
782
|
-
\`\`\`bash
|
|
783
|
-
hippo context --auto --budget 1500
|
|
784
|
-
\`\`\`
|
|
785
|
-
Read the output before writing any code.
|
|
786
|
-
|
|
787
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
788
|
-
never as a closing step:
|
|
789
|
-
\`\`\`bash
|
|
790
|
-
hippo remember "<description of what went wrong>" --error
|
|
791
|
-
\`\`\`
|
|
792
|
-
|
|
793
|
-
When you learn something that should outlive this session (a decision and
|
|
794
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
795
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
796
|
-
\`\`\`bash
|
|
797
|
-
hippo remember "<what you learned and why>"
|
|
798
|
-
\`\`\`
|
|
799
|
-
|
|
800
|
-
When ending a session, capture a brief summary:
|
|
801
|
-
\`\`\`bash
|
|
802
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
803
|
-
\`\`\`
|
|
804
|
-
|
|
805
|
-
For full integration, copy the hippo-memory Pi extension to \`~/.pi/agent/extensions/hippo-memory/\`.
|
|
806
|
-
`.trim(),
|
|
807
|
-
},
|
|
808
|
-
};
|
|
809
|
-
// sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash when a block changes.
|
|
810
|
-
const SHIPPED_HOOK_HASHES = new Map([
|
|
811
|
-
['c04e48f2896a4fee9ae98f8f832e2d26a3910269df3beb5bcd6baee3cd9db68e', 'claude-code'],
|
|
812
|
-
['e6b12bd8983c032e5ca8e95a97aeff4178a5a05026d10acad5b2e1b25d5656dd', 'claude-code'],
|
|
813
|
-
['4c64e11d3e5be68fa547c9248d7553feb645a02f7cf13ba02f7275e1854baf44', 'claude-code'],
|
|
814
|
-
['293bd319bbc86225a0ee027490a3322a0336257f5832f7fade65e4ffb2530654', 'claude-code'],
|
|
815
|
-
['15abcece9712279fb4721f7a8f0ba117457400278977beb5cf5b5d7ba49f7b1a', 'codex'],
|
|
816
|
-
['0c81a6b2c21473313001f624b80ea870e661aecbfda9bfe8503febc0d5f34533', 'codex'],
|
|
817
|
-
['88e45358aba4f17912f113221c991dc758275991335d1daa4aa1974a69c46769', 'codex'],
|
|
818
|
-
['e61632fe177450a06541c148a9a4f9182530d8df667806927a99792825903298', 'codex'],
|
|
819
|
-
['a1415ecda9b2f8f317c233738e4a5ac16e6b2cc385a017c0c8ecfbfacbcab6a3', 'cursor'],
|
|
820
|
-
['a38c428bbdfc14ec50f6f7b9183785170a4eae1ce9cde60257cca6efc7206b3a', 'cursor'],
|
|
821
|
-
['0ec9f556abfd55e94f9e6fb47ece0fc5acb841977d144b35a2371e03645d8636', 'cursor'],
|
|
822
|
-
['40524c3bd5a2eb04036567cc761451961d950995768bccd93a9900b0f75eafea', 'openclaw'],
|
|
823
|
-
['7b3518e8c0feaa7b8b454cde7743f7598ad14cd9979e1680d0954484e2464aae', 'openclaw'],
|
|
824
|
-
['1137dcf04568caf011e41db77bc55324faee88bc29c3a5fcc98ab687cd952a16', 'openclaw'],
|
|
825
|
-
['4601c67c31f41cd5b1324cfccdb1afc66872b7fb0bc1e7c5789ecabb1f6bd942', 'opencode'],
|
|
826
|
-
['90d9e21d8d1ecbe99a0fc7b7f2d9f8af7b5315a6b4b0203df4f7a9bdc0699b98', 'opencode'],
|
|
827
|
-
['ca4e00284f1397ed2f2fcc53210c27f63b90edf6b37fd66dad5ee58b94ea3eee', 'opencode'],
|
|
828
|
-
['8b8f5986d7f7ed15f06e68720d8913c3cab23d94366b411935ca2bbaa334553b', 'pi'],
|
|
829
|
-
['37767b355e18beac726b05b9e2b898dab8c6135fd7b98f3aa52edc734d5dd283', 'pi'],
|
|
830
|
-
['6e85a5cccb3cfeaa9a080713754936db730f96376f94cc9a9888a746149c7268', 'pi'],
|
|
831
|
-
]);
|
|
832
513
|
export function resolveAuthRoot(hippoRoot, flags) {
|
|
833
514
|
if (flags['global']) {
|
|
834
515
|
initGlobal();
|
|
@@ -837,4 +518,32 @@ export function resolveAuthRoot(hippoRoot, flags) {
|
|
|
837
518
|
requireInit(hippoRoot);
|
|
838
519
|
return hippoRoot;
|
|
839
520
|
}
|
|
521
|
+
/** Hook commands share one handle per store and wait at most HOOK_DB_WAIT_MS for a lock; a store still busy after that skips the hook's work with one warning, exit 0. */
|
|
522
|
+
export async function runHookWithStores(fn) {
|
|
523
|
+
try {
|
|
524
|
+
return await withSharedStoreHandles(fn, { busyWaitMs: HOOK_DB_WAIT_MS });
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
if (!isSqliteBusy(error))
|
|
528
|
+
throw error;
|
|
529
|
+
noteStoreBusy('hook skipped');
|
|
530
|
+
return undefined;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Whether this session sits in the pilot's holdout arm (src/pilot-arm.ts). Off at rate 0 and with no session id.
|
|
535
|
+
* `write` books the arm row; a read-only caller (env-only id, sub-agent) follows the stored arm, else the hash.
|
|
536
|
+
*/
|
|
537
|
+
export function inPilotHoldout(hippoRoot, tenantId, sessionId, write) {
|
|
538
|
+
if (sessionId === undefined || sessionId.trim() === '')
|
|
539
|
+
return false;
|
|
540
|
+
const root = isInitialized(hippoRoot) ? hippoRoot : isInitialized(getGlobalRoot()) ? getGlobalRoot() : null;
|
|
541
|
+
if (root === null)
|
|
542
|
+
return false;
|
|
543
|
+
const rate = loadConfig(root).pilot.holdoutRateBp;
|
|
544
|
+
if (rate <= 0)
|
|
545
|
+
return false;
|
|
546
|
+
const arm = withLedgerDb(hippoRoot, (db) => write ? ensurePilotArm(db, tenantId, sessionId, rate) : readPilotArm(db, sessionId) ?? hashArm(sessionId, rate));
|
|
547
|
+
return (arm ?? hashArm(sessionId, rate)) === 'holdout';
|
|
548
|
+
}
|
|
840
549
|
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// `hippo slack`: backfill, dead-letter queue and workspace registry for the Slack connector.
|
|
2
|
+
import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../env.js';
|
|
3
|
+
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
4
|
+
import * as api from '../api.js';
|
|
5
|
+
import { resolveTenantId } from '../tenant.js';
|
|
6
|
+
import { listDlq, replayDlqEntry } from '../connectors/slack/dlq.js';
|
|
7
|
+
import { backfillChannel } from '../connectors/slack/backfill.js';
|
|
8
|
+
import { slackHistoryFetcher } from '../connectors/slack/web-client.js';
|
|
9
|
+
import { addWorkspace as addSlackWorkspace, listWorkspaces as listSlackWorkspaces, removeWorkspace as removeSlackWorkspace, } from '../connectors/slack/workspaces.js';
|
|
10
|
+
import { printError } from './output.js';
|
|
11
|
+
import { printSlackBackfillUsage, printSlackWorkspacesUsage } from './usage.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Slack subcommands (E1.3 — `hippo slack backfill` / `hippo slack dlq list`)
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
function cmdSlackBackfill(hippoRoot, flags) {
|
|
16
|
+
const channel = typeof flags['channel'] === 'string' ? flags['channel'] : undefined;
|
|
17
|
+
if (!channel) {
|
|
18
|
+
printSlackBackfillUsage();
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
// Real fetcher requires SLACK_BOT_TOKEN with channels:history scope.
|
|
22
|
+
const token = envSlackBotToken();
|
|
23
|
+
if (!token) {
|
|
24
|
+
printError('SLACK_BOT_TOKEN is not set. Backfill requires a Slack bot token with channels:history scope.');
|
|
25
|
+
process.exit(2);
|
|
26
|
+
}
|
|
27
|
+
// --since is advisory in V1: the slack_cursors row drives resume, so the
|
|
28
|
+
// backfill loop always picks up where it last left off. Honoured-by-cursor
|
|
29
|
+
// semantics keep idempotency clean.
|
|
30
|
+
const sinceIso = flags['since'];
|
|
31
|
+
void sinceIso;
|
|
32
|
+
const fetcher = slackHistoryFetcher(token);
|
|
33
|
+
const ctx = {
|
|
34
|
+
hippoRoot,
|
|
35
|
+
tenantId: resolveTenantId({}),
|
|
36
|
+
actor: api.adminActor('cli:slack-backfill'),
|
|
37
|
+
};
|
|
38
|
+
backfillChannel(ctx, {
|
|
39
|
+
teamId: envSlackTeamId() ?? 'T_UNKNOWN',
|
|
40
|
+
channel: { id: channel, is_private: false },
|
|
41
|
+
fetcher,
|
|
42
|
+
})
|
|
43
|
+
.then((r) => {
|
|
44
|
+
console.log(`backfill ${channel}: ${r.ingested} new messages across ${r.pages} pages`);
|
|
45
|
+
})
|
|
46
|
+
.catch((e) => {
|
|
47
|
+
printError('backfill failed:', e.message);
|
|
48
|
+
process.exit(3);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function cmdSlackDlqList(hippoRoot, _flags) {
|
|
52
|
+
const db = openHippoDb(hippoRoot);
|
|
53
|
+
try {
|
|
54
|
+
const tenantId = resolveTenantId({});
|
|
55
|
+
const items = listDlq(db, { tenantId });
|
|
56
|
+
for (const it of items) {
|
|
57
|
+
console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
closeHippoDb(db);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
65
|
+
const idArg = args[2];
|
|
66
|
+
if (!idArg) {
|
|
67
|
+
printError('Usage: hippo slack dlq replay <id> [--force]');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
const id = Number(idArg);
|
|
71
|
+
if (!Number.isFinite(id) || !Number.isInteger(id) || id < 1) {
|
|
72
|
+
printError(`replay: invalid id ${idArg}`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
const force = flags.force === true;
|
|
76
|
+
const result = replayDlqEntry({ hippoRoot }, id, {
|
|
77
|
+
force,
|
|
78
|
+
signingSecret: envSlackSigningSecret(),
|
|
79
|
+
});
|
|
80
|
+
if (!result.ok) {
|
|
81
|
+
printError(`replay failed: status=${result.status} retry_count=${result.retryCount}${result.reason ? ` reason=${result.reason}` : ''}`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
|
|
85
|
+
}
|
|
86
|
+
function cmdSlackWorkspacesAdd(hippoRoot, flags) {
|
|
87
|
+
const teamId = typeof flags['team'] === 'string' ? flags['team'].trim() : '';
|
|
88
|
+
const tenantId = typeof flags['tenant'] === 'string' ? flags['tenant'].trim() : '';
|
|
89
|
+
if (!teamId || !tenantId) {
|
|
90
|
+
printError('Usage: hippo slack workspaces add --team <T> --tenant <t>');
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
const db = openHippoDb(hippoRoot);
|
|
94
|
+
try {
|
|
95
|
+
const ws = addSlackWorkspace(db, { teamId, tenantId });
|
|
96
|
+
console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
closeHippoDb(db);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function cmdSlackWorkspacesList(hippoRoot) {
|
|
103
|
+
const db = openHippoDb(hippoRoot);
|
|
104
|
+
try {
|
|
105
|
+
const items = listSlackWorkspaces(db);
|
|
106
|
+
if (items.length === 0) {
|
|
107
|
+
console.log('(no registered workspaces; routing via HIPPO_TENANT fallback)');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
for (const ws of items) {
|
|
111
|
+
console.log(`${ws.teamId}\t${ws.tenantId}\t${ws.addedAt}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
closeHippoDb(db);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function cmdSlackWorkspacesRemove(hippoRoot, flags) {
|
|
119
|
+
const teamId = typeof flags['team'] === 'string' ? flags['team'].trim() : '';
|
|
120
|
+
if (!teamId) {
|
|
121
|
+
printError('Usage: hippo slack workspaces remove --team <T>');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
const db = openHippoDb(hippoRoot);
|
|
125
|
+
try {
|
|
126
|
+
const removed = removeSlackWorkspace(db, teamId);
|
|
127
|
+
if (!removed) {
|
|
128
|
+
printError(`no workspace registered for team ${teamId}`);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
console.log(`removed: ${teamId}`);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
closeHippoDb(db);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function cmdSlack(hippoRoot, args, flags) {
|
|
138
|
+
const sub = args[0];
|
|
139
|
+
if (sub === 'backfill') {
|
|
140
|
+
cmdSlackBackfill(hippoRoot, flags);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (sub === 'dlq' && args[1] === 'list') {
|
|
144
|
+
cmdSlackDlqList(hippoRoot, flags);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (sub === 'dlq' && args[1] === 'replay') {
|
|
148
|
+
cmdSlackDlqReplay(hippoRoot, args, flags);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (sub === 'workspaces') {
|
|
152
|
+
const action = args[1];
|
|
153
|
+
if (action === 'add') {
|
|
154
|
+
cmdSlackWorkspacesAdd(hippoRoot, flags);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (action === 'list') {
|
|
158
|
+
cmdSlackWorkspacesList(hippoRoot);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (action === 'remove') {
|
|
162
|
+
cmdSlackWorkspacesRemove(hippoRoot, flags);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
printSlackWorkspacesUsage();
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
printError('Usage: hippo slack <backfill|dlq list|dlq replay <id> [--force]|workspaces add|workspaces list|workspaces remove> [...]');
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CommandContext } from './shared.js';
|
|
2
|
+
export declare function cmdStatus(hippoRoot: string): void;
|
|
3
|
+
/**
|
|
4
|
+
* `hippo tokens [--days <n>] [--json] [--global]`: the token ledger
|
|
5
|
+
* (ROADMAP TE0). Tokens of memory text handed to agents per surface, blocks
|
|
6
|
+
* the per-prompt hook skipped as unchanged (TE2) and the tokens that saved,
|
|
7
|
+
* and the hook blocks' tokens later model calls re-read, counted when each session ends.
|
|
8
|
+
* Counts are estimates (characters / 4), the same estimate every budget uses.
|
|
9
|
+
*/
|
|
10
|
+
export declare function cmdTokens(hippoRoot: string, flags: Record<string, string | boolean | string[]>): void;
|
|
11
|
+
/** `hippo failures [--days <n>] [--json] [--global]`: failed tool calls by outcome, and repeats across sessions (CD13). */
|
|
12
|
+
export declare function cmdFailures(hippoRoot: string, flags: Record<string, string | boolean | string[]>): void;
|
|
13
|
+
export declare function handleCorrectionLatency({ hippoRoot, flags }: CommandContext): void;
|
|
14
|
+
export declare function handleProvenance({ hippoRoot, flags }: CommandContext): void;
|
|
15
|
+
export declare function handleDoctor({ flags }: CommandContext): void;
|
|
16
|
+
export declare function handleSupportBundle({ flags }: CommandContext): void;
|
|
17
|
+
export declare function handleInspect({ hippoRoot, args }: CommandContext): void;
|
|
18
|
+
//# sourceMappingURL=status.d.ts.map
|