hippo-memory 1.60.0 → 1.62.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 +29 -54
- package/dist/ablation.js +9 -27
- package/dist/agent-memories/apply.d.ts +1 -1
- package/dist/agent-memories/apply.js +4 -1
- package/dist/agent-memories/claude-code.d.ts +3 -1
- package/dist/agent-memories/claude-code.js +54 -10
- 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.d.ts +3 -3
- package/dist/agent-memories/sync.js +22 -9
- package/dist/agent-memories/types.d.ts +0 -2
- 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 +153 -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-select.d.ts +49 -0
- package/dist/api/context-select.js +344 -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 +378 -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 +126 -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 +192 -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 +499 -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 +256 -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 +453 -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 +376 -0
- package/dist/cli/continuity.d.ts +6 -0
- package/dist/cli/continuity.js +457 -0
- package/dist/cli/curate.d.ts +19 -0
- package/dist/cli/curate.js +556 -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 +156 -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 +190 -0
- package/dist/cli/playbooks.d.ts +4 -0
- package/dist/cli/playbooks.js +573 -0
- package/dist/cli/projects.js +9 -6
- package/dist/cli/recall.d.ts +7 -0
- package/dist/cli/recall.js +582 -0
- package/dist/cli/remember.d.ts +5 -0
- package/dist/cli/remember.js +485 -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 +647 -0
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.js +397 -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 +409 -0
- package/dist/cli/transfer.d.ts +10 -0
- package/dist/cli/transfer.js +424 -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.d.ts +0 -2
- package/dist/compaction-record.js +7 -5
- 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 +83 -72
- package/dist/dag.js +225 -188
- 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 +102 -83
- package/dist/dedupe.js +3 -2
- package/dist/delivery-recorder.js +4 -1
- package/dist/doctor.js +14 -10
- 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 +117 -86
- 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 +52 -43
- 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 +93 -74
- 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 +94 -76
- package/dist/project-briefs.d.ts +3 -0
- package/dist/project-briefs.js +142 -113
- package/dist/project-identity.js +3 -2
- package/dist/project-merge.d.ts +12 -4
- package/dist/project-merge.js +132 -45
- 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 +12 -1
- package/dist/shared.js +33 -27
- package/dist/skills.d.ts +3 -0
- package/dist/skills.js +88 -70
- 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 +260 -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
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
// Read-only report verbs: status, inspect, tokens, failures, provenance, correction latency, doctor and support bundle.
|
|
2
|
+
import { envHomeDir } from '../env.js';
|
|
3
|
+
import { evalNow } from '../ablation.js';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { calculateStrength, calculateRewardFactor, resolveConfidence, confidenceFacets, Layer } from '../memory.js';
|
|
9
|
+
import { readEntry, loadAllEntries } from '../store/entry-reads.js';
|
|
10
|
+
import { loadStats } from '../store/index-and-stats.js';
|
|
11
|
+
import { listMemoryConflicts } from '../store/conflicts.js';
|
|
12
|
+
import { loadEmbeddingIndex, embeddingModelRequiresReindex } from '../embeddings.js';
|
|
13
|
+
import { resolveEmbeddingProvider } from '../embedding-provider.js';
|
|
14
|
+
import { loadPhysicsState } from '../physics-state.js';
|
|
15
|
+
import { computeSystemEnergy, vecNorm } from '../physics.js';
|
|
16
|
+
import { loadConfig } from '../config.js';
|
|
17
|
+
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
18
|
+
import { runDoctor, formatDoctor } from '../doctor.js';
|
|
19
|
+
import { buildSupportBundle, TAIL_MAX_LINES } from '../support-bundle.js';
|
|
20
|
+
import { PACKAGE_VERSION } from '../version.js';
|
|
21
|
+
import { FAILURE_LOG_RETENTION_DAYS } from '../failure-log.js';
|
|
22
|
+
import { getGlobalRoot } from '../shared.js';
|
|
23
|
+
import { buildProvenanceCoverage } from '../provenance-coverage.js';
|
|
24
|
+
import { buildCorrectionLatency } from '../correction-latency.js';
|
|
25
|
+
import * as api from '../api.js';
|
|
26
|
+
import { resolveTenantId } from '../tenant.js';
|
|
27
|
+
import { printError } from './output.js';
|
|
28
|
+
import { parseCountFlag, requireInit, fmt, cardStringFlag, hookStoreRoot, resolveAuthRoot, } from './shared.js';
|
|
29
|
+
export function cmdStatus(hippoRoot) {
|
|
30
|
+
requireInit(hippoRoot);
|
|
31
|
+
const entries = loadAllEntries(hippoRoot);
|
|
32
|
+
const stats = loadStats(hippoRoot);
|
|
33
|
+
const now = evalNow();
|
|
34
|
+
const { byLayer, byConfidence, pinned, atRisk, agedOut, avgStrength } = tallyStatus(entries, now);
|
|
35
|
+
console.log('Hippo Status');
|
|
36
|
+
console.log('---------------------------');
|
|
37
|
+
console.log(`Total memories: ${entries.length}`);
|
|
38
|
+
console.log(` Buffer: ${byLayer[Layer.Buffer]}`);
|
|
39
|
+
console.log(` Episodic: ${byLayer[Layer.Episodic]}`);
|
|
40
|
+
console.log(` Semantic: ${byLayer[Layer.Semantic]}`);
|
|
41
|
+
console.log(` Trace: ${byLayer[Layer.Trace]}`);
|
|
42
|
+
const conflictCount = listMemoryConflicts(hippoRoot).length;
|
|
43
|
+
console.log(`Pinned: ${pinned}`);
|
|
44
|
+
console.log(`At risk (<0.2): ${atRisk}`);
|
|
45
|
+
console.log(`Open conflicts: ${conflictCount}`);
|
|
46
|
+
console.log(`Avg strength: ${fmt(avgStrength)}`);
|
|
47
|
+
console.log('');
|
|
48
|
+
console.log('Confidence breakdown:');
|
|
49
|
+
console.log(` Verified: ${byConfidence['verified'] ?? 0}`);
|
|
50
|
+
console.log(` Observed: ${byConfidence['observed'] ?? 0}`);
|
|
51
|
+
console.log(` Inferred: ${byConfidence['inferred'] ?? 0}`);
|
|
52
|
+
console.log(` Stale: ${byConfidence['stale'] ?? 0}`);
|
|
53
|
+
console.log(` Aged out: ${agedOut} (of the above; excludes pinned, verified)`);
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(`Total remembered: ${stats['total_remembered'] ?? 0}`);
|
|
56
|
+
console.log(`Total recalled: ${stats['total_recalled'] ?? 0}`);
|
|
57
|
+
console.log(`Total forgotten: ${stats['total_forgotten'] ?? 0}`);
|
|
58
|
+
const runs = stats['consolidation_runs'] ?? [];
|
|
59
|
+
if (Array.isArray(runs) && runs.length > 0) {
|
|
60
|
+
const last = runs[runs.length - 1];
|
|
61
|
+
console.log(`Last sleep: ${last['timestamp']}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(`Last sleep: never`);
|
|
65
|
+
}
|
|
66
|
+
printEmbeddingStatus(hippoRoot, entries);
|
|
67
|
+
printPhysicsStatus(hippoRoot);
|
|
68
|
+
}
|
|
69
|
+
function tallyStatus(entries, now) {
|
|
70
|
+
const byLayer = {
|
|
71
|
+
[Layer.Buffer]: 0,
|
|
72
|
+
[Layer.Episodic]: 0,
|
|
73
|
+
[Layer.Semantic]: 0,
|
|
74
|
+
[Layer.Trace]: 0,
|
|
75
|
+
};
|
|
76
|
+
const byConfidence = {
|
|
77
|
+
verified: 0,
|
|
78
|
+
observed: 0,
|
|
79
|
+
inferred: 0,
|
|
80
|
+
stale: 0,
|
|
81
|
+
};
|
|
82
|
+
let totalStrength = 0;
|
|
83
|
+
let pinned = 0;
|
|
84
|
+
let atRisk = 0; // strength < 0.2
|
|
85
|
+
let agedOut = 0;
|
|
86
|
+
for (const e of entries) {
|
|
87
|
+
const s = calculateStrength(e, now);
|
|
88
|
+
byLayer[e.layer] = (byLayer[e.layer] ?? 0) + 1;
|
|
89
|
+
totalStrength += s;
|
|
90
|
+
if (e.pinned)
|
|
91
|
+
pinned++;
|
|
92
|
+
if (s < 0.2)
|
|
93
|
+
atRisk++;
|
|
94
|
+
const facets = confidenceFacets(e, now);
|
|
95
|
+
byConfidence[facets.tier] = (byConfidence[facets.tier] ?? 0) + 1;
|
|
96
|
+
if (facets.agedOut)
|
|
97
|
+
agedOut++;
|
|
98
|
+
}
|
|
99
|
+
const avgStrength = entries.length > 0 ? totalStrength / entries.length : 0;
|
|
100
|
+
return { byLayer, byConfidence, pinned, atRisk, agedOut, avgStrength };
|
|
101
|
+
}
|
|
102
|
+
// Embedding status (provider-aware)
|
|
103
|
+
function printEmbeddingStatus(hippoRoot, entries) {
|
|
104
|
+
const embedProvider = (() => {
|
|
105
|
+
try {
|
|
106
|
+
return resolveEmbeddingProvider(hippoRoot);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Status reports a bad provider config as "misconfigured" below instead of failing.
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
})();
|
|
113
|
+
console.log('');
|
|
114
|
+
if (!embedProvider) {
|
|
115
|
+
console.log(`Embeddings: misconfigured (check embeddings.provider / apiBaseUrl), BM25 only`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const embeddingsDisabled = loadConfig(hippoRoot).embeddings.enabled === false;
|
|
119
|
+
const embAvail = embedProvider.isAvailable();
|
|
120
|
+
if (embeddingsDisabled) {
|
|
121
|
+
console.log(`Embeddings: disabled in config (embeddings.enabled = false), BM25 only`);
|
|
122
|
+
}
|
|
123
|
+
else if (embedProvider.kind === 'local') {
|
|
124
|
+
console.log(`Embeddings: ${embAvail ? `available [${embedProvider.id}]` : 'not installed (BM25 only)'}`);
|
|
125
|
+
}
|
|
126
|
+
else if (embAvail) {
|
|
127
|
+
console.log(`Embeddings: ${embedProvider.kind} api [${embedProvider.id}]`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(`Embeddings: ${embedProvider.kind} configured but ${embedProvider.keyEnv} not set (BM25 only)`);
|
|
131
|
+
}
|
|
132
|
+
// Show cached counts whenever vectors exist on disk (even when disabled or
|
|
133
|
+
// the key was removed), so the user still sees what is already indexed.
|
|
134
|
+
const embIndex = loadEmbeddingIndex(hippoRoot);
|
|
135
|
+
if (!embAvail && Object.keys(embIndex).length === 0)
|
|
136
|
+
return;
|
|
137
|
+
const activeIds = new Set(entries.map((e) => e.id));
|
|
138
|
+
const activeEmbedded = Object.keys(embIndex).filter((id) => activeIds.has(id)).length;
|
|
139
|
+
const orphaned = Object.keys(embIndex).length - activeEmbedded;
|
|
140
|
+
const dims = Object.values(embIndex)[0]?.length;
|
|
141
|
+
let line = `Embedded: ${activeEmbedded}/${entries.length} memories`;
|
|
142
|
+
if (dims)
|
|
143
|
+
line += ` (${dims}-dim)`;
|
|
144
|
+
if (orphaned > 0)
|
|
145
|
+
line += ` (${orphaned} orphaned, run \`hippo embed\` to prune)`;
|
|
146
|
+
console.log(line);
|
|
147
|
+
if (embeddingModelRequiresReindex(hippoRoot, embedProvider.id, embIndex)) {
|
|
148
|
+
console.log(` model changed, run \`hippo embed\` to reindex`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Physics status
|
|
152
|
+
function printPhysicsStatus(hippoRoot) {
|
|
153
|
+
try {
|
|
154
|
+
const db = openHippoDb(hippoRoot);
|
|
155
|
+
try {
|
|
156
|
+
const physicsMap = loadPhysicsState(db);
|
|
157
|
+
if (physicsMap.size > 0) {
|
|
158
|
+
const particles = Array.from(physicsMap.values());
|
|
159
|
+
const physConfig = loadConfig(hippoRoot);
|
|
160
|
+
const energy = computeSystemEnergy(particles, physConfig.physics.G_memory);
|
|
161
|
+
let sumVelMag = 0;
|
|
162
|
+
let maxVelMag = 0;
|
|
163
|
+
for (const p of particles) {
|
|
164
|
+
const mag = vecNorm(p.velocity);
|
|
165
|
+
sumVelMag += mag;
|
|
166
|
+
if (mag > maxVelMag)
|
|
167
|
+
maxVelMag = mag;
|
|
168
|
+
}
|
|
169
|
+
const avgVelMag = sumVelMag / particles.length;
|
|
170
|
+
console.log('');
|
|
171
|
+
console.log(`Physics: ${particles.length} particles, energy: ${fmt(energy.total, 4)} (KE: ${fmt(energy.kinetic, 4)}, PE: ${fmt(energy.potential, 4)}), avg vel: ${fmt(avgVelMag, 4)}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
closeHippoDb(db);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// Physics table may not exist yet — degrade gracefully
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function cmdInspect(hippoRoot, id) {
|
|
183
|
+
requireInit(hippoRoot);
|
|
184
|
+
const entry = readEntry(hippoRoot, id, resolveTenantId({}));
|
|
185
|
+
if (!entry) {
|
|
186
|
+
printError(`Memory not found: ${id}`);
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
const now = evalNow();
|
|
190
|
+
const currentStrength = calculateStrength(entry, now);
|
|
191
|
+
const lastRetrieved = new Date(entry.last_retrieved);
|
|
192
|
+
const created = new Date(entry.created);
|
|
193
|
+
const ageDays = (now.getTime() - created.getTime()) / (1000 * 60 * 60 * 24);
|
|
194
|
+
const daysSince = (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24);
|
|
195
|
+
const effectiveConfidence = resolveConfidence(entry, now);
|
|
196
|
+
console.log(`Memory: ${entry.id}`);
|
|
197
|
+
console.log('---------------------------');
|
|
198
|
+
console.log(`Layer: ${entry.layer}`);
|
|
199
|
+
console.log(`Confidence: ${entry.confidence}${effectiveConfidence !== entry.confidence ? ` (effective: ${effectiveConfidence})` : ''}`);
|
|
200
|
+
console.log(`Created: ${entry.created} (${fmt(ageDays, 1)}d ago)`);
|
|
201
|
+
console.log(`Last retrieved: ${entry.last_retrieved} (${fmt(daysSince, 1)}d ago)`);
|
|
202
|
+
console.log(`Retrieval count: ${entry.retrieval_count}`);
|
|
203
|
+
console.log(`Strength (live): ${fmt(currentStrength)} (stored: ${fmt(entry.strength)})`);
|
|
204
|
+
console.log(`Half-life: ${entry.half_life_days}d`);
|
|
205
|
+
console.log(`Emotional: ${entry.emotional_valence}`);
|
|
206
|
+
console.log(`Schema fit: ${entry.schema_fit}`);
|
|
207
|
+
console.log(`Pinned: ${entry.pinned}`);
|
|
208
|
+
console.log(`Tags: ${entry.tags.join(', ') || 'none'}`);
|
|
209
|
+
const rewardFactor = calculateRewardFactor(entry);
|
|
210
|
+
const pos = entry.outcome_positive ?? 0;
|
|
211
|
+
const neg = entry.outcome_negative ?? 0;
|
|
212
|
+
const outcomeLabel = pos === 0 && neg === 0
|
|
213
|
+
? 'none'
|
|
214
|
+
: `+${pos} / -${neg} (reward factor: ${fmt(rewardFactor)})`;
|
|
215
|
+
console.log(`Outcomes: ${outcomeLabel}`);
|
|
216
|
+
if (entry.conflicts_with.length > 0) {
|
|
217
|
+
console.log(`Conflicts with: ${entry.conflicts_with.join(', ')}`);
|
|
218
|
+
}
|
|
219
|
+
console.log('');
|
|
220
|
+
console.log('Content:');
|
|
221
|
+
console.log('-'.repeat(40));
|
|
222
|
+
console.log(entry.content);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* `hippo tokens [--days <n>] [--json] [--global]`: the token ledger
|
|
226
|
+
* (ROADMAP TE0). Tokens of memory text handed to agents per surface, blocks
|
|
227
|
+
* the per-prompt hook skipped as unchanged (TE2) and the tokens that saved,
|
|
228
|
+
* and the hook blocks' tokens later model calls re-read, counted when each session ends.
|
|
229
|
+
* Counts are estimates (characters / 4), the same estimate every budget uses.
|
|
230
|
+
*/
|
|
231
|
+
export function cmdTokens(hippoRoot, flags) {
|
|
232
|
+
const root = resolveAuthRoot(hippoRoot, flags);
|
|
233
|
+
const ctx = {
|
|
234
|
+
hippoRoot: root,
|
|
235
|
+
tenantId: resolveTenantId({}),
|
|
236
|
+
actor: api.adminActor('cli'),
|
|
237
|
+
};
|
|
238
|
+
const days = parseCountFlag(flags['days']);
|
|
239
|
+
const summary = api.tokenSummary(ctx, { days: days > 0 ? days : undefined });
|
|
240
|
+
if (flags['json']) {
|
|
241
|
+
console.log(JSON.stringify(summary, null, 2));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const windowDays = days > 0 ? days : 30;
|
|
245
|
+
if (summary.surfaces.length === 0) {
|
|
246
|
+
console.log(`No memory text recorded in the last ${windowDays} days.`);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
console.log(`Memory text handed to agents, last ${windowDays} days (estimated tokens, characters / 4)\n`);
|
|
250
|
+
console.log(` ${'surface'.padEnd(14)}${'sent'.padStart(8)}${'tokens'.padStart(12)}${'skipped'.padStart(10)}${'saved'.padStart(12)}`
|
|
251
|
+
+ `${'re-read'.padStart(12)}`);
|
|
252
|
+
for (const row of summary.surfaces) {
|
|
253
|
+
console.log(` ${row.surface.padEnd(14)}${String(row.injected).padStart(8)}${String(row.tokens).padStart(12)}`
|
|
254
|
+
+ `${String(row.skipped).padStart(10)}${String(row.tokensAvoided).padStart(12)}${String(row.tokensReread).padStart(12)}`);
|
|
255
|
+
}
|
|
256
|
+
console.log('');
|
|
257
|
+
console.log(` Total sent: ${summary.totalTokens} tokens. Saved by skipping unchanged blocks: ${summary.totalTokensAvoided}.`);
|
|
258
|
+
console.log(` Re-read by later model calls until compaction: ${summary.totalTokensReread} tokens,`
|
|
259
|
+
+ ` counted for ${summary.rereadSessions} of ${summary.hookSessions} sessions.`);
|
|
260
|
+
if (summary.meanTokensPerSession > 0) {
|
|
261
|
+
console.log(` Mean per session (rows with a session id): ${summary.meanTokensPerSession} tokens.`);
|
|
262
|
+
}
|
|
263
|
+
console.log(' Re-reads are counted for hook and compact-resume blocks when a session ends; other surfaces, and open or crashed sessions, show sent only.');
|
|
264
|
+
console.log(" Re-reads usually bill at the provider's cached-input rate, a fraction of the full input price.");
|
|
265
|
+
}
|
|
266
|
+
/** `hippo failures [--days <n>] [--json] [--global]`: failed tool calls by outcome, and repeats across sessions (CD13). */
|
|
267
|
+
export function cmdFailures(hippoRoot, flags) {
|
|
268
|
+
// The store the capture-error hook writes to; a report never creates one.
|
|
269
|
+
const root = flags['global'] ? getGlobalRoot() : hookStoreRoot(hippoRoot);
|
|
270
|
+
requireInit(root);
|
|
271
|
+
const ctx = {
|
|
272
|
+
hippoRoot: root,
|
|
273
|
+
tenantId: resolveTenantId({}),
|
|
274
|
+
actor: api.adminActor('cli'),
|
|
275
|
+
};
|
|
276
|
+
const days = parseCountFlag(flags['days']);
|
|
277
|
+
const summary = api.failureSummary(ctx, { days: days > 0 ? days : undefined });
|
|
278
|
+
if (flags['json']) {
|
|
279
|
+
console.log(JSON.stringify(summary, null, 2));
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const windowDays = days > 0 ? days : 30;
|
|
283
|
+
const kept = windowDays > FAILURE_LOG_RETENTION_DAYS ? ` (rows are kept ${FAILURE_LOG_RETENTION_DAYS} days)` : '';
|
|
284
|
+
if (summary.total === 0) {
|
|
285
|
+
console.log(`No failed tool calls recorded in the last ${windowDays} days${kept}.`);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const o = summary.outcomes;
|
|
289
|
+
const errors = o.stored + o.duplicate + o['store-failed'];
|
|
290
|
+
const unsaved = o['store-failed'] > 0 ? `, ${o['store-failed']} could not be saved` : '';
|
|
291
|
+
const rows = [
|
|
292
|
+
['errors', errors, `(${o.stored} new, ${o.duplicate} already in memory${unsaved})`],
|
|
293
|
+
['routine', o['skipped-routine'], ''],
|
|
294
|
+
['interrupted', o['skipped-interrupt'], ''],
|
|
295
|
+
['unreadable', o['skipped-invalid'], ''],
|
|
296
|
+
];
|
|
297
|
+
console.log(`Failed tool calls seen by the capture-error hook, last ${windowDays} days${kept}\n`);
|
|
298
|
+
for (const [label, count, note] of rows) {
|
|
299
|
+
console.log(` ${label.padEnd(13)}${String(count).padStart(6)} ${note}`.trimEnd());
|
|
300
|
+
}
|
|
301
|
+
// Counts, not a rate: a share means little without a holdout arm to compare against (CD11).
|
|
302
|
+
if (summary.rated > 0) {
|
|
303
|
+
const noSession = errors - summary.rated;
|
|
304
|
+
const unrated = noSession > 0 ? ` ${noSession} more had no session id.` : '';
|
|
305
|
+
console.log(`\n Repeats: ${summary.repeats} of ${summary.rated} errors first happened in another session.${unrated}`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
export function handleCorrectionLatency({ hippoRoot, flags }) {
|
|
309
|
+
requireInit(hippoRoot);
|
|
310
|
+
const entries = loadAllEntries(hippoRoot);
|
|
311
|
+
const report = buildCorrectionLatency(entries);
|
|
312
|
+
if (flags['json']) {
|
|
313
|
+
console.log(JSON.stringify(report, null, 2));
|
|
314
|
+
}
|
|
315
|
+
else if (report.count === 0) {
|
|
316
|
+
console.log('No supersessions found. Correction latency is undefined.');
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
const fmt = (ms) => {
|
|
320
|
+
if (ms === null)
|
|
321
|
+
return 'n/a';
|
|
322
|
+
if (ms < 1000)
|
|
323
|
+
return `${ms}ms`;
|
|
324
|
+
if (ms < 60_000)
|
|
325
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
326
|
+
if (ms < 3_600_000)
|
|
327
|
+
return `${(ms / 60_000).toFixed(1)}m`;
|
|
328
|
+
return `${(ms / 3_600_000).toFixed(1)}h`;
|
|
329
|
+
};
|
|
330
|
+
console.log(`Corrections: ${report.count} total (${report.extractionCount} extraction-driven, ${report.manualCount} manual)`);
|
|
331
|
+
console.log(`Latency p50: ${fmt(report.p50Ms)}, p95: ${fmt(report.p95Ms)}, max: ${fmt(report.maxMs)}`);
|
|
332
|
+
if (report.extractionCount === 0 && report.manualCount > 0) {
|
|
333
|
+
console.log(`\nAll ${report.manualCount} corrections were manual supersedes: no measurable observation lag.`);
|
|
334
|
+
console.log(`To measure latency, route corrections through extraction (set new.extracted_from to the raw receipt).`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
export function handleProvenance({ hippoRoot, flags }) {
|
|
339
|
+
requireInit(hippoRoot);
|
|
340
|
+
const entries = loadAllEntries(hippoRoot);
|
|
341
|
+
const coverage = buildProvenanceCoverage(entries);
|
|
342
|
+
if (flags['json']) {
|
|
343
|
+
console.log(JSON.stringify(coverage, null, 2));
|
|
344
|
+
}
|
|
345
|
+
else if (coverage.rawTotal === 0) {
|
|
346
|
+
console.log('No kind=raw memories present. Coverage gate trivially satisfied.');
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
const pct = (coverage.coverage * 100).toFixed(1);
|
|
350
|
+
console.log(`Provenance coverage: ${coverage.rawWithEnvelope}/${coverage.rawTotal} raw rows envelope-complete (${pct}%)`);
|
|
351
|
+
if (coverage.gaps.length > 0) {
|
|
352
|
+
console.log(`\nGaps:`);
|
|
353
|
+
for (const g of coverage.gaps) {
|
|
354
|
+
console.log(` ${g.id}: missing ${g.missing.join(', ')}`);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (flags['strict'] && coverage.coverage < 1) {
|
|
359
|
+
process.exit(1);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
export function handleDoctor({ flags }) {
|
|
363
|
+
// SAFETY: package.json always carries a string "version" (checked at release by check-manifest-versions).
|
|
364
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json'), 'utf-8'));
|
|
365
|
+
const report = runDoctor({ version: pkg.version });
|
|
366
|
+
console.log(flags['json'] ? JSON.stringify(report, null, 2) : formatDoctor(report));
|
|
367
|
+
if (!report.ok)
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
export function handleSupportBundle({ flags }) {
|
|
371
|
+
const outFlag = cardStringFlag(flags, 'out');
|
|
372
|
+
if (outFlag === '') {
|
|
373
|
+
printError('--out requires a file path.');
|
|
374
|
+
process.exit(1);
|
|
375
|
+
}
|
|
376
|
+
const includeLogs = flags['include-logs'] === true;
|
|
377
|
+
const home = envHomeDir() || os.homedir();
|
|
378
|
+
const now = new Date();
|
|
379
|
+
const bundle = buildSupportBundle({ cwd: process.cwd(), home, version: PACKAGE_VERSION, includeLogs, now });
|
|
380
|
+
const stamp = now.toISOString().replace(/[:.]/g, '-');
|
|
381
|
+
const file = outFlag ?? path.join(process.cwd(), `hippo-support-${stamp}.json`);
|
|
382
|
+
const json = JSON.stringify(bundle, null, 2);
|
|
383
|
+
try {
|
|
384
|
+
fs.writeFileSync(file, `${json}\n`, { flag: 'wx', mode: 0o600 });
|
|
385
|
+
}
|
|
386
|
+
catch (err) {
|
|
387
|
+
if (err instanceof Error && 'code' in err && err.code === 'EEXIST') {
|
|
388
|
+
printError(`${file} already exists; pass --out to choose another file. Nothing was written.`);
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
printError(err instanceof Error ? err.message : String(err));
|
|
392
|
+
}
|
|
393
|
+
process.exit(1);
|
|
394
|
+
}
|
|
395
|
+
const kb = Math.round(Buffer.byteLength(json) / 1024);
|
|
396
|
+
console.log(`Wrote ${file} (${kb} KB).`);
|
|
397
|
+
console.log(includeLogs
|
|
398
|
+
? `It holds versions, doctor checks, config with secrets removed, store counts, and the last ${TAIL_MAX_LINES} lines of each hippo log with known secret shapes removed. Those log lines can quote memory text. Read it before you attach it to a ticket.`
|
|
399
|
+
: 'It holds versions, doctor checks, config with secrets removed, store counts and log file names. It never holds memory text. Read it before you attach it to a ticket.');
|
|
400
|
+
}
|
|
401
|
+
export function handleInspect({ hippoRoot, args }) {
|
|
402
|
+
const id = args[0];
|
|
403
|
+
if (!id) {
|
|
404
|
+
printError('Please provide a memory ID.');
|
|
405
|
+
process.exit(1);
|
|
406
|
+
}
|
|
407
|
+
cmdInspect(hippoRoot, id);
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CommandContext } from './shared.js';
|
|
2
|
+
export declare function cmdLearn(hippoRoot: string, flags: Record<string, string | boolean | string[]>): void;
|
|
3
|
+
export declare function cmdImport(hippoRoot: string, args: string[], flags: Record<string, string | boolean | string[]>): void;
|
|
4
|
+
export declare function cmdSync(hippoRoot: string, flags?: Record<string, string | boolean | string[]>): void;
|
|
5
|
+
export declare function handleWatch({ hippoRoot, args }: CommandContext): Promise<void>;
|
|
6
|
+
export declare function handlePromote({ hippoRoot, args }: CommandContext): Promise<void>;
|
|
7
|
+
export declare function handleShare({ hippoRoot, args, flags }: CommandContext): void;
|
|
8
|
+
export declare function handlePeers({ flags }: CommandContext): void;
|
|
9
|
+
export declare function handleExport({ hippoRoot, args, flags }: CommandContext): void;
|
|
10
|
+
//# sourceMappingURL=transfer.d.ts.map
|