@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
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Model failover for a STREAMING turn.
3
+ *
4
+ * `/model-resolution`'s `runWithModelFailover` already owns the policy: walk a
5
+ * chain, classify a resolved-or-thrown signal, re-throw a non-outage failure
6
+ * immediately, and carry the attempt trail. This module does NOT re-implement
7
+ * any of that — it composes it. What it adds is the one thing a whole-call
8
+ * primitive cannot express, because a stream fails PARTWAY:
9
+ *
10
+ * **A turn may only fail over before its first client-visible byte.**
11
+ *
12
+ * Once a text delta, tool call, or ask has reached the browser (and the
13
+ * persisted transcript), restarting on another model would duplicate the
14
+ * answer. So each attempt is probed: open the stream, pull events into a small
15
+ * buffer, and decide at the first meaningful event whether this model is
16
+ * serving. Committing replays the buffer and hands the live iterator through;
17
+ * abandoning discards the buffer (those events describe the dead model's
18
+ * session — including its `step-finish` usage, which must never be billed) and
19
+ * lets `runWithModelFailover` walk to the next model.
20
+ *
21
+ * The classification itself is `isUpstreamUnavailable` verbatim, so this path
22
+ * inherits the measured facts from the 2026-07-25 outage — above all that an
23
+ * outage is NOT always a thrown error: the sandbox RESOLVES a terminal `error`
24
+ * event carrying `{ errorCode: 'provider_inference_unavailable' }`, which a
25
+ * classifier inspecting only `catch` misses entirely. That resolved shape is
26
+ * the whole reason the breakage went unnoticed, so it is classified here first.
27
+ *
28
+ * Conservative by construction:
29
+ * - A terminal failure that is NOT an outage (400, bad schema, content filter)
30
+ * COMMITS rather than failing over — it surfaces to the user exactly as it
31
+ * does today. Those fail identically on every model; walking the chain would
32
+ * only multiply latency and spend to reach the same error.
33
+ * - A clean stream that produced nothing NEVER walks the chain. An empty answer
34
+ * is not evidence of a dead upstream, and a silent re-roll on another model is
35
+ * precisely the unattributable downgrade this work exists to prevent. Opt-in
36
+ * `emptyTurnRetries` re-runs the SAME model instead, which leaves attribution
37
+ * untouched — measured on production 2026-07-27, an empty turn is a transient
38
+ * platform flake that a same-model re-run recovers (8 hard cases: 7/8
39
+ * delivered on the first pass, 8/8 with one re-run, at a cost of 1 extra turn
40
+ * in 9). Default `0`, so the behavior is unchanged unless a product asks.
41
+ * - A responsive chain of length 1 costs no extra call or latency and remains
42
+ * byte-identical to no failover. A silent chain is now deliberately bounded.
43
+ */
44
+ import { ModelFailoverExhaustedError, type ModelFailoverAttempt } from '../model-resolution/failover';
45
+ /**
46
+ * True when `event` puts content in front of the user (or in the persisted
47
+ * transcript), making a restart on another model unsafe.
48
+ *
49
+ * Deliberately an allow-list of KNOWN-INERT types rather than a deny-list: an
50
+ * unrecognized event commits. Getting this wrong in the safe direction costs a
51
+ * missed failover; getting it wrong the other way duplicates a user's answer.
52
+ */
53
+ export declare function isCommittingSandboxEvent(event: unknown): boolean;
54
+ /**
55
+ * Condense an abandoned attempt's raw failure text into something safe to show
56
+ * a customer in the transcript.
57
+ *
58
+ * Measured on the live router 2026-07-27 19:40 UTC: an edge 5xx arrives as
59
+ * Cloudflare's full HTML error PAGE, so the verbatim reason began
60
+ * `<!DOCTYPE html>\n<!--[if lt IE 7]> <html class="no-js ie6 oldie"…` and the
61
+ * fallback notice pasted 200 bytes of that markup into the answer the customer
62
+ * reads. The cause is worth stating; the markup is not.
63
+ *
64
+ * Only the DISPLAY string is condensed. The full text stays on
65
+ * `modelFailover.attempts[].reason` for the operator, so nothing is lost —
66
+ * this narrows what the customer sees, never what telemetry records.
67
+ */
68
+ export declare function summarizeFailoverReason(reason: string): string;
69
+ /** A terminal failure event, classified. `outage` decides failover vs surface. */
70
+ interface TerminalFailure {
71
+ outage: boolean;
72
+ reason: string;
73
+ code?: string;
74
+ }
75
+ /**
76
+ * Classify a terminal failure event. Returns `null` for any non-terminal event.
77
+ *
78
+ * The RESOLVED shape is checked first and deliberately: the sandbox reports an
79
+ * upstream outage by resolving `{ success: false, errorCode:
80
+ * 'provider_inference_unavailable' }` inside a terminal `error` event's `data`,
81
+ * never by throwing. Both `data` and the whole record are offered to
82
+ * `isUpstreamUnavailable` so a payload nested either way is caught.
83
+ */
84
+ export declare function classifyTerminalFailure(event: unknown): TerminalFailure | null;
85
+ /** Open the raw turn stream for one specific model. */
86
+ export type OpenModelStream = (args: {
87
+ model: string;
88
+ /** 1 for the preferred model, 2 for the first fallback, and so on. */
89
+ attempt: number;
90
+ /** Aborted when this attempt times out, is abandoned, or finishes. Forward
91
+ * this to `streamSandboxPrompt(..., { signal })` so a blocked transport is
92
+ * cancelled immediately rather than only receiving iterator.return(). */
93
+ signal: AbortSignal;
94
+ }) => AsyncIterable<unknown> | Promise<AsyncIterable<unknown>>;
95
+ /** Fired when a model is abandoned and the next one is about to be tried. */
96
+ export interface ModelFallbackInfo {
97
+ from: string;
98
+ to: string;
99
+ reason: string;
100
+ }
101
+ /** Define inputs for streaming a turn across a model failover chain */
102
+ export interface ModelFailoverStreamOptions {
103
+ /** Preferred model first, then fallbacks in descending preference. */
104
+ models: readonly string[];
105
+ open: OpenModelStream;
106
+ /**
107
+ * Maximum time to open/start one model's event source, including its first
108
+ * iterator pull. Default 120 seconds, matching the sandbox provisioning
109
+ * ceiling so cold infrastructure startup is bounded independently from
110
+ * provider inference.
111
+ */
112
+ openTimeoutMs?: number;
113
+ /**
114
+ * Hard deadline from the source's first lifecycle event to its first
115
+ * answer-bearing event. Default 60 seconds. Processing/lifecycle events do
116
+ * not commit the attempt and do not extend this deadline.
117
+ */
118
+ firstResponseTimeoutMs?: number;
119
+ /** Override the commit-point rule. Default {@link isCommittingSandboxEvent}. */
120
+ isCommitting?: (event: unknown) => boolean;
121
+ onFallback?: (info: ModelFallbackInfo) => void;
122
+ /**
123
+ * How many times to RE-RUN THE SAME MODEL when a turn completes having
124
+ * produced no assistant text at all. Default `0` — byte-identical to no
125
+ * retry.
126
+ *
127
+ * This is deliberately not a chain walk. Falling over to a different model
128
+ * on an empty answer is the unattributable downgrade this module refuses to
129
+ * do; re-running the SAME model changes nothing about attribution, because
130
+ * the model that serves is the model that was asked for.
131
+ *
132
+ * Bounded by the same commit rule as failover: only a turn whose ONLY
133
+ * committing event is a terminal receipt with no text is retried, so nothing
134
+ * that reached the user can ever be produced twice.
135
+ */
136
+ emptyTurnRetries?: number;
137
+ /** Fired when an empty turn is discarded and the same model re-run. */
138
+ onEmptyTurnRetry?: (info: EmptyTurnRetryInfo) => void;
139
+ log?: (message: string, meta?: Record<string, unknown>) => void;
140
+ }
141
+ /** One same-model re-run of a turn that completed with no assistant text. */
142
+ export interface EmptyTurnRetryInfo {
143
+ model: string;
144
+ /** 1 for the first re-run. */
145
+ retry: number;
146
+ /** How many re-runs remain after this one. */
147
+ remaining: number;
148
+ }
149
+ /** The failover-wrapped stream plus the attribution every consumer needs. */
150
+ export interface ModelFailoverStreamHandle {
151
+ events: AsyncGenerator<unknown, void, unknown>;
152
+ /** The model that actually served. `undefined` until the first pull resolves it. */
153
+ servingModel(): string | undefined;
154
+ /** Every model tried, in order, with the reason each was abandoned. */
155
+ attempts(): ModelFailoverAttempt[];
156
+ /** True when the preferred model did not serve — the attributability signal. */
157
+ usedFallback(): boolean;
158
+ }
159
+ /** Default ceiling for opening/starting one source through its first event. */
160
+ export declare const DEFAULT_MODEL_STREAM_OPEN_TIMEOUT_MS = 120000;
161
+ /** Default ceiling for the first answer-bearing event after the source's first event. */
162
+ export declare const DEFAULT_MODEL_FIRST_RESPONSE_TIMEOUT_MS = 60000;
163
+ /** Structured timeout codes surfaced by the producer on final exhaustion. */
164
+ export type ModelAttemptTimeoutCode = 'model_stream_open_timeout' | 'provider_first_response_timeout';
165
+ /** Every configured model was exhausted and the final one timed out. */
166
+ export declare class ModelFailoverTimeoutError extends ModelFailoverExhaustedError {
167
+ readonly code: ModelAttemptTimeoutCode;
168
+ readonly model: string;
169
+ readonly timeoutMs: number;
170
+ constructor(input: {
171
+ attempts: ModelFailoverAttempt[];
172
+ code: ModelAttemptTimeoutCode;
173
+ model: string;
174
+ timeoutMs: number;
175
+ });
176
+ }
177
+ /**
178
+ * Hard ceiling on same-model re-runs. A turn that comes back blank three times
179
+ * running is not a flake this can retry away, and each pass costs a full
180
+ * sandbox turn — so the budget is capped rather than trusted.
181
+ */
182
+ export declare const MAX_EMPTY_TURN_RETRIES = 3;
183
+ /**
184
+ * Coerce the caller's budget to a finite, bounded, non-negative integer.
185
+ *
186
+ * `Math.trunc(NaN)` is `NaN` and `retry >= NaN` is false for every `retry`, so
187
+ * a naive clamp turns a bad config value into a loop that opens sandbox streams
188
+ * until the worker dies. `Infinity` has the same shape. Both resolve to `0` —
189
+ * an unusable budget disables the retry rather than running unbounded.
190
+ */
191
+ export declare function resolveEmptyTurnRetries(value: number | undefined): number;
192
+ /**
193
+ * Wrap `open` in reactive model failover, streaming from the first model in
194
+ * `models` that reaches its commit point.
195
+ *
196
+ * Zero added latency on the happy path: the preferred model is opened first and,
197
+ * the moment it emits anything meaningful, its events flow straight through.
198
+ *
199
+ * @throws ModelFailoverTimeoutError when the final model times out,
200
+ * ModelFailoverExhaustedError when every model's upstream is down, and
201
+ * re-throws a non-outage error from the FIRST model without walking the
202
+ * chain (the latter behaviors are inherited from
203
+ * `runWithModelFailover`).
204
+ */
205
+ export declare function streamWithModelFailover(options: ModelFailoverStreamOptions): ModelFailoverStreamHandle;
206
+ export {};
@@ -0,0 +1,84 @@
1
+ /**
2
+ * `promoteAgentFilePart` — turn a harness-emitted `type:"file"` stream part
3
+ * into a store-backed {@link ChatAttachmentPart}. The harness hands back a URL
4
+ * pointing at bytes it produced (a `data:` URI, or a path inside the sandbox);
5
+ * nothing durable survives past the turn unless it is written into the
6
+ * product's store, the same way a user upload is. Typed outcomes throughout:
7
+ * every failure mode (unsupported scheme, no sandbox, oversize, store-write
8
+ * failure, malformed part) resolves to `{ succeeded: false, filename, reason }`
9
+ * rather than throwing past this boundary, so the caller folds a visible notice
10
+ * instead of losing the file silently.
11
+ *
12
+ * Storage-parameterized port of gtm-agent's `promote-file-parts.ts` with the
13
+ * refactor gtm never made: persistence goes through the injected
14
+ * {@link WriteAttachmentFn} (gtm hard-wired its vault writer), the path strategy
15
+ * is the injected `buildAttachmentPath` (neutral `uploads/agent/<date>/` default,
16
+ * no domain bucket taxonomy baked), the MIME map is an injectable hook, and the
17
+ * date segment reads an injectable clock. The idempotent `hash8(id ?? url ??
18
+ * filename)` naming is preserved so re-promoting the same source part resolves
19
+ * to the same path.
20
+ */
21
+ import { type SandboxExecChannel } from '../sandbox/binary-read';
22
+ import { type ChatAttachmentKind, type ChatAttachmentPart } from '../chat-store/parts';
23
+ import type { WriteAttachmentFn } from './attachment-store';
24
+ /** Default ceiling on a promoted file's raw (pre-encoding) byte size. */
25
+ export declare const PROMOTE_MAX_FILE_BYTES: number;
26
+ /** Define the structure for a raw file part with optional metadata and media type information */
27
+ export interface RawAgentFilePart {
28
+ type: 'file';
29
+ id?: string;
30
+ filename?: string;
31
+ /** AI-SDK-shaped parts carry the MIME type here… */
32
+ mediaType?: string;
33
+ /** …but OpenCode's native FilePart calls the same field `mime`. */
34
+ mime?: string;
35
+ url?: string;
36
+ }
37
+ /** Resolve the result of promoting a file part with success status and relevant data or error details */
38
+ export type PromoteFilePartResult = {
39
+ succeeded: true;
40
+ part: ChatAttachmentPart;
41
+ } | {
42
+ succeeded: false;
43
+ filename: string;
44
+ reason: string;
45
+ };
46
+ /** Arguments handed to a {@link PromoteAgentFilePartOptions.buildAttachmentPath}
47
+ * override — everything needed to place the file deterministically. */
48
+ export interface AttachmentPathArgs {
49
+ /** Sanitized display filename (basename, safe charset). */
50
+ filename: string;
51
+ /** First 8 hex chars of the SHA-256 idempotency digest. */
52
+ hash8: string;
53
+ /** `YYYY-MM-DD` from the injected clock. */
54
+ date: string;
55
+ /** Resolved media type. */
56
+ mediaType: string;
57
+ /** `image`/`file` split of the media type. */
58
+ kind: ChatAttachmentKind;
59
+ }
60
+ /** Default MIME hook: extension → mime, or `text/plain` for the unknown. */
61
+ export declare function sniffMimeFromName(filename: string): string;
62
+ /** Define options for promoting a part of an agent file within a specific session and scope */
63
+ export interface PromoteAgentFilePartOptions {
64
+ raw: RawAgentFilePart;
65
+ /** The turn's box — required only to promote a sandbox-path part; a `data:`
66
+ * URI needs none. */
67
+ box?: SandboxExecChannel;
68
+ /** The product's workspace/tenant key, passed to `writeAttachment`. */
69
+ scopeId: string;
70
+ /** The turn's session id, used for the sandbox stat/read exec calls. */
71
+ sessionId: string;
72
+ /** REQUIRED store writer — no default (the product owns its store). */
73
+ writeAttachment: WriteAttachmentFn;
74
+ /** Store-path strategy. Default {@link defaultBuildAttachmentPath}. */
75
+ buildAttachmentPath?: (args: AttachmentPathArgs) => string;
76
+ /** Raw-byte ceiling. Default {@link PROMOTE_MAX_FILE_BYTES}. */
77
+ maxBytes?: number;
78
+ /** Last-resort media-type hook. Default {@link sniffMimeFromName}. */
79
+ sniffMime?: (filename: string) => string;
80
+ /** Clock for the date path segment. Default `() => new Date()`. */
81
+ now?: () => Date;
82
+ }
83
+ /** Promote a part of an agent file with optional byte limits and MIME type detection */
84
+ export declare function promoteAgentFilePart(options: PromoteAgentFilePartOptions): Promise<PromoteFilePartResult>;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * `resolveChatAttachments` — validate a turn body's `attachments` field into
3
+ * persistable {@link ChatAttachmentPart}s. Every path is re-validated (a path
4
+ * off the wire is never trusted to stay inside the store root) and every size
5
+ * is re-derived from the STORED body via the injected {@link ReadAttachmentFn},
6
+ * never the client-reported `size` — the upload path lets a caller rewrite its
7
+ * own frontmatter, so a stored size cannot bound anything and the wire size can
8
+ * be anything. Both the aggregate cap and the size carried on the returned part
9
+ * come from the authoritative read.
10
+ *
11
+ * Storage-parameterized: the frontmatter parsing / base64 sizing that derives
12
+ * the authoritative size lives BEHIND `readAttachment` (a product's vault or
13
+ * object-store adapter), so this module is a pure validator + budget gate with
14
+ * no store knowledge. Lifted from gtm-agent's `resolve-attachments.ts`
15
+ * (workspaceId → scopeId, the vault read → the injected reader) and kept
16
+ * behavior-identical for gtm-agent#618 adoption.
17
+ */
18
+ import { type ChatAttachmentPart } from '../chat-store/parts';
19
+ import type { ReadAttachmentFn } from './attachment-store';
20
+ /** Resolve the result of chat attachment processing with success status and corresponding data or error */
21
+ export type ResolveChatAttachmentsResult = {
22
+ succeeded: true;
23
+ value: ChatAttachmentPart[];
24
+ } | {
25
+ succeeded: false;
26
+ error: string;
27
+ };
28
+ /** Verdict of a path check: OK, or a rejection naming why. Mirrors
29
+ * `SandboxMentionPathCheck` in `./wire`. */
30
+ export type AttachmentPathCheck = {
31
+ succeeded: true;
32
+ } | {
33
+ succeeded: false;
34
+ error: string;
35
+ };
36
+ /**
37
+ * Default path validator when a caller supplies none. Rejects the ways a path
38
+ * picked in a client can escape the store root — traversal (`..` segment),
39
+ * absolute (leading `/`), backslashes, null bytes, control characters (see
40
+ * {@link CONTROL_CHARS} — a path also feeds {@link buildAttachmentPromptBlock}'s
41
+ * `(vault: ${path})` pointer, so it is exposed to the same injection surface as
42
+ * `name`) — plus a dotfile/hidden segment (a leading `.` on any segment).
43
+ * Generalized from gtm's `validateVaultFilePath`, in the spirit of
44
+ * `validateSandboxMentionPath` (`/chat-routes`'s wire mention-path validator) —
45
+ * but the dotfile rejection here is INTENTIONALLY stricter than that sibling:
46
+ * an uploaded attachment path is sanitized store-relative storage the product
47
+ * itself assigned, whereas a mention path points at a file that already exists
48
+ * in the sandbox and may legitimately live under a dotfile segment. A caller
49
+ * that needs gtm's exact (looser) rule can supply `validatePath` to override
50
+ * this default entirely.
51
+ */
52
+ export declare function defaultValidateAttachmentPath(path: string): AttachmentPathCheck;
53
+ /** Define options to resolve and validate chat attachments with size, count, and path constraints */
54
+ export interface ResolveChatAttachmentsOptions {
55
+ /** The product's workspace/tenant key, passed to `readAttachment`. */
56
+ scopeId: string;
57
+ /** Authoritative size + content reader — see {@link ReadAttachmentFn}. */
58
+ readAttachment: ReadAttachmentFn;
59
+ /** Most attachments one request may carry. Default {@link ATTACHMENT_MAX_COUNT}. */
60
+ maxCount?: number;
61
+ /** Aggregate raw-byte ceiling. Default {@link MAX_ATTACHMENT_TOTAL_BYTES}. */
62
+ maxTotalBytes?: number;
63
+ /** Path validator override. Default {@link defaultValidateAttachmentPath}. */
64
+ validatePath?: (path: string) => AttachmentPathCheck;
65
+ }
66
+ /**
67
+ * Validate and resolve a turn body's `attachments` field into persistable
68
+ * parts. Every path is confirmed present (and not deleted) in the caller's own
69
+ * store by `readAttachment` before it is trusted, and size is derived from the
70
+ * authoritative read for both the aggregate cap and the returned part's size.
71
+ */
72
+ export declare function resolveChatAttachments(value: unknown, options: ResolveChatAttachmentsOptions): Promise<ResolveChatAttachmentsResult>;
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Sandbox lane: bridge a raw sandbox event stream (`streamSandboxPrompt`) into
3
+ * the `ChatTurnProducer` shape agent-runtime's `handleChatTurn` consumes AND
4
+ * the client vocabulary `/web-react`'s `dispatchChatStreamLine` already parses
5
+ * (`text` / `reasoning` / `tool_call` / `tool_result` / `usage` /
6
+ * `notice` / structured `error` / `interaction`). Legal and tax each hand-rolled
7
+ * this mapping differently;
8
+ * this is that middle, composed from `/stream`'s normalizers — no new loop
9
+ * logic, no SDK import (the event source is an injected `AsyncIterable`).
10
+ *
11
+ * Alongside the live mapping it accumulates the PERSISTED projection — the
12
+ * `message.parts` rows `/chat-store` stores — via `normalizePersistedPart` /
13
+ * `mergePersistedPart` / `finalizeAssistantParts`, plus the usage receipt from
14
+ * `step-finish` parts. `createChatTurnRoutes` reads both after drain.
15
+ */
16
+ import { type JsonRecord } from '../stream/index';
17
+ import { type EmptyTurnRetryInfo, type ModelFallbackInfo, type OpenModelStream } from './model-failover-stream';
18
+ import type { ChatTurnRouteProducer } from './turn-routes';
19
+ /** Outcome of a `promoteFilePart` attempt. `key`, when given, becomes the
20
+ * persisted part's row key (e.g. `attachment:<path>`) so repeat promotions
21
+ * of the same underlying file fold into one segment instead of appending;
22
+ * omitted, the default `getPartKey` keying applies.
23
+ *
24
+ * On failure, `part` is an OPTIONAL substitute part to persist in place of
25
+ * the raw url-bearing one — this is how a product swaps in a transcript
26
+ * notice (gtm persists a `warning` notice part, never the transient url) for
27
+ * a failed promotion instead of baking a `data:`/sandbox-path url into the
28
+ * durable row. When `part` is present it is persisted (via the same
29
+ * `recordPersistedPart` path as a success, honoring the optional `key`);
30
+ * when absent, the existing raw-part fallback applies unchanged — so a
31
+ * caller that only returns `{ succeeded: false, reason }` keeps today's
32
+ * behavior verbatim. */
33
+ export type FilePartPromotionOutcome = {
34
+ succeeded: true;
35
+ part: Record<string, unknown>;
36
+ key?: string;
37
+ } | {
38
+ succeeded: false;
39
+ reason: string;
40
+ part?: Record<string, unknown>;
41
+ key?: string;
42
+ };
43
+ /** Define options for producing sandbox chat events with rendering and interaction controls */
44
+ export interface SandboxChatProducerOptions {
45
+ /** The raw sandbox event stream (e.g. `streamSandboxPrompt(...)`).
46
+ *
47
+ * An ALREADY-OPEN stream is bound to one model and cannot be reopened, so
48
+ * this form can never fail over. Prefer {@link openEvents}; exactly one of
49
+ * the two is required. */
50
+ events?: AsyncIterable<unknown>;
51
+ /** Open the raw sandbox stream FOR A GIVEN MODEL — the failover-capable form
52
+ * of {@link events}. The callback receives the model to run and returns the
53
+ * same `AsyncIterable` `events` would have been (typically
54
+ * `streamSandboxPrompt(shell, box, prompt, { ...opts, model })`).
55
+ *
56
+ * Wiring this turns failover ON with no further flag: whenever the resolved
57
+ * chain (`model` + {@link fallbackModels}) holds more than one entry, a model
58
+ * whose upstream is dead is abandoned BEFORE its first client-visible byte
59
+ * and the next one is tried. A one-entry chain opens exactly once — no extra
60
+ * call, no added latency, byte-identical to today.
61
+ *
62
+ * Requires {@link model}: failover has to know which model it is running. */
63
+ openEvents?: OpenModelStream;
64
+ /** Recorded on the persisted assistant message. When failover moves the turn
65
+ * to another model, the producer's `model` reports the model that ACTUALLY
66
+ * served, not this preferred one — see {@link modelFailover}. */
67
+ model?: string;
68
+ /** Models to try, in order, when `model`'s upstream is dead. Product config,
69
+ * never a shell default: agent-app cannot know which ids are live, and a
70
+ * baked list would rot into exactly the stale-liveness bug this guards
71
+ * against. Empty/omitted → one attempt, today's behavior.
72
+ *
73
+ * Pick these deliberately. A same-family fallback is NOT automatically safe:
74
+ * `gemini-2.5-flash` produced zero persisted deliverables in 2 of 3 measured
75
+ * runs on a med-legal filing flow where `gemini-2.5-pro` succeeded. That is
76
+ * why every fallback is surfaced (persisted `model`, a transcript notice, and
77
+ * `modelFailover()`) instead of being applied silently. */
78
+ fallbackModels?: readonly string[];
79
+ /** Opt out of failover while still using {@link openEvents}. `false` collapses
80
+ * the chain to `model` alone. */
81
+ modelFailover?: false;
82
+ /** Maximum time to open/start one model event source through its first event.
83
+ * Default 120 seconds. This is separate from provider first-output latency
84
+ * so cold sandbox startup is not mislabeled as an inference failure. */
85
+ openTimeoutMs?: number;
86
+ /** Hard deadline after the source's first lifecycle event for the first
87
+ * answer-bearing event. Default 60 seconds. Processing/lifecycle events do
88
+ * not extend it. */
89
+ firstResponseTimeoutMs?: number;
90
+ /** Fired when a model is abandoned mid-chain (telemetry/alerting). The user
91
+ * already sees a transcript notice; this is for the operator. */
92
+ onModelFallback?: (info: ModelFallbackInfo) => void;
93
+ /** Re-run the SAME model this many times when a turn completes with no
94
+ * assistant text at all. Default `0` (unchanged behavior). Requires
95
+ * {@link openEvents} — there is nothing to re-open on a fixed stream.
96
+ *
97
+ * Distinct from {@link fallbackModels} on purpose: this never changes which
98
+ * model answers, so it carries none of the attribution risk a downgrade
99
+ * does. Measured on production 2026-07-27 through gtm-agent's profile, a
100
+ * completed-but-blank turn is a transient platform flake — 8 hard cases went
101
+ * 7/8 delivered to 8/8 with one re-run, costing 1 extra turn in 9. */
102
+ emptyTurnRetries?: number;
103
+ /** Fired when a blank turn is discarded and the same model re-run. */
104
+ onEmptyTurnRetry?: (info: EmptyTurnRetryInfo) => void;
105
+ /** Which ask kinds the product renders a card for. Anything else is
106
+ * auto-declined (see `declineInteraction`) so the run never hangs in the
107
+ * broker waiting on a card no client will show. Default: question/plan.
108
+ * Products with per-turn plan mode can close over it without another option:
109
+ * `(kind) => kind === 'question' || (kind === 'plan' && planEnabled)`. */
110
+ isRenderableInteraction?: (kind: string) => boolean;
111
+ /** Resolve a non-renderable ask (wire `respondToSessionInteraction` with the
112
+ * session's sidecar connection). Without it, a failure notice is emitted and
113
+ * the run stays blocked until the broker times out. */
114
+ declineInteraction?: (id: string) => Promise<void>;
115
+ /** Opt-in eager promotion of harness-emitted `file` parts. Unset, a `file`
116
+ * part persists exactly as the harness sent it — a transient `url` (a
117
+ * `data:` URI or in-sandbox path) baked into the transcript, which is
118
+ * today's behavior and stays byte-identical if this is never wired. Set,
119
+ * EVERY `file` part (never `image`, never any other kind) is routed
120
+ * through this callback instead of `recordPersistedPart`'s default
121
+ * fallback — including a part with NEITHER `id` NOR `url` (gtm always
122
+ * attempts promotion; such a part simply fails "carries no url" and
123
+ * resolves through the same failure path as any other rejection, rather
124
+ * than being persisted raw and unpromoted) — so the product can durably
125
+ * write the bytes and swap in a path-bearing part before the raw url ever
126
+ * reaches the persisted transcript. Keyed per source-prefixed `id:<id>` /
127
+ * `url:<url>` (an `id` and a `url` sharing the same text must never collide
128
+ * onto one memo entry) and memoized by PROMISE (not result), so re-emitted
129
+ * snapshot events for the same part —
130
+ * the harness resends the whole part on every update, not just deltas —
131
+ * fold onto the one in-flight or settled attempt rather than promoting
132
+ * twice or racing two concurrent writes; a raw part with neither `id` nor
133
+ * `url` cannot be keyed, so it is invoked UN-memoized (once per event) —
134
+ * each occurrence is its own attempt. A rejecting promise is caught,
135
+ * logged via `log`, and treated as `succeeded: false`. On `succeeded:
136
+ * false` the outcome's optional `part` (a substitute — e.g. a warning
137
+ * notice — see {@link FilePartPromotionOutcome}) persists in its place when
138
+ * given; otherwise the raw part persists exactly as it does today — this
139
+ * seam only decides whether to call the promoter and what to do with its
140
+ * outcomes; the promotion mechanics (vault write, key derivation, notice
141
+ * construction) live in the caller's callback, not here. */
142
+ promoteFilePart?: (raw: JsonRecord) => Promise<FilePartPromotionOutcome>;
143
+ log?: (message: string, meta?: Record<string, unknown>) => void;
144
+ }
145
+ /** Create a sandbox chat producer that manages chat turn routing with logging and interaction rendering options */
146
+ export declare function createSandboxChatProducer(options: SandboxChatProducerOptions): ChatTurnRouteProducer;
@@ -0,0 +1,4 @@
1
+ import { type JsonRecord } from '../stream/index';
2
+ import type { ChatTurnUsage } from './turn-routes';
3
+ /** Add one canonical Sandbox `step-finish` receipt to a turn total. */
4
+ export declare function addStepFinishUsage(part: JsonRecord, usage: ChatTurnUsage): void;
@@ -36,7 +36,7 @@
36
36
  */
37
37
  /** Where the box is, as far as the caller can see. `state` on `not-running`
38
38
  * is the platform's own status string, carried through for the log. */
39
- type StaleTurnLockSandboxProbeResult = {
39
+ export type StaleTurnLockSandboxProbeResult = {
40
40
  status: 'running';
41
41
  } | {
42
42
  status: 'absent';
@@ -47,7 +47,7 @@ type StaleTurnLockSandboxProbeResult = {
47
47
  /** What the thing running the turn says about it. `terminal: false` means an
48
48
  * execution is LIVE — the strongest signal in the policy. `diagnostics` rides
49
49
  * through to the result and the logs unread. */
50
- type StaleTurnLockSessionProbeResult = {
50
+ export type StaleTurnLockSessionProbeResult = {
51
51
  reachable: true;
52
52
  terminal: boolean;
53
53
  diagnostics?: Record<string, unknown>;
@@ -69,7 +69,7 @@ type StaleTurnLockSessionProbeResult = {
69
69
  * minutes. Raising it makes recovery slower; lowering it risks stealing a lock
70
70
  * mid-provision.
71
71
  */
72
- declare const DEFAULT_STALE_TURN_LOCK_GRACE_MS: number;
72
+ export declare const DEFAULT_STALE_TURN_LOCK_GRACE_MS: number;
73
73
  /**
74
74
  * Minimum age a lock must reach before a TERMINAL session verdict may release
75
75
  * it.
@@ -94,9 +94,9 @@ declare const DEFAULT_STALE_TURN_LOCK_GRACE_MS: number;
94
94
  * the session probe exists to shortcut. Raising it delays recovery from a
95
95
  * crashed turn; lowering it narrows the registration window it protects.
96
96
  */
97
- declare const DEFAULT_TERMINAL_TURN_LOCK_GRACE_MS: number;
97
+ export declare const DEFAULT_TERMINAL_TURN_LOCK_GRACE_MS: number;
98
98
  /** Resolve options for probing and releasing stale TURN locks based on lock start time and sandbox state */
99
- interface ReconcileStaleTurnLockOptions {
99
+ export interface ReconcileStaleTurnLockOptions {
100
100
  /** When the held lock was acquired (epoch ms). The grace period is measured
101
101
  * from here, so it must be the LOCK's start, not the turn's. */
102
102
  lockStartedAt: number;
@@ -134,7 +134,7 @@ interface ReconcileStaleTurnLockOptions {
134
134
  now?(): number;
135
135
  }
136
136
  /** Describe the outcome of reconciling a stale turn lock including release status and diagnostics */
137
- interface ReconcileStaleTurnLockResult {
137
+ export interface ReconcileStaleTurnLockResult {
138
138
  released: boolean;
139
139
  /** Why the policy decided what it did — the probe's own diagnostics on the
140
140
  * reachable path, the unreachable reason and lock age on the fallback. */
@@ -146,6 +146,4 @@ interface ReconcileStaleTurnLockResult {
146
146
  * Never provisions and never mutates anything but the lock: a reconciliation
147
147
  * attempt on a cold workspace leaves it cold.
148
148
  */
149
- declare function reconcileStaleTurnLock(options: ReconcileStaleTurnLockOptions): Promise<ReconcileStaleTurnLockResult>;
150
-
151
- export { DEFAULT_STALE_TURN_LOCK_GRACE_MS as D, type ReconcileStaleTurnLockOptions as R, type StaleTurnLockSandboxProbeResult as S, DEFAULT_TERMINAL_TURN_LOCK_GRACE_MS as a, type ReconcileStaleTurnLockResult as b, type StaleTurnLockSessionProbeResult as c, reconcileStaleTurnLock as r };
149
+ export declare function reconcileStaleTurnLock(options: ReconcileStaleTurnLockOptions): Promise<ReconcileStaleTurnLockResult>;