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
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* J3.2 surface delivered on `RecallResult.planningFallacyHint` when an
|
|
3
|
+
* agent's recall query carries a forward-prediction phrase AND the closest
|
|
4
|
+
* matching prediction class has closed historical data.
|
|
5
|
+
*
|
|
6
|
+
* The agent sees its track record at the moment of forecasting, anchoring
|
|
7
|
+
* on the outside view (Lovallo-Kahneman 2003) rather than the inside-view
|
|
8
|
+
* inside the planning fallacy.
|
|
9
|
+
*
|
|
10
|
+
* Plan: docs/plans/2026-05-26-j32-auto-injection.md.
|
|
11
|
+
*/
|
|
12
|
+
export interface PlanningFallacyHint {
|
|
13
|
+
classTag: string;
|
|
14
|
+
/** Verbatim PredictionBaserate.summary, e.g.
|
|
15
|
+
* "Last 5 estimates in class migration-effort averaged 2.10x actual (MAE 1.40)." */
|
|
16
|
+
baserateSummary: string;
|
|
17
|
+
/** Discriminator vs hypothetical future manual-override hints. */
|
|
18
|
+
source: 'j3.2-auto';
|
|
19
|
+
/** The regex match snippet that triggered detection. Lets the agent
|
|
20
|
+
* see WHY the hint appeared and self-correct if detection misfires
|
|
21
|
+
* (e.g. "I wasn't predicting; ignore"). */
|
|
22
|
+
detectedPhrase: string;
|
|
23
|
+
nClosed: number;
|
|
24
|
+
/** Null only when every closed-row had estimate_value=0 (ratio undefined). */
|
|
25
|
+
meanRatio: number | null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* v1.13.4 / J3.2 follow-up — "watching" variant emitted when the
|
|
29
|
+
* forward-claim regex matched but no PlanningFallacyHint baserate was
|
|
30
|
+
* returned. Dogfood diary (docs/dogfood/2026-05-27-track-j-warnings.md)
|
|
31
|
+
* Trial 2a confirmed the pre-v1.13.4 silent paths were the most common
|
|
32
|
+
* real-world J3.2 failure mode: a natural-language query carries a
|
|
33
|
+
* forward-claim phrase but its non-stopword tokens don't overlap with
|
|
34
|
+
* any prediction class tag, so hippo silently emitted nothing despite
|
|
35
|
+
* the regex match. The watching variant surfaces the detection event
|
|
36
|
+
* + a one-line suggestion so the agent can either re-tag the prediction
|
|
37
|
+
* or pass the suggestion through to the user.
|
|
38
|
+
*/
|
|
39
|
+
export interface PlanningFallacyWatching {
|
|
40
|
+
/** The forward-claim phrase the detector matched (verbatim regex match snippet). */
|
|
41
|
+
detectedPhrase: string;
|
|
42
|
+
/** Why hippo couldn't produce a baserate hint despite the match.
|
|
43
|
+
* - 'no_class_match': no class scored >=1 on token overlap.
|
|
44
|
+
* - 'tiebreak': >=2 classes tied at the same best score (silent on ambiguity). */
|
|
45
|
+
reason: 'no_class_match' | 'tiebreak';
|
|
46
|
+
/** One-line agent-facing suggestion for how the user can give hippo
|
|
47
|
+
* enough signal to produce a baserate next time. */
|
|
48
|
+
suggestion: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* v1.13.4 / J3.2 follow-up — richer return type for
|
|
52
|
+
* `computePlanningFallacyOutput`. Carries EITHER `hint` (baserate
|
|
53
|
+
* available) OR `watching` (regex fired, no baserate), or NEITHER (mode=off,
|
|
54
|
+
* no queryText, no regex match, or nClosed=0 silent path). Never both.
|
|
55
|
+
*/
|
|
56
|
+
export interface PlanningFallacyOutput {
|
|
57
|
+
hint?: PlanningFallacyHint;
|
|
58
|
+
watching?: PlanningFallacyWatching;
|
|
59
|
+
}
|
|
60
|
+
export type AutodebiasMode = 'off' | 'regex';
|
|
61
|
+
export interface ComputePlanningFallacyHintOpts {
|
|
62
|
+
/** Override env. When undefined, reads process.env.HIPPO_AUTODEBIAS at
|
|
63
|
+
* call time (per-call to allow test-time env toggling without module
|
|
64
|
+
* reload). 'off' short-circuits to null BEFORE the regex gate so the
|
|
65
|
+
* AUTODEBIAS=off path pays zero work. */
|
|
66
|
+
mode?: AutodebiasMode;
|
|
67
|
+
/** Actor for any audit emissions. Defaults to 'recall' (caller didn't
|
|
68
|
+
* specify). MUST thread through to the inner computePredictionBaserate
|
|
69
|
+
* call (passed as its `actor` arg) so MCP/HTTP-originated auto-hints
|
|
70
|
+
* carry the right attribution instead of the 'cli' default. */
|
|
71
|
+
actor?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* J3.2 orchestrator.
|
|
75
|
+
*
|
|
76
|
+
* Composes the forward-claim detector + class resolver + baserate compute,
|
|
77
|
+
* with telemetry-grade audit emission at every decision point (success,
|
|
78
|
+
* no-class-match, tiebreak).
|
|
79
|
+
*
|
|
80
|
+
* Returns `{}` (neither hint nor watching) on:
|
|
81
|
+
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
82
|
+
* - empty queryText
|
|
83
|
+
* - no forward-claim regex match
|
|
84
|
+
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
85
|
+
*
|
|
86
|
+
* Returns `{ watching: ... }` on (v1.13.4 NEW — was silent null pre-1.13.4):
|
|
87
|
+
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
88
|
+
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
89
|
+
*
|
|
90
|
+
* Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
|
|
91
|
+
* emitAudit=false) so the predict_baserate audit channel stays scoped to
|
|
92
|
+
* deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
|
|
93
|
+
* audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
|
|
94
|
+
* then emits recall_autodebias_hint audit + returns the hint.
|
|
95
|
+
*
|
|
96
|
+
* Latency budget (plan §Latency): ~50us regex-only on miss; ~750-850us
|
|
97
|
+
* on full match+resolve+baserate path. Well under 50ms target.
|
|
98
|
+
*/
|
|
99
|
+
export declare function computePlanningFallacyOutput(hippoRoot: string, tenantId: string, queryText: string, opts?: ComputePlanningFallacyHintOpts): PlanningFallacyOutput;
|
|
100
|
+
//# sourceMappingURL=planning-fallacy.d.ts.map
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { envAutodebiasOff } from '../env.js';
|
|
2
|
+
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
3
|
+
import { appendAuditEvent } from '../audit.js';
|
|
4
|
+
import { detectForwardClaim } from '../forward-claim-detector.js';
|
|
5
|
+
import { computePredictionBaserate } from './store.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a query-token set to a unique best-matching class_tag for the
|
|
8
|
+
* tenant. Scores by lower-cased token overlap; requires best score ≥ 1
|
|
9
|
+
* AND strictly greater than the 2nd-best score.
|
|
10
|
+
*
|
|
11
|
+
* Indexed via idx_predictions_tenant_class (db.ts:1015) → O(log n) seek
|
|
12
|
+
* plus a small DISTINCT scan over the per-tenant class-tag set.
|
|
13
|
+
*
|
|
14
|
+
* Scope behaviour (v1 design choice, independent-review-critic round 1
|
|
15
|
+
* MED): class_tag selection is TENANT-GLOBAL, NOT scope-filtered against
|
|
16
|
+
* the recall's opts.scope. The class_tag is an aggregator label across
|
|
17
|
+
* historical predictions in the class, not a per-memory scope-bound
|
|
18
|
+
* property. A no-scope recall CAN surface a class_tag from a privately-
|
|
19
|
+
* scoped prediction's class in PlanningFallacyHint.classTag — by design,
|
|
20
|
+
* because base-rate reasoning needs the full historical sample.
|
|
21
|
+
* Implications:
|
|
22
|
+
* - The hint payload itself carries no memory content (only the aggregate
|
|
23
|
+
* summary string + numeric stats), so memory bodies do not leak.
|
|
24
|
+
* - The class_tag NAME is the side-channel. If sensitive labels are a
|
|
25
|
+
* concern, callers should either use opaque class names (e.g. hashes
|
|
26
|
+
* or numeric tokens) or set HIPPO_AUTODEBIAS=off.
|
|
27
|
+
* - tests/api-recall-autodebias.test.ts locks this with an explicit
|
|
28
|
+
* test asserting that scope-set predictions surface via no-scope
|
|
29
|
+
* recalls (so future "fix" attempts that scope-filter trip CI).
|
|
30
|
+
*/
|
|
31
|
+
function resolveClassFromTokens(hippoRoot, tenantId, queryTokens) {
|
|
32
|
+
if (queryTokens.length === 0)
|
|
33
|
+
return { classTag: null, tiebreak: false };
|
|
34
|
+
const db = openHippoDb(hippoRoot);
|
|
35
|
+
try {
|
|
36
|
+
// SAFETY: rows' shape matches the single `class_tag` column named in the SELECT above.
|
|
37
|
+
const rows = db.prepare(`SELECT DISTINCT class_tag FROM predictions WHERE tenant_id = ?`).all(tenantId);
|
|
38
|
+
const querySet = new Set(queryTokens);
|
|
39
|
+
let bestScore = 0;
|
|
40
|
+
let bestClass = null;
|
|
41
|
+
let secondBest = 0;
|
|
42
|
+
for (const { class_tag } of rows) {
|
|
43
|
+
const classTokens = class_tag
|
|
44
|
+
.toLowerCase()
|
|
45
|
+
.split(/[-_\s]+/)
|
|
46
|
+
.filter((t) => t.length >= 3);
|
|
47
|
+
let score = 0;
|
|
48
|
+
for (const t of classTokens)
|
|
49
|
+
if (querySet.has(t))
|
|
50
|
+
score++;
|
|
51
|
+
if (score > bestScore) {
|
|
52
|
+
secondBest = bestScore;
|
|
53
|
+
bestScore = score;
|
|
54
|
+
bestClass = class_tag;
|
|
55
|
+
}
|
|
56
|
+
else if (score === bestScore && score > 0) {
|
|
57
|
+
// Tie at current best — bump secondBest. Do NOT update bestClass
|
|
58
|
+
// (alphabetical tiebreak would pick wrong class on ambiguous query
|
|
59
|
+
// like "migration will take 3 days" between migration-effort vs
|
|
60
|
+
// migration-risk; silent on tie instead).
|
|
61
|
+
secondBest = score;
|
|
62
|
+
}
|
|
63
|
+
else if (score > secondBest) {
|
|
64
|
+
secondBest = score;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (bestScore < 1)
|
|
68
|
+
return { classTag: null, tiebreak: false };
|
|
69
|
+
if (bestScore === secondBest)
|
|
70
|
+
return { classTag: null, tiebreak: true };
|
|
71
|
+
return { classTag: bestClass, tiebreak: false };
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
closeHippoDb(db);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* J3.2 orchestrator.
|
|
79
|
+
*
|
|
80
|
+
* Composes the forward-claim detector + class resolver + baserate compute,
|
|
81
|
+
* with telemetry-grade audit emission at every decision point (success,
|
|
82
|
+
* no-class-match, tiebreak).
|
|
83
|
+
*
|
|
84
|
+
* Returns `{}` (neither hint nor watching) on:
|
|
85
|
+
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
86
|
+
* - empty queryText
|
|
87
|
+
* - no forward-claim regex match
|
|
88
|
+
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
89
|
+
*
|
|
90
|
+
* Returns `{ watching: ... }` on (v1.13.4 NEW — was silent null pre-1.13.4):
|
|
91
|
+
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
92
|
+
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
93
|
+
*
|
|
94
|
+
* Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
|
|
95
|
+
* emitAudit=false) so the predict_baserate audit channel stays scoped to
|
|
96
|
+
* deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
|
|
97
|
+
* audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
|
|
98
|
+
* then emits recall_autodebias_hint audit + returns the hint.
|
|
99
|
+
*
|
|
100
|
+
* Latency budget (plan §Latency): ~50us regex-only on miss; ~750-850us
|
|
101
|
+
* on full match+resolve+baserate path. Well under 50ms target.
|
|
102
|
+
*/
|
|
103
|
+
export function computePlanningFallacyOutput(hippoRoot, tenantId, queryText, opts = {}) {
|
|
104
|
+
// Env read FIRST so AUTODEBIAS=off pays zero regex cost. Per-call read
|
|
105
|
+
// (rather than module-load cache) is deliberate: tests env-toggle this
|
|
106
|
+
// via process.env mutation without module reload.
|
|
107
|
+
const mode = opts.mode ?? (envAutodebiasOff() ? 'off' : 'regex');
|
|
108
|
+
if (mode === 'off')
|
|
109
|
+
return {};
|
|
110
|
+
if (!queryText)
|
|
111
|
+
return {};
|
|
112
|
+
const match = detectForwardClaim(queryText);
|
|
113
|
+
if (!match)
|
|
114
|
+
return {};
|
|
115
|
+
const actor = opts.actor ?? 'recall';
|
|
116
|
+
const resolution = resolveClassFromTokens(hippoRoot, tenantId, match.classQueryTokens);
|
|
117
|
+
if (resolution.tiebreak) {
|
|
118
|
+
// Telemetry: forward-claim detected, ≥2 classes tied at best overlap.
|
|
119
|
+
// v1.13.4: now ALSO returns a watching variant so the caller surface
|
|
120
|
+
// can render a "watching but no baserate (tiebreak)" line. Audit emission
|
|
121
|
+
// unchanged (the audit channel is the telemetry-grade source of truth).
|
|
122
|
+
return watchingWithAudit(hippoRoot, tenantId, actor, match, 'tiebreak', TIEBREAK_SUGGESTION);
|
|
123
|
+
}
|
|
124
|
+
if (!resolution.classTag) {
|
|
125
|
+
// Telemetry: forward-claim detected, no class scored ≥ 1.
|
|
126
|
+
// This is the channel that drives the embedding-fallback decision
|
|
127
|
+
// for J3.3 — high volume here = regex+token-overlap is missing
|
|
128
|
+
// legitimate forward-claims that have NO obvious class signal.
|
|
129
|
+
// v1.13.4: now ALSO returns a watching variant so the caller surface
|
|
130
|
+
// can render a "watching but no baserate (no class match)" line.
|
|
131
|
+
return watchingWithAudit(hippoRoot, tenantId, actor, match, 'no_class_match', NO_CLASS_MATCH_SUGGESTION);
|
|
132
|
+
}
|
|
133
|
+
// emitAudit=false: avoid double-write to predict_baserate channel.
|
|
134
|
+
// The recall_autodebias_hint audit below carries n_closed + mean_ratio.
|
|
135
|
+
const baserate = computePredictionBaserate(hippoRoot, tenantId, resolution.classTag, actor,
|
|
136
|
+
/*emitAudit=*/ false);
|
|
137
|
+
if (baserate.nClosed === 0)
|
|
138
|
+
return {}; // Silent — wait for closed data.
|
|
139
|
+
appendAuditEventOnce(hippoRoot, {
|
|
140
|
+
tenantId,
|
|
141
|
+
actor,
|
|
142
|
+
op: 'recall_autodebias_hint',
|
|
143
|
+
targetId: resolution.classTag,
|
|
144
|
+
metadata: {
|
|
145
|
+
class_tag: resolution.classTag,
|
|
146
|
+
detected_phrase: match.phrase,
|
|
147
|
+
n_closed: baserate.nClosed,
|
|
148
|
+
mean_ratio: baserate.meanRatio,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
hint: {
|
|
153
|
+
classTag: resolution.classTag,
|
|
154
|
+
baserateSummary: baserate.summary,
|
|
155
|
+
source: 'j3.2-auto',
|
|
156
|
+
detectedPhrase: match.phrase,
|
|
157
|
+
nClosed: baserate.nClosed,
|
|
158
|
+
meanRatio: baserate.meanRatio,
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const TIEBREAK_SUGGESTION = 'Multiple prediction classes tied on this query. Refine the query or rename overlapping classes to break the tie.';
|
|
163
|
+
const NO_CLASS_MATCH_SUGGESTION = 'No matching prediction class for this forward-claim. Tag your prediction with `hippo predict --class <name>` to start tracking this class.';
|
|
164
|
+
/** One audit row on its own short-lived connection. */
|
|
165
|
+
function appendAuditEventOnce(hippoRoot, event) {
|
|
166
|
+
const db = openHippoDb(hippoRoot);
|
|
167
|
+
try {
|
|
168
|
+
appendAuditEvent(db, event);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
closeHippoDb(db);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function watchingWithAudit(hippoRoot, tenantId, actor, match, reason, suggestion) {
|
|
175
|
+
appendAuditEventOnce(hippoRoot, {
|
|
176
|
+
tenantId,
|
|
177
|
+
actor,
|
|
178
|
+
op: reason === 'tiebreak' ? 'recall_autodebias_hint_tiebreak' : 'recall_autodebias_hint_no_class_match',
|
|
179
|
+
targetId: match.phrase.slice(0, 100),
|
|
180
|
+
metadata: { detected_phrase: match.phrase, token_count: match.classQueryTokens.length },
|
|
181
|
+
});
|
|
182
|
+
return {
|
|
183
|
+
watching: {
|
|
184
|
+
detectedPhrase: match.phrase,
|
|
185
|
+
reason,
|
|
186
|
+
suggestion,
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=planning-fallacy.js.map
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* the schema level.
|
|
15
15
|
*
|
|
16
16
|
* Dual-write atomicity: `savePrediction` writes the memory + predictions
|
|
17
|
-
* row inside `writeEntry`'s SAVEPOINT 'write_entry' (store.ts
|
|
18
|
-
* afterWrite hook (store.ts
|
|
17
|
+
* row inside `writeEntry`'s SAVEPOINT 'write_entry' (store/entry-writes.ts). The
|
|
18
|
+
* afterWrite hook (store/entry-writes.ts) runs inside the same SAVEPOINT, so
|
|
19
19
|
* a failure in either step rolls back both. Pattern matches supersede
|
|
20
20
|
* (api.ts:1486) and the Slack/GitHub connectors.
|
|
21
21
|
*
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* (estimate_value, actual_value) at query time. J3 is a follow-up episode;
|
|
25
25
|
* this module ships the data layer.
|
|
26
26
|
*/
|
|
27
|
+
import { type KeysetPosition } from '../keyset.js';
|
|
27
28
|
export type ClosureState = 'open' | 'closed' | 'closed-unknown';
|
|
28
29
|
export declare const VALID_CLOSURE_STATES: ReadonlySet<ClosureState>;
|
|
29
30
|
export interface Prediction {
|
|
@@ -58,6 +59,8 @@ export interface ClosePredictionOpts {
|
|
|
58
59
|
export interface ListPredictionsOpts {
|
|
59
60
|
closureState?: ClosureState;
|
|
60
61
|
limit?: number;
|
|
62
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
63
|
+
after?: KeysetPosition;
|
|
61
64
|
}
|
|
62
65
|
/**
|
|
63
66
|
* Create a new prediction. Writes a memory mirror + a predictions table
|
|
@@ -128,104 +131,6 @@ emitAudit?: boolean): PredictionBaserate;
|
|
|
128
131
|
export declare function loadOpenPredictions(hippoRoot: string, tenantId: string, opts?: {
|
|
129
132
|
classTag?: string;
|
|
130
133
|
limit?: number;
|
|
134
|
+
after?: KeysetPosition;
|
|
131
135
|
}): Prediction[];
|
|
132
|
-
|
|
133
|
-
* J3.2 surface delivered on `RecallResult.planningFallacyHint` when an
|
|
134
|
-
* agent's recall query carries a forward-prediction phrase AND the closest
|
|
135
|
-
* matching prediction class has closed historical data.
|
|
136
|
-
*
|
|
137
|
-
* The agent sees its track record at the moment of forecasting, anchoring
|
|
138
|
-
* on the outside view (Lovallo-Kahneman 2003) rather than the inside-view
|
|
139
|
-
* inside the planning fallacy.
|
|
140
|
-
*
|
|
141
|
-
* Plan: docs/plans/2026-05-26-j32-auto-injection.md.
|
|
142
|
-
*/
|
|
143
|
-
export interface PlanningFallacyHint {
|
|
144
|
-
classTag: string;
|
|
145
|
-
/** Verbatim PredictionBaserate.summary, e.g.
|
|
146
|
-
* "Last 5 estimates in class migration-effort averaged 2.10x actual (MAE 1.40)." */
|
|
147
|
-
baserateSummary: string;
|
|
148
|
-
/** Discriminator vs hypothetical future manual-override hints. */
|
|
149
|
-
source: 'j3.2-auto';
|
|
150
|
-
/** The regex match snippet that triggered detection. Lets the agent
|
|
151
|
-
* see WHY the hint appeared and self-correct if detection misfires
|
|
152
|
-
* (e.g. "I wasn't predicting; ignore"). */
|
|
153
|
-
detectedPhrase: string;
|
|
154
|
-
nClosed: number;
|
|
155
|
-
/** Null only when every closed-row had estimate_value=0 (ratio undefined). */
|
|
156
|
-
meanRatio: number | null;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* v1.13.4 / J3.2 follow-up — "watching" variant emitted when the
|
|
160
|
-
* forward-claim regex matched but no PlanningFallacyHint baserate was
|
|
161
|
-
* returned. Dogfood diary (docs/dogfood/2026-05-27-track-j-warnings.md)
|
|
162
|
-
* Trial 2a confirmed the pre-v1.13.4 silent paths were the most common
|
|
163
|
-
* real-world J3.2 failure mode: a natural-language query carries a
|
|
164
|
-
* forward-claim phrase but its non-stopword tokens don't overlap with
|
|
165
|
-
* any prediction class tag, so hippo silently emitted nothing despite
|
|
166
|
-
* the regex match. The watching variant surfaces the detection event
|
|
167
|
-
* + a one-line suggestion so the agent can either re-tag the prediction
|
|
168
|
-
* or pass the suggestion through to the user.
|
|
169
|
-
*/
|
|
170
|
-
export interface PlanningFallacyWatching {
|
|
171
|
-
/** The forward-claim phrase the detector matched (verbatim regex match snippet). */
|
|
172
|
-
detectedPhrase: string;
|
|
173
|
-
/** Why hippo couldn't produce a baserate hint despite the match.
|
|
174
|
-
* - 'no_class_match': no class scored >=1 on token overlap.
|
|
175
|
-
* - 'tiebreak': >=2 classes tied at the same best score (silent on ambiguity). */
|
|
176
|
-
reason: 'no_class_match' | 'tiebreak';
|
|
177
|
-
/** One-line agent-facing suggestion for how the user can give hippo
|
|
178
|
-
* enough signal to produce a baserate next time. */
|
|
179
|
-
suggestion: string;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* v1.13.4 / J3.2 follow-up — richer return type for
|
|
183
|
-
* `computePlanningFallacyOutput`. Carries EITHER `hint` (baserate
|
|
184
|
-
* available) OR `watching` (regex fired, no baserate), or NEITHER (mode=off,
|
|
185
|
-
* no queryText, no regex match, or nClosed=0 silent path). Never both.
|
|
186
|
-
*/
|
|
187
|
-
export interface PlanningFallacyOutput {
|
|
188
|
-
hint?: PlanningFallacyHint;
|
|
189
|
-
watching?: PlanningFallacyWatching;
|
|
190
|
-
}
|
|
191
|
-
export type AutodebiasMode = 'off' | 'regex';
|
|
192
|
-
export interface ComputePlanningFallacyHintOpts {
|
|
193
|
-
/** Override env. When undefined, reads process.env.HIPPO_AUTODEBIAS at
|
|
194
|
-
* call time (per-call to allow test-time env toggling without module
|
|
195
|
-
* reload). 'off' short-circuits to null BEFORE the regex gate so the
|
|
196
|
-
* AUTODEBIAS=off path pays zero work. */
|
|
197
|
-
mode?: AutodebiasMode;
|
|
198
|
-
/** Actor for any audit emissions. Defaults to 'recall' (caller didn't
|
|
199
|
-
* specify). MUST thread through to the inner computePredictionBaserate
|
|
200
|
-
* call (passed as its `actor` arg) so MCP/HTTP-originated auto-hints
|
|
201
|
-
* carry the right attribution instead of the 'cli' default. */
|
|
202
|
-
actor?: string;
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* J3.2 orchestrator.
|
|
206
|
-
*
|
|
207
|
-
* Composes the forward-claim detector + class resolver + baserate compute,
|
|
208
|
-
* with telemetry-grade audit emission at every decision point (success,
|
|
209
|
-
* no-class-match, tiebreak).
|
|
210
|
-
*
|
|
211
|
-
* Returns `{}` (neither hint nor watching) on:
|
|
212
|
-
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
213
|
-
* - empty queryText
|
|
214
|
-
* - no forward-claim regex match
|
|
215
|
-
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
216
|
-
*
|
|
217
|
-
* Returns `{ watching: ... }` on (v1.13.4 NEW — was silent null pre-1.13.4):
|
|
218
|
-
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
219
|
-
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
220
|
-
*
|
|
221
|
-
* Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
|
|
222
|
-
* emitAudit=false) so the predict_baserate audit channel stays scoped to
|
|
223
|
-
* deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
|
|
224
|
-
* audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
|
|
225
|
-
* then emits recall_autodebias_hint audit + returns the hint.
|
|
226
|
-
*
|
|
227
|
-
* Latency budget (plan §Latency): ~50us regex-only on miss; ~750-850us
|
|
228
|
-
* on full match+resolve+baserate path. Well under 50ms target.
|
|
229
|
-
*/
|
|
230
|
-
export declare function computePlanningFallacyOutput(hippoRoot: string, tenantId: string, queryText: string, opts?: ComputePlanningFallacyHintOpts): PlanningFallacyOutput;
|
|
231
|
-
//# sourceMappingURL=predictions.d.ts.map
|
|
136
|
+
//# sourceMappingURL=store.d.ts.map
|