@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,92 @@
1
+ import { type ReactNode } from 'react';
2
+ import { AgentComposer } from '@tangle-network/sandbox-ui/chat';
3
+ import type { UseFileMentionsResult } from '../web-react/use-file-mentions';
4
+ import type { ChatAttachmentInput, FileMention } from '../chat-routes/wire';
5
+ import { type AgentSessionControlsProps } from '../web-react/agent-session-controls';
6
+ import type { ComposerPlanModeSelection } from './types';
7
+ export interface EntryComposerProps {
8
+ /** The one line above the input. Domain copy — always a product parameter. */
9
+ heading?: ReactNode;
10
+ /** Optional supporting line under the heading. */
11
+ subheading?: ReactNode;
12
+ placeholder?: string;
13
+ initialValue?: string;
14
+ sendLabel?: string;
15
+ disabled?: boolean;
16
+ /**
17
+ * Agent identity (backend/model/effort). Pass it and the control row renders;
18
+ * omit it and the composer ships without one. Omitting is a real choice for a
19
+ * surface with nothing to choose — it should never be an oversight, which is
20
+ * why this is one prop rather than a free-form slot a caller can forget.
21
+ *
22
+ * This is the CANONICAL picker cluster: `AgentSessionControls` from
23
+ * `/web-react` (its model menu IS the canonical `ModelPicker`). The legacy
24
+ * sandbox-ui adapter that used to back this prop was removed; the props
25
+ * mapping for migrating a stored selection lives in
26
+ * `docs/ui-picker-canon.md`.
27
+ */
28
+ agent?: AgentSessionControlsProps;
29
+ /**
30
+ * Product-specific behavioral controls docked on the LEFT. A mode is an
31
+ * on/off switch, not a value picker, so it sits apart from agent identity.
32
+ * For the standard plan-approval control, prefer `planMode`.
33
+ */
34
+ modes?: ReactNode;
35
+ /**
36
+ * Standard plan-approval mode. Pass only when the selected backend supports
37
+ * it; omitted means the control is not rendered.
38
+ */
39
+ planMode?: ComposerPlanModeSelection;
40
+ /**
41
+ * Upload endpoint for staged attachments. Omit and the attach affordance is
42
+ * hidden — a composer with no place to put a file must not offer one.
43
+ */
44
+ uploadUrl?: string;
45
+ accept?: string;
46
+ onAttachmentError?: (reason: string) => void;
47
+ onRejectFiles?: Parameters<typeof AgentComposer>[0]['onRejectFiles'];
48
+ /**
49
+ * `@`-file mentions. The hook itself is shared (`useFileMentions`), but the
50
+ * cold-box policy around it — whether pressing `@` is worth starting a
51
+ * sandbox — is a per-surface product call, so the result is injected rather
52
+ * than created here.
53
+ */
54
+ mentions?: UseFileMentionsResult;
55
+ mentionPopoverClassName?: string;
56
+ /** Rendered under the composer: suggestion pills, an onboarding nudge, a
57
+ * disclaimer. All domain copy. */
58
+ footer?: ReactNode;
59
+ /** Block submit until a persisted selection has resolved against the catalog,
60
+ * so the first turn cannot go out under the wrong model. Defaults to true. */
61
+ ready?: boolean;
62
+ onSubmit: (prompt: string, attachments: ChatAttachmentInput[], mentions: FileMention[]) => void;
63
+ className?: string;
64
+ composerClassName?: string;
65
+ /** Max width of the centered column. Defaults to the fleet's 820px. */
66
+ maxWidth?: number;
67
+ }
68
+ /**
69
+ * `EntryComposer` — the centered "what do you want to work on?" surface a
70
+ * product shows before a conversation exists (a new thread, an empty session,
71
+ * a workspace overview).
72
+ *
73
+ * It exists because three products each grew their own, and they drifted into
74
+ * three different capability sets rather than three different looks: one lost
75
+ * the attach button, one lost the model and effort pickers entirely, one
76
+ * hand-rolled a `<textarea>` and wired pickers from three separate packages
77
+ * into one row. The composer, the pickers, the attachment queue and the mention
78
+ * index were all ALREADY shared — what was not shared was the assembly, so
79
+ * every product re-derived which controls an entry surface gets, and each
80
+ * re-derivation dropped a different one.
81
+ *
82
+ * Mechanism lives here: layout, the attachment queue, the mention wiring, the
83
+ * submit gate (nothing sends while an upload is pending or failed, or before
84
+ * the model selection has resolved). Domain stays a parameter: `heading`,
85
+ * `placeholder`, `footer` (suggestion pills, disclaimers) and the selections
86
+ * themselves.
87
+ *
88
+ * The docked in-thread composer is NOT this component — it renders
89
+ * `AgentComposer` directly with the same canonical `AgentSessionControls`,
90
+ * because a docked composer has a transcript above it and no hero layout.
91
+ */
92
+ export declare function EntryComposer({ heading, subheading, placeholder, initialValue, sendLabel, disabled, agent, modes, planMode, uploadUrl, accept, onAttachmentError, onRejectFiles, mentions, mentionPopoverClassName, footer, ready, onSubmit, className, composerClassName, maxWidth, }: EntryComposerProps): import("react").JSX.Element;
@@ -1,123 +1,27 @@
1
- import * as react from 'react';
2
- import { ReactNode } from 'react';
3
- import { AgentComposer } from '@tangle-network/sandbox-ui/chat';
4
- import { A as AgentSessionControlsProps, U as UseFileMentionsResult } from '../agent-session-controls-CmlXwp_H.js';
5
- import { b as ChatAttachmentInput, F as FileMention } from '../wire-DOZ-O6hD.js';
6
- import '../harness/index.js';
7
- import '@tangle-network/agent-interface';
8
- import '../catalog/index.js';
9
-
10
1
  /**
11
- * The plan-mode toggle state an entry surface docks beside the composer. The
12
- * agent-identity pickers (model / harness / effort) speak the canonical
13
- * `AgentSessionControls` vocabulary from `../web-react` — see "UI chrome
14
- * ownership (picker canon)" in AGENTS.md.
15
- */
16
- interface ComposerPlanModeSelection {
17
- enabled: boolean;
18
- setEnabled: (next: boolean) => void;
19
- saving?: boolean;
20
- }
21
-
22
- interface EntryComposerProps {
23
- /** The one line above the input. Domain copy — always a product parameter. */
24
- heading?: ReactNode;
25
- /** Optional supporting line under the heading. */
26
- subheading?: ReactNode;
27
- placeholder?: string;
28
- initialValue?: string;
29
- sendLabel?: string;
30
- disabled?: boolean;
31
- /**
32
- * Agent identity (backend/model/effort). Pass it and the control row renders;
33
- * omit it and the composer ships without one. Omitting is a real choice for a
34
- * surface with nothing to choose — it should never be an oversight, which is
35
- * why this is one prop rather than a free-form slot a caller can forget.
36
- *
37
- * This is the CANONICAL picker cluster: `AgentSessionControls` from
38
- * `/web-react` (its model menu IS the canonical `ModelPicker`). The legacy
39
- * sandbox-ui adapter that used to back this prop was removed; the props
40
- * mapping for migrating a stored selection lives in
41
- * `docs/ui-picker-canon.md`.
42
- */
43
- agent?: AgentSessionControlsProps;
44
- /**
45
- * Product-specific behavioral controls docked on the LEFT. A mode is an
46
- * on/off switch, not a value picker, so it sits apart from agent identity.
47
- * For the standard plan-approval control, prefer `planMode`.
48
- */
49
- modes?: ReactNode;
50
- /**
51
- * Standard plan-approval mode. Pass only when the selected backend supports
52
- * it; omitted means the control is not rendered.
53
- */
54
- planMode?: ComposerPlanModeSelection;
55
- /**
56
- * Upload endpoint for staged attachments. Omit and the attach affordance is
57
- * hidden — a composer with no place to put a file must not offer one.
58
- */
59
- uploadUrl?: string;
60
- accept?: string;
61
- onAttachmentError?: (reason: string) => void;
62
- onRejectFiles?: Parameters<typeof AgentComposer>[0]['onRejectFiles'];
63
- /**
64
- * `@`-file mentions. The hook itself is shared (`useFileMentions`), but the
65
- * cold-box policy around it — whether pressing `@` is worth starting a
66
- * sandbox — is a per-surface product call, so the result is injected rather
67
- * than created here.
68
- */
69
- mentions?: UseFileMentionsResult;
70
- mentionPopoverClassName?: string;
71
- /** Rendered under the composer: suggestion pills, an onboarding nudge, a
72
- * disclaimer. All domain copy. */
73
- footer?: ReactNode;
74
- /** Block submit until a persisted selection has resolved against the catalog,
75
- * so the first turn cannot go out under the wrong model. Defaults to true. */
76
- ready?: boolean;
77
- onSubmit: (prompt: string, attachments: ChatAttachmentInput[], mentions: FileMention[]) => void;
78
- className?: string;
79
- composerClassName?: string;
80
- /** Max width of the centered column. Defaults to the fleet's 820px. */
81
- maxWidth?: number;
82
- }
83
- /**
84
- * `EntryComposer` — the centered "what do you want to work on?" surface a
85
- * product shows before a conversation exists (a new thread, an empty session,
86
- * a workspace overview).
2
+ * `@tangle-network/agent-app/chat-react` the chat-composer surfaces that need
3
+ * `@tangle-network/sandbox-ui`.
87
4
  *
88
- * It exists because three products each grew their own, and they drifted into
89
- * three different capability sets rather than three different looks: one lost
90
- * the attach button, one lost the model and effort pickers entirely, one
91
- * hand-rolled a `<textarea>` and wired pickers from three separate packages
92
- * into one row. The composer, the pickers, the attachment queue and the mention
93
- * index were all ALREADY shared — what was not shared was the assembly, so
94
- * every product re-derived which controls an entry surface gets, and each
95
- * re-derivation dropped a different one.
5
+ * Isolated behind its own entry for the OPTIONAL-PEER rule: sandbox-ui is an
6
+ * optional peer of this package, so a subpath that imports it must never be
7
+ * reachable from one that does not. `/web-react` stays sandbox-ui-free; anything
8
+ * that renders sandbox-ui's `AgentComposer` lives here. (Same rule, same shape
9
+ * as `/work-product-react`.)
96
10
  *
97
- * Mechanism lives here: layout, the attachment queue, the mention wiring, the
98
- * submit gate (nothing sends while an upload is pending or failed, or before
99
- * the model selection has resolved). Domain stays a parameter: `heading`,
100
- * `placeholder`, `footer` (suggestion pills, disclaimers) and the selections
101
- * themselves.
11
+ * WHY THIS EXISTS. sandbox-ui owns the composer chrome; this subpath owns the
12
+ * app-shell ASSEMBLY over it which controls an entry surface gets, the
13
+ * submit gate. Three products each re-derived that assembly and each dropped a
14
+ * different control, so the same "shared" components produced three different
15
+ * capability sets. One assembly, three products, domain by parameter.
102
16
  *
103
- * The docked in-thread composer is NOT this component — it renders
104
- * `AgentComposer` directly with the same canonical `AgentSessionControls`,
105
- * because a docked composer has a transcript above it and no hero layout.
106
- */
107
- declare function EntryComposer({ heading, subheading, placeholder, initialValue, sendLabel, disabled, agent, modes, planMode, uploadUrl, accept, onAttachmentError, onRejectFiles, mentions, mentionPopoverClassName, footer, ready, onSubmit, className, composerClassName, maxWidth, }: EntryComposerProps): react.JSX.Element;
108
-
109
- interface ComposerModeControlsProps {
110
- /**
111
- * Plan-approval mode. Products pass it only when the selected backend can
112
- * propose a plan and wait for approval; omitted means nothing renders.
113
- */
114
- planMode?: ComposerPlanModeSelection;
115
- }
116
- /**
117
- * The shared plan-mode toggle for the left side of an agent composer.
118
- * Plan mode is a behavioral switch, not part of the profile/backend/model/
119
- * thinking identity controls on the right.
17
+ * PICKER CANON. The agent-identity controls an `EntryComposer` renders are the
18
+ * canonical ones: its `agent` prop is `AgentSessionControlsProps` and the row
19
+ * is `/web-react`'s `AgentSessionControls`, whose model menu IS the canonical
20
+ * `ModelPicker` — see "UI chrome ownership (picker canon)" in AGENTS.md and
21
+ * `docs/ui-picker-canon.md`. The legacy `ComposerAgentControls` adapter over
22
+ * sandbox-ui's strip was REMOVED (it was deprecated-first); products still on
23
+ * it migrate per the props mapping in that doc.
120
24
  */
121
- declare function ComposerModeControls({ planMode }: ComposerModeControlsProps): react.JSX.Element | null;
122
-
123
- export { ComposerModeControls, type ComposerModeControlsProps, type ComposerPlanModeSelection, EntryComposer, type EntryComposerProps };
25
+ export { EntryComposer, type EntryComposerProps } from './entry-composer';
26
+ export { ComposerModeControls, type ComposerModeControlsProps, } from './composer-mode-controls';
27
+ export type { ComposerPlanModeSelection } from './types';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The plan-mode toggle state an entry surface docks beside the composer. The
3
+ * agent-identity pickers (model / harness / effort) speak the canonical
4
+ * `AgentSessionControls` vocabulary from `../web-react` — see "UI chrome
5
+ * ownership (picker canon)" in AGENTS.md.
6
+ */
7
+ export interface ComposerPlanModeSelection {
8
+ enabled: boolean;
9
+ setEnabled: (next: boolean) => void;
10
+ saving?: boolean;
11
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Storage seams for the chat-attachment vertical (`resolveChatAttachments`,
3
+ * `buildDispatchParts`, `promoteAgentFilePart`). Structural function ports in
4
+ * the same style as `upload.ts`'s `SandboxUploadSink`: REQUIRED injection, no
5
+ * default implementation — agent-app owns the size/budget/idempotency
6
+ * mechanism, the product owns where the bytes actually live.
7
+ *
8
+ * One reader, two callers: `resolveChatAttachments` reads only the
9
+ * authoritative `size` (never trusting the client-reported size), while
10
+ * `buildDispatchParts` reads the inline `content` (base64 or raw bytes) to
11
+ * build a `data:` URI. Both fit behind ONE `ReadAttachmentFn` so a product
12
+ * wires a single vault/object-store adapter, not two. gtm's KV vault (stores
13
+ * base64 bodies) and `/object-store`'s `ObjectStore` (hands back raw bytes)
14
+ * both satisfy this shape.
15
+ */
16
+ /**
17
+ * The result of reading one stored attachment. `ok:true` MUST carry the
18
+ * authoritative decoded byte `size` (the cap is meaningless against a
19
+ * client-controlled number) and, when the caller needs to inline the file,
20
+ * its content as `base64` and/or raw `bytes`. `mediaType` is the stored
21
+ * content type when the store knows it (used as the fallback when the wire
22
+ * part carried none). `ok:false` carries a human `reason` that SHOULD name the
23
+ * offending path — it is surfaced verbatim in the caller's typed outcome.
24
+ */
25
+ export type AttachmentReadResult = {
26
+ ok: true;
27
+ /** Authoritative decoded byte length of the stored content. */
28
+ size: number;
29
+ /** Inline content as base64 — reused verbatim for a `data:` URI, so a
30
+ * store holding already-base64 bodies never decodes-and-re-encodes. */
31
+ base64?: string;
32
+ /** Inline content as raw bytes — base64-encoded by the caller when a
33
+ * `data:` URI is needed. Ignored when `base64` is present. */
34
+ bytes?: Uint8Array;
35
+ /** Stored content type, when the store tracks one. */
36
+ mediaType?: string;
37
+ } | {
38
+ ok: false;
39
+ reason: string;
40
+ };
41
+ /**
42
+ * Read one stored attachment for `scopeId` (the product's workspace/tenant
43
+ * key) at its store-relative `path`. Missing, deleted, or unreadable content
44
+ * MUST resolve to `{ ok: false, reason }`, never throw — a store failure is a
45
+ * per-attachment outcome the caller folds into its own typed result, not a
46
+ * turn-level exception.
47
+ */
48
+ export type ReadAttachmentFn = (scopeId: string, path: string) => Promise<AttachmentReadResult>;
49
+ /** Outcome of persisting one attachment. Mirrors `AttachmentReadResult`'s
50
+ * `ok`/`reason` shape and `upload.ts`'s `{ ok }` convention. */
51
+ export type AttachmentWriteResult = {
52
+ ok: true;
53
+ } | {
54
+ ok: false;
55
+ reason: string;
56
+ };
57
+ /**
58
+ * Persist `content` for `scopeId` at `path`. `content` is either raw `bytes`
59
+ * or a base64 `string` — a string argument is ALWAYS base64 (never utf8), so
60
+ * a store that speaks base64 (gtm's vault) writes it verbatim and one that
61
+ * speaks bytes decodes once. Like the reader, failures resolve to
62
+ * `{ ok: false, reason }` rather than throwing.
63
+ *
64
+ * `opts` mirrors the vault frontmatter gtm's `writeAttachmentVaultFile`
65
+ * persists alongside the body (promote-file-parts.ts:181-190), so a product
66
+ * reimplementing that vault writer through this seam can reproduce it
67
+ * exactly:
68
+ * - `mediaType` — the resolved MIME type; gtm's frontmatter key `mime`.
69
+ * - `name` — the sanitized (store-path-safe) display filename; gtm passes
70
+ * this only to shape its oversize message, not into frontmatter.
71
+ * - `originalName` — the filename as the harness/browser reported it, BEFORE
72
+ * sanitization (`raw.filename ?? filename` — falls back to the sanitized
73
+ * name when the source carried none); gtm's frontmatter key `originalName`.
74
+ * This is the one field with no other recovery path once sanitization has
75
+ * run, so it must ride the write, not be re-derived after the fact.
76
+ * - `size` — the authoritative decoded byte length being written; gtm's
77
+ * frontmatter key `size`.
78
+ */
79
+ export type WriteAttachmentFn = (scopeId: string, path: string, content: Uint8Array | string, opts: {
80
+ mediaType?: string;
81
+ name?: string;
82
+ originalName?: string;
83
+ size?: number;
84
+ }) => Promise<AttachmentWriteResult>;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * `createAttachmentUploadRoute` — the fleet-primitive durable-store upload
3
+ * route: a two-phase atomic batch (every file is validated before any file is
4
+ * written — a batch never partially lands), a content-sniffed type gate
5
+ * (`checkAttachmentType` over `sniffBinary`'s magic-byte read, not the
6
+ * extension or the browser-reported MIME), per-kind + aggregate byte caps,
7
+ * and sanitized filenames. Storage is fully seamed through the injected
8
+ * `WriteAttachmentFn` (`./attachment-store`) — no default store, the product
9
+ * owns where bytes actually live (vault, object store, …) — and auth/rate
10
+ * limiting is entirely the injected `authorize` seam's job: this factory
11
+ * never invents a 401 or 429 response, it only returns `auth.response`
12
+ * verbatim on failure.
13
+ *
14
+ * Lifted from gtm-agent's `src/routes/api.vault.upload.ts` (the hardening
15
+ * lineage other lifted modules in this vertical cite: gtm#584 binary
16
+ * corruption, gtm#592 sniff gate/caps, gtm#593 batch-atomic writes) and
17
+ * generalized the way `resolve-attachments.ts` generalized gtm's read path —
18
+ * the vault-specific pieces (KV vault paths, frontmatter, per-user rate
19
+ * limiting) are all injected seams here, while the validate-then-write phase
20
+ * split and the type/size gate ordering survive byte-for-byte.
21
+ *
22
+ * @remarks Sibling to, NOT an extension of, `./upload.ts`'s
23
+ * `createUploadRoute` — a different persistence model (durable product store
24
+ * vs. inline-`data:`-or-ephemeral-sandbox-workspace). See that module's doc
25
+ * comment for the up-to-date framing between the two.
26
+ */
27
+ import type { ChatAttachmentKind } from './wire';
28
+ import type { WriteAttachmentFn } from './attachment-store';
29
+ import { type AttachmentPathCheck } from './resolve-attachments';
30
+ /** Outcome of the injected `authorize` seam: auth + rate limiting +
31
+ * scope resolution, all in one place so a 429 rides `{ok:false, response}`
32
+ * exactly like a 401 does — this factory has no rate-limit opinion of its
33
+ * own. `writeAttachment` lets a single request override the option-level
34
+ * store (e.g. routing per-tenant), defaulting to `options.writeAttachment`
35
+ * when absent. */
36
+ export type AttachmentUploadAuthorization = {
37
+ ok: true;
38
+ scopeId: string;
39
+ writeAttachment?: WriteAttachmentFn;
40
+ } | {
41
+ ok: false;
42
+ response: Response;
43
+ };
44
+ /** Define options to authorize, write, and limit attachment uploads in a route */
45
+ export interface CreateAttachmentUploadRouteOptions {
46
+ /** Authenticate the caller, rate-limit, and resolve the store scope
47
+ * (workspace/tenant id) — never a query param. */
48
+ authorize(args: {
49
+ request: Request;
50
+ }): Promise<AttachmentUploadAuthorization>;
51
+ /** Default store writer. `authorize` may override it per-request. */
52
+ writeAttachment: WriteAttachmentFn;
53
+ /** Overridable caps. Defaults come from `./attachment-validation`. */
54
+ limits?: {
55
+ /** Most files one request may carry. Default {@link ATTACHMENT_MAX_COUNT}. */
56
+ maxCount?: number;
57
+ /** Ceiling on a binary file's raw size. Default {@link MAX_BINARY_ATTACHMENT_BYTES}. */
58
+ maxBinaryBytes?: number;
59
+ /** Ceiling on a text file's raw size. Default {@link MAX_TEXT_ATTACHMENT_BYTES}. */
60
+ maxTextBytes?: number;
61
+ /** Aggregate raw-byte ceiling across the batch. Default {@link MAX_ATTACHMENT_TOTAL_BYTES}. */
62
+ maxTotalBytes?: number;
63
+ };
64
+ /** Attachment kinds this route accepts. Default `['image', 'file']`. */
65
+ allowedKinds?: ChatAttachmentKind[];
66
+ /** Sniffed-mime allowlist fed to `checkAttachmentType`. Default
67
+ * {@link ALLOWED_ATTACHMENT_SNIFFED_MIMES}. Narrow it to accept less than
68
+ * the default (`new Set(['application/pdf'])`), or widen it to accept a
69
+ * format the default refuses — macro-enabled Office packages are the
70
+ * shipped case:
71
+ * `new Set([...ALLOWED_ATTACHMENT_SNIFFED_MIMES, ...MACRO_ENABLED_OOXML_SNIFFED_MIMES])`. */
72
+ allowedSniffedMimes?: ReadonlySet<string>;
73
+ /** Sanitized-name → store path. Default identity (the sanitized name IS
74
+ * the path); gtm passes `vaultFolderForFileName`, a tenant product a
75
+ * scope prefix. */
76
+ pathFor?: (name: string) => string;
77
+ /** Store-path validator. Default {@link defaultValidateAttachmentPath}. */
78
+ validatePath?: (path: string) => AttachmentPathCheck;
79
+ /** Last-resort media-type hook for text content the sniffer can't type.
80
+ * Default {@link sniffMimeFromName}. */
81
+ sniffMime?: (name: string) => string;
82
+ }
83
+ /** Resolve an attachment upload route handler with customizable limits and validation options */
84
+ export declare function createAttachmentUploadRoute(options: CreateAttachmentUploadRouteOptions): (request: Request) => Promise<Response>;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Shared attachment validation core — constants, type-gate, and filename
3
+ * sanitization used by BOTH the (server) attachment upload route and the
4
+ * (browser) composer's client-side pre-validation, so a rejection never
5
+ * differs depending on which side classified the bytes first.
6
+ *
7
+ * ≈ gtm-agent's `src/lib/attachment-limits.ts`, minus what agent-app already
8
+ * has (`ATTACHMENT_MAX_COUNT`/`MAX_ATTACHMENT_TOTAL_BYTES`/
9
+ * `attachmentTotalSizeErrorMessage` lived in `./resolve-attachments` and are
10
+ * re-homed here so the whole validation vocabulary — count cap, size caps,
11
+ * and type gate — has one address). Import-free besides `./wire`
12
+ * (`formatBytes`) and `./binary-sniff` (`SniffResult`): `/web-react`
13
+ * re-exports `/chat-routes` modules into browser bundles
14
+ * (`tests/browser-safe-subpaths.test.ts` walks the graph), so nothing here
15
+ * may reach a Node builtin or an engine package.
16
+ */
17
+ import type { SniffResult } from './binary-sniff';
18
+ /** Ceiling on a binary attachment's raw (pre-encoding) byte size. */
19
+ export declare const MAX_BINARY_ATTACHMENT_BYTES: number;
20
+ /** Ceiling on a text attachment's raw byte size. Text hydrates through
21
+ * inline prompt parts, a separate path that remains proxy-capped (see
22
+ * `INLINE_PARTS_MAX_BYTES` in `./wire`). */
23
+ export declare const MAX_TEXT_ATTACHMENT_BYTES: number;
24
+ /** Most files a single request may carry: the composer staging cap, the
25
+ * upload route's per-request cap, and the chat body's `attachments` cap. */
26
+ export declare const ATTACHMENT_MAX_COUNT = 10;
27
+ /** Aggregate raw-byte ceiling across one message's attachments. */
28
+ export declare const MAX_ATTACHMENT_TOTAL_BYTES: number;
29
+ /**
30
+ * Accept list for the composer file picker + type validation, same grammar as
31
+ * the native `<input accept>` attribute. Images plus the text/doc types a
32
+ * product's store actually reads.
33
+ *
34
+ * Every extension here is one the default {@link ALLOWED_ATTACHMENT_SNIFFED_MIMES}
35
+ * actually admits — a picker that offers a format the gate then rejects is a
36
+ * defect, so `tests/chat-routes/attachment-validation.test.ts` walks this
37
+ * string and proves each entry uploads.
38
+ */
39
+ export declare const ATTACHMENT_ACCEPT = "image/*,.pdf,.docx,.xlsx,.pptx,.txt,.md,.csv,.json,.yaml,.yml,.html";
40
+ /** The Office (OOXML) package mimes the default allow-list admits — the
41
+ * formats professionals actually send: Word contracts, Excel workpapers,
42
+ * PowerPoint decks. Admitting the format is a gate decision only; whether a
43
+ * product can EXTRACT text from one is that product's concern. */
44
+ export declare const OOXML_SNIFFED_MIMES: ReadonlySet<string>;
45
+ /** Macro-enabled Office package mimes (`.docm`/`.xlsm`/`.pptm`), reported by
46
+ * `sniffBinary` but deliberately NOT in the default allow-list: a package
47
+ * carrying a VBA project is a different risk decision than a plain document,
48
+ * and it is the product's to make. Opt in by widening the allow-list at the
49
+ * route's `allowedSniffedMimes` seam:
50
+ * `new Set([...ALLOWED_ATTACHMENT_SNIFFED_MIMES, ...MACRO_ENABLED_OOXML_SNIFFED_MIMES])`. */
51
+ export declare const MACRO_ENABLED_OOXML_SNIFFED_MIMES: ReadonlySet<string>;
52
+ /** Sniffed-mime counterpart of `ATTACHMENT_ACCEPT`: the binary formats
53
+ * `sniffBinary` can identify from content among the accepted types.
54
+ * Values must match `sniffBinary`'s output strings verbatim, or every
55
+ * upload of that format fails the type gate — locked by the round-trip test
56
+ * that sniffs real bytes of every mime listed here. */
57
+ export declare const ALLOWED_ATTACHMENT_SNIFFED_MIMES: ReadonlySet<string>;
58
+ /** Represent the result of checking an attachment's type with success or specific failure details */
59
+ export type AttachmentTypeCheckResult = {
60
+ succeeded: true;
61
+ } | {
62
+ succeeded: false;
63
+ code: 'attachment_type_mismatch' | 'attachment_type_not_allowed';
64
+ message: string;
65
+ };
66
+ /**
67
+ * Cross-check a filename's extension against its sniffed content.
68
+ *
69
+ * Text content (`sniff.binary === false`) always passes here — it has no
70
+ * magic bytes to compare, so it rides the existing UTF-8 gate instead. For
71
+ * binary content: an extension with an unambiguous magic-byte family (e.g.
72
+ * `.pdf`) must match the sniffed mime, or the upload is a mismatch (a
73
+ * renamed file). Otherwise the sniffed mime must be one of `allowed`
74
+ * (default {@link ALLOWED_ATTACHMENT_SNIFFED_MIMES}), or the upload is
75
+ * rejected outright. The `allowed` param feeds a route's override seam (a
76
+ * product accepting a narrower or wider set than the default).
77
+ */
78
+ export declare function checkAttachmentType(fileName: string, sniff: SniffResult, allowed?: ReadonlySet<string>): AttachmentTypeCheckResult;
79
+ /**
80
+ * Rewrite a filename into the store-path charset (`A-Za-z0-9._-` per
81
+ * segment) — attachment paths double as store keys, sandbox file paths, and
82
+ * in-message path references, none of which tolerate spaces or punctuation.
83
+ * Runs of unsupported characters collapse to one `-`; leading dots/dashes are
84
+ * stripped so the name can't read as a hidden segment. The original name is
85
+ * preserved separately (the returned `ChatAttachmentInput.name`), so
86
+ * sanitization loses nothing.
87
+ */
88
+ export declare function sanitizeAttachmentFileName(name: string): string;
89
+ /** Human-readable error naming both the actual size and the limit that was
90
+ * exceeded. Shared so the server route and the composer pre-check report
91
+ * the same message shape. */
92
+ export declare function attachmentSizeErrorMessage(name: string, actualBytes: number, limitBytes: number): string;
93
+ /** Human-readable error for a chat message whose combined attachments exceed
94
+ * the aggregate raw-byte ceiling. */
95
+ export declare function attachmentTotalSizeErrorMessage(totalBytes: number, limitBytes: number): string;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Content-based binary/text classification, shared by the attachment upload
3
+ * route (server) and the composer's client-side pre-validation (browser) —
4
+ * both sides must agree on what counts as binary before a byte ever leaves
5
+ * the client. Extension-based allowlists lie (a renamed `.docx`, a PNG saved
6
+ * as `.txt`), so classification reads the actual bytes: a magic-byte table
7
+ * for common binary formats first, then a UTF-8 decode attempt for
8
+ * everything else. Two families need more than a fixed-offset signature and
9
+ * get a reader of their own — ISO-BMFF brands (`sniffFtyp`) and OOXML Office
10
+ * packages, whose PKZIP container is shared with every other `.zip`
11
+ * (`sniffOoxml`).
12
+ *
13
+ * Lifted near-verbatim from gtm-agent's `src/lib/binary-sniff.ts` (the
14
+ * source PRs hardened this against real corruption/gate bugs: gtm#584,
15
+ * gtm#592). Import-free by design — `/web-react` re-exports `/chat-routes`
16
+ * modules into browser bundles (`tests/browser-safe-subpaths.test.ts` walks
17
+ * the graph), so nothing here may reach a Node builtin or an engine package.
18
+ */
19
+ export interface SniffResult {
20
+ binary: boolean;
21
+ mime: string | null;
22
+ }
23
+ /** Sniffed mime for a Word OOXML package (`.docx`). */
24
+ export declare const OOXML_WORD_MIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
25
+ /** Sniffed mime for an Excel OOXML package (`.xlsx`). */
26
+ export declare const OOXML_SPREADSHEET_MIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
27
+ /** Sniffed mime for a PowerPoint OOXML package (`.pptx`). */
28
+ export declare const OOXML_PRESENTATION_MIME = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
29
+ /** Sniffed mime for a macro-enabled Word package (`.docm`). Reported
30
+ * separately from {@link OOXML_WORD_MIME} so a package carrying a VBA project
31
+ * can never be admitted under the plain-document mime: a route that wants
32
+ * macro-enabled files opts in explicitly through its allowed-mime seam. */
33
+ export declare const OOXML_WORD_MACRO_ENABLED_MIME = "application/vnd.ms-word.document.macroEnabled.12";
34
+ /** Sniffed mime for a macro-enabled Excel package (`.xlsm`). */
35
+ export declare const OOXML_SPREADSHEET_MACRO_ENABLED_MIME = "application/vnd.ms-excel.sheet.macroEnabled.12";
36
+ /** Sniffed mime for a macro-enabled PowerPoint package (`.pptm`). */
37
+ export declare const OOXML_PRESENTATION_MACRO_ENABLED_MIME = "application/vnd.ms-powerpoint.presentation.macroEnabled.12";
38
+ /** Decide whether uploaded bytes are binary or text, and identify the mime
39
+ * type when it can be determined from content. Magic bytes are checked
40
+ * first; anything unmatched falls back to a fatal UTF-8 decode. A NUL byte
41
+ * or a decode failure means binary. Valid UTF-8 that is an SVG document is
42
+ * binary (byte-identity matters for image tooling). Content that matches
43
+ * nothing and does not decode as text is binary with an unknown mime —
44
+ * extension-based guessing happens at the call site, not here. */
45
+ export declare function sniffBinary(bytes: Uint8Array): SniffResult;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Recover a detached Sandbox turn from its durable completed records.
3
+ *
4
+ * A fast detached run can finish before the live event subscriber receives
5
+ * every message-part event. The Sandbox still retains two exact records: a
6
+ * turn-id keyed result cache and the completed assistant message on the
7
+ * session. This adapter joins them without guessing across turns, then returns
8
+ * the same `DetachedTurnFinal` shape `runDetachedTurn` already consumes.
9
+ */
10
+ import type { SandboxInstance } from '@tangle-network/sandbox';
11
+ import type { DetachedTurnFinal } from './detached-turn';
12
+ /** The official Sandbox methods needed for completed-turn recovery. */
13
+ export type CompletedSandboxTurnSource = Pick<SandboxInstance, 'findCompletedTurn' | 'session'>;
14
+ /** Options for resolving one exact detached turn. */
15
+ export interface ReadCompletedSandboxTurnOptions {
16
+ turnId: string;
17
+ sessionId: string;
18
+ log?: (message: string, meta?: Record<string, unknown>) => void;
19
+ }
20
+ /**
21
+ * Read the exact completed turn. The session-level result is consulted only
22
+ * when the matching completed assistant message is still the latest message;
23
+ * otherwise that result could belong to a newer turn on the same session.
24
+ */
25
+ export declare function readCompletedSandboxTurn(box: CompletedSandboxTurnSource, options: ReadCompletedSandboxTurnOptions): Promise<DetachedTurnFinal | null>;