@tangle-network/agent-app 0.45.53 → 0.45.55

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.
Files changed (480) hide show
  1. package/README.md +1 -1
  2. package/dist/alerting/index.d.ts +5 -175
  3. package/dist/alerting/slack.d.ts +176 -0
  4. package/dist/app-auth/index.d.ts +14 -17
  5. package/dist/assets/index.d.ts +2 -504
  6. package/dist/assets/schema.d.ts +264 -0
  7. package/dist/assets/types.d.ts +237 -0
  8. package/dist/assistant/AssistantDock.d.ts +56 -0
  9. package/dist/assistant/AssistantHistory.d.ts +41 -0
  10. package/dist/assistant/AssistantPanel.d.ts +84 -0
  11. package/dist/assistant/ProposalCard.d.ts +41 -0
  12. package/dist/assistant/ResizeHandle.d.ts +19 -0
  13. package/dist/assistant/client-context.d.ts +20 -0
  14. package/dist/assistant/client.d.ts +117 -0
  15. package/dist/assistant/index.d.ts +19 -848
  16. package/dist/assistant/launcher.d.ts +23 -0
  17. package/dist/assistant/persistence.d.ts +26 -0
  18. package/dist/assistant/presentation.d.ts +99 -0
  19. package/dist/assistant/provider-label.d.ts +7 -0
  20. package/dist/assistant/reducer.d.ts +130 -0
  21. package/dist/assistant/sse.d.ts +24 -0
  22. package/dist/assistant/time-ago.d.ts +6 -0
  23. package/dist/assistant/transcript.d.ts +97 -0
  24. package/dist/assistant/types.d.ts +291 -0
  25. package/dist/assistant/use-stick-to-bottom.d.ts +28 -0
  26. package/dist/assistant/useAssistantChat.d.ts +63 -0
  27. package/dist/assistant/useAssistantModels.d.ts +22 -0
  28. package/dist/assistant/useAssistantThreads.d.ts +47 -0
  29. package/dist/assistant/usePanelPrefs.d.ts +55 -0
  30. package/dist/billing/index.d.ts +19 -21
  31. package/dist/brand/index.d.ts +16 -10
  32. package/dist/brand-extraction/extract.d.ts +34 -0
  33. package/dist/brand-extraction/index.d.ts +12 -214
  34. package/dist/brand-extraction/map.d.ts +58 -0
  35. package/dist/brand-extraction/types.d.ts +119 -0
  36. package/dist/catalog/index.d.ts +11 -101
  37. package/dist/chat-react/composer-mode-controls.d.ts +14 -0
  38. package/dist/chat-react/entry-composer.d.ts +92 -0
  39. package/dist/chat-react/index.d.ts +22 -118
  40. package/dist/chat-react/types.d.ts +11 -0
  41. package/dist/chat-routes/attachment-store.d.ts +84 -0
  42. package/dist/chat-routes/attachment-upload.d.ts +84 -0
  43. package/dist/chat-routes/attachment-validation.d.ts +95 -0
  44. package/dist/chat-routes/binary-sniff.d.ts +45 -0
  45. package/dist/chat-routes/completed-sandbox-turn.d.ts +25 -0
  46. package/dist/chat-routes/detached-turn.d.ts +197 -0
  47. package/dist/chat-routes/dispatch-parts.d.ts +101 -0
  48. package/dist/chat-routes/draft-persistence.d.ts +189 -0
  49. package/dist/chat-routes/durable-projection.d.ts +18 -0
  50. package/dist/chat-routes/file-index.d.ts +115 -0
  51. package/dist/chat-routes/index.d.ts +25 -1840
  52. package/dist/chat-routes/model-failover-stream.d.ts +206 -0
  53. package/dist/chat-routes/promote-file-part.d.ts +84 -0
  54. package/dist/chat-routes/resolve-attachments.d.ts +72 -0
  55. package/dist/chat-routes/sandbox-producer.d.ts +146 -0
  56. package/dist/chat-routes/sandbox-turn-usage.d.ts +4 -0
  57. package/dist/{stale-turn-lock-DucQzvXu.d.ts → chat-routes/stale-turn-lock.d.ts} +7 -9
  58. package/dist/chat-routes/turn-routes.d.ts +540 -0
  59. package/dist/chat-routes/upload.d.ts +84 -0
  60. package/dist/{wire-DOZ-O6hD.d.ts → chat-routes/wire.d.ts} +41 -44
  61. package/dist/chat-store/core.d.ts +19 -0
  62. package/dist/chat-store/index.d.ts +22 -322
  63. package/dist/{parts-BqIHMdyu.d.ts → chat-store/parts.d.ts} +49 -47
  64. package/dist/chat-store/schema.d.ts +157 -0
  65. package/dist/chat-store/store.d.ts +177 -0
  66. package/dist/config/index.d.ts +13 -18
  67. package/dist/crypto/index.d.ts +10 -12
  68. package/dist/crypto/web-token.d.ts +22 -0
  69. package/dist/design-canvas/apply.d.ts +70 -0
  70. package/dist/design-canvas/drizzle-store.d.ts +29 -0
  71. package/dist/design-canvas/drizzle.d.ts +7 -575
  72. package/dist/{export-presets-mgVulRaV.d.ts → design-canvas/export-presets.d.ts} +18 -22
  73. package/dist/design-canvas/index.d.ts +22 -268
  74. package/dist/design-canvas/mcp-entry.d.ts +15 -0
  75. package/dist/design-canvas/mcp-handler.d.ts +34 -0
  76. package/dist/design-canvas/mcp-tools.d.ts +30 -0
  77. package/dist/{model-DnfO_PdJ.d.ts → design-canvas/model.d.ts} +33 -35
  78. package/dist/{operations-ByJ6yXOW.d.ts → design-canvas/operations.d.ts} +21 -25
  79. package/dist/design-canvas/schema.d.ts +558 -0
  80. package/dist/{store-CqfDtnPQ.d.ts → design-canvas/store.d.ts} +8 -12
  81. package/dist/design-canvas/templates.d.ts +72 -0
  82. package/dist/design-canvas/validate.d.ts +32 -0
  83. package/dist/design-canvas-react/components/BleedTrimOverlay.d.ts +22 -0
  84. package/dist/design-canvas-react/components/BrandKnot.d.ts +11 -0
  85. package/dist/design-canvas-react/components/CanvasEmptyState.d.ts +32 -0
  86. package/dist/design-canvas-react/components/CanvasInsertPanel.d.ts +53 -0
  87. package/dist/{lazy-DrkVyDpe.d.ts → design-canvas-react/components/DesignCanvas.d.ts} +27 -20
  88. package/dist/design-canvas-react/components/DesignCanvasEditor.d.ts +23 -0
  89. package/dist/design-canvas-react/components/ElementNode.d.ts +51 -0
  90. package/dist/design-canvas-react/components/ExportControl.d.ts +21 -0
  91. package/dist/design-canvas-react/components/GridLayer.d.ts +47 -0
  92. package/dist/design-canvas-react/components/InlineTextEditor.d.ts +25 -0
  93. package/dist/design-canvas-react/components/LayersPanel.d.ts +20 -0
  94. package/dist/design-canvas-react/components/PagesStrip.d.ts +34 -0
  95. package/dist/design-canvas-react/components/Rulers.d.ts +31 -0
  96. package/dist/design-canvas-react/components/SelectionLayer.d.ts +51 -0
  97. package/dist/design-canvas-react/components/SnapGuidesOverlay.d.ts +25 -0
  98. package/dist/design-canvas-react/components/Toolbar.d.ts +64 -0
  99. package/dist/design-canvas-react/components/Workspace.d.ts +92 -0
  100. package/dist/design-canvas-react/components/ZoomControls.d.ts +14 -0
  101. package/dist/design-canvas-react/components/glyphs.d.ts +46 -0
  102. package/dist/design-canvas-react/components/icon-button.d.ts +22 -0
  103. package/dist/design-canvas-react/components/index.d.ts +27 -0
  104. package/dist/design-canvas-react/components/layer-tree.d.ts +34 -0
  105. package/dist/design-canvas-react/components/ruler-math.d.ts +78 -0
  106. package/dist/design-canvas-react/components/transform-math.d.ts +168 -0
  107. package/dist/{command-stack-TNPWJCzW.d.ts → design-canvas-react/contracts.d.ts} +16 -63
  108. package/dist/design-canvas-react/engine/command-stack.d.ts +43 -0
  109. package/dist/design-canvas-react/engine/commands.d.ts +154 -0
  110. package/dist/design-canvas-react/engine/selection.d.ts +48 -0
  111. package/dist/design-canvas-react/engine/snap.d.ts +24 -0
  112. package/dist/design-canvas-react/engine/zoom-pan.d.ts +18 -0
  113. package/dist/design-canvas-react/engine.d.ts +21 -399
  114. package/dist/design-canvas-react/export-math.d.ts +104 -0
  115. package/dist/design-canvas-react/export.d.ts +89 -0
  116. package/dist/design-canvas-react/index.d.ts +16 -586
  117. package/dist/design-canvas-react/insert-builders.d.ts +61 -0
  118. package/dist/design-canvas-react/lazy.d.ts +21 -6
  119. package/dist/documents/docx.d.ts +50 -0
  120. package/dist/documents/extract.d.ts +87 -0
  121. package/dist/documents/index.d.ts +26 -232
  122. package/dist/documents/media-type.d.ts +33 -0
  123. package/dist/documents/pdf-inspector.d.ts +5 -9
  124. package/dist/{types-DrBidf3O.d.ts → documents/types.d.ts} +13 -15
  125. package/dist/documents/zip.d.ts +56 -0
  126. package/dist/eval/calibration.d.ts +106 -0
  127. package/dist/eval/index.d.ts +8 -116
  128. package/dist/eval-campaign/index.d.ts +11 -12
  129. package/dist/{trust-gate-Dcm5xSva.d.ts → eval-campaign/trust-gate.d.ts} +5 -9
  130. package/dist/forms/blank.d.ts +48 -0
  131. package/dist/forms/fill.d.ts +105 -0
  132. package/dist/forms/index.d.ts +58 -332
  133. package/dist/forms/registry.d.ts +115 -0
  134. package/dist/forms/verify.d.ts +58 -0
  135. package/dist/harness/index.d.ts +21 -19
  136. package/dist/intakes/api.d.ts +5 -11
  137. package/dist/{completion-CvcNUz07.d.ts → intakes/completion.d.ts} +7 -11
  138. package/dist/intakes/context-sufficiency.d.ts +113 -0
  139. package/dist/intakes/drizzle/schema.d.ts +338 -0
  140. package/dist/intakes/drizzle/store.d.ts +75 -0
  141. package/dist/intakes/drizzle.d.ts +12 -391
  142. package/dist/intakes/index.d.ts +23 -113
  143. package/dist/{model-C8U0HZxL.d.ts → intakes/model.d.ts} +15 -17
  144. package/dist/intakes-react/components/BrandMark.d.ts +10 -0
  145. package/dist/intakes-react/components/IntakeInterview.d.ts +15 -0
  146. package/dist/intakes-react/components/index.d.ts +1 -0
  147. package/dist/intakes-react/contracts.d.ts +42 -0
  148. package/dist/intakes-react/index.d.ts +12 -47
  149. package/dist/intakes-react/lazy.d.ts +9 -8
  150. package/dist/integrations/index.d.ts +10 -12
  151. package/dist/{contract-OxG_jVMx.d.ts → interactions/contract.d.ts} +40 -42
  152. package/dist/interactions/index.d.ts +16 -256
  153. package/dist/interactions/route.d.ts +151 -0
  154. package/dist/interactions/sidecar.d.ts +100 -0
  155. package/dist/knowledge/index.d.ts +7 -11
  156. package/dist/knowledge-loop/index.d.ts +13 -20
  157. package/dist/legibility/checks/empty-state.d.ts +59 -0
  158. package/dist/legibility/checks/reachability.d.ts +103 -0
  159. package/dist/legibility/checks/silent-failure.d.ts +57 -0
  160. package/dist/legibility/checks/success.d.ts +38 -0
  161. package/dist/legibility/checks/vocabulary.d.ts +65 -0
  162. package/dist/legibility/cli-args.d.ts +30 -0
  163. package/dist/legibility/cli.d.ts +25 -0
  164. package/dist/legibility/index.d.ts +10 -530
  165. package/dist/legibility/report.d.ts +22 -0
  166. package/dist/legibility/scan.d.ts +29 -0
  167. package/dist/legibility/source.d.ts +132 -0
  168. package/dist/legibility/suppress.d.ts +36 -0
  169. package/dist/legibility/types.d.ts +168 -0
  170. package/dist/legibility/walk-sources.d.ts +21 -0
  171. package/dist/{agent-activity-C8ZG0F0M.d.ts → missions/agent-activity.d.ts} +3 -5
  172. package/dist/missions/engine.d.ts +251 -0
  173. package/dist/missions/events.d.ts +195 -0
  174. package/dist/missions/index.d.ts +12 -765
  175. package/dist/missions/plan-parse.d.ts +50 -0
  176. package/dist/missions/service.d.ts +265 -0
  177. package/dist/{failover-D-3UXXTb.d.ts → model-resolution/failover.d.ts} +10 -12
  178. package/dist/model-resolution/index.d.ts +15 -18
  179. package/dist/object-store/index.d.ts +15 -17
  180. package/dist/openui/action.d.ts +54 -0
  181. package/dist/openui/authoring.d.ts +25 -0
  182. package/dist/openui/index.d.ts +24 -206
  183. package/dist/openui/route.d.ts +124 -0
  184. package/dist/openui/segments.d.ts +71 -0
  185. package/dist/openui/values.d.ts +82 -0
  186. package/dist/openui-react/index.d.ts +9 -13
  187. package/dist/peer-floors/check.d.ts +9 -190
  188. package/dist/peer-floors/cli.d.ts +2 -3
  189. package/dist/peer-floors/dependency-source.d.ts +178 -0
  190. package/dist/plans/index.d.ts +13 -14
  191. package/dist/{billing-BuNlaKlE.d.ts → platform/billing.d.ts} +28 -32
  192. package/dist/platform/guards.d.ts +79 -0
  193. package/dist/platform/hub.d.ts +107 -0
  194. package/dist/platform/index.d.ts +7 -112
  195. package/dist/{sso-Cm00S61u.d.ts → platform/sso.d.ts} +15 -97
  196. package/dist/preflight/cli.d.ts +3 -6
  197. package/dist/preflight/index.d.ts +16 -18
  198. package/dist/preset-cloudflare/headers.d.ts +12 -0
  199. package/dist/preset-cloudflare/index.d.ts +22 -74
  200. package/dist/preset-cloudflare/workflow-instance.d.ts +35 -0
  201. package/dist/profile/budget.d.ts +72 -0
  202. package/dist/profile/fingerprint.d.ts +65 -0
  203. package/dist/profile/index.d.ts +27 -19
  204. package/dist/prompt/index.d.ts +3 -5
  205. package/dist/record/drizzle/schema.d.ts +488 -0
  206. package/dist/record/drizzle/store.d.ts +224 -0
  207. package/dist/record/drizzle.d.ts +10 -679
  208. package/dist/record/fold.d.ts +99 -0
  209. package/dist/record/index.d.ts +13 -13
  210. package/dist/{fold-DACU7gtf.d.ts → record/model.d.ts} +22 -124
  211. package/dist/record/ulid.d.ts +12 -0
  212. package/dist/redact/index.d.ts +14 -16
  213. package/dist/run/index.d.ts +11 -16
  214. package/dist/runtime/agent.d.ts +23 -0
  215. package/dist/runtime/certified-delivery.d.ts +57 -0
  216. package/dist/runtime/index.d.ts +17 -367
  217. package/dist/runtime/loop.d.ts +58 -0
  218. package/dist/runtime/model-catalog.d.ts +103 -0
  219. package/dist/{model-CdCDfBA9.d.ts → runtime/model.d.ts} +25 -27
  220. package/dist/runtime/openai-stream.d.ts +126 -0
  221. package/dist/runtime/surface-profile.d.ts +115 -0
  222. package/dist/sandbox/binary-read.d.ts +63 -0
  223. package/dist/sandbox/diagnostics.d.ts +69 -0
  224. package/dist/sandbox/index.d.ts +103 -1085
  225. package/dist/sandbox/model.d.ts +179 -0
  226. package/dist/sandbox/outcome.d.ts +10 -0
  227. package/dist/sandbox/prewarm-claim-d1.d.ts +80 -0
  228. package/dist/sandbox/prewarm.d.ts +193 -0
  229. package/dist/sandbox/recovery.d.ts +216 -0
  230. package/dist/sandbox/terminal-connection.d.ts +145 -0
  231. package/dist/sandbox/workspace-sandbox-manager.d.ts +44 -0
  232. package/dist/sequences/apply.d.ts +54 -0
  233. package/dist/sequences/captions.d.ts +91 -0
  234. package/dist/sequences/drizzle-store.d.ts +36 -0
  235. package/dist/sequences/drizzle.d.ts +7 -1252
  236. package/dist/sequences/exports.d.ts +138 -0
  237. package/dist/sequences/index.d.ts +19 -340
  238. package/dist/sequences/mcp-entry.d.ts +15 -0
  239. package/dist/sequences/mcp-handler.d.ts +39 -0
  240. package/dist/sequences/mcp-tools.d.ts +47 -0
  241. package/dist/{store-B7LLlk9p.d.ts → sequences/model.d.ts} +26 -110
  242. package/dist/sequences/operations.d.ts +126 -0
  243. package/dist/sequences/schema.d.ts +1231 -0
  244. package/dist/sequences/store.d.ts +81 -0
  245. package/dist/sequences/validate.d.ts +98 -0
  246. package/dist/sequences-react/components/BrandMark.d.ts +10 -0
  247. package/dist/sequences-react/components/PreviewCanvas.d.ts +26 -0
  248. package/dist/sequences-react/components/SnapIndicatorLine.d.ts +11 -0
  249. package/dist/sequences-react/components/TimelineClipChip.d.ts +80 -0
  250. package/dist/sequences-react/components/TimelineEditor.d.ts +44 -0
  251. package/dist/sequences-react/components/TimelineEmptyState.d.ts +21 -0
  252. package/dist/sequences-react/components/TimelineGhostLanes.d.ts +14 -0
  253. package/dist/sequences-react/components/TimelinePlayhead.d.ts +11 -0
  254. package/dist/sequences-react/components/TimelineRuler.d.ts +16 -0
  255. package/dist/sequences-react/components/TimelineSmallScreenGate.d.ts +12 -0
  256. package/dist/sequences-react/components/TimelineTrackRow.d.ts +51 -0
  257. package/dist/sequences-react/components/ZoomControl.d.ts +15 -0
  258. package/dist/sequences-react/components/composite-command.d.ts +8 -0
  259. package/dist/sequences-react/components/glyphs.d.ts +26 -0
  260. package/dist/sequences-react/components/index.d.ts +31 -0
  261. package/dist/sequences-react/components/interaction-math.d.ts +103 -0
  262. package/dist/sequences-react/contracts.d.ts +187 -0
  263. package/dist/sequences-react/engine/command-stack.d.ts +18 -0
  264. package/dist/sequences-react/engine/commands.d.ts +146 -0
  265. package/dist/sequences-react/engine/playback.d.ts +18 -0
  266. package/dist/sequences-react/engine/snap.d.ts +29 -0
  267. package/dist/sequences-react/engine/zoom.d.ts +29 -0
  268. package/dist/sequences-react/index.d.ts +20 -880
  269. package/dist/sequences-react/lazy.d.ts +8 -0
  270. package/dist/sequences-react/media/frame-provider.d.ts +70 -0
  271. package/dist/sequences-react/media/transcription.d.ts +33 -0
  272. package/dist/sequences-react/media/waveform.d.ts +34 -0
  273. package/dist/session-shell/index.d.ts +31 -204
  274. package/dist/session-shell/nav-guard.d.ts +170 -0
  275. package/dist/session-shell/path.d.ts +19 -0
  276. package/dist/signoff/cli.d.ts +4 -7
  277. package/dist/signoff/config.d.ts +12 -0
  278. package/dist/signoff/exec.d.ts +44 -0
  279. package/dist/signoff/index.d.ts +56 -14
  280. package/dist/signoff/invoked-as-script.d.ts +25 -0
  281. package/dist/signoff/node-version.d.ts +50 -0
  282. package/dist/signoff/proof-attach.d.ts +88 -0
  283. package/dist/signoff/proof-cli.d.ts +1 -0
  284. package/dist/signoff/proof-fixture.d.ts +13 -0
  285. package/dist/signoff/proof-from-report.d.ts +22 -0
  286. package/dist/signoff/proof-git.d.ts +57 -0
  287. package/dist/signoff/proof-record.d.ts +202 -0
  288. package/dist/signoff/proof-verify.d.ts +103 -0
  289. package/dist/signoff/proof.d.ts +35 -310
  290. package/dist/signoff/report.d.ts +7 -0
  291. package/dist/{run-D80hoLKh.d.ts → signoff/run.d.ts} +3 -6
  292. package/dist/signoff/schedule.d.ts +55 -0
  293. package/dist/signoff/seeds.d.ts +50 -0
  294. package/dist/signoff/store.d.ts +22 -0
  295. package/dist/{types-Bd6uW9vQ.d.ts → signoff/types.d.ts} +15 -17
  296. package/dist/signoff/workflow-pin.d.ts +56 -0
  297. package/dist/signoff/workspace.d.ts +40 -0
  298. package/dist/skills/index.d.ts +28 -32
  299. package/dist/skills-placement/index.d.ts +7 -11
  300. package/dist/spend/budget.d.ts +123 -0
  301. package/dist/spend/ceiling.d.ts +51 -0
  302. package/dist/spend/cli-args.d.ts +20 -0
  303. package/dist/spend/cli.d.ts +1 -0
  304. package/dist/spend/fixtures/incident-parked-time.d.ts +55 -0
  305. package/dist/spend/index.d.ts +38 -1144
  306. package/dist/spend/liveness.d.ts +131 -0
  307. package/dist/spend/ownership.d.ts +87 -0
  308. package/dist/spend/reconcile.d.ts +109 -0
  309. package/dist/spend/reference.d.ts +42 -0
  310. package/dist/spend/report.d.ts +12 -0
  311. package/dist/spend/store.d.ts +123 -0
  312. package/dist/spend/types.d.ts +466 -0
  313. package/dist/store/index.d.ts +10 -12
  314. package/dist/stories/app-shell/fixtures.d.ts +43 -0
  315. package/dist/stories/app-shell/shell.d.ts +81 -0
  316. package/dist/stories/assistant/fixtures.d.ts +73 -0
  317. package/dist/stories/chat/fixtures.d.ts +70 -0
  318. package/dist/stories/chat/markdown.d.ts +11 -0
  319. package/dist/stories/chat/run-drill-in.d.ts +19 -0
  320. package/dist/stories/chat-controls/fixtures.d.ts +116 -0
  321. package/dist/stories/design-canvas/fixtures.d.ts +57 -0
  322. package/dist/stories/fixtures/canvas.d.ts +10 -0
  323. package/dist/stories/fixtures/catalog.d.ts +7 -0
  324. package/dist/stories/fixtures/chat.d.ts +39 -0
  325. package/dist/stories/fixtures/index.d.ts +4 -0
  326. package/dist/stories/fixtures/sequences.d.ts +17 -0
  327. package/dist/stories/panels/fixtures.d.ts +63 -0
  328. package/dist/stories/sequences/fixtures.d.ts +30 -0
  329. package/dist/stories/studio/fixtures.d.ts +22 -0
  330. package/dist/stream/index.d.ts +10 -56
  331. package/dist/{stream-normalizer-DKRxyVlZ.d.ts → stream/stream-normalizer.d.ts} +23 -26
  332. package/dist/{turn-buffer-COMQUwO2.d.ts → stream/turn-buffer.d.ts} +21 -23
  333. package/dist/stream/turn-identity.d.ts +49 -0
  334. package/dist/studio/generation.d.ts +179 -0
  335. package/dist/studio/index.d.ts +12 -181
  336. package/dist/studio-react/avatar-composer.d.ts +8 -0
  337. package/dist/studio-react/composer-hero.d.ts +12 -0
  338. package/dist/studio-react/composer-shell.d.ts +18 -0
  339. package/dist/studio-react/generation-card.d.ts +9 -0
  340. package/dist/studio-react/generation-detail-modal.d.ts +11 -0
  341. package/dist/studio-react/generation-detail.d.ts +6 -0
  342. package/dist/studio-react/generation-grid.d.ts +15 -0
  343. package/dist/studio-react/image-composer.d.ts +8 -0
  344. package/dist/studio-react/index.d.ts +32 -245
  345. package/dist/studio-react/library-drawer.d.ts +12 -0
  346. package/dist/studio-react/library-panel.d.ts +15 -0
  347. package/dist/studio-react/publish-package-composer.d.ts +18 -0
  348. package/dist/studio-react/result-canvas.d.ts +6 -0
  349. package/dist/studio-react/speech-composer.d.ts +4 -0
  350. package/dist/studio-react/studio-header.d.ts +5 -0
  351. package/dist/studio-react/studio-sheet.d.ts +12 -0
  352. package/dist/studio-react/studio-workspace.d.ts +23 -0
  353. package/dist/studio-react/transcription-composer.d.ts +12 -0
  354. package/dist/studio-react/type-config.d.ts +11 -0
  355. package/dist/studio-react/use-studio-generations.d.ts +20 -0
  356. package/dist/studio-react/video-composer.d.ts +10 -0
  357. package/dist/tangle/index.d.ts +7 -9
  358. package/dist/teams/drizzle/access.d.ts +82 -0
  359. package/dist/{invitations-schema-_fI7HkJP.d.ts → teams/drizzle/invitations-schema.d.ts} +39 -27
  360. package/dist/teams/drizzle/personal-organization.d.ts +41 -0
  361. package/dist/{access-490O6aOU.d.ts → teams/drizzle/schema.d.ts} +57 -122
  362. package/dist/teams/drizzle.d.ts +12 -44
  363. package/dist/teams/index.d.ts +20 -44
  364. package/dist/teams/invitations-api.d.ts +17 -21
  365. package/dist/{invitations-DoYMvXea.d.ts → teams/invitations.d.ts} +14 -18
  366. package/dist/teams/invite.d.ts +42 -0
  367. package/dist/teams/members-api.d.ts +12 -16
  368. package/dist/teams/resend.d.ts +3 -13
  369. package/dist/{roles-B4nU3jDi.d.ts → teams/roles.d.ts} +18 -20
  370. package/dist/teams-react/components/BrandMark.d.ts +10 -0
  371. package/dist/teams-react/components/InvitationsPanel.d.ts +13 -0
  372. package/dist/teams-react/components/InviteAcceptPage.d.ts +10 -0
  373. package/dist/teams-react/components/MembersPanel.d.ts +14 -0
  374. package/dist/teams-react/components/RoleSelect.d.ts +17 -0
  375. package/dist/teams-react/components/index.d.ts +3 -0
  376. package/dist/teams-react/contracts.d.ts +134 -0
  377. package/dist/teams-react/index.d.ts +12 -143
  378. package/dist/teams-react/lazy.d.ts +11 -11
  379. package/dist/test-setup.d.ts +1 -0
  380. package/dist/theme/index.d.ts +6 -104
  381. package/dist/theme/tailwind-preset.d.ts +1 -2
  382. package/dist/theme/theme.d.ts +106 -0
  383. package/dist/theme-contract/cli.d.ts +21 -0
  384. package/dist/theme-contract/index.d.ts +4 -6
  385. package/dist/{auth-BYtiazA4.d.ts → tools/auth.d.ts} +8 -11
  386. package/dist/tools/capability.d.ts +54 -0
  387. package/dist/tools/dispatch.d.ts +37 -0
  388. package/dist/tools/errors.d.ts +8 -0
  389. package/dist/tools/gating.d.ts +62 -0
  390. package/dist/tools/http.d.ts +27 -0
  391. package/dist/tools/index.d.ts +12 -217
  392. package/dist/{mcp-rpc-DYwPlYbZ.d.ts → tools/mcp-rpc.d.ts} +7 -9
  393. package/dist/{mcp-xxoZZfor.d.ts → tools/mcp.d.ts} +14 -16
  394. package/dist/tools/openai.d.ts +28 -0
  395. package/dist/tools/registry.d.ts +39 -0
  396. package/dist/tools/runtime.d.ts +22 -0
  397. package/dist/{types-B25Mib1r.d.ts → tools/types.d.ts} +15 -83
  398. package/dist/{flow-types-CJxEmaRy.d.ts → trace/flow-types.d.ts} +2 -4
  399. package/dist/trace/index.d.ts +11 -148
  400. package/dist/trace/mission-flow.d.ts +82 -0
  401. package/dist/trace/mission-trace.d.ts +52 -0
  402. package/dist/turn-health/classify.d.ts +207 -0
  403. package/dist/turn-health/index.d.ts +29 -637
  404. package/dist/turn-health/lifecycle.d.ts +75 -0
  405. package/dist/turn-health/sink.d.ts +122 -0
  406. package/dist/turn-health/sweep.d.ts +245 -0
  407. package/dist/turn-stream/adapters.d.ts +257 -0
  408. package/dist/turn-stream/core.d.ts +293 -0
  409. package/dist/turn-stream/do.d.ts +144 -0
  410. package/dist/turn-stream/index.d.ts +62 -738
  411. package/dist/turn-stream/memory.d.ts +41 -0
  412. package/dist/vault/ConfirmDialog.d.ts +22 -0
  413. package/dist/vault/VaultPane.d.ts +15 -0
  414. package/dist/{VaultPane-BDP6SB_K.d.ts → vault/contracts.d.ts} +15 -22
  415. package/dist/vault/index.d.ts +15 -22
  416. package/dist/vault/lazy.d.ts +9 -7
  417. package/dist/vault/server.d.ts +8 -10
  418. package/dist/web/free-route-limit.d.ts +187 -0
  419. package/dist/web/index.d.ts +15 -207
  420. package/dist/{rate-limit-BOVmJRXZ.d.ts → web/rate-limit.d.ts} +3 -5
  421. package/dist/web-react/agent-session-controls.d.ts +105 -0
  422. package/dist/web-react/async/async-view.d.ts +69 -0
  423. package/dist/web-react/async/index.d.ts +13 -305
  424. package/dist/web-react/async/state.d.ts +107 -0
  425. package/dist/web-react/async/use-async-resource.d.ts +41 -0
  426. package/dist/web-react/async/use-confirmed-mutation.d.ts +90 -0
  427. package/dist/web-react/brand-mark.d.ts +11 -0
  428. package/dist/web-react/chat-attachments.d.ts +21 -0
  429. package/dist/web-react/chat-composer.d.ts +174 -0
  430. package/dist/web-react/chat-interactions.d.ts +1 -0
  431. package/dist/web-react/chat-mentions.d.ts +48 -0
  432. package/dist/web-react/chat-stream.d.ts +106 -0
  433. package/dist/web-react/class-names.d.ts +10 -0
  434. package/dist/web-react/controls.d.ts +265 -0
  435. package/dist/web-react/durable-chat-cards.d.ts +40 -0
  436. package/dist/web-react/durable-interaction-submit.d.ts +22 -0
  437. package/dist/web-react/durable-plan-card.d.ts +13 -0
  438. package/dist/web-react/durable-plan-flow.d.ts +77 -0
  439. package/dist/web-react/harness-glyphs.d.ts +28 -0
  440. package/dist/web-react/index.d.ts +80 -2347
  441. package/dist/web-react/inert.d.ts +39 -0
  442. package/dist/web-react/insight-card.d.ts +203 -0
  443. package/dist/web-react/interaction-card-support.d.ts +115 -0
  444. package/dist/web-react/interaction-plan-card.d.ts +39 -0
  445. package/dist/web-react/interaction-question-card.d.ts +100 -0
  446. package/dist/web-react/message-attachments.d.ts +56 -0
  447. package/dist/web-react/mission-activity.d.ts +96 -0
  448. package/dist/web-react/motion.d.ts +43 -0
  449. package/dist/web-react/provenance-model.d.ts +195 -0
  450. package/dist/web-react/provenance.d.ts +82 -0
  451. package/dist/web-react/provider-logo.d.ts +14 -0
  452. package/dist/web-react/record-grid-model.d.ts +257 -0
  453. package/dist/web-react/record-grid.d.ts +108 -0
  454. package/dist/web-react/sandbox-terminal.d.ts +90 -0
  455. package/dist/web-react/seat-paywall.d.ts +47 -0
  456. package/dist/web-react/session-history.d.ts +196 -0
  457. package/dist/web-react/smooth-text.d.ts +29 -0
  458. package/dist/web-react/sparkline.d.ts +150 -0
  459. package/dist/web-react/terminal.d.ts +1 -92
  460. package/dist/web-react/use-chat-interactions.d.ts +78 -0
  461. package/dist/web-react/use-composer-attachments.d.ts +111 -0
  462. package/dist/web-react/use-file-mentions.d.ts +94 -0
  463. package/dist/web-react/work-product.d.ts +105 -0
  464. package/dist/work-product/claim-support.d.ts +288 -0
  465. package/dist/work-product/index.d.ts +16 -849
  466. package/dist/work-product/provenance.d.ts +61 -0
  467. package/dist/{queue-VTBA5ONX.d.ts → work-product/queue.d.ts} +10 -12
  468. package/dist/work-product/quote.d.ts +139 -0
  469. package/dist/work-product/route.d.ts +88 -0
  470. package/dist/work-product/service.d.ts +123 -0
  471. package/dist/work-product/tools.d.ts +144 -0
  472. package/dist/{types-CCeYywdS.d.ts → work-product/types.d.ts} +29 -31
  473. package/dist/work-product-react/index.d.ts +19 -8
  474. package/dist/workspace-react/index.d.ts +8 -11
  475. package/package.json +5 -4
  476. package/dist/agent-session-controls-CmlXwp_H.d.ts +0 -384
  477. package/dist/apply-6wlMOLf8.d.ts +0 -280
  478. package/dist/attachment-validation-BfJDBU1g.d.ts +0 -261
  479. package/dist/budget-BOucfcb_.d.ts +0 -142
  480. package/dist/values-C7RidJuI.d.ts +0 -156
@@ -1,638 +1,30 @@
1
1
  /**
2
- * The classifier for turns that FAIL BY RETURNING SUCCESS.
3
- *
4
- * Every failure this module names shipped to a customer with HTTP 200, no
5
- * thrown error, and no log line anyone read. Three were measured in production
6
- * in a single week:
7
- *
8
- * - a turn settled `{"outcome":{"type":"completed"},"finalText":"",
9
- * "tokenUsage":{"outputTokens":0}}` the customer saw a blank bubble;
10
- * - six `submit_proposal` tool calls collapsed into ONE whose arguments were
11
- * a 1,652-character non-JSON string, so zero proposals persisted and
12
- * nothing errored (agent-runtime #626);
13
- * - a thread took 255 user messages over 17 days and produced 2 replies,
14
- * both of them error text.
15
- *
16
- * A conventional health check cannot see any of these, because it probes
17
- * DEPENDENCIES (is the sandbox reachable, is the router up) and every one of
18
- * these failures happens with all dependencies green. This classifier probes
19
- * the OUTCOME instead.
20
- *
21
- * It is deliberately pure and structural: it reads a settled turn's own
22
- * projection, so the SAME function judges a live turn through the
23
- * `/chat-routes` lifecycle seam and a historical row read back out of the
24
- * store during a sweep. One definition of "silently broken", two call sites.
25
- */
26
- /** How loudly a reason should be routed. `critical` means a customer got
27
- * nothing usable; `warning` means the turn degraded but still produced
28
- * something a human could read. */
29
- type TurnHealthSeverity = 'critical' | 'warning';
30
- /** One specific way a turn returned success while failing.
31
- *
32
- * Each variant carries the evidence that identified it, so an alert can name
33
- * the offending value instead of asserting a verdict the reader has to take
34
- * on faith. */
35
- type TurnHealthReason =
36
- /** Settled without error and produced nothing a user can read: no text, and
37
- * no artifact part (file/image/work-product/plan/interaction). This is the
38
- * verbatim blank-completion capture. */
39
- {
40
- kind: 'empty_completion';
41
- outputTokens: number | null;
42
- partCount: number;
43
- durationMs?: number;
44
- }
45
- /** A tool call whose arguments never parsed. The engine surfaces unparseable
46
- * arguments as a RAW STRING rather than throwing, so the call is neither
47
- * dropped nor errored — it silently does nothing. Detecting a string-typed
48
- * tool input that fails `JSON.parse` is the exact fingerprint of the
49
- * index-less parallel-tool-call collapse. */
50
- | {
51
- kind: 'malformed_tool_call';
52
- tool: string;
53
- inputLength: number;
54
- /** Leading characters of the offending input, for the alert body. */
55
- sample: string;
56
- }
57
- /** A tool call that never reached a terminal state carrying output. The call
58
- * was issued and then simply produced no effect. */
59
- | {
60
- kind: 'tool_call_no_effect';
61
- tool: string;
62
- status: string;
63
- }
64
- /** The turn failed outright. Not silent by itself — but it becomes silent
65
- * the moment nothing is watching, which is how 16 days of
66
- * `TANGLE_HUB_URL is required` reached customers unnoticed. */
67
- | {
68
- kind: 'turn_failed';
69
- reason: string;
70
- }
71
- /** A tool call the harness REJECTED, settled as `completed`.
72
- *
73
- * Found live in legal-agent production, and missed by every other rule here:
74
- * the model called `submit_proposal`, the harness answered "Model tried to
75
- * call unavailable tool 'submit_proposal'", and the part persisted as
76
- * `{"tool":"invalid","state":{"status":"completed","input":{"error":"…"}}}`.
77
- *
78
- * Status is `completed`, the arguments parse cleanly, and the turn has text —
79
- * so the blank-completion, malformed-argument and no-effect rules all pass it.
80
- * Six deliverables were requested and silently discarded while the product
81
- * reported success six times.
82
- *
83
- * Detected structurally, on the presence of an `error` in the settled state
84
- * rather than on any harness's name for a rejected call — `invalid` is one
85
- * harness's convention and must not be baked into the shell. */
86
- | {
87
- kind: 'tool_call_rejected';
88
- /** The tool the model was trying to reach, when the payload names it. */
89
- tool: string;
90
- error: string;
91
- }
92
- /** The turn was answered without the model ever running — a pre-producer gate
93
- * short-circuited and returned the product's own response.
94
- *
95
- * Reported as a `warning`, never `critical`: gating an unready turn is a
96
- * legitimate design (an intake flow SHOULD answer before spending a model
97
- * call). What is pathological is the RATE, which only the caller's own
98
- * threshold can judge — so this variant exists to be COUNTED, and alerting
99
- * on it is opt-in. It is the per-turn evidence behind a dead tool surface:
100
- * a gate that answers every turn means the agent never runs at all. */
101
- | {
102
- kind: 'answered_without_model';
103
- }
104
- /** The detector could not read this turn.
105
- *
106
- * Every part carried a type outside the vocabulary this classifier
107
- * understands — which is what field-level encryption at rest looks like from
108
- * the outside (tax-agent persists `{"type":"__encrypted_parts__"}`, its own
109
- * convention, and 32 of its 129 assistant rows are exactly that).
110
- *
111
- * This exists because the alternative is the bug this whole module hunts.
112
- * An unreadable row has no text, no artifact and no tool part, so every
113
- * other rule here would happily conclude "nothing wrong" — a detector
114
- * reporting health from data it cannot see. Blindness is a finding, not a
115
- * pass, so it gets its own reason and its own counter. */
116
- | {
117
- kind: 'unreadable_turn';
118
- partTypes: string[];
119
- };
120
- /** A settled turn, in the narrowest shape both call sites can supply.
121
- *
122
- * Structural on purpose: the lifecycle seam supplies `finalText`/`usage`, a
123
- * store sweep supplies `content`/`parts` read back from a row, and neither
124
- * has to import the other's types. */
125
- interface TurnOutcomeInput {
126
- /** The turn's final assistant text. */
127
- finalText?: string | null;
128
- /** The persisted assistant parts. Untyped by design — a sweep reads these
129
- * out of a JSON column and must not be forced to validate them first. */
130
- parts?: readonly unknown[] | null;
131
- /** Output tokens, when the caller has usage. `null`/absent is unknown, which
132
- * is NOT the same as zero and is never treated as evidence. */
133
- outputTokens?: number | null;
134
- /** Set when the turn surfaced a terminal error event. */
135
- failed?: boolean;
136
- failureReason?: string | null;
137
- durationMs?: number;
138
- /** Set when a pre-producer gate answered this turn and the model never ran.
139
- * Supplied by `/chat-routes`' lifecycle seam, which stamps `gated` on the
140
- * completion it now fires for a `contextGate` short-circuit. */
141
- gated?: boolean;
142
- }
143
- /** The verdict for one turn. `healthy` is exactly `reasons.length === 0`, kept
144
- * as a field so callers read intent rather than an array length. */
145
- interface TurnHealthVerdict {
146
- healthy: boolean;
147
- severity: TurnHealthSeverity | null;
148
- reasons: TurnHealthReason[];
149
- /** How many tool parts this turn carried.
150
- *
151
- * Zero is NOT a per-turn defect — plenty of good turns answer from context
152
- * without touching a tool, and paging on each one would be pure noise. It is
153
- * reported so a WINDOW can be judged: a product whose deliverable is tool
154
- * output and which produced zero tool calls across every turn in the
155
- * lookback has a dead tool surface, and that is the shape no per-turn rule
156
- * can see.
157
- *
158
- * Only meaningful alongside {@link interpretedParts} > 0. Zero tool calls
159
- * read off a row that persisted NO parts is not an observation about the
160
- * tool surface — it is the absence of one. */
161
- toolCalls: number;
162
- /** True when nothing about this turn could be judged — no interpretable part
163
- * AND no visible text. Callers MUST exclude these from any healthy/unhealthy
164
- * ratio, because counting an unreadable turn as healthy is how a detector
165
- * reports green on data it never read. */
166
- unreadable: boolean;
167
- /** False when this turn carried parts that could not be interpreted.
168
- *
169
- * Separate from {@link unreadable} because the two blindnesses have
170
- * different consequences, and production has a row that is one but not the
171
- * other: tax-agent persists CIPHERTEXT as `content` alongside an encrypted
172
- * `parts` blob, so the turn plainly delivered something (there is text) while
173
- * its tool calls are completely invisible.
174
- *
175
- * Any conclusion ABOUT TOOLS — above all the dead-tool-surface verdict — may
176
- * only be drawn over turns where this is true. Reading "no tool parts" off an
177
- * encrypted blob and declaring the tool surface dead would be the same
178
- * crime as declaring it healthy: a finding asserted from data never read. */
179
- partsReadable: boolean;
180
- /** The part types that could not be interpreted. Empty when
181
- * {@link partsReadable}. Named in the alert so a reader can see EXACTLY what
182
- * the detector was blind to instead of taking "unreadable" on faith. */
183
- opaquePartTypes: string[];
184
- /** How many parts this module actually READ (text, artifact, tool, or a known
185
- * non-output kind).
186
- *
187
- * The third blindness, and the one that shipped a false page. `partsReadable`
188
- * only says nothing was *uninterpretable*; a row that persisted NO parts at
189
- * all satisfies that vacuously. Production: 97 of tax-agent's 156 assistant
190
- * rows predate parts persistence entirely and store `[]`, and reading "zero
191
- * tool calls" off them raised a critical `dead_tool_surface` against a
192
- * product whose own `turn_events` table holds 243 `tool_call` frames.
193
- *
194
- * So a tool verdict requires BOTH `partsReadable` AND this being > 0 —
195
- * evidence that was read, not merely evidence that failed to be unreadable. */
196
- interpretedParts: number;
197
- }
198
- /**
199
- * Judge one settled turn.
200
- *
201
- * Never throws: a malformed `parts` blob is a thing this function REPORTS on,
202
- * so it must not be a thing it dies on. Telemetry that can crash the turn it
203
- * measures is worse than no telemetry.
204
- */
205
- declare function classifyTurnOutcome(input: TurnOutcomeInput): TurnHealthVerdict;
206
- /** One-line human summary of a reason, for an alert body. */
207
- declare function describeReason(reason: TurnHealthReason): string;
208
-
209
- /**
210
- * Where a silent-failure verdict GOES.
211
- *
212
- * The detection half is worthless without this half. Every failure this module
213
- * finds was already visible in the database the whole time — 255 unanswered
214
- * messages sat in a table for 17 days. What was missing was not the data, it
215
- * was delivery to a human who had not thought to look.
216
- *
217
- * So the sink is a seam, not a channel: the product supplies the transport,
218
- * and agent-app ships the two shapes the fleet already has credentials for
219
- * (an ops webhook, and stderr). No new channel is invented here.
220
- */
221
-
222
- /** One deliverable alert. */
223
- interface TurnHealthAlert {
224
- /** Which product raised it (`projectId`). Alerts from four products land in
225
- * one channel, so this is what makes the message actionable. */
226
- product: string;
227
- severity: TurnHealthSeverity;
228
- /** Stable grouping key. Throttling is keyed on this, so it must NOT contain
229
- * a turn id or a timestamp or every alert is unique and nothing dedupes. */
230
- key: string;
231
- title: string;
232
- /** Human-readable lines. */
233
- details: string[];
234
- /** Structured payload for a machine consumer. */
235
- data?: Record<string, unknown>;
236
- at: number;
237
- }
238
- /** Deliver an alert. Implementations MUST NOT throw — see
239
- * {@link createGuardedAlertSink}. */
240
- interface AlertSink {
241
- deliver(alert: TurnHealthAlert): Promise<void>;
242
- }
243
- /** Build the alert for a set of reasons found on one turn. */
244
- declare function turnAlert(input: {
245
- product: string;
246
- severity: TurnHealthSeverity;
247
- reasons: TurnHealthReason[];
248
- threadId?: string;
249
- turnId?: string;
250
- model?: string;
251
- at?: number;
252
- }): TurnHealthAlert;
253
- /** Minimal structural fetch, so this module has no lib-dom dependency and can
254
- * be driven by a fake in tests. */
255
- type FetchLike = (url: string, init: {
256
- method: string;
257
- headers: Record<string, string>;
258
- body: string;
259
- }) => Promise<{
260
- ok: boolean;
261
- status: number;
262
- text?(): Promise<string>;
263
- }>;
264
- /**
265
- * POST to an incoming webhook in the Slack message format.
266
- *
267
- * Chosen because the org already runs one (`SLACK_OPS_WEBHOOK_URL`) and
268
- * gtm-agent's outbound webhook code already speaks this exact shape — the
269
- * instruction was to route somewhere humans already look, not to stand up a
270
- * new channel. Discord and most log drains accept the same `{text}` body.
271
- */
272
- declare function createWebhookAlertSink(options: {
273
- webhookUrl: string;
274
- fetchImpl?: FetchLike;
275
- }): AlertSink;
276
- /**
277
- * POST to Slack `chat.postMessage` with a bot token.
278
- *
279
- * This is the transport the org actually has. A survey of the four product
280
- * repos found NO ops alert path of any kind — no incoming webhook, no pager, no
281
- * notifier — which is the mechanical reason a 17-day outage never reached a
282
- * human. What does exist is a Slack bot token in the shared secrets store, and
283
- * `@tangle-network/agent-integrations` already speaks this exact API, so this
284
- * routes alerts through the channel the org runs rather than standing up a new
285
- * one.
286
- *
287
- * Slack answers `200 OK` with `{"ok": false, "error": "..."}` for an invalid
288
- * token or channel, so the body is checked and not just the status — a
289
- * transport that reports success on a rejected post would make the alerter
290
- * itself a silent failure.
291
- */
292
- declare function createSlackBotAlertSink(options: {
293
- botToken: string;
294
- channel: string;
295
- fetchImpl?: FetchLike;
296
- }): AlertSink;
297
- /** stderr sink. The zero-config fallback so a product that has not yet been
298
- * given a webhook still emits something a log search can find. */
299
- declare function createConsoleAlertSink(log?: (message: string) => void): AlertSink;
300
- /** Fan out to several sinks. One failing transport must not stop the others. */
301
- declare function createMultiAlertSink(sinks: readonly AlertSink[]): AlertSink;
302
- /** Records the last time a key was alerted on. A product backs this with KV,
303
- * D1, or a Durable Object; the in-memory default is correct for a sweep that
304
- * runs as a single cron invocation. */
305
- interface AlertThrottleStore {
306
- lastSentAt(key: string): Promise<number | null>;
307
- markSent(key: string, at: number): Promise<void>;
308
- }
309
- /** Process-local throttle store. */
310
- declare function createMemoryThrottleStore(): AlertThrottleStore;
311
- /**
312
- * Collapse repeats of the same `key` inside `windowMs`.
313
- *
314
- * Deliberately re-alerts once per window rather than going silent after the
315
- * first: an incident that is still burning must keep saying so. Going quiet
316
- * after one message is how a 17-day outage stays invisible after someone
317
- * dismisses the first notification.
318
- */
319
- declare function createThrottledAlertSink(inner: AlertSink, options: {
320
- windowMs: number;
321
- store?: AlertThrottleStore;
322
- }): AlertSink;
323
- /**
324
- * Swallow transport errors so telemetry can never fail the turn it measures.
325
- *
326
- * Use this at the LIVE lifecycle call site only. A sweep should let the error
327
- * surface, because a sweep that cannot deliver has done nothing at all and its
328
- * cron run should go red.
329
- */
330
- declare function createGuardedAlertSink(inner: AlertSink, onError?: (error: unknown) => void): AlertSink;
331
-
332
- /**
333
- * The LIVE half: judge each turn the moment it settles.
334
- *
335
- * This adds no control flow. `createChatTurnRoutes` already exposes a
336
- * `lifecycle` seam that fires exactly one of `onTurnComplete`/`onTurnError`
337
- * after a turn settles, and already swallows hook errors so telemetry cannot
338
- * fail a turn. That seam was shipped and then wired by nobody, which is a fair
339
- * description of why the outage lasted 17 days. This function fills it.
340
- *
341
- * The shape is declared structurally rather than imported from
342
- * `/chat-routes`, so `/turn-health` stays free of the server chat vertical and
343
- * can be used by any turn driver that reports the same three moments.
344
- */
345
-
346
- /** Structural mirror of `/chat-routes`' `ChatTurnLifecycle` complete payload. */
347
- interface TurnHealthCompleteInfo {
348
- finalText: string;
349
- usage?: {
350
- outputTokens?: number | null;
351
- } | null;
352
- durationMs: number;
353
- threadId?: string;
354
- turnStreamId?: string;
355
- executionId?: string;
356
- /** `/chat-routes` sets this when a `contextGate` short-circuited the turn and
357
- * the producer never ran. */
358
- gated?: boolean;
359
- }
360
- /** Structural mirror of the lifecycle error payload. */
361
- interface TurnHealthErrorInfo {
362
- error: unknown;
363
- durationMs: number;
364
- threadId?: string;
365
- turnStreamId?: string;
366
- executionId?: string;
367
- }
368
- /** What {@link createTurnHealthLifecycle} returns — assignable to
369
- * `createChatTurnRoutes`' `lifecycle` option. */
370
- interface TurnHealthLifecycle {
371
- onTurnComplete(info: TurnHealthCompleteInfo): Promise<void>;
372
- onTurnError(info: TurnHealthErrorInfo): Promise<void>;
373
- }
374
- interface TurnHealthLifecycleOptions {
375
- /** Names the product in every alert. */
376
- product: string;
377
- sink: AlertSink;
378
- /** Called for every verdict, healthy or not — the hook for a counter or a
379
- * metrics push. Alerts are for humans; this is for graphs. */
380
- onVerdict?(verdict: {
381
- product: string;
382
- healthy: boolean;
383
- kinds: string[];
384
- durationMs: number;
385
- }): void;
386
- /** Page when a turn was answered by a gate instead of the model.
387
- *
388
- * Default `false`, and the default is the honest one: gating is a legitimate
389
- * design and a product that gates its intake would otherwise page on every
390
- * healthy turn. Whether the rate is pathological is domain knowledge, so it
391
- * stays a product decision — the verdict is ALWAYS reported through
392
- * {@link TurnHealthLifecycleOptions.onVerdict} so a counter can watch the
393
- * rate even when nobody is paged. */
394
- alertOnGatedTurn?: boolean;
395
- }
396
- /**
397
- * Build the lifecycle hooks that page on a turn which succeeded at nothing.
398
- *
399
- * The live lane sees `finalText` and usage but not the persisted parts, so it
400
- * catches the blank-completion and hard-failure shapes immediately. The
401
- * parts-dependent shapes (a tool call whose arguments never parsed, a tool
402
- * call that left no effect) are caught by {@link sweepSilentFailures}, which
403
- * reads what was actually written to the store — the honest place to ask
404
- * whether an effect persisted.
405
- */
406
- declare function createTurnHealthLifecycle(options: TurnHealthLifecycleOptions): TurnHealthLifecycle;
407
-
408
- /**
409
- * The SWEEP half: ask the store what it has been quietly accumulating.
410
- *
411
- * A live per-turn hook cannot see the failure that matters most, because the
412
- * worst outage produced NO turns at all to hook: gtm-agent took 9–21 user
413
- * messages a day for sixteen straight days and wrote zero real assistant
414
- * replies. Nothing crashed on a schedule; the product simply stopped
415
- * answering. The only thing that could have noticed is something that
416
- * periodically counts what arrived against what was answered.
417
- *
418
- * That is this. It runs on a cron, reads the shared `/chat-store` schema, and
419
- * pages when the ratio breaks.
420
- *
421
- * The queries live HERE and not in each product because all four products
422
- * (gtm, tax, legal, workcomp) persist to the same `message`/`thread` tables —
423
- * four copies of this cron is exactly the duplication the repo's engine/shell
424
- * rule exists to prevent.
425
- */
426
-
427
- /** A thread that has taken user messages with no reply since. */
428
- interface UnansweredThread {
429
- threadId: string;
430
- /** User messages newer than the newest real assistant reply. */
431
- pendingMessages: number;
432
- /** Age of the OLDEST unanswered user message, in ms. */
433
- oldestAgeMs: number;
434
- }
435
- /** A persisted assistant row, as the sweep needs to judge it. */
436
- interface PersistedTurnRow {
437
- id: string;
438
- threadId: string;
439
- content: string;
440
- /** Raw `parts` column. A JSON string or an already-parsed array; the sweep
441
- * accepts both because D1 drivers differ. */
442
- parts: unknown;
443
- outputTokens?: number | null;
444
- model?: string | null;
445
- createdAt: number;
446
- }
447
- /** What the sweep needs from a store. A product on a non-standard schema
448
- * implements these two reads; everything else is shared. */
449
- interface TurnHealthSource {
450
- findUnansweredThreads(input: {
451
- minAgeMs: number;
452
- /** Ignore user messages older than this. See {@link SweepOptions.maxAgeMs}. */
453
- maxAgeMs: number;
454
- now: number;
455
- }): Promise<UnansweredThread[]>;
456
- listRecentAssistantTurns(input: {
457
- sinceMs: number;
458
- now: number;
459
- limit: number;
460
- }): Promise<PersistedTurnRow[]>;
461
- }
462
- interface SweepOptions {
463
- product: string;
464
- source: TurnHealthSource;
465
- sink: AlertSink;
466
- /** A user message must go unanswered this long before it counts. Guards
467
- * against alerting on a turn that is simply still streaming. Default 15 min. */
468
- minAgeMs?: number;
469
- /**
470
- * A user message OLDER than this is abandoned, not unanswered — it stops
471
- * counting. Default 7 days.
472
- *
473
- * Without this bound the sweep is worse than useless. gtm-agent's table
474
- * holds 384 unanswered messages whose oldest is 1,676 h (70 days) old;
475
- * paging hourly on a backlog nobody will ever reply to is exactly how an
476
- * alert channel gets muted, and a muted channel is the state this module
477
- * exists to escape. The alert has to mean "something broke recently".
478
- */
479
- maxAgeMs?: number;
480
- /** How far back to judge settled turns. Default 24 h. */
481
- lookbackMs?: number;
482
- /** Cap on rows judged per sweep. Default 500. */
483
- limit?: number;
484
- /** Fraction of recent turns allowed to be silently broken before paging.
485
- * Default 0.05 — the measured blank-completion rate on the tax tool surface
486
- * was 12.2%, so 5% separates a real regression from noise. */
487
- emptyRateThreshold?: number;
488
- /** Absolute floor: never page on a rate computed from fewer turns than this. */
489
- minTurnsForRate?: number;
490
- /** Declare that this product's deliverable comes from TOOL calls, which
491
- * switches on the dead-tool-surface detector.
492
- *
493
- * Opt-in because only the product knows: a copilot that answers from context
494
- * is perfectly healthy with zero tool calls, while an agent whose entire job
495
- * is to file, draft, or submit something is broken the moment its tool
496
- * surface goes quiet — and broken INVISIBLY, because every turn still
497
- * returns fluent prose and HTTP 200.
498
- *
499
- * This is the fourth failure shape, and the only one no per-turn rule can
500
- * see.
501
- *
502
- * The verdict is drawn ONLY over turns whose parts were present and
503
- * readable. An earlier revision counted rows that stored no parts, and the
504
- * production example this comment used to cite was that bug rather than a
505
- * finding: tax-agent's 97 parts-less rows all predate its parts persistence
506
- * (they stop at 2026-07-17T02:20Z, the encrypted rows start 02:58Z), while
507
- * the same database's `turn_events` table holds 243 `tool_call` frames over
508
- * 15 turns. The tool surface was never dead; the rows were empty. */
509
- expectsToolCalls?: boolean;
510
- /** Turns needed before a dead tool surface is called. Default 10. */
511
- minTurnsForToolSurface?: number;
512
- /**
513
- * Make an at-rest parts encoding readable, so this sweep can judge a product
514
- * that does not store parts in the clear.
515
- *
516
- * Without it, a product that encrypts `parts` (tax-agent wraps the whole
517
- * array in one `__encrypted_parts__` part) is permanently UNMEASURABLE by the
518
- * tool-surface rule: every row is opaque, so the honest verdict is "cannot
519
- * certify" forever. This seam is how such a product gets a real verdict
520
- * instead of permanent blindness — the sweep stays domain-free and the
521
- * product supplies the decoder.
522
- *
523
- * Return the decoded parts value (it is parsed exactly like a stored one).
524
- * Returning `null`/`undefined` or THROWING leaves the row's stored value in
525
- * place, so a decoder that fails reports the row as opaque. It must never
526
- * report success as an empty array: that manufactures the exact absent-parts
527
- * blindness this module now refuses to draw conclusions from.
528
- */
529
- decodeParts?: (raw: unknown, row: PersistedTurnRow) => Promise<unknown> | unknown;
530
- now?: number;
531
- }
532
- /** What the sweep found. Returned as well as alerted, so a cron can log it and
533
- * a test can assert on it. */
534
- interface SweepResult {
535
- product: string;
536
- unansweredThreads: number;
537
- pendingUserMessages: number;
538
- oldestUnansweredMs: number;
539
- turnsJudged: number;
540
- unhealthyTurns: number;
541
- emptyCompletions: number;
542
- malformedToolCalls: number;
543
- toolCallsWithoutEffect: number;
544
- /** Tool calls the harness rejected while settling them as `completed`. */
545
- rejectedToolCalls: number;
546
- /** Turns carrying at least one tool part. */
547
- turnsWithToolCalls: number;
548
- /** Total tool parts across the window. */
549
- toolCalls: number;
550
- /** Turns the classifier could not interpret at all (encrypted at rest, or a
551
- * part vocabulary this module does not know). These are EXCLUDED from
552
- * `turnsJudged`-based rates — a rate computed over rows nobody could read is
553
- * a fabricated number. */
554
- unreadableTurns: number;
555
- /** Turns whose PARTS could not be interpreted. A superset of
556
- * {@link unreadableTurns} (a row can have readable text and opaque parts).
557
- * No tool verdict is drawn over these. */
558
- opaquePartsTurns: number;
559
- /** Turns that persisted NO parts at all. Distinct from
560
- * {@link opaquePartsTurns}: nothing failed to parse, there was simply
561
- * nothing there. Also excluded from every tool verdict. */
562
- noPartsTurns: number;
563
- /** Turns a tool verdict may actually be drawn from — parts present AND
564
- * interpretable. The denominator behind `dead_tool_surface`. */
565
- toolReadableTurns: number;
566
- alerts: TurnHealthAlert[];
567
- }
568
- declare const SHELL_ERROR_REPLY_PREFIXES: readonly string[];
569
- /**
570
- * Run one sweep and deliver whatever it finds.
571
- *
572
- * Errors from the sink are NOT swallowed here (unlike the live lane): a sweep
573
- * that could not deliver has accomplished nothing, and its cron invocation
574
- * should go red rather than report a clean run.
575
- */
576
- declare function sweepSilentFailures(options: SweepOptions): Promise<SweepResult>;
577
- /** Minimal structural D1 contract (Cloudflare's `D1Database` satisfies it). */
578
- interface D1LikeForHealth {
579
- prepare(sql: string): {
580
- bind(...values: unknown[]): {
581
- all<T = Record<string, unknown>>(): Promise<{
582
- results: T[];
583
- }>;
584
- };
585
- };
586
- }
587
- /**
588
- * The sweep source for products on the canonical `/chat-store` tables.
589
- *
590
- * "Answered" deliberately means an assistant row with NON-EMPTY content. A
591
- * blank assistant row is what a broken turn writes, so counting it as an
592
- * answer would let the exact failure being hunted mark itself resolved. That
593
- * single predicate is the difference between this catching the gtm outage and
594
- * sleeping through it — during those sixteen days the table was NOT empty.
595
- *
596
- * The query deliberately does NOT join the thread table. Products do not all
597
- * keep one: tax-agent's `thread` table holds zero rows because it groups by
598
- * its own `tax_sessions`, and an inner join against it silently reported "0
599
- * unanswered threads, healthy" while 18 real messages sat unanswered. A
600
- * detector that reports healthy because its join found nothing is the same
601
- * bug class it was built to catch.
602
- */
603
- declare function createD1TurnHealthSource(db: D1LikeForHealth, options?: {
604
- messageTable?: string;
605
- threadTable?: string;
606
- /**
607
- * Content prefixes that mark an assistant row as an ERROR SURFACE rather
608
- * than an answer. A row matching one of these stops counting as a reply,
609
- * so the thread keeps reporting as unanswered.
610
- *
611
- * This exists because the obvious rule — "an assistant row with non-empty
612
- * content is an answer" — is wrong in the exact case that matters. On
613
- * 2026-07-27 gtm-agent's newest assistant row read:
614
- *
615
- * "The sandbox model stream stopped before a clean completion.
616
- * Error: All 2 model(s) failed. gpt-5-mini: TANGLE_HUB_URL is required …"
617
- *
618
- * 246 characters of well-formed prose that answers nothing. Counting it
619
- * marks a dead product healthy — the same failure-returning-success shape
620
- * this module exists to catch, recursing into the detector itself.
621
- *
622
- * There is no schema-level way to recognise it: `output_tokens IS NULL`
623
- * looked promising until legal-agent showed 22 of 25 GENUINE replies with
624
- * null usage — it would have reported a working product broken.
625
- *
626
- * Defaults to {@link SHELL_ERROR_REPLY_PREFIXES}, the openers agent-app
627
- * ITSELF writes in `createSandboxChatProducer`. Those are not domain —
628
- * this package composed them, so this package is what must recognise
629
- * them, and every product on the shared producer is correct with no
630
- * configuration. Pass your own list to ADD product-specific error prose;
631
- * pass `[]` to disable the rule.
632
- *
633
- * Prefixes are bound as query parameters, never interpolated.
634
- */
635
- errorReplyPrefixes?: readonly string[];
636
- }): TurnHealthSource;
637
-
638
- export { type AlertSink, type AlertThrottleStore, type D1LikeForHealth, type FetchLike, type PersistedTurnRow, SHELL_ERROR_REPLY_PREFIXES, type SweepOptions, type SweepResult, type TurnHealthAlert, type TurnHealthCompleteInfo, type TurnHealthErrorInfo, type TurnHealthLifecycle, type TurnHealthLifecycleOptions, type TurnHealthReason, type TurnHealthSeverity, type TurnHealthSource, type TurnHealthVerdict, type TurnOutcomeInput, type UnansweredThread, classifyTurnOutcome, createConsoleAlertSink, createD1TurnHealthSource, createGuardedAlertSink, createMemoryThrottleStore, createMultiAlertSink, createSlackBotAlertSink, createThrottledAlertSink, createTurnHealthLifecycle, createWebhookAlertSink, describeReason, sweepSilentFailures, turnAlert };
2
+ * `/turn-health` make a failure that returns success impossible to miss.
3
+ *
4
+ * Conventional health checks probe DEPENDENCIES and answer "is the sandbox
5
+ * reachable, is the router up". Every outage measured in this fleet happened
6
+ * with all dependencies green:
7
+ *
8
+ * - gtm-agent answered 0 of ~250 user messages for sixteen consecutive days
9
+ * while `/api/health` returned 200 the entire time;
10
+ * - turns settled `completed` with `finalText: ""` and `outputTokens: 0`;
11
+ * - six tool calls collapsed into one unparseable call, persisting nothing,
12
+ * raising nothing.
13
+ *
14
+ * This module probes the OUTCOME instead, in two lanes that catch different
15
+ * things:
16
+ *
17
+ * - LIVE {@link createTurnHealthLifecycle} fills the `lifecycle` seam
18
+ * `createChatTurnRoutes` already exposes, and pages the moment a turn
19
+ * settles having delivered nothing.
20
+ * - SWEEP — {@link sweepSilentFailures} runs on a cron and counts what
21
+ * arrived against what was answered. It is the only lane that can see an
22
+ * outage which produces no turns at all.
23
+ *
24
+ * Server-only, subpath-only. The alert transport is a seam; the shipped
25
+ * implementations target the ops webhook the org already runs.
26
+ */
27
+ export { classifyTurnOutcome, describeReason, type TurnHealthReason, type TurnHealthSeverity, type TurnHealthVerdict, type TurnOutcomeInput, } from './classify.js';
28
+ export { createTurnHealthLifecycle, type TurnHealthCompleteInfo, type TurnHealthErrorInfo, type TurnHealthLifecycle, type TurnHealthLifecycleOptions, } from './lifecycle.js';
29
+ export { type AlertSink, type AlertThrottleStore, createConsoleAlertSink, createGuardedAlertSink, createMemoryThrottleStore, createMultiAlertSink, createSlackBotAlertSink, createThrottledAlertSink, createWebhookAlertSink, type FetchLike, type TurnHealthAlert, turnAlert, } from './sink.js';
30
+ export { createD1TurnHealthSource, type D1LikeForHealth, SHELL_ERROR_REPLY_PREFIXES, type PersistedTurnRow, sweepSilentFailures, type SweepOptions, type SweepResult, type TurnHealthSource, type UnansweredThread, } from './sweep.js';