@agent-native/toolkit 0.23.1-nightly-20260929180759 → 0.198.1

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 (2903) hide show
  1. package/README.md +20 -10
  2. package/agent-native.eject.json +1197 -1
  3. package/dist/app/PrimitiveButton.d.ts +5 -0
  4. package/dist/app/PrimitiveButton.d.ts.map +1 -0
  5. package/dist/app/PrimitiveButton.js +17 -0
  6. package/dist/app/PrimitiveButton.js.map +1 -0
  7. package/dist/app/agent-page/AgentContextTab.d.ts +5 -0
  8. package/dist/app/agent-page/AgentContextTab.d.ts.map +1 -0
  9. package/dist/app/agent-page/AgentContextTab.js +202 -0
  10. package/dist/app/agent-page/AgentContextTab.js.map +1 -0
  11. package/dist/app/agent-page/AgentEmptyState.d.ts +14 -0
  12. package/dist/app/agent-page/AgentEmptyState.d.ts.map +1 -0
  13. package/dist/app/agent-page/AgentEmptyState.js +10 -0
  14. package/dist/app/agent-page/AgentEmptyState.js.map +1 -0
  15. package/dist/app/agent-page/AgentJobsTab.d.ts +15 -0
  16. package/dist/app/agent-page/AgentJobsTab.d.ts.map +1 -0
  17. package/dist/app/agent-page/AgentJobsTab.js +379 -0
  18. package/dist/app/agent-page/AgentJobsTab.js.map +1 -0
  19. package/dist/app/agent-page/AgentTabFrame.d.ts +14 -0
  20. package/dist/app/agent-page/AgentTabFrame.d.ts.map +1 -0
  21. package/dist/app/agent-page/AgentTabFrame.js +9 -0
  22. package/dist/app/agent-page/AgentTabFrame.js.map +1 -0
  23. package/dist/app/agent-page/AgentTabsPage.d.ts +28 -0
  24. package/dist/app/agent-page/AgentTabsPage.d.ts.map +1 -0
  25. package/dist/app/agent-page/AgentTabsPage.js +425 -0
  26. package/dist/app/agent-page/AgentTabsPage.js.map +1 -0
  27. package/dist/app/agent-page/AgentWorkspaceContent.d.ts +10 -0
  28. package/dist/app/agent-page/AgentWorkspaceContent.d.ts.map +1 -0
  29. package/dist/app/agent-page/AgentWorkspaceContent.js +127 -0
  30. package/dist/app/agent-page/AgentWorkspaceContent.js.map +1 -0
  31. package/dist/app/agent-page/AutomationDetailsDialog.d.ts +21 -0
  32. package/dist/app/agent-page/AutomationDetailsDialog.d.ts.map +1 -0
  33. package/dist/app/agent-page/AutomationDetailsDialog.js +40 -0
  34. package/dist/app/agent-page/AutomationDetailsDialog.js.map +1 -0
  35. package/dist/app/agent-page/AutomationScheduleDialog.d.ts +17 -0
  36. package/dist/app/agent-page/AutomationScheduleDialog.d.ts.map +1 -0
  37. package/dist/app/agent-page/AutomationScheduleDialog.js +161 -0
  38. package/dist/app/agent-page/AutomationScheduleDialog.js.map +1 -0
  39. package/dist/app/agent-page/ScheduledTriggerNotice.d.ts +7 -0
  40. package/dist/app/agent-page/ScheduledTriggerNotice.d.ts.map +1 -0
  41. package/dist/app/agent-page/ScheduledTriggerNotice.js +58 -0
  42. package/dist/app/agent-page/ScheduledTriggerNotice.js.map +1 -0
  43. package/dist/app/agent-page/TimezoneSelect.d.ts +13 -0
  44. package/dist/app/agent-page/TimezoneSelect.d.ts.map +1 -0
  45. package/dist/app/agent-page/TimezoneSelect.js +90 -0
  46. package/dist/app/agent-page/TimezoneSelect.js.map +1 -0
  47. package/dist/app/agent-page/automation-schedule.d.ts +44 -0
  48. package/dist/app/agent-page/automation-schedule.d.ts.map +1 -0
  49. package/dist/app/agent-page/automation-schedule.js +199 -0
  50. package/dist/app/agent-page/automation-schedule.js.map +1 -0
  51. package/dist/app/agent-page/index.d.ts +4 -0
  52. package/dist/app/agent-page/index.d.ts.map +1 -0
  53. package/dist/app/agent-page/index.js +2 -0
  54. package/dist/app/agent-page/index.js.map +1 -0
  55. package/dist/app/agent-page/scheduled-trigger-state.d.ts +14 -0
  56. package/dist/app/agent-page/scheduled-trigger-state.d.ts.map +1 -0
  57. package/dist/app/agent-page/scheduled-trigger-state.js +7 -0
  58. package/dist/app/agent-page/scheduled-trigger-state.js.map +1 -0
  59. package/dist/app/agent-page/types.d.ts +14 -0
  60. package/dist/app/agent-page/types.d.ts.map +1 -0
  61. package/dist/app/agent-page/types.js +9 -0
  62. package/dist/app/agent-page/types.js.map +1 -0
  63. package/dist/app/agent-page/use-jobs.d.ts +103 -0
  64. package/dist/app/agent-page/use-jobs.d.ts.map +1 -0
  65. package/dist/app/agent-page/use-jobs.js +118 -0
  66. package/dist/app/agent-page/use-jobs.js.map +1 -0
  67. package/dist/app/agentkit/index.d.ts +2 -0
  68. package/dist/app/agentkit/index.d.ts.map +1 -0
  69. package/dist/app/agentkit/index.js +2 -0
  70. package/dist/app/agentkit/index.js.map +1 -0
  71. package/dist/app/agentkit/react/chat.d.ts +27 -0
  72. package/dist/app/agentkit/react/chat.d.ts.map +1 -0
  73. package/dist/app/agentkit/react/chat.js +19 -0
  74. package/dist/app/agentkit/react/chat.js.map +1 -0
  75. package/dist/app/agentkit/react/components.d.ts +110 -0
  76. package/dist/app/agentkit/react/components.d.ts.map +1 -0
  77. package/dist/app/agentkit/react/components.js +2138 -0
  78. package/dist/app/agentkit/react/components.js.map +1 -0
  79. package/dist/app/agentkit/react/composer-submission.d.ts +22 -0
  80. package/dist/app/agentkit/react/composer-submission.d.ts.map +1 -0
  81. package/dist/app/agentkit/react/composer-submission.js +33 -0
  82. package/dist/app/agentkit/react/composer-submission.js.map +1 -0
  83. package/dist/app/agentkit/react/context.d.ts +315 -0
  84. package/dist/app/agentkit/react/context.d.ts.map +1 -0
  85. package/dist/app/agentkit/react/context.js +399 -0
  86. package/dist/app/agentkit/react/context.js.map +1 -0
  87. package/dist/app/agentkit/react/headless.d.ts +3 -0
  88. package/dist/app/agentkit/react/headless.d.ts.map +1 -0
  89. package/dist/app/agentkit/react/headless.js +3 -0
  90. package/dist/app/agentkit/react/headless.js.map +1 -0
  91. package/dist/app/agentkit/react/index.d.ts +6 -0
  92. package/dist/app/agentkit/react/index.d.ts.map +1 -0
  93. package/dist/app/agentkit/react/index.js +6 -0
  94. package/dist/app/agentkit/react/index.js.map +1 -0
  95. package/dist/app/agentkit/react/root.d.ts +49 -0
  96. package/dist/app/agentkit/react/root.d.ts.map +1 -0
  97. package/dist/app/agentkit/react/root.js +145 -0
  98. package/dist/app/agentkit/react/root.js.map +1 -0
  99. package/dist/app/agentkit/react/streaming-text.d.ts +17 -0
  100. package/dist/app/agentkit/react/streaming-text.d.ts.map +1 -0
  101. package/dist/app/agentkit/react/streaming-text.js +257 -0
  102. package/dist/app/agentkit/react/streaming-text.js.map +1 -0
  103. package/dist/app/agentkit/react/styles.css +1898 -0
  104. package/dist/app/auth/AuthPage.d.ts +34 -0
  105. package/dist/app/auth/AuthPage.d.ts.map +1 -0
  106. package/dist/app/auth/AuthPage.js +2122 -0
  107. package/dist/app/auth/AuthPage.js.map +1 -0
  108. package/dist/app/auth/RequireSession.d.ts +15 -0
  109. package/dist/app/auth/RequireSession.d.ts.map +1 -0
  110. package/dist/app/auth/RequireSession.js +43 -0
  111. package/dist/app/auth/RequireSession.js.map +1 -0
  112. package/dist/app/auth/ResetPasswordPage.d.ts +6 -0
  113. package/dist/app/auth/ResetPasswordPage.d.ts.map +1 -0
  114. package/dist/app/auth/ResetPasswordPage.js +122 -0
  115. package/dist/app/auth/ResetPasswordPage.js.map +1 -0
  116. package/dist/app/auth/entry.d.ts +2 -0
  117. package/dist/app/auth/entry.d.ts.map +1 -0
  118. package/dist/app/auth/entry.js +24 -0
  119. package/dist/app/auth/entry.js.map +1 -0
  120. package/dist/app/auth/index.d.ts +4 -0
  121. package/dist/app/auth/index.d.ts.map +1 -0
  122. package/dist/app/auth/index.js +4 -0
  123. package/dist/app/auth/index.js.map +1 -0
  124. package/dist/app/blocks/AiEditableField.d.ts +8 -0
  125. package/dist/app/blocks/AiEditableField.d.ts.map +1 -0
  126. package/dist/app/blocks/AiEditableField.js +10 -0
  127. package/dist/app/blocks/AiEditableField.js.map +1 -0
  128. package/dist/app/blocks/BlockView.d.ts +17 -0
  129. package/dist/app/blocks/BlockView.d.ts.map +1 -0
  130. package/dist/app/blocks/BlockView.js +39 -0
  131. package/dist/app/blocks/BlockView.js.map +1 -0
  132. package/dist/app/blocks/RegistryBlockDataProvider.d.ts +7 -0
  133. package/dist/app/blocks/RegistryBlockDataProvider.d.ts.map +1 -0
  134. package/dist/app/blocks/RegistryBlockDataProvider.js +54 -0
  135. package/dist/app/blocks/RegistryBlockDataProvider.js.map +1 -0
  136. package/dist/app/blocks/SchemaBlockEditor.d.ts +11 -0
  137. package/dist/app/blocks/SchemaBlockEditor.d.ts.map +1 -0
  138. package/dist/app/blocks/SchemaBlockEditor.js +139 -0
  139. package/dist/app/blocks/SchemaBlockEditor.js.map +1 -0
  140. package/dist/app/blocks/code-block-direction.d.ts +6 -0
  141. package/dist/app/blocks/code-block-direction.d.ts.map +1 -0
  142. package/dist/app/blocks/code-block-direction.js +5 -0
  143. package/dist/app/blocks/code-block-direction.js.map +1 -0
  144. package/dist/app/blocks/index.d.ts +68 -0
  145. package/dist/app/blocks/index.d.ts.map +1 -0
  146. package/dist/app/blocks/index.js +68 -0
  147. package/dist/app/blocks/index.js.map +1 -0
  148. package/dist/app/blocks/library/AnnotatedCodeBlock.d.ts +6 -0
  149. package/dist/app/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -0
  150. package/dist/app/blocks/library/AnnotatedCodeBlock.js +225 -0
  151. package/dist/app/blocks/library/AnnotatedCodeBlock.js.map +1 -0
  152. package/dist/app/blocks/library/ApiEndpointBlock.d.ts +5 -0
  153. package/dist/app/blocks/library/ApiEndpointBlock.d.ts.map +1 -0
  154. package/dist/app/blocks/library/ApiEndpointBlock.js +267 -0
  155. package/dist/app/blocks/library/ApiEndpointBlock.js.map +1 -0
  156. package/dist/app/blocks/library/DataModelBlock.d.ts +5 -0
  157. package/dist/app/blocks/library/DataModelBlock.d.ts.map +1 -0
  158. package/dist/app/blocks/library/DataModelBlock.js +222 -0
  159. package/dist/app/blocks/library/DataModelBlock.js.map +1 -0
  160. package/dist/app/blocks/library/DiffBlock.d.ts +12 -0
  161. package/dist/app/blocks/library/DiffBlock.d.ts.map +1 -0
  162. package/dist/app/blocks/library/DiffBlock.js +777 -0
  163. package/dist/app/blocks/library/DiffBlock.js.map +1 -0
  164. package/dist/app/blocks/library/FileTreeBlock.d.ts +5 -0
  165. package/dist/app/blocks/library/FileTreeBlock.d.ts.map +1 -0
  166. package/dist/app/blocks/library/FileTreeBlock.js +298 -0
  167. package/dist/app/blocks/library/FileTreeBlock.js.map +1 -0
  168. package/dist/app/blocks/library/HighlightedCode.d.ts +14 -0
  169. package/dist/app/blocks/library/HighlightedCode.d.ts.map +1 -0
  170. package/dist/app/blocks/library/HighlightedCode.js +152 -0
  171. package/dist/app/blocks/library/HighlightedCode.js.map +1 -0
  172. package/dist/app/blocks/library/JsonExplorerBlock.d.ts +16 -0
  173. package/dist/app/blocks/library/JsonExplorerBlock.d.ts.map +1 -0
  174. package/dist/app/blocks/library/JsonExplorerBlock.js +223 -0
  175. package/dist/app/blocks/library/JsonExplorerBlock.js.map +1 -0
  176. package/dist/app/blocks/library/MermaidBlock.d.ts +5 -0
  177. package/dist/app/blocks/library/MermaidBlock.d.ts.map +1 -0
  178. package/dist/app/blocks/library/MermaidBlock.js +152 -0
  179. package/dist/app/blocks/library/MermaidBlock.js.map +1 -0
  180. package/dist/app/blocks/library/OpenApiSpecBlock.d.ts +12 -0
  181. package/dist/app/blocks/library/OpenApiSpecBlock.d.ts.map +1 -0
  182. package/dist/app/blocks/library/OpenApiSpecBlock.js +459 -0
  183. package/dist/app/blocks/library/OpenApiSpecBlock.js.map +1 -0
  184. package/dist/app/blocks/library/annotation-rail.d.ts +175 -0
  185. package/dist/app/blocks/library/annotation-rail.d.ts.map +1 -0
  186. package/dist/app/blocks/library/annotation-rail.js +467 -0
  187. package/dist/app/blocks/library/annotation-rail.js.map +1 -0
  188. package/dist/app/blocks/library/block-copy.d.ts +33 -0
  189. package/dist/app/blocks/library/block-copy.d.ts.map +1 -0
  190. package/dist/app/blocks/library/block-copy.js +361 -0
  191. package/dist/app/blocks/library/block-copy.js.map +1 -0
  192. package/dist/app/blocks/library/callout.d.ts +6 -0
  193. package/dist/app/blocks/library/callout.d.ts.map +1 -0
  194. package/dist/app/blocks/library/callout.js +45 -0
  195. package/dist/app/blocks/library/callout.js.map +1 -0
  196. package/dist/app/blocks/library/checklist.d.ts +8 -0
  197. package/dist/app/blocks/library/checklist.d.ts.map +1 -0
  198. package/dist/app/blocks/library/checklist.js +45 -0
  199. package/dist/app/blocks/library/checklist.js.map +1 -0
  200. package/dist/app/blocks/library/code-copy-button.d.ts +4 -0
  201. package/dist/app/blocks/library/code-copy-button.d.ts.map +1 -0
  202. package/dist/app/blocks/library/code-copy-button.js +13 -0
  203. package/dist/app/blocks/library/code-copy-button.js.map +1 -0
  204. package/dist/app/blocks/library/code-filename-label.d.ts +8 -0
  205. package/dist/app/blocks/library/code-filename-label.d.ts.map +1 -0
  206. package/dist/app/blocks/library/code-filename-label.js +15 -0
  207. package/dist/app/blocks/library/code-filename-label.js.map +1 -0
  208. package/dist/app/blocks/library/code-highlight.d.ts +5 -0
  209. package/dist/app/blocks/library/code-highlight.d.ts.map +1 -0
  210. package/dist/app/blocks/library/code-highlight.js +142 -0
  211. package/dist/app/blocks/library/code-highlight.js.map +1 -0
  212. package/dist/app/blocks/library/code-tabs.d.ts +3 -0
  213. package/dist/app/blocks/library/code-tabs.d.ts.map +1 -0
  214. package/dist/app/blocks/library/code-tabs.js +258 -0
  215. package/dist/app/blocks/library/code-tabs.js.map +1 -0
  216. package/dist/app/blocks/library/code.d.ts +3 -0
  217. package/dist/app/blocks/library/code.d.ts.map +1 -0
  218. package/dist/app/blocks/library/code.js +107 -0
  219. package/dist/app/blocks/library/code.js.map +1 -0
  220. package/dist/app/blocks/library/columns.d.ts +6 -0
  221. package/dist/app/blocks/library/columns.d.ts.map +1 -0
  222. package/dist/app/blocks/library/columns.js +178 -0
  223. package/dist/app/blocks/library/columns.js.map +1 -0
  224. package/dist/app/blocks/library/dev-doc-ui.d.ts +40 -0
  225. package/dist/app/blocks/library/dev-doc-ui.d.ts.map +1 -0
  226. package/dist/app/blocks/library/dev-doc-ui.js +37 -0
  227. package/dist/app/blocks/library/dev-doc-ui.js.map +1 -0
  228. package/dist/app/blocks/library/diagram.d.ts +10 -0
  229. package/dist/app/blocks/library/diagram.d.ts.map +1 -0
  230. package/dist/app/blocks/library/diagram.js +347 -0
  231. package/dist/app/blocks/library/diagram.js.map +1 -0
  232. package/dist/app/blocks/library/html.d.ts +6 -0
  233. package/dist/app/blocks/library/html.d.ts.map +1 -0
  234. package/dist/app/blocks/library/html.js +88 -0
  235. package/dist/app/blocks/library/html.js.map +1 -0
  236. package/dist/app/blocks/library/narrow-container.d.ts +6 -0
  237. package/dist/app/blocks/library/narrow-container.d.ts.map +1 -0
  238. package/dist/app/blocks/library/narrow-container.js +10 -0
  239. package/dist/app/blocks/library/narrow-container.js.map +1 -0
  240. package/dist/app/blocks/library/question-form.d.ts +8 -0
  241. package/dist/app/blocks/library/question-form.d.ts.map +1 -0
  242. package/dist/app/blocks/library/question-form.js +319 -0
  243. package/dist/app/blocks/library/question-form.js.map +1 -0
  244. package/dist/app/blocks/library/sanitize-html.d.ts +7 -0
  245. package/dist/app/blocks/library/sanitize-html.d.ts.map +1 -0
  246. package/dist/app/blocks/library/sanitize-html.js +326 -0
  247. package/dist/app/blocks/library/sanitize-html.js.map +1 -0
  248. package/dist/app/blocks/library/specs.d.ts +8 -0
  249. package/dist/app/blocks/library/specs.d.ts.map +1 -0
  250. package/dist/app/blocks/library/specs.js +211 -0
  251. package/dist/app/blocks/library/specs.js.map +1 -0
  252. package/dist/app/blocks/library/table.d.ts +3 -0
  253. package/dist/app/blocks/library/table.d.ts.map +1 -0
  254. package/dist/app/blocks/library/table.js +156 -0
  255. package/dist/app/blocks/library/table.js.map +1 -0
  256. package/dist/app/blocks/library/tabs.d.ts +6 -0
  257. package/dist/app/blocks/library/tabs.d.ts.map +1 -0
  258. package/dist/app/blocks/library/tabs.js +250 -0
  259. package/dist/app/blocks/library/tabs.js.map +1 -0
  260. package/dist/app/blocks/library/wireframe-icons.d.ts +2 -0
  261. package/dist/app/blocks/library/wireframe-icons.d.ts.map +1 -0
  262. package/dist/app/blocks/library/wireframe-icons.js +175 -0
  263. package/dist/app/blocks/library/wireframe-icons.js.map +1 -0
  264. package/dist/app/blocks/library/wireframe-kit.d.ts +234 -0
  265. package/dist/app/blocks/library/wireframe-kit.d.ts.map +1 -0
  266. package/dist/app/blocks/library/wireframe-kit.js +1017 -0
  267. package/dist/app/blocks/library/wireframe-kit.js.map +1 -0
  268. package/dist/app/blocks/library/wireframe.d.ts +6 -0
  269. package/dist/app/blocks/library/wireframe.d.ts.map +1 -0
  270. package/dist/app/blocks/library/wireframe.js +174 -0
  271. package/dist/app/blocks/library/wireframe.js.map +1 -0
  272. package/dist/app/blocks/provider.d.ts +16 -0
  273. package/dist/app/blocks/provider.d.ts.map +1 -0
  274. package/dist/app/blocks/provider.js +17 -0
  275. package/dist/app/blocks/provider.js.map +1 -0
  276. package/dist/app/changelog/Changelog.d.ts +31 -0
  277. package/dist/app/changelog/Changelog.d.ts.map +1 -0
  278. package/dist/app/changelog/Changelog.js +100 -0
  279. package/dist/app/changelog/Changelog.js.map +1 -0
  280. package/dist/app/changelog/index.d.ts +2 -0
  281. package/dist/app/changelog/index.d.ts.map +1 -0
  282. package/dist/app/changelog/index.js +2 -0
  283. package/dist/app/changelog/index.js.map +1 -0
  284. package/dist/app/chat/AgentAskPopover.d.ts +16 -0
  285. package/dist/app/chat/AgentAskPopover.d.ts.map +1 -0
  286. package/dist/app/chat/AgentAskPopover.js +25 -0
  287. package/dist/app/chat/AgentAskPopover.js.map +1 -0
  288. package/dist/app/chat/AgentChatHome.d.ts +9 -0
  289. package/dist/app/chat/AgentChatHome.d.ts.map +1 -0
  290. package/dist/app/chat/AgentChatHome.js +7 -0
  291. package/dist/app/chat/AgentChatHome.js.map +1 -0
  292. package/dist/app/chat/AgentKitAssistantChat.d.ts +15 -0
  293. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -0
  294. package/dist/app/chat/AgentKitAssistantChat.js +3023 -0
  295. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -0
  296. package/dist/app/chat/AgentNativeEmbedded.d.ts +14 -0
  297. package/dist/app/chat/AgentNativeEmbedded.d.ts.map +1 -0
  298. package/dist/app/chat/AgentNativeEmbedded.js +35 -0
  299. package/dist/app/chat/AgentNativeEmbedded.js.map +1 -0
  300. package/dist/app/chat/AgentPanel.d.ts +128 -0
  301. package/dist/app/chat/AgentPanel.d.ts.map +1 -0
  302. package/dist/app/chat/AgentPanel.js +1216 -0
  303. package/dist/app/chat/AgentPanel.js.map +1 -0
  304. package/dist/app/chat/AgentSidebar.d.ts +89 -0
  305. package/dist/app/chat/AgentSidebar.d.ts.map +1 -0
  306. package/dist/app/chat/AgentSidebar.js +827 -0
  307. package/dist/app/chat/AgentSidebar.js.map +1 -0
  308. package/dist/app/chat/AgentSidebarPanel.d.ts +3 -0
  309. package/dist/app/chat/AgentSidebarPanel.d.ts.map +1 -0
  310. package/dist/app/chat/AgentSidebarPanel.js +8 -0
  311. package/dist/app/chat/AgentSidebarPanel.js.map +1 -0
  312. package/dist/app/chat/AgentTaskCard.d.ts +9 -0
  313. package/dist/app/chat/AgentTaskCard.d.ts.map +1 -0
  314. package/dist/app/chat/AgentTaskCard.js +127 -0
  315. package/dist/app/chat/AgentTaskCard.js.map +1 -0
  316. package/dist/app/chat/BuilderReferralInviteRow.d.ts +4 -0
  317. package/dist/app/chat/BuilderReferralInviteRow.d.ts.map +1 -0
  318. package/dist/app/chat/BuilderReferralInviteRow.js +17 -0
  319. package/dist/app/chat/BuilderReferralInviteRow.js.map +1 -0
  320. package/dist/app/chat/ConnectBuilderCard.d.ts +11 -0
  321. package/dist/app/chat/ConnectBuilderCard.d.ts.map +1 -0
  322. package/dist/app/chat/ConnectBuilderCard.js +231 -0
  323. package/dist/app/chat/ConnectBuilderCard.js.map +1 -0
  324. package/dist/app/chat/FileStorageSetupPopover.d.ts +19 -0
  325. package/dist/app/chat/FileStorageSetupPopover.d.ts.map +1 -0
  326. package/dist/app/chat/FileStorageSetupPopover.js +60 -0
  327. package/dist/app/chat/FileStorageSetupPopover.js.map +1 -0
  328. package/dist/app/chat/HighlightedCodeBlock.d.ts +20 -0
  329. package/dist/app/chat/HighlightedCodeBlock.d.ts.map +1 -0
  330. package/dist/app/chat/HighlightedCodeBlock.js +98 -0
  331. package/dist/app/chat/HighlightedCodeBlock.js.map +1 -0
  332. package/dist/app/chat/KeepTabOpenNotice.d.ts +11 -0
  333. package/dist/app/chat/KeepTabOpenNotice.d.ts.map +1 -0
  334. package/dist/app/chat/KeepTabOpenNotice.js +75 -0
  335. package/dist/app/chat/KeepTabOpenNotice.js.map +1 -0
  336. package/dist/app/chat/MultiTabAssistantChat.d.ts +75 -0
  337. package/dist/app/chat/MultiTabAssistantChat.d.ts.map +1 -0
  338. package/dist/app/chat/MultiTabAssistantChat.js +2237 -0
  339. package/dist/app/chat/MultiTabAssistantChat.js.map +1 -0
  340. package/dist/app/chat/RunStuckBanner.d.ts +16 -0
  341. package/dist/app/chat/RunStuckBanner.d.ts.map +1 -0
  342. package/dist/app/chat/RunStuckBanner.js +207 -0
  343. package/dist/app/chat/RunStuckBanner.js.map +1 -0
  344. package/dist/app/chat/agent-sidebar-context.d.ts +2 -0
  345. package/dist/app/chat/agent-sidebar-context.d.ts.map +1 -0
  346. package/dist/app/chat/agent-sidebar-context.js +3 -0
  347. package/dist/app/chat/agent-sidebar-context.js.map +1 -0
  348. package/dist/app/chat/agent-sidebar-events.d.ts +7 -0
  349. package/dist/app/chat/agent-sidebar-events.d.ts.map +1 -0
  350. package/dist/app/chat/agent-sidebar-events.js +21 -0
  351. package/dist/app/chat/agent-sidebar-events.js.map +1 -0
  352. package/dist/app/chat/agent-sidebar-url-sync.d.ts +15 -0
  353. package/dist/app/chat/agent-sidebar-url-sync.d.ts.map +1 -0
  354. package/dist/app/chat/agent-sidebar-url-sync.js +169 -0
  355. package/dist/app/chat/agent-sidebar-url-sync.js.map +1 -0
  356. package/dist/app/chat/agentkit-chat/action-widget.d.ts +4 -0
  357. package/dist/app/chat/agentkit-chat/action-widget.d.ts.map +1 -0
  358. package/dist/app/chat/agentkit-chat/action-widget.js +76 -0
  359. package/dist/app/chat/agentkit-chat/action-widget.js.map +1 -0
  360. package/dist/app/chat/agentkit-chat/approval-card.d.ts +8 -0
  361. package/dist/app/chat/agentkit-chat/approval-card.d.ts.map +1 -0
  362. package/dist/app/chat/agentkit-chat/approval-card.js +85 -0
  363. package/dist/app/chat/agentkit-chat/approval-card.js.map +1 -0
  364. package/dist/app/chat/agentkit-chat/composer.d.ts +2 -0
  365. package/dist/app/chat/agentkit-chat/composer.d.ts.map +1 -0
  366. package/dist/app/chat/agentkit-chat/composer.js +2 -0
  367. package/dist/app/chat/agentkit-chat/composer.js.map +1 -0
  368. package/dist/app/chat/agentkit-chat/connections.d.ts +5 -0
  369. package/dist/app/chat/agentkit-chat/connections.d.ts.map +1 -0
  370. package/dist/app/chat/agentkit-chat/connections.js +27 -0
  371. package/dist/app/chat/agentkit-chat/connections.js.map +1 -0
  372. package/dist/app/chat/agentkit-chat/guided-questions.d.ts +148 -0
  373. package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -0
  374. package/dist/app/chat/agentkit-chat/guided-questions.js +658 -0
  375. package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -0
  376. package/dist/app/chat/agentkit-chat/history.d.ts +109 -0
  377. package/dist/app/chat/agentkit-chat/history.d.ts.map +1 -0
  378. package/dist/app/chat/agentkit-chat/history.js +647 -0
  379. package/dist/app/chat/agentkit-chat/history.js.map +1 -0
  380. package/dist/app/chat/agentkit-chat/index.d.ts +16 -0
  381. package/dist/app/chat/agentkit-chat/index.d.ts.map +1 -0
  382. package/dist/app/chat/agentkit-chat/index.js +16 -0
  383. package/dist/app/chat/agentkit-chat/index.js.map +1 -0
  384. package/dist/app/chat/agentkit-chat/parity-renderers.d.ts +11 -0
  385. package/dist/app/chat/agentkit-chat/parity-renderers.d.ts.map +1 -0
  386. package/dist/app/chat/agentkit-chat/parity-renderers.js +45 -0
  387. package/dist/app/chat/agentkit-chat/parity-renderers.js.map +1 -0
  388. package/dist/app/chat/agentkit-chat/questions.d.ts +2 -0
  389. package/dist/app/chat/agentkit-chat/questions.d.ts.map +1 -0
  390. package/dist/app/chat/agentkit-chat/questions.js +2 -0
  391. package/dist/app/chat/agentkit-chat/questions.js.map +1 -0
  392. package/dist/app/chat/agentkit-chat/rail.d.ts +5 -0
  393. package/dist/app/chat/agentkit-chat/rail.d.ts.map +1 -0
  394. package/dist/app/chat/agentkit-chat/rail.js +5 -0
  395. package/dist/app/chat/agentkit-chat/rail.js.map +1 -0
  396. package/dist/app/chat/agentkit-chat/root.d.ts +3 -0
  397. package/dist/app/chat/agentkit-chat/root.d.ts.map +1 -0
  398. package/dist/app/chat/agentkit-chat/root.js +12 -0
  399. package/dist/app/chat/agentkit-chat/root.js.map +1 -0
  400. package/dist/app/chat/agentkit-chat/suggestions.d.ts +2 -0
  401. package/dist/app/chat/agentkit-chat/suggestions.d.ts.map +1 -0
  402. package/dist/app/chat/agentkit-chat/suggestions.js +2 -0
  403. package/dist/app/chat/agentkit-chat/suggestions.js.map +1 -0
  404. package/dist/app/chat/chat/ChatHistoryList.d.ts +2 -0
  405. package/dist/app/chat/chat/ChatHistoryList.d.ts.map +1 -0
  406. package/dist/app/chat/chat/ChatHistoryList.js +2 -0
  407. package/dist/app/chat/chat/ChatHistoryList.js.map +1 -0
  408. package/dist/app/chat/chat/IframeEmbed.d.ts +10 -0
  409. package/dist/app/chat/chat/IframeEmbed.d.ts.map +1 -0
  410. package/dist/app/chat/chat/IframeEmbed.js +100 -0
  411. package/dist/app/chat/chat/IframeEmbed.js.map +1 -0
  412. package/dist/app/chat/chat/action-chat-ui-surface.d.ts +8 -0
  413. package/dist/app/chat/chat/action-chat-ui-surface.d.ts.map +1 -0
  414. package/dist/app/chat/chat/action-chat-ui-surface.js +14 -0
  415. package/dist/app/chat/chat/action-chat-ui-surface.js.map +1 -0
  416. package/dist/app/chat/chat/agent-activity-object.d.ts +15 -0
  417. package/dist/app/chat/chat/agent-activity-object.d.ts.map +1 -0
  418. package/dist/app/chat/chat/agent-activity-object.js +19 -0
  419. package/dist/app/chat/chat/agent-activity-object.js.map +1 -0
  420. package/dist/app/chat/chat/agent-activity-trace.d.ts +34 -0
  421. package/dist/app/chat/chat/agent-activity-trace.d.ts.map +1 -0
  422. package/dist/app/chat/chat/agent-activity-trace.js +56 -0
  423. package/dist/app/chat/chat/agent-activity-trace.js.map +1 -0
  424. package/dist/app/chat/chat/agent-approval-card.d.ts +42 -0
  425. package/dist/app/chat/chat/agent-approval-card.d.ts.map +1 -0
  426. package/dist/app/chat/chat/agent-approval-card.js +32 -0
  427. package/dist/app/chat/chat/agent-approval-card.js.map +1 -0
  428. package/dist/app/chat/chat/history-types.d.ts +50 -0
  429. package/dist/app/chat/chat/history-types.d.ts.map +1 -0
  430. package/dist/app/chat/chat/history-types.js +2 -0
  431. package/dist/app/chat/chat/history-types.js.map +1 -0
  432. package/dist/app/chat/chat/index.d.ts +36 -0
  433. package/dist/app/chat/chat/index.d.ts.map +1 -0
  434. package/dist/app/chat/chat/index.js +34 -0
  435. package/dist/app/chat/chat/index.js.map +1 -0
  436. package/dist/app/chat/chat/legacy-chart-shorthand.d.ts +22 -0
  437. package/dist/app/chat/chat/legacy-chart-shorthand.d.ts.map +1 -0
  438. package/dist/app/chat/chat/legacy-chart-shorthand.js +279 -0
  439. package/dist/app/chat/chat/legacy-chart-shorthand.js.map +1 -0
  440. package/dist/app/chat/chat/markdown-renderer.d.ts +77 -0
  441. package/dist/app/chat/chat/markdown-renderer.d.ts.map +1 -0
  442. package/dist/app/chat/chat/markdown-renderer.js +578 -0
  443. package/dist/app/chat/chat/markdown-renderer.js.map +1 -0
  444. package/dist/app/chat/chat/run-recovery.d.ts +60 -0
  445. package/dist/app/chat/chat/run-recovery.d.ts.map +1 -0
  446. package/dist/app/chat/chat/run-recovery.js +433 -0
  447. package/dist/app/chat/chat/run-recovery.js.map +1 -0
  448. package/dist/app/chat/chat/surface-types.d.ts +353 -0
  449. package/dist/app/chat/chat/surface-types.d.ts.map +1 -0
  450. package/dist/app/chat/chat/surface-types.js +4 -0
  451. package/dist/app/chat/chat/surface-types.js.map +1 -0
  452. package/dist/app/chat/chat/tool-call-display.d.ts +129 -0
  453. package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -0
  454. package/dist/app/chat/chat/tool-call-display.js +718 -0
  455. package/dist/app/chat/chat/tool-call-display.js.map +1 -0
  456. package/dist/app/chat/chat/tool-chips.d.ts +30 -0
  457. package/dist/app/chat/chat/tool-chips.d.ts.map +1 -0
  458. package/dist/app/chat/chat/tool-chips.js +28 -0
  459. package/dist/app/chat/chat/tool-chips.js.map +1 -0
  460. package/dist/app/chat/chat/tool-integration.d.ts +9 -0
  461. package/dist/app/chat/chat/tool-integration.d.ts.map +1 -0
  462. package/dist/app/chat/chat/tool-integration.js +52 -0
  463. package/dist/app/chat/chat/tool-integration.js.map +1 -0
  464. package/dist/app/chat/chat/tool-render-registry.d.ts +42 -0
  465. package/dist/app/chat/chat/tool-render-registry.d.ts.map +1 -0
  466. package/dist/app/chat/chat/tool-render-registry.js +83 -0
  467. package/dist/app/chat/chat/tool-render-registry.js.map +1 -0
  468. package/dist/app/chat/chat/widgets/ActionCard.d.ts +10 -0
  469. package/dist/app/chat/chat/widgets/ActionCard.d.ts.map +1 -0
  470. package/dist/app/chat/chat/widgets/ActionCard.js +6 -0
  471. package/dist/app/chat/chat/widgets/ActionCard.js.map +1 -0
  472. package/dist/app/chat/chat/widgets/AgentTeamProgressWidget.d.ts +3 -0
  473. package/dist/app/chat/chat/widgets/AgentTeamProgressWidget.d.ts.map +1 -0
  474. package/dist/app/chat/chat/widgets/AgentTeamProgressWidget.js +28 -0
  475. package/dist/app/chat/chat/widgets/AgentTeamProgressWidget.js.map +1 -0
  476. package/dist/app/chat/chat/widgets/ConnectRequiredWidget.d.ts +5 -0
  477. package/dist/app/chat/chat/widgets/ConnectRequiredWidget.d.ts.map +1 -0
  478. package/dist/app/chat/chat/widgets/ConnectRequiredWidget.js +19 -0
  479. package/dist/app/chat/chat/widgets/ConnectRequiredWidget.js.map +1 -0
  480. package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts +5 -0
  481. package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -0
  482. package/dist/app/chat/chat/widgets/DataChartRenderer.js +112 -0
  483. package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -0
  484. package/dist/app/chat/chat/widgets/DataChartWidget.d.ts +5 -0
  485. package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -0
  486. package/dist/app/chat/chat/widgets/DataChartWidget.js +21 -0
  487. package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -0
  488. package/dist/app/chat/chat/widgets/DataInsightsWidget.d.ts +5 -0
  489. package/dist/app/chat/chat/widgets/DataInsightsWidget.d.ts.map +1 -0
  490. package/dist/app/chat/chat/widgets/DataInsightsWidget.js +20 -0
  491. package/dist/app/chat/chat/widgets/DataInsightsWidget.js.map +1 -0
  492. package/dist/app/chat/chat/widgets/DataTableWidget.d.ts +9 -0
  493. package/dist/app/chat/chat/widgets/DataTableWidget.d.ts.map +1 -0
  494. package/dist/app/chat/chat/widgets/DataTableWidget.js +125 -0
  495. package/dist/app/chat/chat/widgets/DataTableWidget.js.map +1 -0
  496. package/dist/app/chat/chat/widgets/InlineExtensionWidget.d.ts +6 -0
  497. package/dist/app/chat/chat/widgets/InlineExtensionWidget.d.ts.map +1 -0
  498. package/dist/app/chat/chat/widgets/InlineExtensionWidget.js +18 -0
  499. package/dist/app/chat/chat/widgets/InlineExtensionWidget.js.map +1 -0
  500. package/dist/app/chat/chat/widgets/RecordChangeWidget.d.ts +12 -0
  501. package/dist/app/chat/chat/widgets/RecordChangeWidget.d.ts.map +1 -0
  502. package/dist/app/chat/chat/widgets/RecordChangeWidget.js +261 -0
  503. package/dist/app/chat/chat/widgets/RecordChangeWidget.js.map +1 -0
  504. package/dist/app/chat/chat/widgets/WorkspaceFileWidget.d.ts +5 -0
  505. package/dist/app/chat/chat/widgets/WorkspaceFileWidget.d.ts.map +1 -0
  506. package/dist/app/chat/chat/widgets/WorkspaceFileWidget.js +35 -0
  507. package/dist/app/chat/chat/widgets/WorkspaceFileWidget.js.map +1 -0
  508. package/dist/app/chat/chat/widgets/builtin-tool-renderers.d.ts +8 -0
  509. package/dist/app/chat/chat/widgets/builtin-tool-renderers.d.ts.map +1 -0
  510. package/dist/app/chat/chat/widgets/builtin-tool-renderers.js +352 -0
  511. package/dist/app/chat/chat/widgets/builtin-tool-renderers.js.map +1 -0
  512. package/dist/app/chat/chat/widgets/data-widget-types.d.ts +2 -0
  513. package/dist/app/chat/chat/widgets/data-widget-types.d.ts.map +1 -0
  514. package/dist/app/chat/chat/widgets/data-widget-types.js +2 -0
  515. package/dist/app/chat/chat/widgets/data-widget-types.js.map +1 -0
  516. package/dist/app/chat/chat/widgets/inline-extension-result.d.ts +14 -0
  517. package/dist/app/chat/chat/widgets/inline-extension-result.d.ts.map +1 -0
  518. package/dist/app/chat/chat/widgets/inline-extension-result.js +67 -0
  519. package/dist/app/chat/chat/widgets/inline-extension-result.js.map +1 -0
  520. package/dist/app/chat/chat/widgets/workspace-file-result.d.ts +12 -0
  521. package/dist/app/chat/chat/widgets/workspace-file-result.d.ts.map +1 -0
  522. package/dist/app/chat/chat/widgets/workspace-file-result.js +34 -0
  523. package/dist/app/chat/chat/widgets/workspace-file-result.js.map +1 -0
  524. package/dist/app/chat/chat-first/ChatFirstAgentActivityPanel.d.ts +12 -0
  525. package/dist/app/chat/chat-first/ChatFirstAgentActivityPanel.d.ts.map +1 -0
  526. package/dist/app/chat/chat-first/ChatFirstAgentActivityPanel.js +52 -0
  527. package/dist/app/chat/chat-first/ChatFirstAgentActivityPanel.js.map +1 -0
  528. package/dist/app/chat/chat-first/ChatFirstSurfacePanelToggle.d.ts +6 -0
  529. package/dist/app/chat/chat-first/ChatFirstSurfacePanelToggle.d.ts.map +1 -0
  530. package/dist/app/chat/chat-first/ChatFirstSurfacePanelToggle.js +7 -0
  531. package/dist/app/chat/chat-first/ChatFirstSurfacePanelToggle.js.map +1 -0
  532. package/dist/app/chat/chat-first/active-surface.d.ts +16 -0
  533. package/dist/app/chat/chat-first/active-surface.d.ts.map +1 -0
  534. package/dist/app/chat/chat-first/active-surface.js +17 -0
  535. package/dist/app/chat/chat-first/active-surface.js.map +1 -0
  536. package/dist/app/chat/chat-first/agents-pane.d.ts +3 -0
  537. package/dist/app/chat/chat-first/agents-pane.d.ts.map +1 -0
  538. package/dist/app/chat/chat-first/agents-pane.js +7 -0
  539. package/dist/app/chat/chat-first/agents-pane.js.map +1 -0
  540. package/dist/app/chat/chat-first/app-open-actions.d.ts +31 -0
  541. package/dist/app/chat/chat-first/app-open-actions.d.ts.map +1 -0
  542. package/dist/app/chat/chat-first/app-open-actions.js +28 -0
  543. package/dist/app/chat/chat-first/app-open-actions.js.map +1 -0
  544. package/dist/app/chat/chat-first/app-pane.d.ts +3 -0
  545. package/dist/app/chat/chat-first/app-pane.d.ts.map +1 -0
  546. package/dist/app/chat/chat-first/app-pane.js +7 -0
  547. package/dist/app/chat/chat-first/app-pane.js.map +1 -0
  548. package/dist/app/chat/chat-first/apps-rail.d.ts +4 -0
  549. package/dist/app/chat/chat-first/apps-rail.d.ts.map +1 -0
  550. package/dist/app/chat/chat-first/apps-rail.js +148 -0
  551. package/dist/app/chat/chat-first/apps-rail.js.map +1 -0
  552. package/dist/app/chat/chat-first/browser-pane.d.ts +3 -0
  553. package/dist/app/chat/chat-first/browser-pane.d.ts.map +1 -0
  554. package/dist/app/chat/chat-first/browser-pane.js +68 -0
  555. package/dist/app/chat/chat-first/browser-pane.js.map +1 -0
  556. package/dist/app/chat/chat-first/chat-history.d.ts +9 -0
  557. package/dist/app/chat/chat-first/chat-history.d.ts.map +1 -0
  558. package/dist/app/chat/chat-first/chat-history.js +11 -0
  559. package/dist/app/chat/chat-first/chat-history.js.map +1 -0
  560. package/dist/app/chat/chat-first/copy.d.ts +3 -0
  561. package/dist/app/chat/chat-first/copy.d.ts.map +1 -0
  562. package/dist/app/chat/chat-first/copy.js +122 -0
  563. package/dist/app/chat/chat-first/copy.js.map +1 -0
  564. package/dist/app/chat/chat-first/index.d.ts +18 -0
  565. package/dist/app/chat/chat-first/index.d.ts.map +1 -0
  566. package/dist/app/chat/chat-first/index.js +17 -0
  567. package/dist/app/chat/chat-first/index.js.map +1 -0
  568. package/dist/app/chat/chat-first/primary-nav.d.ts +14 -0
  569. package/dist/app/chat/chat-first/primary-nav.d.ts.map +1 -0
  570. package/dist/app/chat/chat-first/primary-nav.js +34 -0
  571. package/dist/app/chat/chat-first/primary-nav.js.map +1 -0
  572. package/dist/app/chat/chat-first/session-watch-pane.d.ts +3 -0
  573. package/dist/app/chat/chat-first/session-watch-pane.d.ts.map +1 -0
  574. package/dist/app/chat/chat-first/session-watch-pane.js +10 -0
  575. package/dist/app/chat/chat-first/session-watch-pane.js.map +1 -0
  576. package/dist/app/chat/chat-first/surface-panel.d.ts +10 -0
  577. package/dist/app/chat/chat-first/surface-panel.d.ts.map +1 -0
  578. package/dist/app/chat/chat-first/surface-panel.js +10 -0
  579. package/dist/app/chat/chat-first/surface-panel.js.map +1 -0
  580. package/dist/app/chat/chat-first/surface-tabs.d.ts +10 -0
  581. package/dist/app/chat/chat-first/surface-tabs.d.ts.map +1 -0
  582. package/dist/app/chat/chat-first/surface-tabs.js +88 -0
  583. package/dist/app/chat/chat-first/surface-tabs.js.map +1 -0
  584. package/dist/app/chat/chat-first/types.d.ts +93 -0
  585. package/dist/app/chat/chat-first/types.d.ts.map +1 -0
  586. package/dist/app/chat/chat-first/types.js +2 -0
  587. package/dist/app/chat/chat-first/types.js.map +1 -0
  588. package/dist/app/chat/components/CodeAgentIndicator.d.ts +6 -0
  589. package/dist/app/chat/components/CodeAgentIndicator.d.ts.map +1 -0
  590. package/dist/app/chat/components/CodeAgentIndicator.js +22 -0
  591. package/dist/app/chat/components/CodeAgentIndicator.js.map +1 -0
  592. package/dist/app/chat/components/CodeRequiredDialog.d.ts +7 -0
  593. package/dist/app/chat/components/CodeRequiredDialog.d.ts.map +1 -0
  594. package/dist/app/chat/components/CodeRequiredDialog.js +251 -0
  595. package/dist/app/chat/components/CodeRequiredDialog.js.map +1 -0
  596. package/dist/app/chat/components/ui/button-classes.d.ts +2 -0
  597. package/dist/app/chat/components/ui/button-classes.d.ts.map +1 -0
  598. package/dist/app/chat/components/ui/button-classes.js +2 -0
  599. package/dist/app/chat/components/ui/button-classes.js.map +1 -0
  600. package/dist/app/chat/components/ui/message-scroller.d.ts +16 -0
  601. package/dist/app/chat/components/ui/message-scroller.d.ts.map +1 -0
  602. package/dist/app/chat/components/ui/message-scroller.js +30 -0
  603. package/dist/app/chat/components/ui/message-scroller.js.map +1 -0
  604. package/dist/app/chat/composer/assistant-ui-recovery.d.ts +36 -0
  605. package/dist/app/chat/composer/assistant-ui-recovery.d.ts.map +1 -0
  606. package/dist/app/chat/composer/assistant-ui-recovery.js +136 -0
  607. package/dist/app/chat/composer/assistant-ui-recovery.js.map +1 -0
  608. package/dist/app/chat/composer/index.d.ts +9 -0
  609. package/dist/app/chat/composer/index.d.ts.map +1 -0
  610. package/dist/app/chat/composer/index.js +9 -0
  611. package/dist/app/chat/composer/index.js.map +1 -0
  612. package/dist/app/chat/composer/model-runtime-adapters.d.ts +3 -0
  613. package/dist/app/chat/composer/model-runtime-adapters.d.ts.map +1 -0
  614. package/dist/app/chat/composer/model-runtime-adapters.js +15 -0
  615. package/dist/app/chat/composer/model-runtime-adapters.js.map +1 -0
  616. package/dist/app/chat/composer/runtime-adapters.d.ts +9 -0
  617. package/dist/app/chat/composer/runtime-adapters.d.ts.map +1 -0
  618. package/dist/app/chat/composer/runtime-adapters.js +80 -0
  619. package/dist/app/chat/composer/runtime-adapters.js.map +1 -0
  620. package/dist/app/chat/composer/use-agentkit-capabilities.d.ts +194 -0
  621. package/dist/app/chat/composer/use-agentkit-capabilities.d.ts.map +1 -0
  622. package/dist/app/chat/composer/use-agentkit-capabilities.js +89 -0
  623. package/dist/app/chat/composer/use-agentkit-capabilities.js.map +1 -0
  624. package/dist/app/chat/composer/use-agentkit-integration-menu.d.ts +9 -0
  625. package/dist/app/chat/composer/use-agentkit-integration-menu.d.ts.map +1 -0
  626. package/dist/app/chat/composer/use-agentkit-integration-menu.js +62 -0
  627. package/dist/app/chat/composer/use-agentkit-integration-menu.js.map +1 -0
  628. package/dist/app/chat/composer/use-mention-search.d.ts +7 -0
  629. package/dist/app/chat/composer/use-mention-search.d.ts.map +1 -0
  630. package/dist/app/chat/composer/use-mention-search.js +6 -0
  631. package/dist/app/chat/composer/use-mention-search.js.map +1 -0
  632. package/dist/app/chat/composer/use-send-to-agent-chat.d.ts +7 -0
  633. package/dist/app/chat/composer/use-send-to-agent-chat.d.ts.map +1 -0
  634. package/dist/app/chat/composer/use-send-to-agent-chat.js +11 -0
  635. package/dist/app/chat/composer/use-send-to-agent-chat.js.map +1 -0
  636. package/dist/app/chat/composer/wired-components.d.ts +11 -0
  637. package/dist/app/chat/composer/wired-components.d.ts.map +1 -0
  638. package/dist/app/chat/composer/wired-components.js +51 -0
  639. package/dist/app/chat/composer/wired-components.js.map +1 -0
  640. package/dist/app/chat/conversation/AgentConversation.d.ts +18 -0
  641. package/dist/app/chat/conversation/AgentConversation.d.ts.map +1 -0
  642. package/dist/app/chat/conversation/AgentConversation.js +206 -0
  643. package/dist/app/chat/conversation/AgentConversation.js.map +1 -0
  644. package/dist/app/chat/conversation/code-agent-transcript.d.ts +22 -0
  645. package/dist/app/chat/conversation/code-agent-transcript.d.ts.map +1 -0
  646. package/dist/app/chat/conversation/code-agent-transcript.js +207 -0
  647. package/dist/app/chat/conversation/code-agent-transcript.js.map +1 -0
  648. package/dist/app/chat/conversation/index.d.ts +5 -0
  649. package/dist/app/chat/conversation/index.d.ts.map +1 -0
  650. package/dist/app/chat/conversation/index.js +4 -0
  651. package/dist/app/chat/conversation/index.js.map +1 -0
  652. package/dist/app/chat/conversation/types.d.ts +67 -0
  653. package/dist/app/chat/conversation/types.d.ts.map +1 -0
  654. package/dist/app/chat/conversation/types.js +2 -0
  655. package/dist/app/chat/conversation/types.js.map +1 -0
  656. package/dist/app/chat/conversation/use-near-bottom-autoscroll.d.ts +30 -0
  657. package/dist/app/chat/conversation/use-near-bottom-autoscroll.d.ts.map +1 -0
  658. package/dist/app/chat/conversation/use-near-bottom-autoscroll.js +271 -0
  659. package/dist/app/chat/conversation/use-near-bottom-autoscroll.js.map +1 -0
  660. package/dist/app/chat/external-agent-host.d.ts +24 -0
  661. package/dist/app/chat/external-agent-host.d.ts.map +1 -0
  662. package/dist/app/chat/external-agent-host.js +343 -0
  663. package/dist/app/chat/external-agent-host.js.map +1 -0
  664. package/dist/app/chat/index.d.ts +26 -0
  665. package/dist/app/chat/index.d.ts.map +1 -0
  666. package/dist/app/chat/index.js +24 -0
  667. package/dist/app/chat/index.js.map +1 -0
  668. package/dist/app/chat/mcp-apps/McpAppRenderer.d.ts +18 -0
  669. package/dist/app/chat/mcp-apps/McpAppRenderer.d.ts.map +1 -0
  670. package/dist/app/chat/mcp-apps/McpAppRenderer.js +684 -0
  671. package/dist/app/chat/mcp-apps/McpAppRenderer.js.map +1 -0
  672. package/dist/app/chat/thinking-display.d.ts +17 -0
  673. package/dist/app/chat/thinking-display.d.ts.map +1 -0
  674. package/dist/app/chat/thinking-display.js +73 -0
  675. package/dist/app/chat/thinking-display.js.map +1 -0
  676. package/dist/app/chat/tool-cells/BashCell.d.ts +16 -0
  677. package/dist/app/chat/tool-cells/BashCell.d.ts.map +1 -0
  678. package/dist/app/chat/tool-cells/BashCell.js +38 -0
  679. package/dist/app/chat/tool-cells/BashCell.js.map +1 -0
  680. package/dist/app/chat/tool-cells/EditCell.d.ts +14 -0
  681. package/dist/app/chat/tool-cells/EditCell.d.ts.map +1 -0
  682. package/dist/app/chat/tool-cells/EditCell.js +110 -0
  683. package/dist/app/chat/tool-cells/EditCell.js.map +1 -0
  684. package/dist/app/chat/tool-cells/FilesChangedSummary.d.ts +7 -0
  685. package/dist/app/chat/tool-cells/FilesChangedSummary.d.ts.map +1 -0
  686. package/dist/app/chat/tool-cells/FilesChangedSummary.js +95 -0
  687. package/dist/app/chat/tool-cells/FilesChangedSummary.js.map +1 -0
  688. package/dist/app/chat/tool-cells/WriteCell.d.ts +14 -0
  689. package/dist/app/chat/tool-cells/WriteCell.d.ts.map +1 -0
  690. package/dist/app/chat/tool-cells/WriteCell.js +24 -0
  691. package/dist/app/chat/tool-cells/WriteCell.js.map +1 -0
  692. package/dist/app/chat/tool-cells/index.d.ts +8 -0
  693. package/dist/app/chat/tool-cells/index.d.ts.map +1 -0
  694. package/dist/app/chat/tool-cells/index.js +5 -0
  695. package/dist/app/chat/tool-cells/index.js.map +1 -0
  696. package/dist/app/context-xray/ContextMeter.d.ts +7 -0
  697. package/dist/app/context-xray/ContextMeter.d.ts.map +1 -0
  698. package/dist/app/context-xray/ContextMeter.js +70 -0
  699. package/dist/app/context-xray/ContextMeter.js.map +1 -0
  700. package/dist/app/context-xray/ContextSegmentRow.d.ts +9 -0
  701. package/dist/app/context-xray/ContextSegmentRow.d.ts.map +1 -0
  702. package/dist/app/context-xray/ContextSegmentRow.js +6 -0
  703. package/dist/app/context-xray/ContextSegmentRow.js.map +1 -0
  704. package/dist/app/context-xray/ContextTreemap.d.ts +7 -0
  705. package/dist/app/context-xray/ContextTreemap.d.ts.map +1 -0
  706. package/dist/app/context-xray/ContextTreemap.js +6 -0
  707. package/dist/app/context-xray/ContextTreemap.js.map +1 -0
  708. package/dist/app/context-xray/ContextXRayPanel.d.ts +9 -0
  709. package/dist/app/context-xray/ContextXRayPanel.d.ts.map +1 -0
  710. package/dist/app/context-xray/ContextXRayPanel.js +28 -0
  711. package/dist/app/context-xray/ContextXRayPanel.js.map +1 -0
  712. package/dist/app/context-xray/SegmentProvenancePopover.d.ts +7 -0
  713. package/dist/app/context-xray/SegmentProvenancePopover.d.ts.map +1 -0
  714. package/dist/app/context-xray/SegmentProvenancePopover.js +6 -0
  715. package/dist/app/context-xray/SegmentProvenancePopover.js.map +1 -0
  716. package/dist/app/context-xray/index.d.ts +6 -0
  717. package/dist/app/context-xray/index.d.ts.map +1 -0
  718. package/dist/app/context-xray/index.js +6 -0
  719. package/dist/app/context-xray/index.js.map +1 -0
  720. package/dist/app/db-admin/DataGrid.d.ts +34 -0
  721. package/dist/app/db-admin/DataGrid.d.ts.map +1 -0
  722. package/dist/app/db-admin/DataGrid.js +204 -0
  723. package/dist/app/db-admin/DataGrid.js.map +1 -0
  724. package/dist/app/db-admin/DbAdminPage.d.ts +10 -0
  725. package/dist/app/db-admin/DbAdminPage.d.ts.map +1 -0
  726. package/dist/app/db-admin/DbAdminPage.js +58 -0
  727. package/dist/app/db-admin/DbAdminPage.js.map +1 -0
  728. package/dist/app/db-admin/DevDatabaseLink.d.ts +6 -0
  729. package/dist/app/db-admin/DevDatabaseLink.d.ts.map +1 -0
  730. package/dist/app/db-admin/DevDatabaseLink.js +4 -0
  731. package/dist/app/db-admin/DevDatabaseLink.js.map +1 -0
  732. package/dist/app/db-admin/EditableCell.d.ts +18 -0
  733. package/dist/app/db-admin/EditableCell.d.ts.map +1 -0
  734. package/dist/app/db-admin/EditableCell.js +145 -0
  735. package/dist/app/db-admin/EditableCell.js.map +1 -0
  736. package/dist/app/db-admin/FilterBar.d.ts +8 -0
  737. package/dist/app/db-admin/FilterBar.d.ts.map +1 -0
  738. package/dist/app/db-admin/FilterBar.js +68 -0
  739. package/dist/app/db-admin/FilterBar.js.map +1 -0
  740. package/dist/app/db-admin/ResultsGrid.d.ts +6 -0
  741. package/dist/app/db-admin/ResultsGrid.d.ts.map +1 -0
  742. package/dist/app/db-admin/ResultsGrid.js +33 -0
  743. package/dist/app/db-admin/ResultsGrid.js.map +1 -0
  744. package/dist/app/db-admin/RowSidePanel.d.ts +12 -0
  745. package/dist/app/db-admin/RowSidePanel.d.ts.map +1 -0
  746. package/dist/app/db-admin/RowSidePanel.js +100 -0
  747. package/dist/app/db-admin/RowSidePanel.js.map +1 -0
  748. package/dist/app/db-admin/SqlEditor.d.ts +8 -0
  749. package/dist/app/db-admin/SqlEditor.d.ts.map +1 -0
  750. package/dist/app/db-admin/SqlEditor.js +318 -0
  751. package/dist/app/db-admin/SqlEditor.js.map +1 -0
  752. package/dist/app/db-admin/TableBrowser.d.ts +10 -0
  753. package/dist/app/db-admin/TableBrowser.d.ts.map +1 -0
  754. package/dist/app/db-admin/TableBrowser.js +56 -0
  755. package/dist/app/db-admin/TableBrowser.js.map +1 -0
  756. package/dist/app/db-admin/TableEditor.d.ts +10 -0
  757. package/dist/app/db-admin/TableEditor.d.ts.map +1 -0
  758. package/dist/app/db-admin/TableEditor.js +258 -0
  759. package/dist/app/db-admin/TableEditor.js.map +1 -0
  760. package/dist/app/db-admin/cell-format.d.ts +21 -0
  761. package/dist/app/db-admin/cell-format.d.ts.map +1 -0
  762. package/dist/app/db-admin/cell-format.js +188 -0
  763. package/dist/app/db-admin/cell-format.js.map +1 -0
  764. package/dist/app/db-admin/changeset.d.ts +36 -0
  765. package/dist/app/db-admin/changeset.d.ts.map +1 -0
  766. package/dist/app/db-admin/changeset.js +164 -0
  767. package/dist/app/db-admin/changeset.js.map +1 -0
  768. package/dist/app/db-admin/export-utils.d.ts +5 -0
  769. package/dist/app/db-admin/export-utils.d.ts.map +1 -0
  770. package/dist/app/db-admin/export-utils.js +53 -0
  771. package/dist/app/db-admin/export-utils.js.map +1 -0
  772. package/dist/app/db-admin/index.d.ts +7 -0
  773. package/dist/app/db-admin/index.d.ts.map +1 -0
  774. package/dist/app/db-admin/index.js +7 -0
  775. package/dist/app/db-admin/index.js.map +1 -0
  776. package/dist/app/db-admin/sql-storage.d.ts +16 -0
  777. package/dist/app/db-admin/sql-storage.d.ts.map +1 -0
  778. package/dist/app/db-admin/sql-storage.js +95 -0
  779. package/dist/app/db-admin/sql-storage.js.map +1 -0
  780. package/dist/app/db-admin/storage.d.ts +13 -0
  781. package/dist/app/db-admin/storage.d.ts.map +1 -0
  782. package/dist/app/db-admin/storage.js +47 -0
  783. package/dist/app/db-admin/storage.js.map +1 -0
  784. package/dist/app/db-admin/useAgentSync.d.ts +13 -0
  785. package/dist/app/db-admin/useAgentSync.d.ts.map +1 -0
  786. package/dist/app/db-admin/useAgentSync.js +142 -0
  787. package/dist/app/db-admin/useAgentSync.js.map +1 -0
  788. package/dist/app/db-admin/useDbAdmin.d.ts +23 -0
  789. package/dist/app/db-admin/useDbAdmin.d.ts.map +1 -0
  790. package/dist/app/db-admin/useDbAdmin.js +139 -0
  791. package/dist/app/db-admin/useDbAdmin.js.map +1 -0
  792. package/dist/app/dev-overlay/DevOverlay.d.ts +7 -0
  793. package/dist/app/dev-overlay/DevOverlay.d.ts.map +1 -0
  794. package/dist/app/dev-overlay/DevOverlay.js +296 -0
  795. package/dist/app/dev-overlay/DevOverlay.js.map +1 -0
  796. package/dist/app/dev-overlay/index.d.ts +2 -0
  797. package/dist/app/dev-overlay/index.d.ts.map +1 -0
  798. package/dist/app/dev-overlay/index.js +2 -0
  799. package/dist/app/dev-overlay/index.js.map +1 -0
  800. package/dist/app/eject/remote-mcp-presets.d.ts +18 -0
  801. package/dist/app/eject/remote-mcp-presets.d.ts.map +1 -0
  802. package/dist/app/eject/remote-mcp-presets.js +114 -0
  803. package/dist/app/eject/remote-mcp-presets.js.map +1 -0
  804. package/dist/app/eject/setup-readiness-ui.d.ts +5 -0
  805. package/dist/app/eject/setup-readiness-ui.d.ts.map +1 -0
  806. package/dist/app/eject/setup-readiness-ui.js +4 -0
  807. package/dist/app/eject/setup-readiness-ui.js.map +1 -0
  808. package/dist/app/extensions/AgentNativeExtensionFrame.d.ts +49 -0
  809. package/dist/app/extensions/AgentNativeExtensionFrame.d.ts.map +1 -0
  810. package/dist/app/extensions/AgentNativeExtensionFrame.js +355 -0
  811. package/dist/app/extensions/AgentNativeExtensionFrame.js.map +1 -0
  812. package/dist/app/extensions/EmbeddedExtension.d.ts +12 -0
  813. package/dist/app/extensions/EmbeddedExtension.d.ts.map +1 -0
  814. package/dist/app/extensions/EmbeddedExtension.js +377 -0
  815. package/dist/app/extensions/EmbeddedExtension.js.map +1 -0
  816. package/dist/app/extensions/ExtensionEditor.d.ts +5 -0
  817. package/dist/app/extensions/ExtensionEditor.d.ts.map +1 -0
  818. package/dist/app/extensions/ExtensionEditor.js +173 -0
  819. package/dist/app/extensions/ExtensionEditor.js.map +1 -0
  820. package/dist/app/extensions/ExtensionQueryErrorState.d.ts +8 -0
  821. package/dist/app/extensions/ExtensionQueryErrorState.d.ts.map +1 -0
  822. package/dist/app/extensions/ExtensionQueryErrorState.js +11 -0
  823. package/dist/app/extensions/ExtensionQueryErrorState.js.map +1 -0
  824. package/dist/app/extensions/ExtensionSlot.d.ts +10 -0
  825. package/dist/app/extensions/ExtensionSlot.d.ts.map +1 -0
  826. package/dist/app/extensions/ExtensionSlot.js +146 -0
  827. package/dist/app/extensions/ExtensionSlot.js.map +1 -0
  828. package/dist/app/extensions/ExtensionViewer.d.ts +5 -0
  829. package/dist/app/extensions/ExtensionViewer.d.ts.map +1 -0
  830. package/dist/app/extensions/ExtensionViewer.js +789 -0
  831. package/dist/app/extensions/ExtensionViewer.js.map +1 -0
  832. package/dist/app/extensions/ExtensionViewerPage.d.ts +2 -0
  833. package/dist/app/extensions/ExtensionViewerPage.d.ts.map +1 -0
  834. package/dist/app/extensions/ExtensionViewerPage.js +31 -0
  835. package/dist/app/extensions/ExtensionViewerPage.js.map +1 -0
  836. package/dist/app/extensions/ExtensionsListPage.d.ts +5 -0
  837. package/dist/app/extensions/ExtensionsListPage.d.ts.map +1 -0
  838. package/dist/app/extensions/ExtensionsListPage.js +142 -0
  839. package/dist/app/extensions/ExtensionsListPage.js.map +1 -0
  840. package/dist/app/extensions/ExtensionsSidebarSection.d.ts +2 -0
  841. package/dist/app/extensions/ExtensionsSidebarSection.d.ts.map +1 -0
  842. package/dist/app/extensions/ExtensionsSidebarSection.js +729 -0
  843. package/dist/app/extensions/ExtensionsSidebarSection.js.map +1 -0
  844. package/dist/app/extensions/InlineExtensionFrame.d.ts +25 -0
  845. package/dist/app/extensions/InlineExtensionFrame.d.ts.map +1 -0
  846. package/dist/app/extensions/InlineExtensionFrame.js +518 -0
  847. package/dist/app/extensions/InlineExtensionFrame.js.map +1 -0
  848. package/dist/app/extensions/delete-extension.d.ts +12 -0
  849. package/dist/app/extensions/delete-extension.d.ts.map +1 -0
  850. package/dist/app/extensions/delete-extension.js +51 -0
  851. package/dist/app/extensions/delete-extension.js.map +1 -0
  852. package/dist/app/extensions/extension-load-error.d.ts +7 -0
  853. package/dist/app/extensions/extension-load-error.d.ts.map +1 -0
  854. package/dist/app/extensions/extension-load-error.js +19 -0
  855. package/dist/app/extensions/extension-load-error.js.map +1 -0
  856. package/dist/app/extensions/extension-order.d.ts +7 -0
  857. package/dist/app/extensions/extension-order.d.ts.map +1 -0
  858. package/dist/app/extensions/extension-order.js +47 -0
  859. package/dist/app/extensions/extension-order.js.map +1 -0
  860. package/dist/app/extensions/extension-popularity.d.ts +5 -0
  861. package/dist/app/extensions/extension-popularity.d.ts.map +1 -0
  862. package/dist/app/extensions/extension-popularity.js +52 -0
  863. package/dist/app/extensions/extension-popularity.js.map +1 -0
  864. package/dist/app/extensions/iframe-bridge.d.ts +21 -0
  865. package/dist/app/extensions/iframe-bridge.d.ts.map +1 -0
  866. package/dist/app/extensions/iframe-bridge.js +238 -0
  867. package/dist/app/extensions/iframe-bridge.js.map +1 -0
  868. package/dist/app/extensions/index.d.ts +19 -0
  869. package/dist/app/extensions/index.d.ts.map +1 -0
  870. package/dist/app/extensions/index.js +19 -0
  871. package/dist/app/extensions/index.js.map +1 -0
  872. package/dist/app/extensions/portable-extension.d.ts +81 -0
  873. package/dist/app/extensions/portable-extension.d.ts.map +1 -0
  874. package/dist/app/extensions/portable-extension.js +799 -0
  875. package/dist/app/extensions/portable-extension.js.map +1 -0
  876. package/dist/app/feature-flags/FeatureFlagsPanel.d.ts +10 -0
  877. package/dist/app/feature-flags/FeatureFlagsPanel.d.ts.map +1 -0
  878. package/dist/app/feature-flags/FeatureFlagsPanel.js +154 -0
  879. package/dist/app/feature-flags/FeatureFlagsPanel.js.map +1 -0
  880. package/dist/app/feature-flags/index.d.ts +2 -0
  881. package/dist/app/feature-flags/index.d.ts.map +1 -0
  882. package/dist/app/feature-flags/index.js +2 -0
  883. package/dist/app/feature-flags/index.js.map +1 -0
  884. package/dist/app/feedback/ErrorReportActions.d.ts +13 -0
  885. package/dist/app/feedback/ErrorReportActions.d.ts.map +1 -0
  886. package/dist/app/feedback/ErrorReportActions.js +14 -0
  887. package/dist/app/feedback/ErrorReportActions.js.map +1 -0
  888. package/dist/app/feedback/FeedbackButton.d.ts +31 -0
  889. package/dist/app/feedback/FeedbackButton.d.ts.map +1 -0
  890. package/dist/app/feedback/FeedbackButton.js +423 -0
  891. package/dist/app/feedback/FeedbackButton.js.map +1 -0
  892. package/dist/app/feedback/index.d.ts +4 -0
  893. package/dist/app/feedback/index.d.ts.map +1 -0
  894. package/dist/app/feedback/index.js +4 -0
  895. package/dist/app/feedback/index.js.map +1 -0
  896. package/dist/app/i18n/catalog.d.ts +5 -0
  897. package/dist/app/i18n/catalog.d.ts.map +1 -0
  898. package/dist/app/i18n/catalog.js +109 -0
  899. package/dist/app/i18n/catalog.js.map +1 -0
  900. package/dist/app/i18n/catalogs/ar-SA.d.ts +4 -0
  901. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -0
  902. package/dist/app/i18n/catalogs/ar-SA.js +2219 -0
  903. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -0
  904. package/dist/app/i18n/catalogs/de-DE.d.ts +4 -0
  905. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -0
  906. package/dist/app/i18n/catalogs/de-DE.js +2147 -0
  907. package/dist/app/i18n/catalogs/de-DE.js.map +1 -0
  908. package/dist/app/i18n/catalogs/en-US.d.ts +2147 -0
  909. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -0
  910. package/dist/app/i18n/catalogs/en-US.js +2147 -0
  911. package/dist/app/i18n/catalogs/en-US.js.map +1 -0
  912. package/dist/app/i18n/catalogs/es-ES.d.ts +4 -0
  913. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -0
  914. package/dist/app/i18n/catalogs/es-ES.js +2165 -0
  915. package/dist/app/i18n/catalogs/es-ES.js.map +1 -0
  916. package/dist/app/i18n/catalogs/fr-FR.d.ts +4 -0
  917. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -0
  918. package/dist/app/i18n/catalogs/fr-FR.js +2165 -0
  919. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -0
  920. package/dist/app/i18n/catalogs/hi-IN.d.ts +4 -0
  921. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -0
  922. package/dist/app/i18n/catalogs/hi-IN.js +2147 -0
  923. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -0
  924. package/dist/app/i18n/catalogs/ja-JP.d.ts +4 -0
  925. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -0
  926. package/dist/app/i18n/catalogs/ja-JP.js +2130 -0
  927. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -0
  928. package/dist/app/i18n/catalogs/ko-KR.d.ts +4 -0
  929. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -0
  930. package/dist/app/i18n/catalogs/ko-KR.js +2130 -0
  931. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -0
  932. package/dist/app/i18n/catalogs/pt-BR.d.ts +4 -0
  933. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -0
  934. package/dist/app/i18n/catalogs/pt-BR.js +2165 -0
  935. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -0
  936. package/dist/app/i18n/catalogs/zh-CN.d.ts +4 -0
  937. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -0
  938. package/dist/app/i18n/catalogs/zh-CN.js +2130 -0
  939. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -0
  940. package/dist/app/i18n/catalogs/zh-TW.d.ts +4 -0
  941. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -0
  942. package/dist/app/i18n/catalogs/zh-TW.js +2130 -0
  943. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -0
  944. package/dist/app/i18n/types.d.ts +8 -0
  945. package/dist/app/i18n/types.d.ts.map +1 -0
  946. package/dist/app/i18n/types.js +2 -0
  947. package/dist/app/i18n/types.js.map +1 -0
  948. package/dist/app/i18n.d.ts +13 -0
  949. package/dist/app/i18n.d.ts.map +1 -0
  950. package/dist/app/i18n.js +49 -0
  951. package/dist/app/i18n.js.map +1 -0
  952. package/dist/app/integrations/BuilderIntegrationPage.d.ts +12 -0
  953. package/dist/app/integrations/BuilderIntegrationPage.d.ts.map +1 -0
  954. package/dist/app/integrations/BuilderIntegrationPage.js +304 -0
  955. package/dist/app/integrations/BuilderIntegrationPage.js.map +1 -0
  956. package/dist/app/integrations/ChannelsPage.d.ts +16 -0
  957. package/dist/app/integrations/ChannelsPage.d.ts.map +1 -0
  958. package/dist/app/integrations/ChannelsPage.js +384 -0
  959. package/dist/app/integrations/ChannelsPage.js.map +1 -0
  960. package/dist/app/integrations/GoogleProductLogo.d.ts +6 -0
  961. package/dist/app/integrations/GoogleProductLogo.d.ts.map +1 -0
  962. package/dist/app/integrations/GoogleProductLogo.js +46 -0
  963. package/dist/app/integrations/GoogleProductLogo.js.map +1 -0
  964. package/dist/app/integrations/IntegrationConnectionChoice.d.ts +17 -0
  965. package/dist/app/integrations/IntegrationConnectionChoice.d.ts.map +1 -0
  966. package/dist/app/integrations/IntegrationConnectionChoice.js +11 -0
  967. package/dist/app/integrations/IntegrationConnectionChoice.js.map +1 -0
  968. package/dist/app/integrations/IntegrationDetailPage.d.ts +15 -0
  969. package/dist/app/integrations/IntegrationDetailPage.d.ts.map +1 -0
  970. package/dist/app/integrations/IntegrationDetailPage.js +337 -0
  971. package/dist/app/integrations/IntegrationDetailPage.js.map +1 -0
  972. package/dist/app/integrations/IntegrationDetailParts.d.ts +56 -0
  973. package/dist/app/integrations/IntegrationDetailParts.d.ts.map +1 -0
  974. package/dist/app/integrations/IntegrationDetailParts.js +69 -0
  975. package/dist/app/integrations/IntegrationDetailParts.js.map +1 -0
  976. package/dist/app/integrations/IntegrationGrid.d.ts +25 -0
  977. package/dist/app/integrations/IntegrationGrid.d.ts.map +1 -0
  978. package/dist/app/integrations/IntegrationGrid.js +22 -0
  979. package/dist/app/integrations/IntegrationGrid.js.map +1 -0
  980. package/dist/app/integrations/IntegrationsPage.d.ts +23 -0
  981. package/dist/app/integrations/IntegrationsPage.d.ts.map +1 -0
  982. package/dist/app/integrations/IntegrationsPage.js +241 -0
  983. package/dist/app/integrations/IntegrationsPage.js.map +1 -0
  984. package/dist/app/integrations/IntegrationsPanel.d.ts +70 -0
  985. package/dist/app/integrations/IntegrationsPanel.d.ts.map +1 -0
  986. package/dist/app/integrations/IntegrationsPanel.js +663 -0
  987. package/dist/app/integrations/IntegrationsPanel.js.map +1 -0
  988. package/dist/app/integrations/channel-extensions.d.ts +30 -0
  989. package/dist/app/integrations/channel-extensions.d.ts.map +1 -0
  990. package/dist/app/integrations/channel-extensions.js +48 -0
  991. package/dist/app/integrations/channel-extensions.js.map +1 -0
  992. package/dist/app/integrations/channel-icons.d.ts +9 -0
  993. package/dist/app/integrations/channel-icons.d.ts.map +1 -0
  994. package/dist/app/integrations/channel-icons.js +15 -0
  995. package/dist/app/integrations/channel-icons.js.map +1 -0
  996. package/dist/app/integrations/index.d.ts +13 -0
  997. package/dist/app/integrations/index.d.ts.map +1 -0
  998. package/dist/app/integrations/index.js +13 -0
  999. package/dist/app/integrations/index.js.map +1 -0
  1000. package/dist/app/integrations/settings-page-link.d.ts +18 -0
  1001. package/dist/app/integrations/settings-page-link.d.ts.map +1 -0
  1002. package/dist/app/integrations/settings-page-link.js +32 -0
  1003. package/dist/app/integrations/settings-page-link.js.map +1 -0
  1004. package/dist/app/labs/ExperimentsSettings.d.ts +9 -0
  1005. package/dist/app/labs/ExperimentsSettings.d.ts.map +1 -0
  1006. package/dist/app/labs/ExperimentsSettings.js +6 -0
  1007. package/dist/app/labs/ExperimentsSettings.js.map +1 -0
  1008. package/dist/app/labs/LabsSettings.d.ts +15 -0
  1009. package/dist/app/labs/LabsSettings.d.ts.map +1 -0
  1010. package/dist/app/labs/LabsSettings.js +72 -0
  1011. package/dist/app/labs/LabsSettings.js.map +1 -0
  1012. package/dist/app/labs/index.d.ts +3 -0
  1013. package/dist/app/labs/index.d.ts.map +1 -0
  1014. package/dist/app/labs/index.js +3 -0
  1015. package/dist/app/labs/index.js.map +1 -0
  1016. package/dist/app/notifications/NotificationsBell.d.ts +11 -0
  1017. package/dist/app/notifications/NotificationsBell.d.ts.map +1 -0
  1018. package/dist/app/notifications/NotificationsBell.js +190 -0
  1019. package/dist/app/notifications/NotificationsBell.js.map +1 -0
  1020. package/dist/app/notifications/index.d.ts +2 -0
  1021. package/dist/app/notifications/index.d.ts.map +1 -0
  1022. package/dist/app/notifications/index.js +2 -0
  1023. package/dist/app/notifications/index.js.map +1 -0
  1024. package/dist/app/observability/ObservabilityDashboard.d.ts +31 -0
  1025. package/dist/app/observability/ObservabilityDashboard.d.ts.map +1 -0
  1026. package/dist/app/observability/ObservabilityDashboard.js +1210 -0
  1027. package/dist/app/observability/ObservabilityDashboard.js.map +1 -0
  1028. package/dist/app/observability/ObservabilityReviewSummaryButton.d.ts +12 -0
  1029. package/dist/app/observability/ObservabilityReviewSummaryButton.d.ts.map +1 -0
  1030. package/dist/app/observability/ObservabilityReviewSummaryButton.js +61 -0
  1031. package/dist/app/observability/ObservabilityReviewSummaryButton.js.map +1 -0
  1032. package/dist/app/observability/OutputPreview.d.ts +51 -0
  1033. package/dist/app/observability/OutputPreview.d.ts.map +1 -0
  1034. package/dist/app/observability/OutputPreview.js +572 -0
  1035. package/dist/app/observability/OutputPreview.js.map +1 -0
  1036. package/dist/app/observability/ThumbsFeedback.d.ts +8 -0
  1037. package/dist/app/observability/ThumbsFeedback.d.ts.map +1 -0
  1038. package/dist/app/observability/ThumbsFeedback.js +185 -0
  1039. package/dist/app/observability/ThumbsFeedback.js.map +1 -0
  1040. package/dist/app/observability/index.d.ts +4 -0
  1041. package/dist/app/observability/index.d.ts.map +1 -0
  1042. package/dist/app/observability/index.js +4 -0
  1043. package/dist/app/observability/index.js.map +1 -0
  1044. package/dist/app/observability/useObservability.d.ts +168 -0
  1045. package/dist/app/observability/useObservability.d.ts.map +1 -0
  1046. package/dist/app/observability/useObservability.js +200 -0
  1047. package/dist/app/observability/useObservability.js.map +1 -0
  1048. package/dist/app/onboarding/FirstRunOnboarding.d.ts +14 -0
  1049. package/dist/app/onboarding/FirstRunOnboarding.d.ts.map +1 -0
  1050. package/dist/app/onboarding/FirstRunOnboarding.js +540 -0
  1051. package/dist/app/onboarding/FirstRunOnboarding.js.map +1 -0
  1052. package/dist/app/onboarding/NewWorkspaceAppFlow.d.ts +23 -0
  1053. package/dist/app/onboarding/NewWorkspaceAppFlow.d.ts.map +1 -0
  1054. package/dist/app/onboarding/NewWorkspaceAppFlow.js +312 -0
  1055. package/dist/app/onboarding/NewWorkspaceAppFlow.js.map +1 -0
  1056. package/dist/app/onboarding/OnboardingBanner.d.ts +8 -0
  1057. package/dist/app/onboarding/OnboardingBanner.d.ts.map +1 -0
  1058. package/dist/app/onboarding/OnboardingBanner.js +36 -0
  1059. package/dist/app/onboarding/OnboardingBanner.js.map +1 -0
  1060. package/dist/app/onboarding/OnboardingPanel.d.ts +8 -0
  1061. package/dist/app/onboarding/OnboardingPanel.d.ts.map +1 -0
  1062. package/dist/app/onboarding/OnboardingPanel.js +521 -0
  1063. package/dist/app/onboarding/OnboardingPanel.js.map +1 -0
  1064. package/dist/app/onboarding/OnboardingStepLayout.d.ts +12 -0
  1065. package/dist/app/onboarding/OnboardingStepLayout.d.ts.map +1 -0
  1066. package/dist/app/onboarding/OnboardingStepLayout.js +7 -0
  1067. package/dist/app/onboarding/OnboardingStepLayout.js.map +1 -0
  1068. package/dist/app/onboarding/SetupButton.d.ts +4 -0
  1069. package/dist/app/onboarding/SetupButton.d.ts.map +1 -0
  1070. package/dist/app/onboarding/SetupButton.js +37 -0
  1071. package/dist/app/onboarding/SetupButton.js.map +1 -0
  1072. package/dist/app/onboarding/first-run-startup-gate.d.ts +8 -0
  1073. package/dist/app/onboarding/first-run-startup-gate.d.ts.map +1 -0
  1074. package/dist/app/onboarding/first-run-startup-gate.js +85 -0
  1075. package/dist/app/onboarding/first-run-startup-gate.js.map +1 -0
  1076. package/dist/app/onboarding/index.d.ts +8 -0
  1077. package/dist/app/onboarding/index.d.ts.map +1 -0
  1078. package/dist/app/onboarding/index.js +8 -0
  1079. package/dist/app/onboarding/index.js.map +1 -0
  1080. package/dist/app/org/AppsAccessSection.d.ts +12 -0
  1081. package/dist/app/org/AppsAccessSection.d.ts.map +1 -0
  1082. package/dist/app/org/AppsAccessSection.js +47 -0
  1083. package/dist/app/org/AppsAccessSection.js.map +1 -0
  1084. package/dist/app/org/AuthenticationSection.d.ts +15 -0
  1085. package/dist/app/org/AuthenticationSection.d.ts.map +1 -0
  1086. package/dist/app/org/AuthenticationSection.js +179 -0
  1087. package/dist/app/org/AuthenticationSection.js.map +1 -0
  1088. package/dist/app/org/BulkInviteForm.d.ts +8 -0
  1089. package/dist/app/org/BulkInviteForm.d.ts.map +1 -0
  1090. package/dist/app/org/BulkInviteForm.js +185 -0
  1091. package/dist/app/org/BulkInviteForm.js.map +1 -0
  1092. package/dist/app/org/GroupsSection.d.ts +37 -0
  1093. package/dist/app/org/GroupsSection.d.ts.map +1 -0
  1094. package/dist/app/org/GroupsSection.js +152 -0
  1095. package/dist/app/org/GroupsSection.js.map +1 -0
  1096. package/dist/app/org/InvitationBanner.d.ts +5 -0
  1097. package/dist/app/org/InvitationBanner.d.ts.map +1 -0
  1098. package/dist/app/org/InvitationBanner.js +49 -0
  1099. package/dist/app/org/InvitationBanner.js.map +1 -0
  1100. package/dist/app/org/MemberAppRoles.d.ts +12 -0
  1101. package/dist/app/org/MemberAppRoles.d.ts.map +1 -0
  1102. package/dist/app/org/MemberAppRoles.js +100 -0
  1103. package/dist/app/org/MemberAppRoles.js.map +1 -0
  1104. package/dist/app/org/MembersSection.d.ts +75 -0
  1105. package/dist/app/org/MembersSection.d.ts.map +1 -0
  1106. package/dist/app/org/MembersSection.js +267 -0
  1107. package/dist/app/org/MembersSection.js.map +1 -0
  1108. package/dist/app/org/OrgGeneralSection.d.ts +29 -0
  1109. package/dist/app/org/OrgGeneralSection.d.ts.map +1 -0
  1110. package/dist/app/org/OrgGeneralSection.js +183 -0
  1111. package/dist/app/org/OrgGeneralSection.js.map +1 -0
  1112. package/dist/app/org/OrgIdentitySettings.d.ts +12 -0
  1113. package/dist/app/org/OrgIdentitySettings.d.ts.map +1 -0
  1114. package/dist/app/org/OrgIdentitySettings.js +124 -0
  1115. package/dist/app/org/OrgIdentitySettings.js.map +1 -0
  1116. package/dist/app/org/OrgSwitcher.d.ts +58 -0
  1117. package/dist/app/org/OrgSwitcher.d.ts.map +1 -0
  1118. package/dist/app/org/OrgSwitcher.js +273 -0
  1119. package/dist/app/org/OrgSwitcher.js.map +1 -0
  1120. package/dist/app/org/RequireActiveOrg.d.ts +9 -0
  1121. package/dist/app/org/RequireActiveOrg.d.ts.map +1 -0
  1122. package/dist/app/org/RequireActiveOrg.js +59 -0
  1123. package/dist/app/org/RequireActiveOrg.js.map +1 -0
  1124. package/dist/app/org/RequirePermission.d.ts +8 -0
  1125. package/dist/app/org/RequirePermission.d.ts.map +1 -0
  1126. package/dist/app/org/RequirePermission.js +6 -0
  1127. package/dist/app/org/RequirePermission.js.map +1 -0
  1128. package/dist/app/org/SuccessorPicker.d.ts +19 -0
  1129. package/dist/app/org/SuccessorPicker.d.ts.map +1 -0
  1130. package/dist/app/org/SuccessorPicker.js +48 -0
  1131. package/dist/app/org/SuccessorPicker.js.map +1 -0
  1132. package/dist/app/org/TeamOnboardingCards.d.ts +10 -0
  1133. package/dist/app/org/TeamOnboardingCards.d.ts.map +1 -0
  1134. package/dist/app/org/TeamOnboardingCards.js +55 -0
  1135. package/dist/app/org/TeamOnboardingCards.js.map +1 -0
  1136. package/dist/app/org/TeamPage.d.ts +16 -0
  1137. package/dist/app/org/TeamPage.d.ts.map +1 -0
  1138. package/dist/app/org/TeamPage.js +36 -0
  1139. package/dist/app/org/TeamPage.js.map +1 -0
  1140. package/dist/app/org/TeamPrimitives.d.ts +25 -0
  1141. package/dist/app/org/TeamPrimitives.d.ts.map +1 -0
  1142. package/dist/app/org/TeamPrimitives.js +41 -0
  1143. package/dist/app/org/TeamPrimitives.js.map +1 -0
  1144. package/dist/app/org/WorkspaceNotice.d.ts +4 -0
  1145. package/dist/app/org/WorkspaceNotice.d.ts.map +1 -0
  1146. package/dist/app/org/WorkspaceNotice.js +44 -0
  1147. package/dist/app/org/WorkspaceNotice.js.map +1 -0
  1148. package/dist/app/org/index.d.ts +23 -0
  1149. package/dist/app/org/index.d.ts.map +1 -0
  1150. package/dist/app/org/index.js +20 -0
  1151. package/dist/app/org/index.js.map +1 -0
  1152. package/dist/app/org/pages/OrgAppsPage.d.ts +6 -0
  1153. package/dist/app/org/pages/OrgAppsPage.d.ts.map +1 -0
  1154. package/dist/app/org/pages/OrgAppsPage.js +59 -0
  1155. package/dist/app/org/pages/OrgAppsPage.js.map +1 -0
  1156. package/dist/app/org/pages/OrgAuthenticationPage.d.ts +10 -0
  1157. package/dist/app/org/pages/OrgAuthenticationPage.d.ts.map +1 -0
  1158. package/dist/app/org/pages/OrgAuthenticationPage.js +60 -0
  1159. package/dist/app/org/pages/OrgAuthenticationPage.js.map +1 -0
  1160. package/dist/app/org/pages/OrgGeneralPage.d.ts +3 -0
  1161. package/dist/app/org/pages/OrgGeneralPage.d.ts.map +1 -0
  1162. package/dist/app/org/pages/OrgGeneralPage.js +97 -0
  1163. package/dist/app/org/pages/OrgGeneralPage.js.map +1 -0
  1164. package/dist/app/org/pages/OrgMembersPage.d.ts +11 -0
  1165. package/dist/app/org/pages/OrgMembersPage.d.ts.map +1 -0
  1166. package/dist/app/org/pages/OrgMembersPage.js +152 -0
  1167. package/dist/app/org/pages/OrgMembersPage.js.map +1 -0
  1168. package/dist/app/org/pages/OrgPageGate.d.ts +20 -0
  1169. package/dist/app/org/pages/OrgPageGate.d.ts.map +1 -0
  1170. package/dist/app/org/pages/OrgPageGate.js +38 -0
  1171. package/dist/app/org/pages/OrgPageGate.js.map +1 -0
  1172. package/dist/app/org/workspace-app-links.d.ts +38 -0
  1173. package/dist/app/org/workspace-app-links.d.ts.map +1 -0
  1174. package/dist/app/org/workspace-app-links.js +312 -0
  1175. package/dist/app/org/workspace-app-links.js.map +1 -0
  1176. package/dist/app/progress/RunsTray.d.ts +17 -0
  1177. package/dist/app/progress/RunsTray.d.ts.map +1 -0
  1178. package/dist/app/progress/RunsTray.js +366 -0
  1179. package/dist/app/progress/RunsTray.js.map +1 -0
  1180. package/dist/app/progress/index.d.ts +2 -0
  1181. package/dist/app/progress/index.d.ts.map +1 -0
  1182. package/dist/app/progress/index.js +2 -0
  1183. package/dist/app/progress/index.js.map +1 -0
  1184. package/dist/app/providers/AppProviders.d.ts +30 -0
  1185. package/dist/app/providers/AppProviders.d.ts.map +1 -0
  1186. package/dist/app/providers/AppProviders.js +233 -0
  1187. package/dist/app/providers/AppProviders.js.map +1 -0
  1188. package/dist/app/providers/index.d.ts +2 -0
  1189. package/dist/app/providers/index.d.ts.map +1 -0
  1190. package/dist/app/providers/index.js +2 -0
  1191. package/dist/app/providers/index.js.map +1 -0
  1192. package/dist/app/resources/BuiltinCapabilityDetail.d.ts +11 -0
  1193. package/dist/app/resources/BuiltinCapabilityDetail.d.ts.map +1 -0
  1194. package/dist/app/resources/BuiltinCapabilityDetail.js +51 -0
  1195. package/dist/app/resources/BuiltinCapabilityDetail.js.map +1 -0
  1196. package/dist/app/resources/McpAccessSettings.d.ts +11 -0
  1197. package/dist/app/resources/McpAccessSettings.d.ts.map +1 -0
  1198. package/dist/app/resources/McpAccessSettings.js +118 -0
  1199. package/dist/app/resources/McpAccessSettings.js.map +1 -0
  1200. package/dist/app/resources/McpAgentKitConnectionRequest.d.ts +22 -0
  1201. package/dist/app/resources/McpAgentKitConnectionRequest.d.ts.map +1 -0
  1202. package/dist/app/resources/McpAgentKitConnectionRequest.js +42 -0
  1203. package/dist/app/resources/McpAgentKitConnectionRequest.js.map +1 -0
  1204. package/dist/app/resources/McpConnectionSuggestion.d.ts +19 -0
  1205. package/dist/app/resources/McpConnectionSuggestion.d.ts.map +1 -0
  1206. package/dist/app/resources/McpConnectionSuggestion.js +207 -0
  1207. package/dist/app/resources/McpConnectionSuggestion.js.map +1 -0
  1208. package/dist/app/resources/McpIntegrationDialog.d.ts +21 -0
  1209. package/dist/app/resources/McpIntegrationDialog.d.ts.map +1 -0
  1210. package/dist/app/resources/McpIntegrationDialog.js +694 -0
  1211. package/dist/app/resources/McpIntegrationDialog.js.map +1 -0
  1212. package/dist/app/resources/McpIntegrationDialogDeferred.d.ts +6 -0
  1213. package/dist/app/resources/McpIntegrationDialogDeferred.d.ts.map +1 -0
  1214. package/dist/app/resources/McpIntegrationDialogDeferred.js +17 -0
  1215. package/dist/app/resources/McpIntegrationDialogDeferred.js.map +1 -0
  1216. package/dist/app/resources/McpIntegrationLogo.d.ts +12 -0
  1217. package/dist/app/resources/McpIntegrationLogo.d.ts.map +1 -0
  1218. package/dist/app/resources/McpIntegrationLogo.js +15 -0
  1219. package/dist/app/resources/McpIntegrationLogo.js.map +1 -0
  1220. package/dist/app/resources/McpServerDetail.d.ts +8 -0
  1221. package/dist/app/resources/McpServerDetail.d.ts.map +1 -0
  1222. package/dist/app/resources/McpServerDetail.js +59 -0
  1223. package/dist/app/resources/McpServerDetail.js.map +1 -0
  1224. package/dist/app/resources/ResourceEditor.d.ts +12 -0
  1225. package/dist/app/resources/ResourceEditor.d.ts.map +1 -0
  1226. package/dist/app/resources/ResourceEditor.js +442 -0
  1227. package/dist/app/resources/ResourceEditor.js.map +1 -0
  1228. package/dist/app/resources/ResourceSettingsGroups.d.ts +71 -0
  1229. package/dist/app/resources/ResourceSettingsGroups.d.ts.map +1 -0
  1230. package/dist/app/resources/ResourceSettingsGroups.js +163 -0
  1231. package/dist/app/resources/ResourceSettingsGroups.js.map +1 -0
  1232. package/dist/app/resources/ResourceTree.d.ts +31 -0
  1233. package/dist/app/resources/ResourceTree.d.ts.map +1 -0
  1234. package/dist/app/resources/ResourceTree.js +271 -0
  1235. package/dist/app/resources/ResourceTree.js.map +1 -0
  1236. package/dist/app/resources/ResourcesPanel.d.ts +92 -0
  1237. package/dist/app/resources/ResourcesPanel.d.ts.map +1 -0
  1238. package/dist/app/resources/ResourcesPanel.js +1151 -0
  1239. package/dist/app/resources/ResourcesPanel.js.map +1 -0
  1240. package/dist/app/resources/index.d.ts +13 -0
  1241. package/dist/app/resources/index.d.ts.map +1 -0
  1242. package/dist/app/resources/index.js +13 -0
  1243. package/dist/app/resources/index.js.map +1 -0
  1244. package/dist/app/review/InlineMarkdown.d.ts +20 -0
  1245. package/dist/app/review/InlineMarkdown.d.ts.map +1 -0
  1246. package/dist/app/review/InlineMarkdown.js +68 -0
  1247. package/dist/app/review/InlineMarkdown.js.map +1 -0
  1248. package/dist/app/review/ReviewCommentComposer.d.ts +33 -0
  1249. package/dist/app/review/ReviewCommentComposer.d.ts.map +1 -0
  1250. package/dist/app/review/ReviewCommentComposer.js +215 -0
  1251. package/dist/app/review/ReviewCommentComposer.js.map +1 -0
  1252. package/dist/app/review/ReviewStatusBadge.d.ts +7 -0
  1253. package/dist/app/review/ReviewStatusBadge.d.ts.map +1 -0
  1254. package/dist/app/review/ReviewStatusBadge.js +19 -0
  1255. package/dist/app/review/ReviewStatusBadge.js.map +1 -0
  1256. package/dist/app/review/ReviewThreadPanel.d.ts +88 -0
  1257. package/dist/app/review/ReviewThreadPanel.d.ts.map +1 -0
  1258. package/dist/app/review/ReviewThreadPanel.js +742 -0
  1259. package/dist/app/review/ReviewThreadPanel.js.map +1 -0
  1260. package/dist/app/review/index.d.ts +5 -0
  1261. package/dist/app/review/index.d.ts.map +1 -0
  1262. package/dist/app/review/index.js +5 -0
  1263. package/dist/app/review/index.js.map +1 -0
  1264. package/dist/app/settings/AccountSettingsCard.d.ts +9 -0
  1265. package/dist/app/settings/AccountSettingsCard.d.ts.map +1 -0
  1266. package/dist/app/settings/AccountSettingsCard.js +169 -0
  1267. package/dist/app/settings/AccountSettingsCard.js.map +1 -0
  1268. package/dist/app/settings/AgentDirectorySection.d.ts +14 -0
  1269. package/dist/app/settings/AgentDirectorySection.d.ts.map +1 -0
  1270. package/dist/app/settings/AgentDirectorySection.js +65 -0
  1271. package/dist/app/settings/AgentDirectorySection.js.map +1 -0
  1272. package/dist/app/settings/AgentPersonalizationSettings.d.ts +2 -0
  1273. package/dist/app/settings/AgentPersonalizationSettings.d.ts.map +1 -0
  1274. package/dist/app/settings/AgentPersonalizationSettings.js +115 -0
  1275. package/dist/app/settings/AgentPersonalizationSettings.js.map +1 -0
  1276. package/dist/app/settings/AgentProviderPicker.d.ts +12 -0
  1277. package/dist/app/settings/AgentProviderPicker.d.ts.map +1 -0
  1278. package/dist/app/settings/AgentProviderPicker.js +47 -0
  1279. package/dist/app/settings/AgentProviderPicker.js.map +1 -0
  1280. package/dist/app/settings/AgentsSection.d.ts +130 -0
  1281. package/dist/app/settings/AgentsSection.d.ts.map +1 -0
  1282. package/dist/app/settings/AgentsSection.js +1079 -0
  1283. package/dist/app/settings/AgentsSection.js.map +1 -0
  1284. package/dist/app/settings/ApiKeySettings.d.ts +6 -0
  1285. package/dist/app/settings/ApiKeySettings.d.ts.map +1 -0
  1286. package/dist/app/settings/ApiKeySettings.js +200 -0
  1287. package/dist/app/settings/ApiKeySettings.js.map +1 -0
  1288. package/dist/app/settings/AutomationsSection.d.ts +4 -0
  1289. package/dist/app/settings/AutomationsSection.d.ts.map +1 -0
  1290. package/dist/app/settings/AutomationsSection.js +18 -0
  1291. package/dist/app/settings/AutomationsSection.js.map +1 -0
  1292. package/dist/app/settings/BuilderConnectPopover.d.ts +28 -0
  1293. package/dist/app/settings/BuilderConnectPopover.d.ts.map +1 -0
  1294. package/dist/app/settings/BuilderConnectPopover.js +94 -0
  1295. package/dist/app/settings/BuilderConnectPopover.js.map +1 -0
  1296. package/dist/app/settings/DemoModeSection.d.ts +4 -0
  1297. package/dist/app/settings/DemoModeSection.d.ts.map +1 -0
  1298. package/dist/app/settings/DemoModeSection.js +12 -0
  1299. package/dist/app/settings/DemoModeSection.js.map +1 -0
  1300. package/dist/app/settings/ExtensionsSettingsContent.d.ts +2 -0
  1301. package/dist/app/settings/ExtensionsSettingsContent.d.ts.map +1 -0
  1302. package/dist/app/settings/ExtensionsSettingsContent.js +10 -0
  1303. package/dist/app/settings/ExtensionsSettingsContent.js.map +1 -0
  1304. package/dist/app/settings/KeyProviderTile.d.ts +12 -0
  1305. package/dist/app/settings/KeyProviderTile.d.ts.map +1 -0
  1306. package/dist/app/settings/KeyProviderTile.js +59 -0
  1307. package/dist/app/settings/KeyProviderTile.js.map +1 -0
  1308. package/dist/app/settings/NewKeyMenu.d.ts +26 -0
  1309. package/dist/app/settings/NewKeyMenu.d.ts.map +1 -0
  1310. package/dist/app/settings/NewKeyMenu.js +40 -0
  1311. package/dist/app/settings/NewKeyMenu.js.map +1 -0
  1312. package/dist/app/settings/ProviderSetupForm.d.ts +24 -0
  1313. package/dist/app/settings/ProviderSetupForm.d.ts.map +1 -0
  1314. package/dist/app/settings/ProviderSetupForm.js +253 -0
  1315. package/dist/app/settings/ProviderSetupForm.js.map +1 -0
  1316. package/dist/app/settings/SchedulingTimezoneField.d.ts +4 -0
  1317. package/dist/app/settings/SchedulingTimezoneField.d.ts.map +1 -0
  1318. package/dist/app/settings/SchedulingTimezoneField.js +25 -0
  1319. package/dist/app/settings/SchedulingTimezoneField.js.map +1 -0
  1320. package/dist/app/settings/SecretsSection.d.ts +6 -0
  1321. package/dist/app/settings/SecretsSection.d.ts.map +1 -0
  1322. package/dist/app/settings/SecretsSection.js +469 -0
  1323. package/dist/app/settings/SecretsSection.js.map +1 -0
  1324. package/dist/app/settings/SettingsCrossLinkHint.d.ts +6 -0
  1325. package/dist/app/settings/SettingsCrossLinkHint.d.ts.map +1 -0
  1326. package/dist/app/settings/SettingsCrossLinkHint.js +5 -0
  1327. package/dist/app/settings/SettingsCrossLinkHint.js.map +1 -0
  1328. package/dist/app/settings/SettingsPanel.d.ts +52 -0
  1329. package/dist/app/settings/SettingsPanel.d.ts.map +1 -0
  1330. package/dist/app/settings/SettingsPanel.js +1750 -0
  1331. package/dist/app/settings/SettingsPanel.js.map +1 -0
  1332. package/dist/app/settings/SettingsRow.d.ts +22 -0
  1333. package/dist/app/settings/SettingsRow.d.ts.map +1 -0
  1334. package/dist/app/settings/SettingsRow.js +11 -0
  1335. package/dist/app/settings/SettingsRow.js.map +1 -0
  1336. package/dist/app/settings/SettingsSection.d.ts +24 -0
  1337. package/dist/app/settings/SettingsSection.d.ts.map +1 -0
  1338. package/dist/app/settings/SettingsSection.js +62 -0
  1339. package/dist/app/settings/SettingsSection.js.map +1 -0
  1340. package/dist/app/settings/SettingsSkeleton.d.ts +11 -0
  1341. package/dist/app/settings/SettingsSkeleton.d.ts.map +1 -0
  1342. package/dist/app/settings/SettingsSkeleton.js +13 -0
  1343. package/dist/app/settings/SettingsSkeleton.js.map +1 -0
  1344. package/dist/app/settings/SettingsTabsPage.d.ts +123 -0
  1345. package/dist/app/settings/SettingsTabsPage.d.ts.map +1 -0
  1346. package/dist/app/settings/SettingsTabsPage.js +590 -0
  1347. package/dist/app/settings/SettingsTabsPage.js.map +1 -0
  1348. package/dist/app/settings/StorageSettingsForm.d.ts +29 -0
  1349. package/dist/app/settings/StorageSettingsForm.d.ts.map +1 -0
  1350. package/dist/app/settings/StorageSettingsForm.js +283 -0
  1351. package/dist/app/settings/StorageSettingsForm.js.map +1 -0
  1352. package/dist/app/settings/UsageSection.d.ts +19 -0
  1353. package/dist/app/settings/UsageSection.d.ts.map +1 -0
  1354. package/dist/app/settings/UsageSection.js +358 -0
  1355. package/dist/app/settings/UsageSection.js.map +1 -0
  1356. package/dist/app/settings/VoiceTranscriptionSection.d.ts +5 -0
  1357. package/dist/app/settings/VoiceTranscriptionSection.d.ts.map +1 -0
  1358. package/dist/app/settings/VoiceTranscriptionSection.js +443 -0
  1359. package/dist/app/settings/VoiceTranscriptionSection.js.map +1 -0
  1360. package/dist/app/settings/account/PreferencesSettings.d.ts +6 -0
  1361. package/dist/app/settings/account/PreferencesSettings.d.ts.map +1 -0
  1362. package/dist/app/settings/account/PreferencesSettings.js +18 -0
  1363. package/dist/app/settings/account/PreferencesSettings.js.map +1 -0
  1364. package/dist/app/settings/account/ProfileSettings.d.ts +3 -0
  1365. package/dist/app/settings/account/ProfileSettings.d.ts.map +1 -0
  1366. package/dist/app/settings/account/ProfileSettings.js +123 -0
  1367. package/dist/app/settings/account/ProfileSettings.js.map +1 -0
  1368. package/dist/app/settings/account/SecuritySettings.d.ts +3 -0
  1369. package/dist/app/settings/account/SecuritySettings.d.ts.map +1 -0
  1370. package/dist/app/settings/account/SecuritySettings.js +161 -0
  1371. package/dist/app/settings/account/SecuritySettings.js.map +1 -0
  1372. package/dist/app/settings/account/account-copy.d.ts +10 -0
  1373. package/dist/app/settings/account/account-copy.d.ts.map +1 -0
  1374. package/dist/app/settings/account/account-copy.js +25 -0
  1375. package/dist/app/settings/account/account-copy.js.map +1 -0
  1376. package/dist/app/settings/account/account-hooks.d.ts +81 -0
  1377. package/dist/app/settings/account/account-hooks.d.ts.map +1 -0
  1378. package/dist/app/settings/account/account-hooks.js +298 -0
  1379. package/dist/app/settings/account/account-hooks.js.map +1 -0
  1380. package/dist/app/settings/account/search-entries.d.ts +5 -0
  1381. package/dist/app/settings/account/search-entries.d.ts.map +1 -0
  1382. package/dist/app/settings/account/search-entries.js +70 -0
  1383. package/dist/app/settings/account/search-entries.js.map +1 -0
  1384. package/dist/app/settings/agent-settings-search.d.ts +30 -0
  1385. package/dist/app/settings/agent-settings-search.d.ts.map +1 -0
  1386. package/dist/app/settings/agent-settings-search.js +261 -0
  1387. package/dist/app/settings/agent-settings-search.js.map +1 -0
  1388. package/dist/app/settings/api-keys/ApiKeyDialogs.d.ts +51 -0
  1389. package/dist/app/settings/api-keys/ApiKeyDialogs.d.ts.map +1 -0
  1390. package/dist/app/settings/api-keys/ApiKeyDialogs.js +237 -0
  1391. package/dist/app/settings/api-keys/ApiKeyDialogs.js.map +1 -0
  1392. package/dist/app/settings/api-keys/ApiKeysSettingsPage.d.ts +8 -0
  1393. package/dist/app/settings/api-keys/ApiKeysSettingsPage.d.ts.map +1 -0
  1394. package/dist/app/settings/api-keys/ApiKeysSettingsPage.js +178 -0
  1395. package/dist/app/settings/api-keys/ApiKeysSettingsPage.js.map +1 -0
  1396. package/dist/app/settings/api-keys/api-keys-client.d.ts +25 -0
  1397. package/dist/app/settings/api-keys/api-keys-client.d.ts.map +1 -0
  1398. package/dist/app/settings/api-keys/api-keys-client.js +59 -0
  1399. package/dist/app/settings/api-keys/api-keys-client.js.map +1 -0
  1400. package/dist/app/settings/api-keys/api-keys-state.d.ts +51 -0
  1401. package/dist/app/settings/api-keys/api-keys-state.d.ts.map +1 -0
  1402. package/dist/app/settings/api-keys/api-keys-state.js +92 -0
  1403. package/dist/app/settings/api-keys/api-keys-state.js.map +1 -0
  1404. package/dist/app/settings/app-group/AppDefaultModelRow.d.ts +10 -0
  1405. package/dist/app/settings/app-group/AppDefaultModelRow.d.ts.map +1 -0
  1406. package/dist/app/settings/app-group/AppDefaultModelRow.js +125 -0
  1407. package/dist/app/settings/app-group/AppDefaultModelRow.js.map +1 -0
  1408. package/dist/app/settings/app-group/ReadOnlySettingValue.d.ts +6 -0
  1409. package/dist/app/settings/app-group/ReadOnlySettingValue.d.ts.map +1 -0
  1410. package/dist/app/settings/app-group/ReadOnlySettingValue.js +8 -0
  1411. package/dist/app/settings/app-group/ReadOnlySettingValue.js.map +1 -0
  1412. package/dist/app/settings/app-group/SettingsHeaderBadge.d.ts +6 -0
  1413. package/dist/app/settings/app-group/SettingsHeaderBadge.d.ts.map +1 -0
  1414. package/dist/app/settings/app-group/SettingsHeaderBadge.js +11 -0
  1415. package/dist/app/settings/app-group/SettingsHeaderBadge.js.map +1 -0
  1416. package/dist/app/settings/app-settings-tabs.d.ts +18 -0
  1417. package/dist/app/settings/app-settings-tabs.d.ts.map +1 -0
  1418. package/dist/app/settings/app-settings-tabs.js +45 -0
  1419. package/dist/app/settings/app-settings-tabs.js.map +1 -0
  1420. package/dist/app/settings/deferred-builder-connect-popover.d.ts +4 -0
  1421. package/dist/app/settings/deferred-builder-connect-popover.d.ts.map +1 -0
  1422. package/dist/app/settings/deferred-builder-connect-popover.js +15 -0
  1423. package/dist/app/settings/deferred-builder-connect-popover.js.map +1 -0
  1424. package/dist/app/settings/index.d.ts +25 -0
  1425. package/dist/app/settings/index.d.ts.map +1 -0
  1426. package/dist/app/settings/index.js +23 -0
  1427. package/dist/app/settings/index.js.map +1 -0
  1428. package/dist/app/settings/infra/EnvironmentDialogs.d.ts +9 -0
  1429. package/dist/app/settings/infra/EnvironmentDialogs.d.ts.map +1 -0
  1430. package/dist/app/settings/infra/EnvironmentDialogs.js +102 -0
  1431. package/dist/app/settings/infra/EnvironmentDialogs.js.map +1 -0
  1432. package/dist/app/settings/infra/InfrastructureSettingsPage.d.ts +8 -0
  1433. package/dist/app/settings/infra/InfrastructureSettingsPage.d.ts.map +1 -0
  1434. package/dist/app/settings/infra/InfrastructureSettingsPage.js +397 -0
  1435. package/dist/app/settings/infra/InfrastructureSettingsPage.js.map +1 -0
  1436. package/dist/app/settings/infra/ServiceDialog.d.ts +23 -0
  1437. package/dist/app/settings/infra/ServiceDialog.d.ts.map +1 -0
  1438. package/dist/app/settings/infra/ServiceDialog.js +94 -0
  1439. package/dist/app/settings/infra/ServiceDialog.js.map +1 -0
  1440. package/dist/app/settings/infra/infra-page-state.d.ts +86 -0
  1441. package/dist/app/settings/infra/infra-page-state.d.ts.map +1 -0
  1442. package/dist/app/settings/infra/infra-page-state.js +182 -0
  1443. package/dist/app/settings/infra/infra-page-state.js.map +1 -0
  1444. package/dist/app/settings/infra/logos.d.ts +21 -0
  1445. package/dist/app/settings/infra/logos.d.ts.map +1 -0
  1446. package/dist/app/settings/infra/logos.js +21 -0
  1447. package/dist/app/settings/infra/logos.js.map +1 -0
  1448. package/dist/app/settings/managed-secrets.d.ts +19 -0
  1449. package/dist/app/settings/managed-secrets.d.ts.map +1 -0
  1450. package/dist/app/settings/managed-secrets.js +40 -0
  1451. package/dist/app/settings/managed-secrets.js.map +1 -0
  1452. package/dist/app/settings/model/ChatGPTSubscriptionRow.d.ts +3 -0
  1453. package/dist/app/settings/model/ChatGPTSubscriptionRow.d.ts.map +1 -0
  1454. package/dist/app/settings/model/ChatGPTSubscriptionRow.js +95 -0
  1455. package/dist/app/settings/model/ChatGPTSubscriptionRow.js.map +1 -0
  1456. package/dist/app/settings/model/ModelSettingsPage.d.ts +8 -0
  1457. package/dist/app/settings/model/ModelSettingsPage.d.ts.map +1 -0
  1458. package/dist/app/settings/model/ModelSettingsPage.js +490 -0
  1459. package/dist/app/settings/model/ModelSettingsPage.js.map +1 -0
  1460. package/dist/app/settings/model/ProviderDialog.d.ts +38 -0
  1461. package/dist/app/settings/model/ProviderDialog.d.ts.map +1 -0
  1462. package/dist/app/settings/model/ProviderDialog.js +467 -0
  1463. package/dist/app/settings/model/ProviderDialog.js.map +1 -0
  1464. package/dist/app/settings/model/RemoveProviderDialog.d.ts +20 -0
  1465. package/dist/app/settings/model/RemoveProviderDialog.d.ts.map +1 -0
  1466. package/dist/app/settings/model/RemoveProviderDialog.js +93 -0
  1467. package/dist/app/settings/model/RemoveProviderDialog.js.map +1 -0
  1468. package/dist/app/settings/model/RestrictKeysDialog.d.ts +12 -0
  1469. package/dist/app/settings/model/RestrictKeysDialog.d.ts.map +1 -0
  1470. package/dist/app/settings/model/RestrictKeysDialog.js +55 -0
  1471. package/dist/app/settings/model/RestrictKeysDialog.js.map +1 -0
  1472. package/dist/app/settings/model/model-page-state.d.ts +101 -0
  1473. package/dist/app/settings/model/model-page-state.d.ts.map +1 -0
  1474. package/dist/app/settings/model/model-page-state.js +193 -0
  1475. package/dist/app/settings/model/model-page-state.js.map +1 -0
  1476. package/dist/app/settings/recent-prompt-groups.d.ts +13 -0
  1477. package/dist/app/settings/recent-prompt-groups.d.ts.map +1 -0
  1478. package/dist/app/settings/recent-prompt-groups.js +21 -0
  1479. package/dist/app/settings/recent-prompt-groups.js.map +1 -0
  1480. package/dist/app/settings/shell/SettingsShell.d.ts +34 -0
  1481. package/dist/app/settings/shell/SettingsShell.d.ts.map +1 -0
  1482. package/dist/app/settings/shell/SettingsShell.js +573 -0
  1483. package/dist/app/settings/shell/SettingsShell.js.map +1 -0
  1484. package/dist/app/settings/shell/SettingsShellSkeleton.d.ts +5 -0
  1485. package/dist/app/settings/shell/SettingsShellSkeleton.d.ts.map +1 -0
  1486. package/dist/app/settings/shell/SettingsShellSkeleton.js +13 -0
  1487. package/dist/app/settings/shell/SettingsShellSkeleton.js.map +1 -0
  1488. package/dist/app/settings/shell/app-identity.d.ts +15 -0
  1489. package/dist/app/settings/shell/app-identity.d.ts.map +1 -0
  1490. package/dist/app/settings/shell/app-identity.js +50 -0
  1491. package/dist/app/settings/shell/app-identity.js.map +1 -0
  1492. package/dist/app/settings/shell/bridge.d.ts +85 -0
  1493. package/dist/app/settings/shell/bridge.d.ts.map +1 -0
  1494. package/dist/app/settings/shell/bridge.js +187 -0
  1495. package/dist/app/settings/shell/bridge.js.map +1 -0
  1496. package/dist/app/settings/shell/context.d.ts +26 -0
  1497. package/dist/app/settings/shell/context.d.ts.map +1 -0
  1498. package/dist/app/settings/shell/context.js +22 -0
  1499. package/dist/app/settings/shell/context.js.map +1 -0
  1500. package/dist/app/settings/shell/core-pages.d.ts +9 -0
  1501. package/dist/app/settings/shell/core-pages.d.ts.map +1 -0
  1502. package/dist/app/settings/shell/core-pages.js +599 -0
  1503. package/dist/app/settings/shell/core-pages.js.map +1 -0
  1504. package/dist/app/settings/shell/index.d.ts +12 -0
  1505. package/dist/app/settings/shell/index.d.ts.map +1 -0
  1506. package/dist/app/settings/shell/index.js +17 -0
  1507. package/dist/app/settings/shell/index.js.map +1 -0
  1508. package/dist/app/settings/shell/pages/api-keys.d.ts +3 -0
  1509. package/dist/app/settings/shell/pages/api-keys.d.ts.map +1 -0
  1510. package/dist/app/settings/shell/pages/api-keys.js +8 -0
  1511. package/dist/app/settings/shell/pages/api-keys.js.map +1 -0
  1512. package/dist/app/settings/shell/pages/app.d.ts +7 -0
  1513. package/dist/app/settings/shell/pages/app.d.ts.map +1 -0
  1514. package/dist/app/settings/shell/pages/app.js +36 -0
  1515. package/dist/app/settings/shell/pages/app.js.map +1 -0
  1516. package/dist/app/settings/shell/pages/apps.d.ts +2 -0
  1517. package/dist/app/settings/shell/pages/apps.d.ts.map +1 -0
  1518. package/dist/app/settings/shell/pages/apps.js +6 -0
  1519. package/dist/app/settings/shell/pages/apps.js.map +1 -0
  1520. package/dist/app/settings/shell/pages/audit.d.ts +4 -0
  1521. package/dist/app/settings/shell/pages/audit.d.ts.map +1 -0
  1522. package/dist/app/settings/shell/pages/audit.js +200 -0
  1523. package/dist/app/settings/shell/pages/audit.js.map +1 -0
  1524. package/dist/app/settings/shell/pages/auth.d.ts +2 -0
  1525. package/dist/app/settings/shell/pages/auth.d.ts.map +1 -0
  1526. package/dist/app/settings/shell/pages/auth.js +6 -0
  1527. package/dist/app/settings/shell/pages/auth.js.map +1 -0
  1528. package/dist/app/settings/shell/pages/automations.d.ts +8 -0
  1529. package/dist/app/settings/shell/pages/automations.d.ts.map +1 -0
  1530. package/dist/app/settings/shell/pages/automations.js +30 -0
  1531. package/dist/app/settings/shell/pages/automations.js.map +1 -0
  1532. package/dist/app/settings/shell/pages/bridged-tab.d.ts +4 -0
  1533. package/dist/app/settings/shell/pages/bridged-tab.d.ts.map +1 -0
  1534. package/dist/app/settings/shell/pages/bridged-tab.js +6 -0
  1535. package/dist/app/settings/shell/pages/bridged-tab.js.map +1 -0
  1536. package/dist/app/settings/shell/pages/channels.d.ts +3 -0
  1537. package/dist/app/settings/shell/pages/channels.d.ts.map +1 -0
  1538. package/dist/app/settings/shell/pages/channels.js +14 -0
  1539. package/dist/app/settings/shell/pages/channels.js.map +1 -0
  1540. package/dist/app/settings/shell/pages/creative-context.d.ts +8 -0
  1541. package/dist/app/settings/shell/pages/creative-context.d.ts.map +1 -0
  1542. package/dist/app/settings/shell/pages/creative-context.js +18 -0
  1543. package/dist/app/settings/shell/pages/creative-context.js.map +1 -0
  1544. package/dist/app/settings/shell/pages/files.d.ts +2 -0
  1545. package/dist/app/settings/shell/pages/files.d.ts.map +1 -0
  1546. package/dist/app/settings/shell/pages/files.js +39 -0
  1547. package/dist/app/settings/shell/pages/files.js.map +1 -0
  1548. package/dist/app/settings/shell/pages/infra.d.ts +3 -0
  1549. package/dist/app/settings/shell/pages/infra.d.ts.map +1 -0
  1550. package/dist/app/settings/shell/pages/infra.js +6 -0
  1551. package/dist/app/settings/shell/pages/infra.js.map +1 -0
  1552. package/dist/app/settings/shell/pages/instructions.d.ts +2 -0
  1553. package/dist/app/settings/shell/pages/instructions.d.ts.map +1 -0
  1554. package/dist/app/settings/shell/pages/instructions.js +35 -0
  1555. package/dist/app/settings/shell/pages/instructions.js.map +1 -0
  1556. package/dist/app/settings/shell/pages/integrations.d.ts +3 -0
  1557. package/dist/app/settings/shell/pages/integrations.d.ts.map +1 -0
  1558. package/dist/app/settings/shell/pages/integrations.js +23 -0
  1559. package/dist/app/settings/shell/pages/integrations.js.map +1 -0
  1560. package/dist/app/settings/shell/pages/labs.d.ts +3 -0
  1561. package/dist/app/settings/shell/pages/labs.d.ts.map +1 -0
  1562. package/dist/app/settings/shell/pages/labs.js +8 -0
  1563. package/dist/app/settings/shell/pages/labs.js.map +1 -0
  1564. package/dist/app/settings/shell/pages/mcp.d.ts +3 -0
  1565. package/dist/app/settings/shell/pages/mcp.d.ts.map +1 -0
  1566. package/dist/app/settings/shell/pages/mcp.js +27 -0
  1567. package/dist/app/settings/shell/pages/mcp.js.map +1 -0
  1568. package/dist/app/settings/shell/pages/members.d.ts +2 -0
  1569. package/dist/app/settings/shell/pages/members.d.ts.map +1 -0
  1570. package/dist/app/settings/shell/pages/members.js +6 -0
  1571. package/dist/app/settings/shell/pages/members.js.map +1 -0
  1572. package/dist/app/settings/shell/pages/memory.d.ts +2 -0
  1573. package/dist/app/settings/shell/pages/memory.d.ts.map +1 -0
  1574. package/dist/app/settings/shell/pages/memory.js +41 -0
  1575. package/dist/app/settings/shell/pages/memory.js.map +1 -0
  1576. package/dist/app/settings/shell/pages/model.d.ts +3 -0
  1577. package/dist/app/settings/shell/pages/model.d.ts.map +1 -0
  1578. package/dist/app/settings/shell/pages/model.js +13 -0
  1579. package/dist/app/settings/shell/pages/model.js.map +1 -0
  1580. package/dist/app/settings/shell/pages/notifications.d.ts +3 -0
  1581. package/dist/app/settings/shell/pages/notifications.d.ts.map +1 -0
  1582. package/dist/app/settings/shell/pages/notifications.js +5 -0
  1583. package/dist/app/settings/shell/pages/notifications.js.map +1 -0
  1584. package/dist/app/settings/shell/pages/org.d.ts +2 -0
  1585. package/dist/app/settings/shell/pages/org.d.ts.map +1 -0
  1586. package/dist/app/settings/shell/pages/org.js +6 -0
  1587. package/dist/app/settings/shell/pages/org.js.map +1 -0
  1588. package/dist/app/settings/shell/pages/pending.d.ts +3 -0
  1589. package/dist/app/settings/shell/pages/pending.d.ts.map +1 -0
  1590. package/dist/app/settings/shell/pages/pending.js +8 -0
  1591. package/dist/app/settings/shell/pages/pending.js.map +1 -0
  1592. package/dist/app/settings/shell/pages/preferences.d.ts +2 -0
  1593. package/dist/app/settings/shell/pages/preferences.d.ts.map +1 -0
  1594. package/dist/app/settings/shell/pages/preferences.js +6 -0
  1595. package/dist/app/settings/shell/pages/preferences.js.map +1 -0
  1596. package/dist/app/settings/shell/pages/profile.d.ts +2 -0
  1597. package/dist/app/settings/shell/pages/profile.d.ts.map +1 -0
  1598. package/dist/app/settings/shell/pages/profile.js +6 -0
  1599. package/dist/app/settings/shell/pages/profile.js.map +1 -0
  1600. package/dist/app/settings/shell/pages/resource-collection.d.ts +6 -0
  1601. package/dist/app/settings/shell/pages/resource-collection.d.ts.map +1 -0
  1602. package/dist/app/settings/shell/pages/resource-collection.js +11 -0
  1603. package/dist/app/settings/shell/pages/resource-collection.js.map +1 -0
  1604. package/dist/app/settings/shell/pages/resource-settings-page.d.ts +63 -0
  1605. package/dist/app/settings/shell/pages/resource-settings-page.d.ts.map +1 -0
  1606. package/dist/app/settings/shell/pages/resource-settings-page.js +237 -0
  1607. package/dist/app/settings/shell/pages/resource-settings-page.js.map +1 -0
  1608. package/dist/app/settings/shell/pages/security.d.ts +2 -0
  1609. package/dist/app/settings/shell/pages/security.d.ts.map +1 -0
  1610. package/dist/app/settings/shell/pages/security.js +6 -0
  1611. package/dist/app/settings/shell/pages/security.js.map +1 -0
  1612. package/dist/app/settings/shell/pages/skills.d.ts +2 -0
  1613. package/dist/app/settings/shell/pages/skills.d.ts.map +1 -0
  1614. package/dist/app/settings/shell/pages/skills.js +39 -0
  1615. package/dist/app/settings/shell/pages/skills.js.map +1 -0
  1616. package/dist/app/settings/shell/pages/sub-agents.d.ts +27 -0
  1617. package/dist/app/settings/shell/pages/sub-agents.d.ts.map +1 -0
  1618. package/dist/app/settings/shell/pages/sub-agents.js +336 -0
  1619. package/dist/app/settings/shell/pages/sub-agents.js.map +1 -0
  1620. package/dist/app/settings/shell/pages/usage.d.ts +3 -0
  1621. package/dist/app/settings/shell/pages/usage.d.ts.map +1 -0
  1622. package/dist/app/settings/shell/pages/usage.js +6 -0
  1623. package/dist/app/settings/shell/pages/usage.js.map +1 -0
  1624. package/dist/app/settings/shell/pages/whats-new.d.ts +3 -0
  1625. package/dist/app/settings/shell/pages/whats-new.d.ts.map +1 -0
  1626. package/dist/app/settings/shell/pages/whats-new.js +30 -0
  1627. package/dist/app/settings/shell/pages/whats-new.js.map +1 -0
  1628. package/dist/app/settings/shell/registry.d.ts +99 -0
  1629. package/dist/app/settings/shell/registry.d.ts.map +1 -0
  1630. package/dist/app/settings/shell/registry.js +80 -0
  1631. package/dist/app/settings/shell/registry.js.map +1 -0
  1632. package/dist/app/settings/shell/return-path.d.ts +10 -0
  1633. package/dist/app/settings/shell/return-path.d.ts.map +1 -0
  1634. package/dist/app/settings/shell/return-path.js +45 -0
  1635. package/dist/app/settings/shell/return-path.js.map +1 -0
  1636. package/dist/app/settings/shell/routing.d.ts +62 -0
  1637. package/dist/app/settings/shell/routing.d.ts.map +1 -0
  1638. package/dist/app/settings/shell/routing.js +190 -0
  1639. package/dist/app/settings/shell/routing.js.map +1 -0
  1640. package/dist/app/settings/shell/search.d.ts +26 -0
  1641. package/dist/app/settings/shell/search.d.ts.map +1 -0
  1642. package/dist/app/settings/shell/search.js +65 -0
  1643. package/dist/app/settings/shell/search.js.map +1 -0
  1644. package/dist/app/settings/usage/UsageAlerts.d.ts +11 -0
  1645. package/dist/app/settings/usage/UsageAlerts.d.ts.map +1 -0
  1646. package/dist/app/settings/usage/UsageAlerts.js +174 -0
  1647. package/dist/app/settings/usage/UsageAlerts.js.map +1 -0
  1648. package/dist/app/settings/usage/UsageCharts.d.ts +37 -0
  1649. package/dist/app/settings/usage/UsageCharts.d.ts.map +1 -0
  1650. package/dist/app/settings/usage/UsageCharts.js +70 -0
  1651. package/dist/app/settings/usage/UsageCharts.js.map +1 -0
  1652. package/dist/app/settings/usage/UsageGroup.d.ts +18 -0
  1653. package/dist/app/settings/usage/UsageGroup.d.ts.map +1 -0
  1654. package/dist/app/settings/usage/UsageGroup.js +16 -0
  1655. package/dist/app/settings/usage/UsageGroup.js.map +1 -0
  1656. package/dist/app/settings/usage/UsagePage.d.ts +10 -0
  1657. package/dist/app/settings/usage/UsagePage.d.ts.map +1 -0
  1658. package/dist/app/settings/usage/UsagePage.js +283 -0
  1659. package/dist/app/settings/usage/UsagePage.js.map +1 -0
  1660. package/dist/app/settings/usage/usage-model.d.ts +143 -0
  1661. package/dist/app/settings/usage/usage-model.d.ts.map +1 -0
  1662. package/dist/app/settings/usage/usage-model.js +111 -0
  1663. package/dist/app/settings/usage/usage-model.js.map +1 -0
  1664. package/dist/app/settings/use-provider-key-save-scope.d.ts +15 -0
  1665. package/dist/app/settings/use-provider-key-save-scope.d.ts.map +1 -0
  1666. package/dist/app/settings/use-provider-key-save-scope.js +17 -0
  1667. package/dist/app/settings/use-provider-key-save-scope.js.map +1 -0
  1668. package/dist/app/settings/useBuilderStatus.d.ts +176 -0
  1669. package/dist/app/settings/useBuilderStatus.d.ts.map +1 -0
  1670. package/dist/app/settings/useBuilderStatus.js +1313 -0
  1671. package/dist/app/settings/useBuilderStatus.js.map +1 -0
  1672. package/dist/app/settings/useSettingsPanelController.d.ts +22 -0
  1673. package/dist/app/settings/useSettingsPanelController.d.ts.map +1 -0
  1674. package/dist/app/settings/useSettingsPanelController.js +134 -0
  1675. package/dist/app/settings/useSettingsPanelController.js.map +1 -0
  1676. package/dist/app/setup-connections/BuilderConnectCard.d.ts +34 -0
  1677. package/dist/app/setup-connections/BuilderConnectCard.d.ts.map +1 -0
  1678. package/dist/app/setup-connections/BuilderConnectCard.js +185 -0
  1679. package/dist/app/setup-connections/BuilderConnectCard.js.map +1 -0
  1680. package/dist/app/setup-connections/ProviderReadinessBadge.d.ts +8 -0
  1681. package/dist/app/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
  1682. package/dist/app/setup-connections/ProviderReadinessBadge.js +32 -0
  1683. package/dist/app/setup-connections/ProviderReadinessBadge.js.map +1 -0
  1684. package/dist/app/setup-connections/SetupConnectionsPage.d.ts +17 -0
  1685. package/dist/app/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
  1686. package/dist/app/setup-connections/SetupConnectionsPage.js +10 -0
  1687. package/dist/app/setup-connections/SetupConnectionsPage.js.map +1 -0
  1688. package/dist/app/setup-connections/index.d.ts +5 -0
  1689. package/dist/app/setup-connections/index.d.ts.map +1 -0
  1690. package/dist/app/setup-connections/index.js +5 -0
  1691. package/dist/app/setup-connections/index.js.map +1 -0
  1692. package/dist/app/setup-connections/useBuilderConnectCardController.d.ts +43 -0
  1693. package/dist/app/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
  1694. package/dist/app/setup-connections/useBuilderConnectCardController.js +48 -0
  1695. package/dist/app/setup-connections/useBuilderConnectCardController.js.map +1 -0
  1696. package/dist/app/shared/AboutAgentNativeDialog.d.ts +6 -0
  1697. package/dist/app/shared/AboutAgentNativeDialog.d.ts.map +1 -0
  1698. package/dist/app/shared/AboutAgentNativeDialog.js +57 -0
  1699. package/dist/app/shared/AboutAgentNativeDialog.js.map +1 -0
  1700. package/dist/app/shared/AgentNativeIcon.d.ts +7 -0
  1701. package/dist/app/shared/AgentNativeIcon.d.ts.map +1 -0
  1702. package/dist/app/shared/AgentNativeIcon.js +5 -0
  1703. package/dist/app/shared/AgentNativeIcon.js.map +1 -0
  1704. package/dist/app/shared/AppShellSkeleton.d.ts +8 -0
  1705. package/dist/app/shared/AppShellSkeleton.d.ts.map +1 -0
  1706. package/dist/app/shared/AppShellSkeleton.js +506 -0
  1707. package/dist/app/shared/AppShellSkeleton.js.map +1 -0
  1708. package/dist/app/shared/AppSidebar.d.ts +19 -0
  1709. package/dist/app/shared/AppSidebar.d.ts.map +1 -0
  1710. package/dist/app/shared/AppSidebar.js +45 -0
  1711. package/dist/app/shared/AppSidebar.js.map +1 -0
  1712. package/dist/app/shared/AppearancePicker.d.ts +7 -0
  1713. package/dist/app/shared/AppearancePicker.d.ts.map +1 -0
  1714. package/dist/app/shared/AppearancePicker.js +16 -0
  1715. package/dist/app/shared/AppearancePicker.js.map +1 -0
  1716. package/dist/app/shared/ClientOnly.d.ts +6 -0
  1717. package/dist/app/shared/ClientOnly.d.ts.map +1 -0
  1718. package/dist/app/shared/ClientOnly.js +10 -0
  1719. package/dist/app/shared/ClientOnly.js.map +1 -0
  1720. package/dist/app/shared/CommandMenu.d.ts +84 -0
  1721. package/dist/app/shared/CommandMenu.d.ts.map +1 -0
  1722. package/dist/app/shared/CommandMenu.js +419 -0
  1723. package/dist/app/shared/CommandMenu.js.map +1 -0
  1724. package/dist/app/shared/DefaultSpinner.d.ts +14 -0
  1725. package/dist/app/shared/DefaultSpinner.d.ts.map +1 -0
  1726. package/dist/app/shared/DefaultSpinner.js +80 -0
  1727. package/dist/app/shared/DefaultSpinner.js.map +1 -0
  1728. package/dist/app/shared/EnvironmentBadge.d.ts +17 -0
  1729. package/dist/app/shared/EnvironmentBadge.d.ts.map +1 -0
  1730. package/dist/app/shared/EnvironmentBadge.js +231 -0
  1731. package/dist/app/shared/EnvironmentBadge.js.map +1 -0
  1732. package/dist/app/shared/ErrorBoundary.d.ts +3 -0
  1733. package/dist/app/shared/ErrorBoundary.d.ts.map +1 -0
  1734. package/dist/app/shared/ErrorBoundary.js +267 -0
  1735. package/dist/app/shared/ErrorBoundary.js.map +1 -0
  1736. package/dist/app/shared/LanguagePicker.d.ts +9 -0
  1737. package/dist/app/shared/LanguagePicker.d.ts.map +1 -0
  1738. package/dist/app/shared/LanguagePicker.js +129 -0
  1739. package/dist/app/shared/LanguagePicker.js.map +1 -0
  1740. package/dist/app/shared/LazyChunkErrorBoundary.d.ts +17 -0
  1741. package/dist/app/shared/LazyChunkErrorBoundary.d.ts.map +1 -0
  1742. package/dist/app/shared/LazyChunkErrorBoundary.js +17 -0
  1743. package/dist/app/shared/LazyChunkErrorBoundary.js.map +1 -0
  1744. package/dist/app/shared/LazyChunkRetryFallback.d.ts +4 -0
  1745. package/dist/app/shared/LazyChunkRetryFallback.d.ts.map +1 -0
  1746. package/dist/app/shared/LazyChunkRetryFallback.js +10 -0
  1747. package/dist/app/shared/LazyChunkRetryFallback.js.map +1 -0
  1748. package/dist/app/shared/PoweredByBadge.d.ts +12 -0
  1749. package/dist/app/shared/PoweredByBadge.d.ts.map +1 -0
  1750. package/dist/app/shared/PoweredByBadge.js +184 -0
  1751. package/dist/app/shared/PoweredByBadge.js.map +1 -0
  1752. package/dist/app/shared/PrimitiveButton.d.ts +7 -0
  1753. package/dist/app/shared/PrimitiveButton.d.ts.map +1 -0
  1754. package/dist/app/shared/PrimitiveButton.js +29 -0
  1755. package/dist/app/shared/PrimitiveButton.js.map +1 -0
  1756. package/dist/app/shared/RouteTransitionIndicator.d.ts +4 -0
  1757. package/dist/app/shared/RouteTransitionIndicator.d.ts.map +1 -0
  1758. package/dist/app/shared/RouteTransitionIndicator.js +36 -0
  1759. package/dist/app/shared/RouteTransitionIndicator.js.map +1 -0
  1760. package/dist/app/shared/RuntimeConfigNotice.d.ts +2 -0
  1761. package/dist/app/shared/RuntimeConfigNotice.d.ts.map +1 -0
  1762. package/dist/app/shared/RuntimeConfigNotice.js +98 -0
  1763. package/dist/app/shared/RuntimeConfigNotice.js.map +1 -0
  1764. package/dist/app/shared/StarfieldBackground.d.ts +7 -0
  1765. package/dist/app/shared/StarfieldBackground.d.ts.map +1 -0
  1766. package/dist/app/shared/StarfieldBackground.js +369 -0
  1767. package/dist/app/shared/StarfieldBackground.js.map +1 -0
  1768. package/dist/app/shared/Turnstile.d.ts +19 -0
  1769. package/dist/app/shared/Turnstile.d.ts.map +1 -0
  1770. package/dist/app/shared/Turnstile.js +67 -0
  1771. package/dist/app/shared/Turnstile.js.map +1 -0
  1772. package/dist/app/shared/index.d.ts +20 -0
  1773. package/dist/app/shared/index.d.ts.map +1 -0
  1774. package/dist/app/shared/index.js +20 -0
  1775. package/dist/app/shared/index.js.map +1 -0
  1776. package/dist/app/sharing/AgentShareSection.d.ts +9 -0
  1777. package/dist/app/sharing/AgentShareSection.d.ts.map +1 -0
  1778. package/dist/app/sharing/AgentShareSection.js +63 -0
  1779. package/dist/app/sharing/AgentShareSection.js.map +1 -0
  1780. package/dist/app/sharing/ShareButton.d.ts +89 -0
  1781. package/dist/app/sharing/ShareButton.d.ts.map +1 -0
  1782. package/dist/app/sharing/ShareButton.js +491 -0
  1783. package/dist/app/sharing/ShareButton.js.map +1 -0
  1784. package/dist/app/sharing/ShareDialog.d.ts +15 -0
  1785. package/dist/app/sharing/ShareDialog.d.ts.map +1 -0
  1786. package/dist/app/sharing/ShareDialog.js +85 -0
  1787. package/dist/app/sharing/ShareDialog.js.map +1 -0
  1788. package/dist/app/sharing/VisibilityBadge.d.ts +2 -0
  1789. package/dist/app/sharing/VisibilityBadge.d.ts.map +1 -0
  1790. package/dist/app/sharing/VisibilityBadge.js +2 -0
  1791. package/dist/app/sharing/VisibilityBadge.js.map +1 -0
  1792. package/dist/app/sharing/index.d.ts +5 -0
  1793. package/dist/app/sharing/index.d.ts.map +1 -0
  1794. package/dist/app/sharing/index.js +5 -0
  1795. package/dist/app/sharing/index.js.map +1 -0
  1796. package/dist/app/styles/agent-conversation.css +770 -0
  1797. package/dist/app/styles/agent-native.css +1429 -0
  1798. package/dist/app/styles/blocks.css +1668 -0
  1799. package/dist/app/styles/chat-history-list.css +15 -0
  1800. package/dist/app/styles/rich-markdown-editor.css +1 -0
  1801. package/dist/app/styles/tokens/agent-kit.css +116 -0
  1802. package/dist/app/terminal/AgentTerminal.d.ts +23 -0
  1803. package/dist/app/terminal/AgentTerminal.d.ts.map +1 -0
  1804. package/dist/app/terminal/AgentTerminal.js +442 -0
  1805. package/dist/app/terminal/AgentTerminal.js.map +1 -0
  1806. package/dist/app/terminal/index.d.ts +2 -0
  1807. package/dist/app/terminal/index.d.ts.map +1 -0
  1808. package/dist/app/terminal/index.js +2 -0
  1809. package/dist/app/terminal/index.js.map +1 -0
  1810. package/dist/app/transcription/BuilderTranscriptionCta.d.ts +2 -0
  1811. package/dist/app/transcription/BuilderTranscriptionCta.d.ts.map +1 -0
  1812. package/dist/app/transcription/BuilderTranscriptionCta.js +26 -0
  1813. package/dist/app/transcription/BuilderTranscriptionCta.js.map +1 -0
  1814. package/dist/app/transcription/index.d.ts +2 -0
  1815. package/dist/app/transcription/index.d.ts.map +1 -0
  1816. package/dist/app/transcription/index.js +2 -0
  1817. package/dist/app/transcription/index.js.map +1 -0
  1818. package/dist/app-shell/prompt-home.css +4 -0
  1819. package/dist/composer/ComposerContextMenu.d.ts +11 -1
  1820. package/dist/composer/ComposerContextMenu.d.ts.map +1 -1
  1821. package/dist/composer/ComposerContextMenu.js +122 -59
  1822. package/dist/composer/ComposerContextMenu.js.map +1 -1
  1823. package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -1
  1824. package/dist/composer/ComposerContextPickerDialog.js +41 -11
  1825. package/dist/composer/ComposerContextPickerDialog.js.map +1 -1
  1826. package/dist/composer/ComposerPlusMenu.d.ts +10 -6
  1827. package/dist/composer/ComposerPlusMenu.d.ts.map +1 -1
  1828. package/dist/composer/ComposerPlusMenu.js +247 -273
  1829. package/dist/composer/ComposerPlusMenu.js.map +1 -1
  1830. package/dist/composer/MentionPopover.d.ts.map +1 -1
  1831. package/dist/composer/MentionPopover.js +1 -1
  1832. package/dist/composer/MentionPopover.js.map +1 -1
  1833. package/dist/composer/PromptComposer.d.ts +10 -4
  1834. package/dist/composer/PromptComposer.d.ts.map +1 -1
  1835. package/dist/composer/PromptComposer.js +11 -10
  1836. package/dist/composer/PromptComposer.js.map +1 -1
  1837. package/dist/composer/TiptapComposer.d.ts +18 -8
  1838. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  1839. package/dist/composer/TiptapComposer.js +446 -92
  1840. package/dist/composer/TiptapComposer.js.map +1 -1
  1841. package/dist/composer/attachment-accept.d.ts +4 -2
  1842. package/dist/composer/attachment-accept.d.ts.map +1 -1
  1843. package/dist/composer/attachment-accept.js +10 -2
  1844. package/dist/composer/attachment-accept.js.map +1 -1
  1845. package/dist/composer/index.d.ts +1 -0
  1846. package/dist/composer/index.d.ts.map +1 -1
  1847. package/dist/composer/index.js +1 -0
  1848. package/dist/composer/index.js.map +1 -1
  1849. package/dist/composer/types.d.ts +1 -1
  1850. package/dist/composer/types.d.ts.map +1 -1
  1851. package/dist/composer/use-composer-panel-placement.d.ts +10 -0
  1852. package/dist/composer/use-composer-panel-placement.d.ts.map +1 -0
  1853. package/dist/composer/use-composer-panel-placement.js +63 -0
  1854. package/dist/composer/use-composer-panel-placement.js.map +1 -0
  1855. package/dist/composer/use-mention-search.d.ts +2 -0
  1856. package/dist/composer/use-mention-search.d.ts.map +1 -1
  1857. package/dist/composer/use-mention-search.js +50 -22
  1858. package/dist/composer/use-mention-search.js.map +1 -1
  1859. package/dist/composer/use-skills.d.ts.map +1 -1
  1860. package/dist/composer/use-skills.js +47 -3
  1861. package/dist/composer/use-skills.js.map +1 -1
  1862. package/dist/composer/useComposerContextPicker.d.ts +5 -1
  1863. package/dist/composer/useComposerContextPicker.d.ts.map +1 -1
  1864. package/dist/composer/useComposerContextPicker.js +2 -2
  1865. package/dist/composer/useComposerContextPicker.js.map +1 -1
  1866. package/dist/styles.css +2 -3
  1867. package/eject/remote-mcp-presets.spec.ts +66 -0
  1868. package/package.json +325 -5
  1869. package/src/app/PrimitiveButton.tsx +43 -0
  1870. package/src/app/agent-page/AgentContextTab.spec.ts +35 -0
  1871. package/src/app/agent-page/AgentContextTab.tsx +493 -0
  1872. package/src/app/agent-page/AgentEmptyState.tsx +61 -0
  1873. package/src/app/agent-page/AgentJobsTab.blocked.spec.tsx +300 -0
  1874. package/src/app/agent-page/AgentJobsTab.spec.tsx +435 -0
  1875. package/src/app/agent-page/AgentJobsTab.tsx +967 -0
  1876. package/src/app/agent-page/AgentTabFrame.spec.tsx +48 -0
  1877. package/src/app/agent-page/AgentTabFrame.tsx +66 -0
  1878. package/src/app/agent-page/AgentTabsPage.spec.ts +31 -0
  1879. package/src/app/agent-page/AgentTabsPage.tsx +938 -0
  1880. package/src/app/agent-page/AgentWorkspaceContent.tsx +266 -0
  1881. package/src/app/agent-page/AutomationDetailsDialog.tsx +246 -0
  1882. package/src/app/agent-page/AutomationScheduleDialog.spec.tsx +86 -0
  1883. package/src/app/agent-page/AutomationScheduleDialog.tsx +545 -0
  1884. package/src/app/agent-page/ConnectionsTab.render.spec.tsx +103 -0
  1885. package/src/app/agent-page/ConnectionsTab.spec.tsx +96 -0
  1886. package/src/app/agent-page/ScheduledTriggerNotice.spec.tsx +166 -0
  1887. package/src/app/agent-page/ScheduledTriggerNotice.tsx +136 -0
  1888. package/src/app/agent-page/TimezoneSelect.spec.tsx +111 -0
  1889. package/src/app/agent-page/TimezoneSelect.tsx +230 -0
  1890. package/src/app/agent-page/automation-schedule.spec.ts +73 -0
  1891. package/src/app/agent-page/automation-schedule.ts +251 -0
  1892. package/src/app/agent-page/index.ts +3 -0
  1893. package/src/app/agent-page/scheduled-trigger-state.ts +19 -0
  1894. package/src/app/agent-page/types.ts +15 -0
  1895. package/src/app/agent-page/use-jobs.ts +264 -0
  1896. package/src/app/agentkit/index.ts +1 -0
  1897. package/src/app/agentkit/react/chat.tsx +86 -0
  1898. package/src/app/agentkit/react/components.interaction.spec.tsx +1445 -0
  1899. package/src/app/agentkit/react/components.spec.tsx +1636 -0
  1900. package/src/app/agentkit/react/components.tsx +4432 -0
  1901. package/src/app/agentkit/react/composer-context.spec.tsx +766 -0
  1902. package/src/app/agentkit/react/composer-submission.ts +62 -0
  1903. package/src/app/agentkit/react/context.tsx +887 -0
  1904. package/src/app/agentkit/react/headless.ts +2 -0
  1905. package/src/app/agentkit/react/index.ts +5 -0
  1906. package/src/app/agentkit/react/lifecycle.spec.tsx +3188 -0
  1907. package/src/app/agentkit/react/markdown.spec.tsx +175 -0
  1908. package/src/app/agentkit/react/render-boundary.spec.tsx +118 -0
  1909. package/src/app/agentkit/react/root.tsx +287 -0
  1910. package/src/app/agentkit/react/streaming-text.spec.ts +134 -0
  1911. package/src/app/agentkit/react/streaming-text.tsx +346 -0
  1912. package/src/app/agentkit/react/styles.css +1898 -0
  1913. package/src/app/agentkit/react/suggestions.spec.tsx +266 -0
  1914. package/src/app/auth/AuthPage.deploy-settings-error.spec.tsx +108 -0
  1915. package/src/app/auth/AuthPage.interaction.spec.tsx +156 -0
  1916. package/src/app/auth/AuthPage.resend.spec.tsx +172 -0
  1917. package/src/app/auth/AuthPage.spec.tsx +372 -0
  1918. package/src/app/auth/AuthPage.tsx +3139 -0
  1919. package/src/app/auth/RequireSession.spec.tsx +314 -0
  1920. package/src/app/auth/RequireSession.tsx +100 -0
  1921. package/src/app/auth/ResetPasswordPage.spec.tsx +30 -0
  1922. package/src/app/auth/ResetPasswordPage.tsx +205 -0
  1923. package/src/app/auth/entry.tsx +25 -0
  1924. package/src/app/auth/index.ts +3 -0
  1925. package/src/app/blocks/AiEditableField.tsx +33 -0
  1926. package/src/app/blocks/BlockView.tsx +122 -0
  1927. package/src/app/blocks/RegistryBlockDataProvider.spec.tsx +100 -0
  1928. package/src/app/blocks/RegistryBlockDataProvider.tsx +121 -0
  1929. package/src/app/blocks/SchemaBlockEditor.tsx +432 -0
  1930. package/src/app/blocks/code-block-direction.ts +6 -0
  1931. package/src/app/blocks/index.ts +302 -0
  1932. package/src/app/blocks/library/AnnotatedCodeBlock.spec.tsx +741 -0
  1933. package/src/app/blocks/library/AnnotatedCodeBlock.tsx +660 -0
  1934. package/src/app/blocks/library/ApiEndpointBlock.spec.tsx +227 -0
  1935. package/src/app/blocks/library/ApiEndpointBlock.tsx +1013 -0
  1936. package/src/app/blocks/library/DataModelBlock.tsx +707 -0
  1937. package/src/app/blocks/library/DiffBlock.spec.tsx +815 -0
  1938. package/src/app/blocks/library/DiffBlock.tsx +1695 -0
  1939. package/src/app/blocks/library/FileTreeBlock.spec.tsx +295 -0
  1940. package/src/app/blocks/library/FileTreeBlock.tsx +784 -0
  1941. package/src/app/blocks/library/HighlightedCode.tsx +235 -0
  1942. package/src/app/blocks/library/JsonExplorerBlock.spec.tsx +220 -0
  1943. package/src/app/blocks/library/JsonExplorerBlock.tsx +577 -0
  1944. package/src/app/blocks/library/MermaidBlock.render.spec.tsx +118 -0
  1945. package/src/app/blocks/library/MermaidBlock.tsx +314 -0
  1946. package/src/app/blocks/library/OpenApiSpecBlock.tsx +955 -0
  1947. package/src/app/blocks/library/annotation-rail.spec.ts +158 -0
  1948. package/src/app/blocks/library/annotation-rail.tsx +899 -0
  1949. package/src/app/blocks/library/block-copy.ts +399 -0
  1950. package/src/app/blocks/library/callout.tsx +135 -0
  1951. package/src/app/blocks/library/checklist.tsx +175 -0
  1952. package/src/app/blocks/library/code-copy-button.tsx +30 -0
  1953. package/src/app/blocks/library/code-filename-label.tsx +59 -0
  1954. package/src/app/blocks/library/code-highlight.tsx +160 -0
  1955. package/src/app/blocks/library/code-tabs.tsx +585 -0
  1956. package/src/app/blocks/library/code.spec.tsx +186 -0
  1957. package/src/app/blocks/library/code.tsx +396 -0
  1958. package/src/app/blocks/library/columns.render.spec.tsx +80 -0
  1959. package/src/app/blocks/library/columns.spec.ts +77 -0
  1960. package/src/app/blocks/library/columns.tsx +281 -0
  1961. package/src/app/blocks/library/dev-doc-ui.tsx +170 -0
  1962. package/src/app/blocks/library/diagram.spec.tsx +452 -0
  1963. package/src/app/blocks/library/diagram.tsx +902 -0
  1964. package/src/app/blocks/library/html.tsx +245 -0
  1965. package/src/app/blocks/library/narrow-container.tsx +15 -0
  1966. package/src/app/blocks/library/question-form.spec.tsx +239 -0
  1967. package/src/app/blocks/library/question-form.tsx +923 -0
  1968. package/src/app/blocks/library/sanitize-html.ts +385 -0
  1969. package/src/app/blocks/library/specs.tsx +275 -0
  1970. package/src/app/blocks/library/tab-rails.spec.tsx +414 -0
  1971. package/src/app/blocks/library/table.tsx +414 -0
  1972. package/src/app/blocks/library/tabs.spec.ts +93 -0
  1973. package/src/app/blocks/library/tabs.tsx +625 -0
  1974. package/src/app/blocks/library/wireframe-icons.ts +210 -0
  1975. package/src/app/blocks/library/wireframe-kit.tsx +1923 -0
  1976. package/src/app/blocks/library/wireframe.render.spec.tsx +443 -0
  1977. package/src/app/blocks/library/wireframe.tsx +461 -0
  1978. package/src/app/blocks/provider.tsx +40 -0
  1979. package/src/app/changelog/Changelog.spec.tsx +165 -0
  1980. package/src/app/changelog/Changelog.tsx +319 -0
  1981. package/src/app/changelog/index.ts +1 -0
  1982. package/src/app/chat/AgentAskPopover.tsx +85 -0
  1983. package/src/app/chat/AgentChatHome.tsx +57 -0
  1984. package/src/app/chat/AgentKitAssistantChat.spec.tsx +4077 -0
  1985. package/src/app/chat/AgentKitAssistantChat.tsx +4887 -0
  1986. package/src/app/chat/AgentNativeEmbedded.tsx +99 -0
  1987. package/src/app/chat/AgentPanel.header.spec.ts +1143 -0
  1988. package/src/app/chat/AgentPanel.overlay.spec.tsx +309 -0
  1989. package/src/app/chat/AgentPanel.tsx +2966 -0
  1990. package/src/app/chat/AgentSidebar.spec.tsx +394 -0
  1991. package/src/app/chat/AgentSidebar.tsx +1412 -0
  1992. package/src/app/chat/AgentSidebarPanel.tsx +12 -0
  1993. package/src/app/chat/AgentTaskCard.tsx +241 -0
  1994. package/src/app/chat/BuilderReferralInviteRow.tsx +35 -0
  1995. package/src/app/chat/ConnectBuilderCard.spec.tsx +441 -0
  1996. package/src/app/chat/ConnectBuilderCard.tsx +578 -0
  1997. package/src/app/chat/FileStorageSetupPopover.tsx +189 -0
  1998. package/src/app/chat/HighlightedCodeBlock.tsx +145 -0
  1999. package/src/app/chat/KeepTabOpenNotice.spec.tsx +196 -0
  2000. package/src/app/chat/KeepTabOpenNotice.tsx +125 -0
  2001. package/src/app/chat/MultiTabAssistantChat.messageCount.spec.tsx +27 -0
  2002. package/src/app/chat/MultiTabAssistantChat.spec.tsx +3623 -0
  2003. package/src/app/chat/MultiTabAssistantChat.tsx +3234 -0
  2004. package/src/app/chat/RunStuckBanner.tsx +346 -0
  2005. package/src/app/chat/agent-sidebar-context.ts +3 -0
  2006. package/src/app/chat/agent-sidebar-events.ts +27 -0
  2007. package/src/app/chat/agent-sidebar-url-sync.spec.tsx +48 -0
  2008. package/src/app/chat/agent-sidebar-url-sync.tsx +203 -0
  2009. package/src/app/chat/agentkit-chat/action-widget.spec.tsx +410 -0
  2010. package/src/app/chat/agentkit-chat/action-widget.tsx +123 -0
  2011. package/src/app/chat/agentkit-chat/approval-card.spec.tsx +400 -0
  2012. package/src/app/chat/agentkit-chat/approval-card.tsx +191 -0
  2013. package/src/app/chat/agentkit-chat/composer.tsx +1 -0
  2014. package/src/app/chat/agentkit-chat/connections.spec.tsx +81 -0
  2015. package/src/app/chat/agentkit-chat/connections.ts +39 -0
  2016. package/src/app/chat/agentkit-chat/dev-checkpoint-restore.spec.ts +35 -0
  2017. package/src/app/chat/agentkit-chat/guided-answers-context.spec.ts +77 -0
  2018. package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +897 -0
  2019. package/src/app/chat/agentkit-chat/guided-questions.spec.ts +66 -0
  2020. package/src/app/chat/agentkit-chat/guided-questions.tsx +1357 -0
  2021. package/src/app/chat/agentkit-chat/history.spec.ts +143 -0
  2022. package/src/app/chat/agentkit-chat/history.tsx +1134 -0
  2023. package/src/app/chat/agentkit-chat/index.spec.tsx +53 -0
  2024. package/src/app/chat/agentkit-chat/index.ts +75 -0
  2025. package/src/app/chat/agentkit-chat/parity-renderers.spec.tsx +70 -0
  2026. package/src/app/chat/agentkit-chat/parity-renderers.tsx +87 -0
  2027. package/src/app/chat/agentkit-chat/questions.ts +5 -0
  2028. package/src/app/chat/agentkit-chat/rail.ts +14 -0
  2029. package/src/app/chat/agentkit-chat/root.tsx +17 -0
  2030. package/src/app/chat/agentkit-chat/suggestions.ts +4 -0
  2031. package/src/app/chat/chat/ChatHistoryList.tsx +7 -0
  2032. package/src/app/chat/chat/IframeEmbed.tsx +142 -0
  2033. package/src/app/chat/chat/action-chat-ui-surface.tsx +43 -0
  2034. package/src/app/chat/chat/agent-activity-object.tsx +74 -0
  2035. package/src/app/chat/chat/agent-activity-trace.spec.tsx +122 -0
  2036. package/src/app/chat/chat/agent-activity-trace.tsx +252 -0
  2037. package/src/app/chat/chat/agent-approval-card.tsx +287 -0
  2038. package/src/app/chat/chat/history-types.ts +75 -0
  2039. package/src/app/chat/chat/index.ts +250 -0
  2040. package/src/app/chat/chat/legacy-chart-shorthand.render.spec.tsx +40 -0
  2041. package/src/app/chat/chat/legacy-chart-shorthand.spec.ts +225 -0
  2042. package/src/app/chat/chat/legacy-chart-shorthand.tsx +426 -0
  2043. package/src/app/chat/chat/markdown-renderer.dom-stability.spec.tsx +99 -0
  2044. package/src/app/chat/chat/markdown-renderer.spec.tsx +281 -0
  2045. package/src/app/chat/chat/markdown-renderer.tsx +919 -0
  2046. package/src/app/chat/chat/run-recovery.spec.tsx +1040 -0
  2047. package/src/app/chat/chat/run-recovery.tsx +1116 -0
  2048. package/src/app/chat/chat/surface-types.ts +394 -0
  2049. package/src/app/chat/chat/tool-call-display.spec.tsx +2915 -0
  2050. package/src/app/chat/chat/tool-call-display.tsx +1829 -0
  2051. package/src/app/chat/chat/tool-chips.spec.tsx +59 -0
  2052. package/src/app/chat/chat/tool-chips.tsx +153 -0
  2053. package/src/app/chat/chat/tool-integration.spec.tsx +71 -0
  2054. package/src/app/chat/chat/tool-integration.tsx +87 -0
  2055. package/src/app/chat/chat/tool-render-registry.spec.tsx +228 -0
  2056. package/src/app/chat/chat/tool-render-registry.tsx +150 -0
  2057. package/src/app/chat/chat/widgets/ActionCard.spec.tsx +32 -0
  2058. package/src/app/chat/chat/widgets/ActionCard.tsx +58 -0
  2059. package/src/app/chat/chat/widgets/AgentTeamProgressWidget.tsx +58 -0
  2060. package/src/app/chat/chat/widgets/ConnectRequiredWidget.tsx +43 -0
  2061. package/src/app/chat/chat/widgets/DataChartRenderer.tsx +245 -0
  2062. package/src/app/chat/chat/widgets/DataChartWidget.ssr.spec.tsx +28 -0
  2063. package/src/app/chat/chat/widgets/DataChartWidget.tsx +60 -0
  2064. package/src/app/chat/chat/widgets/DataInsightsWidget.tsx +62 -0
  2065. package/src/app/chat/chat/widgets/DataTableWidget.spec.tsx +130 -0
  2066. package/src/app/chat/chat/widgets/DataTableWidget.tsx +245 -0
  2067. package/src/app/chat/chat/widgets/InlineExtensionWidget.tsx +33 -0
  2068. package/src/app/chat/chat/widgets/RecordChangeWidget.tsx +396 -0
  2069. package/src/app/chat/chat/widgets/WorkspaceFileWidget.spec.tsx +52 -0
  2070. package/src/app/chat/chat/widgets/WorkspaceFileWidget.tsx +72 -0
  2071. package/src/app/chat/chat/widgets/agent-team-progress-widget.spec.tsx +92 -0
  2072. package/src/app/chat/chat/widgets/builtin-connect-required-renderer.spec.tsx +210 -0
  2073. package/src/app/chat/chat/widgets/builtin-tool-renderers.spec.ts +110 -0
  2074. package/src/app/chat/chat/widgets/builtin-tool-renderers.tsx +527 -0
  2075. package/src/app/chat/chat/widgets/builtin-workspace-file-renderer.spec.tsx +105 -0
  2076. package/src/app/chat/chat/widgets/data-widget-types.ts +1 -0
  2077. package/src/app/chat/chat/widgets/inline-extension-result.ts +87 -0
  2078. package/src/app/chat/chat/widgets/record-change-widget.spec.tsx +748 -0
  2079. package/src/app/chat/chat/widgets/workspace-file-result.spec.ts +55 -0
  2080. package/src/app/chat/chat/widgets/workspace-file-result.ts +49 -0
  2081. package/src/app/chat/chat-first/ChatFirstAgentActivityPanel.tsx +200 -0
  2082. package/src/app/chat/chat-first/ChatFirstSurfacePanelToggle.tsx +29 -0
  2083. package/src/app/chat/chat-first/active-surface.spec.ts +93 -0
  2084. package/src/app/chat/chat-first/active-surface.ts +39 -0
  2085. package/src/app/chat/chat-first/agents-pane.tsx +29 -0
  2086. package/src/app/chat/chat-first/app-open-actions.tsx +167 -0
  2087. package/src/app/chat/chat-first/app-pane.tsx +53 -0
  2088. package/src/app/chat/chat-first/apps-rail.spec.tsx +538 -0
  2089. package/src/app/chat/chat-first/apps-rail.tsx +611 -0
  2090. package/src/app/chat/chat-first/browser-pane.spec.tsx +58 -0
  2091. package/src/app/chat/chat-first/browser-pane.tsx +221 -0
  2092. package/src/app/chat/chat-first/chat-history.spec.tsx +95 -0
  2093. package/src/app/chat/chat-first/chat-history.tsx +62 -0
  2094. package/src/app/chat/chat-first/copy.spec.ts +23 -0
  2095. package/src/app/chat/chat-first/copy.ts +133 -0
  2096. package/src/app/chat/chat-first/index.ts +64 -0
  2097. package/src/app/chat/chat-first/primary-nav.spec.tsx +255 -0
  2098. package/src/app/chat/chat-first/primary-nav.tsx +179 -0
  2099. package/src/app/chat/chat-first/session-watch-pane.tsx +48 -0
  2100. package/src/app/chat/chat-first/surface-panel.tsx +43 -0
  2101. package/src/app/chat/chat-first/surface-tabs.spec.tsx +157 -0
  2102. package/src/app/chat/chat-first/surface-tabs.tsx +337 -0
  2103. package/src/app/chat/chat-first/types.ts +116 -0
  2104. package/src/app/chat/components/CodeAgentIndicator.tsx +49 -0
  2105. package/src/app/chat/components/CodeRequiredDialog.spec.tsx +100 -0
  2106. package/src/app/chat/components/CodeRequiredDialog.tsx +452 -0
  2107. package/src/app/chat/components/ui/button-classes.ts +2 -0
  2108. package/src/app/chat/components/ui/message-scroller.tsx +148 -0
  2109. package/src/app/chat/composer/assistant-ui-recovery.tsx +228 -0
  2110. package/src/app/chat/composer/index.ts +20 -0
  2111. package/src/app/chat/composer/model-runtime-adapters.ts +26 -0
  2112. package/src/app/chat/composer/runtime-adapters.spec.tsx +58 -0
  2113. package/src/app/chat/composer/runtime-adapters.tsx +129 -0
  2114. package/src/app/chat/composer/use-agentkit-capabilities.hardening.spec.tsx +266 -0
  2115. package/src/app/chat/composer/use-agentkit-capabilities.spec.ts +42 -0
  2116. package/src/app/chat/composer/use-agentkit-capabilities.ts +114 -0
  2117. package/src/app/chat/composer/use-agentkit-integration-menu.hardening.spec.tsx +102 -0
  2118. package/src/app/chat/composer/use-agentkit-integration-menu.spec.tsx +179 -0
  2119. package/src/app/chat/composer/use-agentkit-integration-menu.tsx +91 -0
  2120. package/src/app/chat/composer/use-mention-search.ts +6 -0
  2121. package/src/app/chat/composer/use-send-to-agent-chat.tsx +19 -0
  2122. package/src/app/chat/composer/wired-components.spec.tsx +159 -0
  2123. package/src/app/chat/composer/wired-components.tsx +112 -0
  2124. package/src/app/chat/conversation/AgentConversation.spec.tsx +306 -0
  2125. package/src/app/chat/conversation/AgentConversation.tsx +567 -0
  2126. package/src/app/chat/conversation/code-agent-transcript.spec.ts +249 -0
  2127. package/src/app/chat/conversation/code-agent-transcript.ts +279 -0
  2128. package/src/app/chat/conversation/index.ts +22 -0
  2129. package/src/app/chat/conversation/types.ts +83 -0
  2130. package/src/app/chat/conversation/use-near-bottom-autoscroll.spec.tsx +469 -0
  2131. package/src/app/chat/conversation/use-near-bottom-autoscroll.ts +313 -0
  2132. package/src/app/chat/external-agent-host.spec.ts +85 -0
  2133. package/src/app/chat/external-agent-host.tsx +493 -0
  2134. package/src/app/chat/index.ts +80 -0
  2135. package/src/app/chat/mcp-apps/McpAppRenderer.spec.ts +490 -0
  2136. package/src/app/chat/mcp-apps/McpAppRenderer.tsx +956 -0
  2137. package/src/app/chat/thinking-display.spec.tsx +159 -0
  2138. package/src/app/chat/thinking-display.tsx +112 -0
  2139. package/src/app/chat/tool-cells/BashCell.tsx +150 -0
  2140. package/src/app/chat/tool-cells/EditCell.tsx +282 -0
  2141. package/src/app/chat/tool-cells/FilesChangedSummary.spec.tsx +56 -0
  2142. package/src/app/chat/tool-cells/FilesChangedSummary.tsx +179 -0
  2143. package/src/app/chat/tool-cells/WriteCell.tsx +141 -0
  2144. package/src/app/chat/tool-cells/index.ts +7 -0
  2145. package/src/app/context-xray/ContextMeter.tsx +131 -0
  2146. package/src/app/context-xray/ContextSegmentRow.tsx +26 -0
  2147. package/src/app/context-xray/ContextTreemap.tsx +23 -0
  2148. package/src/app/context-xray/ContextXRayPanel.spec.tsx +94 -0
  2149. package/src/app/context-xray/ContextXRayPanel.tsx +59 -0
  2150. package/src/app/context-xray/SegmentProvenancePopover.tsx +17 -0
  2151. package/src/app/context-xray/index.ts +5 -0
  2152. package/src/app/db-admin/DataGrid.tsx +543 -0
  2153. package/src/app/db-admin/DbAdminPage.tsx +193 -0
  2154. package/src/app/db-admin/DevDatabaseLink.spec.tsx +11 -0
  2155. package/src/app/db-admin/DevDatabaseLink.tsx +8 -0
  2156. package/src/app/db-admin/EditableCell.tsx +434 -0
  2157. package/src/app/db-admin/FilterBar.tsx +202 -0
  2158. package/src/app/db-admin/ResultsGrid.tsx +105 -0
  2159. package/src/app/db-admin/RowSidePanel.tsx +323 -0
  2160. package/src/app/db-admin/SqlEditor.tsx +781 -0
  2161. package/src/app/db-admin/TableBrowser.tsx +206 -0
  2162. package/src/app/db-admin/TableEditor.tsx +741 -0
  2163. package/src/app/db-admin/cell-format.ts +202 -0
  2164. package/src/app/db-admin/changeset.ts +252 -0
  2165. package/src/app/db-admin/export-utils.spec.ts +20 -0
  2166. package/src/app/db-admin/export-utils.ts +60 -0
  2167. package/src/app/db-admin/index.ts +32 -0
  2168. package/src/app/db-admin/sql-storage.ts +108 -0
  2169. package/src/app/db-admin/storage.ts +55 -0
  2170. package/src/app/db-admin/useAgentSync.spec.tsx +80 -0
  2171. package/src/app/db-admin/useAgentSync.ts +184 -0
  2172. package/src/app/db-admin/useDbAdmin.ts +238 -0
  2173. package/src/app/dev-overlay/DevOverlay.tsx +548 -0
  2174. package/src/app/dev-overlay/index.ts +1 -0
  2175. package/src/app/eject/remote-mcp-presets.ts +173 -0
  2176. package/src/app/eject/setup-readiness-ui.tsx +17 -0
  2177. package/src/app/extensions/AgentNativeExtensionFrame.e2e-host.tsx +136 -0
  2178. package/src/app/extensions/AgentNativeExtensionFrame.e2e.spec.ts +193 -0
  2179. package/src/app/extensions/AgentNativeExtensionFrame.spec.tsx +99 -0
  2180. package/src/app/extensions/AgentNativeExtensionFrame.tsx +699 -0
  2181. package/src/app/extensions/EmbeddedExtension.spec.ts +41 -0
  2182. package/src/app/extensions/EmbeddedExtension.tsx +624 -0
  2183. package/src/app/extensions/ExtensionEditor.tsx +454 -0
  2184. package/src/app/extensions/ExtensionQueryErrorState.tsx +46 -0
  2185. package/src/app/extensions/ExtensionSlot.spec.tsx +177 -0
  2186. package/src/app/extensions/ExtensionSlot.tsx +332 -0
  2187. package/src/app/extensions/ExtensionViewer.spec.tsx +374 -0
  2188. package/src/app/extensions/ExtensionViewer.tsx +1553 -0
  2189. package/src/app/extensions/ExtensionViewerPage.tsx +37 -0
  2190. package/src/app/extensions/ExtensionsListPage.spec.tsx +177 -0
  2191. package/src/app/extensions/ExtensionsListPage.tsx +457 -0
  2192. package/src/app/extensions/ExtensionsSidebarSection.spec.tsx +200 -0
  2193. package/src/app/extensions/ExtensionsSidebarSection.tsx +1278 -0
  2194. package/src/app/extensions/InlineExtensionFrame.spec.tsx +416 -0
  2195. package/src/app/extensions/InlineExtensionFrame.tsx +687 -0
  2196. package/src/app/extensions/delete-extension.spec.ts +81 -0
  2197. package/src/app/extensions/delete-extension.ts +77 -0
  2198. package/src/app/extensions/extension-load-error.ts +26 -0
  2199. package/src/app/extensions/extension-order.ts +49 -0
  2200. package/src/app/extensions/extension-popularity.ts +61 -0
  2201. package/src/app/extensions/iframe-bridge.spec.ts +323 -0
  2202. package/src/app/extensions/iframe-bridge.ts +333 -0
  2203. package/src/app/extensions/index.ts +78 -0
  2204. package/src/app/extensions/portable-extension.spec.ts +252 -0
  2205. package/src/app/extensions/portable-extension.ts +1023 -0
  2206. package/src/app/feature-flags/FeatureFlagsPanel.tsx +529 -0
  2207. package/src/app/feature-flags/index.ts +1 -0
  2208. package/src/app/feedback/ErrorReportActions.tsx +64 -0
  2209. package/src/app/feedback/FeedbackButton.spec.ts +134 -0
  2210. package/src/app/feedback/FeedbackButton.tsx +683 -0
  2211. package/src/app/feedback/index.ts +9 -0
  2212. package/src/app/i18n/catalog.spec.ts +61 -0
  2213. package/src/app/i18n/catalog.ts +135 -0
  2214. package/src/app/i18n/catalogs/ar-SA.ts +2759 -0
  2215. package/src/app/i18n/catalogs/de-DE.ts +2841 -0
  2216. package/src/app/i18n/catalogs/en-US.ts +2716 -0
  2217. package/src/app/i18n/catalogs/es-ES.ts +2844 -0
  2218. package/src/app/i18n/catalogs/fr-FR.ts +2877 -0
  2219. package/src/app/i18n/catalogs/hi-IN.ts +2652 -0
  2220. package/src/app/i18n/catalogs/ja-JP.ts +2736 -0
  2221. package/src/app/i18n/catalogs/ko-KR.ts +2689 -0
  2222. package/src/app/i18n/catalogs/pt-BR.ts +2837 -0
  2223. package/src/app/i18n/catalogs/zh-CN.ts +2481 -0
  2224. package/src/app/i18n/catalogs/zh-TW.ts +2493 -0
  2225. package/src/app/i18n/types.ts +11 -0
  2226. package/src/app/i18n.ts +95 -0
  2227. package/src/app/integrations/BuilderIntegrationPage.spec.tsx +479 -0
  2228. package/src/app/integrations/BuilderIntegrationPage.tsx +773 -0
  2229. package/src/app/integrations/ChannelsPage.spec.tsx +824 -0
  2230. package/src/app/integrations/ChannelsPage.tsx +1173 -0
  2231. package/src/app/integrations/GoogleProductLogo.tsx +179 -0
  2232. package/src/app/integrations/IntegrationConnectionChoice.tsx +131 -0
  2233. package/src/app/integrations/IntegrationDetailPage.spec.tsx +497 -0
  2234. package/src/app/integrations/IntegrationDetailPage.tsx +823 -0
  2235. package/src/app/integrations/IntegrationDetailParts.tsx +233 -0
  2236. package/src/app/integrations/IntegrationGrid.tsx +181 -0
  2237. package/src/app/integrations/IntegrationsPage.spec.tsx +394 -0
  2238. package/src/app/integrations/IntegrationsPage.tsx +826 -0
  2239. package/src/app/integrations/IntegrationsPanel.spec.tsx +441 -0
  2240. package/src/app/integrations/IntegrationsPanel.tsx +1623 -0
  2241. package/src/app/integrations/channel-extensions.spec.ts +29 -0
  2242. package/src/app/integrations/channel-extensions.ts +88 -0
  2243. package/src/app/integrations/channel-icons.spec.ts +13 -0
  2244. package/src/app/integrations/channel-icons.ts +33 -0
  2245. package/src/app/integrations/index.ts +12 -0
  2246. package/src/app/integrations/settings-page-link.tsx +66 -0
  2247. package/src/app/labs/ExperimentsSettings.tsx +18 -0
  2248. package/src/app/labs/LabsSettings.tsx +178 -0
  2249. package/src/app/labs/index.ts +2 -0
  2250. package/src/app/notifications/NotificationsBell.spec.tsx +68 -0
  2251. package/src/app/notifications/NotificationsBell.tsx +356 -0
  2252. package/src/app/notifications/index.ts +1 -0
  2253. package/src/app/observability/ObservabilityDashboard.review.spec.tsx +2649 -0
  2254. package/src/app/observability/ObservabilityDashboard.spec.tsx +201 -0
  2255. package/src/app/observability/ObservabilityDashboard.tsx +3330 -0
  2256. package/src/app/observability/ObservabilityReviewSummaryButton.spec.tsx +242 -0
  2257. package/src/app/observability/ObservabilityReviewSummaryButton.tsx +158 -0
  2258. package/src/app/observability/OutputPreview.render.spec.tsx +595 -0
  2259. package/src/app/observability/OutputPreview.spec.ts +283 -0
  2260. package/src/app/observability/OutputPreview.tsx +1046 -0
  2261. package/src/app/observability/ThumbsFeedback.spec.tsx +819 -0
  2262. package/src/app/observability/ThumbsFeedback.tsx +335 -0
  2263. package/src/app/observability/index.ts +21 -0
  2264. package/src/app/observability/useObservability.spec.ts +54 -0
  2265. package/src/app/observability/useObservability.ts +421 -0
  2266. package/src/app/onboarding/FirstRunOnboarding.spec.tsx +1671 -0
  2267. package/src/app/onboarding/FirstRunOnboarding.tsx +1307 -0
  2268. package/src/app/onboarding/NewWorkspaceAppFlow.spec.ts +497 -0
  2269. package/src/app/onboarding/NewWorkspaceAppFlow.tsx +626 -0
  2270. package/src/app/onboarding/OnboardingBanner.tsx +65 -0
  2271. package/src/app/onboarding/OnboardingPanel.tsx +1064 -0
  2272. package/src/app/onboarding/OnboardingStepLayout.tsx +46 -0
  2273. package/src/app/onboarding/SetupButton.tsx +56 -0
  2274. package/src/app/onboarding/first-run-startup-gate.spec.tsx +479 -0
  2275. package/src/app/onboarding/first-run-startup-gate.tsx +159 -0
  2276. package/src/app/onboarding/index.ts +7 -0
  2277. package/src/app/org/AppsAccessSection.tsx +169 -0
  2278. package/src/app/org/AuthenticationSection.tsx +536 -0
  2279. package/src/app/org/BulkInviteForm.spec.tsx +274 -0
  2280. package/src/app/org/BulkInviteForm.tsx +505 -0
  2281. package/src/app/org/GroupsSection.tsx +524 -0
  2282. package/src/app/org/InvitationBanner.tsx +148 -0
  2283. package/src/app/org/MemberAppRoles.tsx +334 -0
  2284. package/src/app/org/MembersSection.tsx +998 -0
  2285. package/src/app/org/OrgGeneralSection.tsx +561 -0
  2286. package/src/app/org/OrgIdentitySettings.spec.tsx +160 -0
  2287. package/src/app/org/OrgIdentitySettings.tsx +522 -0
  2288. package/src/app/org/OrgSwitcher.spec.tsx +779 -0
  2289. package/src/app/org/OrgSwitcher.tsx +927 -0
  2290. package/src/app/org/RequireActiveOrg.tsx +323 -0
  2291. package/src/app/org/RequirePermission.tsx +17 -0
  2292. package/src/app/org/SuccessorPicker.spec.tsx +101 -0
  2293. package/src/app/org/SuccessorPicker.tsx +156 -0
  2294. package/src/app/org/TeamOnboardingCards.tsx +188 -0
  2295. package/src/app/org/TeamPage.search.spec.tsx +294 -0
  2296. package/src/app/org/TeamPage.spec.tsx +479 -0
  2297. package/src/app/org/TeamPage.tsx +140 -0
  2298. package/src/app/org/TeamPrimitives.tsx +113 -0
  2299. package/src/app/org/WorkspaceNotice.spec.tsx +89 -0
  2300. package/src/app/org/WorkspaceNotice.tsx +84 -0
  2301. package/src/app/org/index.ts +129 -0
  2302. package/src/app/org/pages/OrgAppsPage.tsx +207 -0
  2303. package/src/app/org/pages/OrgAuthenticationPage.tsx +228 -0
  2304. package/src/app/org/pages/OrgGeneralPage.tsx +287 -0
  2305. package/src/app/org/pages/OrgMembersPage.tsx +618 -0
  2306. package/src/app/org/pages/OrgPageGate.tsx +107 -0
  2307. package/src/app/org/pages/OrgSettingsPages.spec.tsx +389 -0
  2308. package/src/app/org/workspace-app-links.spec.ts +134 -0
  2309. package/src/app/org/workspace-app-links.ts +425 -0
  2310. package/src/app/progress/RunsTray.spec.tsx +201 -0
  2311. package/src/app/progress/RunsTray.tsx +867 -0
  2312. package/src/app/progress/index.ts +1 -0
  2313. package/src/app/providers/AppProviders.spec.tsx +557 -0
  2314. package/src/app/providers/AppProviders.tsx +522 -0
  2315. package/src/app/providers/AppProviders.webmcp-lifecycle.spec.tsx +217 -0
  2316. package/src/app/providers/index.ts +5 -0
  2317. package/src/app/resources/BuiltinCapabilityDetail.tsx +257 -0
  2318. package/src/app/resources/McpAccessSettings.spec.tsx +214 -0
  2319. package/src/app/resources/McpAccessSettings.tsx +369 -0
  2320. package/src/app/resources/McpAgentKitConnectionRequest.spec.tsx +62 -0
  2321. package/src/app/resources/McpAgentKitConnectionRequest.tsx +100 -0
  2322. package/src/app/resources/McpConnectionSuggestion.render.spec.tsx +174 -0
  2323. package/src/app/resources/McpConnectionSuggestion.spec.ts +167 -0
  2324. package/src/app/resources/McpConnectionSuggestion.tsx +388 -0
  2325. package/src/app/resources/McpIntegrationDialog.hardening.spec.tsx +213 -0
  2326. package/src/app/resources/McpIntegrationDialog.spec.tsx +1235 -0
  2327. package/src/app/resources/McpIntegrationDialog.tsx +1330 -0
  2328. package/src/app/resources/McpIntegrationDialogDeferred.tsx +37 -0
  2329. package/src/app/resources/McpIntegrationLogo.spec.tsx +109 -0
  2330. package/src/app/resources/McpIntegrationLogo.tsx +62 -0
  2331. package/src/app/resources/McpServerDetail.tsx +214 -0
  2332. package/src/app/resources/ResourceEditor.spec.tsx +98 -0
  2333. package/src/app/resources/ResourceEditor.tsx +854 -0
  2334. package/src/app/resources/ResourceSettingsGroups.tsx +596 -0
  2335. package/src/app/resources/ResourceTree.spec.tsx +56 -0
  2336. package/src/app/resources/ResourceTree.tsx +880 -0
  2337. package/src/app/resources/ResourcesPanel.spec.ts +803 -0
  2338. package/src/app/resources/ResourcesPanel.tsx +2544 -0
  2339. package/src/app/resources/index.ts +12 -0
  2340. package/src/app/review/InlineMarkdown.spec.tsx +153 -0
  2341. package/src/app/review/InlineMarkdown.tsx +169 -0
  2342. package/src/app/review/ReviewCommentComposer.spec.tsx +445 -0
  2343. package/src/app/review/ReviewCommentComposer.tsx +499 -0
  2344. package/src/app/review/ReviewStatusBadge.tsx +39 -0
  2345. package/src/app/review/ReviewThreadPanel.spec.tsx +1047 -0
  2346. package/src/app/review/ReviewThreadPanel.tsx +1695 -0
  2347. package/src/app/review/index.ts +4 -0
  2348. package/src/app/settings/AccountSettingsCard.spec.tsx +457 -0
  2349. package/src/app/settings/AccountSettingsCard.tsx +841 -0
  2350. package/src/app/settings/AgentDirectorySection.tsx +207 -0
  2351. package/src/app/settings/AgentPersonalizationSettings.tsx +244 -0
  2352. package/src/app/settings/AgentProviderPicker.tsx +189 -0
  2353. package/src/app/settings/AgentsSection.spec.tsx +237 -0
  2354. package/src/app/settings/AgentsSection.tsx +2441 -0
  2355. package/src/app/settings/ApiKeySettings.tsx +304 -0
  2356. package/src/app/settings/AutomationsSection.spec.tsx +51 -0
  2357. package/src/app/settings/AutomationsSection.tsx +52 -0
  2358. package/src/app/settings/BuilderConnectPopover.spec.tsx +399 -0
  2359. package/src/app/settings/BuilderConnectPopover.tsx +237 -0
  2360. package/src/app/settings/DemoModeSection.tsx +39 -0
  2361. package/src/app/settings/ExtensionsSettingsContent.tsx +21 -0
  2362. package/src/app/settings/KeyProviderTile.spec.tsx +44 -0
  2363. package/src/app/settings/KeyProviderTile.tsx +91 -0
  2364. package/src/app/settings/NewKeyMenu.tsx +185 -0
  2365. package/src/app/settings/ProviderSetupForm.scope.spec.tsx +180 -0
  2366. package/src/app/settings/ProviderSetupForm.tsx +680 -0
  2367. package/src/app/settings/SchedulingTimezoneField.tsx +84 -0
  2368. package/src/app/settings/SecretsSection.spec.tsx +706 -0
  2369. package/src/app/settings/SecretsSection.tsx +1225 -0
  2370. package/src/app/settings/SettingsCrossLinkHint.tsx +21 -0
  2371. package/src/app/settings/SettingsPanel.connections.spec.tsx +468 -0
  2372. package/src/app/settings/SettingsPanel.model-defaults.spec.tsx +125 -0
  2373. package/src/app/settings/SettingsPanel.provider-save.spec.tsx +1020 -0
  2374. package/src/app/settings/SettingsPanel.tsx +4747 -0
  2375. package/src/app/settings/SettingsRow.spec.tsx +76 -0
  2376. package/src/app/settings/SettingsRow.tsx +114 -0
  2377. package/src/app/settings/SettingsSection.spec.tsx +41 -0
  2378. package/src/app/settings/SettingsSection.tsx +249 -0
  2379. package/src/app/settings/SettingsSkeleton.spec.tsx +44 -0
  2380. package/src/app/settings/SettingsSkeleton.tsx +94 -0
  2381. package/src/app/settings/SettingsTabsPage.gate.spec.tsx +122 -0
  2382. package/src/app/settings/SettingsTabsPage.mount.spec.tsx +61 -0
  2383. package/src/app/settings/SettingsTabsPage.spec.ts +55 -0
  2384. package/src/app/settings/SettingsTabsPage.spec.tsx +1285 -0
  2385. package/src/app/settings/SettingsTabsPage.tsx +1072 -0
  2386. package/src/app/settings/StorageSettingsForm.spec.tsx +317 -0
  2387. package/src/app/settings/StorageSettingsForm.tsx +590 -0
  2388. package/src/app/settings/UsageSection.tsx +1397 -0
  2389. package/src/app/settings/VoiceTranscriptionSection.spec.tsx +228 -0
  2390. package/src/app/settings/VoiceTranscriptionSection.tsx +1047 -0
  2391. package/src/app/settings/account/PreferencesSettings.spec.tsx +105 -0
  2392. package/src/app/settings/account/PreferencesSettings.tsx +45 -0
  2393. package/src/app/settings/account/ProfileSettings.spec.tsx +248 -0
  2394. package/src/app/settings/account/ProfileSettings.tsx +325 -0
  2395. package/src/app/settings/account/SecuritySettings.spec.tsx +337 -0
  2396. package/src/app/settings/account/SecuritySettings.tsx +629 -0
  2397. package/src/app/settings/account/account-copy.ts +42 -0
  2398. package/src/app/settings/account/account-hooks.ts +385 -0
  2399. package/src/app/settings/account/search-entries.spec.ts +47 -0
  2400. package/src/app/settings/account/search-entries.ts +76 -0
  2401. package/src/app/settings/agent-settings-search.spec.ts +75 -0
  2402. package/src/app/settings/agent-settings-search.ts +319 -0
  2403. package/src/app/settings/api-keys/ApiKeyDialogs.tsx +650 -0
  2404. package/src/app/settings/api-keys/ApiKeysSettingsPage.spec.tsx +616 -0
  2405. package/src/app/settings/api-keys/ApiKeysSettingsPage.tsx +533 -0
  2406. package/src/app/settings/api-keys/api-keys-client.ts +85 -0
  2407. package/src/app/settings/api-keys/api-keys-state.ts +146 -0
  2408. package/src/app/settings/app-group/AppDefaultModelRow.tsx +241 -0
  2409. package/src/app/settings/app-group/ReadOnlySettingValue.tsx +33 -0
  2410. package/src/app/settings/app-group/SettingsHeaderBadge.tsx +34 -0
  2411. package/src/app/settings/app-settings-tabs.ts +65 -0
  2412. package/src/app/settings/deferred-builder-connect-popover.tsx +30 -0
  2413. package/src/app/settings/extension-settings-capability.spec.ts +16 -0
  2414. package/src/app/settings/index.node-esm.spec.ts +45 -0
  2415. package/src/app/settings/index.ts +114 -0
  2416. package/src/app/settings/infra/EnvironmentDialogs.tsx +377 -0
  2417. package/src/app/settings/infra/InfrastructureSettingsPage.spec.tsx +687 -0
  2418. package/src/app/settings/infra/InfrastructureSettingsPage.tsx +906 -0
  2419. package/src/app/settings/infra/ServiceDialog.tsx +230 -0
  2420. package/src/app/settings/infra/infra-page-state.spec.ts +251 -0
  2421. package/src/app/settings/infra/infra-page-state.ts +282 -0
  2422. package/src/app/settings/infra/logos.tsx +62 -0
  2423. package/src/app/settings/managed-secrets.ts +57 -0
  2424. package/src/app/settings/model/ChatGPTSubscriptionRow.tsx +151 -0
  2425. package/src/app/settings/model/ModelSettingsPage.spec.tsx +743 -0
  2426. package/src/app/settings/model/ModelSettingsPage.tsx +1118 -0
  2427. package/src/app/settings/model/ProviderDialog.spec.tsx +616 -0
  2428. package/src/app/settings/model/ProviderDialog.tsx +1113 -0
  2429. package/src/app/settings/model/RemoveProviderDialog.tsx +213 -0
  2430. package/src/app/settings/model/RestrictKeysDialog.tsx +155 -0
  2431. package/src/app/settings/model/model-page-state.spec.ts +266 -0
  2432. package/src/app/settings/model/model-page-state.ts +305 -0
  2433. package/src/app/settings/recent-prompt-groups.spec.ts +41 -0
  2434. package/src/app/settings/recent-prompt-groups.ts +30 -0
  2435. package/src/app/settings/shell/SettingsShell.spec.tsx +879 -0
  2436. package/src/app/settings/shell/SettingsShell.tsx +1104 -0
  2437. package/src/app/settings/shell/SettingsShellSkeleton.tsx +56 -0
  2438. package/src/app/settings/shell/app-identity.ts +86 -0
  2439. package/src/app/settings/shell/bridge.spec.ts +289 -0
  2440. package/src/app/settings/shell/bridge.ts +276 -0
  2441. package/src/app/settings/shell/context.tsx +48 -0
  2442. package/src/app/settings/shell/core-pages.ts +668 -0
  2443. package/src/app/settings/shell/index.ts +73 -0
  2444. package/src/app/settings/shell/pages/api-keys.tsx +8 -0
  2445. package/src/app/settings/shell/pages/app-group-pages.spec.tsx +527 -0
  2446. package/src/app/settings/shell/pages/app.tsx +105 -0
  2447. package/src/app/settings/shell/pages/apps.tsx +5 -0
  2448. package/src/app/settings/shell/pages/audit.spec.tsx +262 -0
  2449. package/src/app/settings/shell/pages/audit.tsx +520 -0
  2450. package/src/app/settings/shell/pages/auth.tsx +5 -0
  2451. package/src/app/settings/shell/pages/automations.tsx +61 -0
  2452. package/src/app/settings/shell/pages/bridged-tab.tsx +9 -0
  2453. package/src/app/settings/shell/pages/channels.tsx +31 -0
  2454. package/src/app/settings/shell/pages/creative-context.tsx +24 -0
  2455. package/src/app/settings/shell/pages/files.tsx +65 -0
  2456. package/src/app/settings/shell/pages/infra.tsx +6 -0
  2457. package/src/app/settings/shell/pages/instructions.tsx +62 -0
  2458. package/src/app/settings/shell/pages/integrations.tsx +47 -0
  2459. package/src/app/settings/shell/pages/labs.tsx +14 -0
  2460. package/src/app/settings/shell/pages/mcp.tsx +54 -0
  2461. package/src/app/settings/shell/pages/members.tsx +5 -0
  2462. package/src/app/settings/shell/pages/memory.tsx +81 -0
  2463. package/src/app/settings/shell/pages/model.tsx +23 -0
  2464. package/src/app/settings/shell/pages/notifications.tsx +7 -0
  2465. package/src/app/settings/shell/pages/org.tsx +5 -0
  2466. package/src/app/settings/shell/pages/pending.tsx +11 -0
  2467. package/src/app/settings/shell/pages/preferences.tsx +5 -0
  2468. package/src/app/settings/shell/pages/profile.tsx +5 -0
  2469. package/src/app/settings/shell/pages/resource-collection.tsx +25 -0
  2470. package/src/app/settings/shell/pages/resource-pages.spec.tsx +316 -0
  2471. package/src/app/settings/shell/pages/resource-settings-page.tsx +602 -0
  2472. package/src/app/settings/shell/pages/security.tsx +5 -0
  2473. package/src/app/settings/shell/pages/skills.tsx +65 -0
  2474. package/src/app/settings/shell/pages/sub-agents.spec.tsx +329 -0
  2475. package/src/app/settings/shell/pages/sub-agents.tsx +1039 -0
  2476. package/src/app/settings/shell/pages/usage.tsx +6 -0
  2477. package/src/app/settings/shell/pages/whats-new.tsx +58 -0
  2478. package/src/app/settings/shell/registry.spec.ts +156 -0
  2479. package/src/app/settings/shell/registry.ts +194 -0
  2480. package/src/app/settings/shell/return-path.ts +51 -0
  2481. package/src/app/settings/shell/routing.spec.ts +290 -0
  2482. package/src/app/settings/shell/routing.ts +276 -0
  2483. package/src/app/settings/shell/search.spec.ts +93 -0
  2484. package/src/app/settings/shell/search.ts +98 -0
  2485. package/src/app/settings/usage/UsageAlerts.tsx +475 -0
  2486. package/src/app/settings/usage/UsageCharts.tsx +316 -0
  2487. package/src/app/settings/usage/UsageGroup.tsx +48 -0
  2488. package/src/app/settings/usage/UsagePage.spec.tsx +394 -0
  2489. package/src/app/settings/usage/UsagePage.tsx +878 -0
  2490. package/src/app/settings/usage/usage-model.spec.ts +98 -0
  2491. package/src/app/settings/usage/usage-model.ts +248 -0
  2492. package/src/app/settings/use-provider-key-save-scope.ts +32 -0
  2493. package/src/app/settings/useBuilderStatus.spec.tsx +2813 -0
  2494. package/src/app/settings/useBuilderStatus.ts +1720 -0
  2495. package/src/app/settings/useSettingsPanelController.spec.ts +138 -0
  2496. package/src/app/settings/useSettingsPanelController.ts +186 -0
  2497. package/src/app/setup-connections/BuilderConnectCard.spec.tsx +534 -0
  2498. package/src/app/setup-connections/BuilderConnectCard.tsx +514 -0
  2499. package/src/app/setup-connections/ProviderReadinessBadge.tsx +72 -0
  2500. package/src/app/setup-connections/SetupConnectionsPage.tsx +94 -0
  2501. package/src/app/setup-connections/index.ts +11 -0
  2502. package/src/app/setup-connections/useBuilderConnectCardController.spec.tsx +238 -0
  2503. package/src/app/setup-connections/useBuilderConnectCardController.ts +113 -0
  2504. package/src/app/shared/AboutAgentNativeDialog.tsx +149 -0
  2505. package/src/app/shared/AgentNativeIcon.tsx +33 -0
  2506. package/src/app/shared/AppShellSkeleton.tsx +1120 -0
  2507. package/src/app/shared/AppSidebar.spec.tsx +135 -0
  2508. package/src/app/shared/AppSidebar.tsx +202 -0
  2509. package/src/app/shared/AppearancePicker.tsx +74 -0
  2510. package/src/app/shared/ClientOnly.spec.tsx +61 -0
  2511. package/src/app/shared/ClientOnly.tsx +17 -0
  2512. package/src/app/shared/CommandMenu.spec.tsx +942 -0
  2513. package/src/app/shared/CommandMenu.tsx +863 -0
  2514. package/src/app/shared/DefaultSpinner.tsx +129 -0
  2515. package/src/app/shared/EnvironmentBadge.tsx +525 -0
  2516. package/src/app/shared/ErrorBoundary.spec.tsx +28 -0
  2517. package/src/app/shared/ErrorBoundary.tsx +350 -0
  2518. package/src/app/shared/LanguagePicker.spec.tsx +652 -0
  2519. package/src/app/shared/LanguagePicker.tsx +247 -0
  2520. package/src/app/shared/LazyChunkErrorBoundary.tsx +22 -0
  2521. package/src/app/shared/LazyChunkRetryFallback.tsx +27 -0
  2522. package/src/app/shared/PoweredByBadge.tsx +264 -0
  2523. package/src/app/shared/PrimitiveButton.spec.tsx +210 -0
  2524. package/src/app/shared/PrimitiveButton.tsx +58 -0
  2525. package/src/app/shared/RouteTransitionIndicator.spec.tsx +189 -0
  2526. package/src/app/shared/RouteTransitionIndicator.tsx +55 -0
  2527. package/src/app/shared/RuntimeConfigNotice.tsx +181 -0
  2528. package/src/app/shared/StarfieldBackground.tsx +423 -0
  2529. package/src/app/shared/Turnstile.tsx +111 -0
  2530. package/src/app/shared/index.ts +19 -0
  2531. package/src/app/shared/lazy-chunk-error-boundary.spec.tsx +72 -0
  2532. package/src/app/sharing/AgentShareSection.tsx +138 -0
  2533. package/src/app/sharing/ShareButton.spec.tsx +1238 -0
  2534. package/src/app/sharing/ShareButton.tsx +1625 -0
  2535. package/src/app/sharing/ShareDialog.spec.tsx +197 -0
  2536. package/src/app/sharing/ShareDialog.tsx +511 -0
  2537. package/src/app/sharing/VisibilityBadge.tsx +4 -0
  2538. package/src/app/sharing/index.ts +4 -0
  2539. package/src/app/sharing/use-share-org-member-search.spec.tsx +72 -0
  2540. package/src/app/sharing/useShareButtonController.spec.tsx +356 -0
  2541. package/src/app/sharing/useShareDialogController.spec.tsx +385 -0
  2542. package/src/app/styles/agent-conversation.css +770 -0
  2543. package/src/app/styles/agent-native.css +1429 -0
  2544. package/src/app/styles/agent-native.spec.ts +420 -0
  2545. package/src/app/styles/blocks.css +1668 -0
  2546. package/src/app/styles/chat-history-list.css +15 -0
  2547. package/src/app/styles/rich-markdown-editor.css +1 -0
  2548. package/src/app/styles/tokens/agent-kit.css +116 -0
  2549. package/src/app/terminal/AgentTerminal.spec.ts +328 -0
  2550. package/src/app/terminal/AgentTerminal.tsx +542 -0
  2551. package/src/app/terminal/index.ts +6 -0
  2552. package/src/app/transcription/BuilderTranscriptionCta.spec.tsx +59 -0
  2553. package/src/app/transcription/BuilderTranscriptionCta.tsx +65 -0
  2554. package/src/app/transcription/index.ts +1 -0
  2555. package/src/app-shell/prompt-home.css +4 -0
  2556. package/src/composer/ComposerContextMenu.spec.tsx +260 -38
  2557. package/src/composer/ComposerContextMenu.tsx +252 -93
  2558. package/src/composer/ComposerContextPicker.spec.tsx +16 -19
  2559. package/src/composer/ComposerContextPickerDialog.spec.tsx +121 -3
  2560. package/src/composer/ComposerContextPickerDialog.tsx +153 -17
  2561. package/src/composer/ComposerPlusMenu.parity.spec.tsx +777 -0
  2562. package/src/composer/ComposerPlusMenu.tsx +419 -728
  2563. package/src/composer/MentionPopover.tsx +4 -1
  2564. package/src/composer/PromptComposer.context.spec.tsx +558 -23
  2565. package/src/composer/PromptComposer.submission.spec.tsx +488 -0
  2566. package/src/composer/PromptComposer.tsx +38 -32
  2567. package/src/composer/TiptapComposer.spec.ts +567 -11
  2568. package/src/composer/TiptapComposer.tsx +563 -140
  2569. package/src/composer/attachment-accept.spec.ts +12 -0
  2570. package/src/composer/attachment-accept.ts +20 -3
  2571. package/src/composer/index.ts +4 -0
  2572. package/src/composer/types.ts +1 -1
  2573. package/src/composer/use-composer-panel-placement.ts +70 -0
  2574. package/src/composer/use-mention-search.spec.tsx +123 -0
  2575. package/src/composer/use-mention-search.ts +57 -22
  2576. package/src/composer/use-skills.spec.tsx +154 -0
  2577. package/src/composer/use-skills.ts +61 -3
  2578. package/src/composer/useComposerContextPicker.ts +7 -3
  2579. package/src/styles.css +2 -3
  2580. package/dist/app-shell/PromptHome.spec.d.ts +0 -2
  2581. package/dist/app-shell/PromptHome.spec.d.ts.map +0 -1
  2582. package/dist/app-shell/PromptHome.spec.js +0 -289
  2583. package/dist/app-shell/PromptHome.spec.js.map +0 -1
  2584. package/dist/app-shell/TemplatePreviewDialog.spec.d.ts +0 -2
  2585. package/dist/app-shell/TemplatePreviewDialog.spec.d.ts.map +0 -1
  2586. package/dist/app-shell/TemplatePreviewDialog.spec.js +0 -258
  2587. package/dist/app-shell/TemplatePreviewDialog.spec.js.map +0 -1
  2588. package/dist/app-shell/sidebar-footer-actions.spec.d.ts +0 -2
  2589. package/dist/app-shell/sidebar-footer-actions.spec.d.ts.map +0 -1
  2590. package/dist/app-shell/sidebar-footer-actions.spec.js +0 -43
  2591. package/dist/app-shell/sidebar-footer-actions.spec.js.map +0 -1
  2592. package/dist/app-shell/sidebar-overflow.spec.d.ts +0 -2
  2593. package/dist/app-shell/sidebar-overflow.spec.d.ts.map +0 -1
  2594. package/dist/app-shell/sidebar-overflow.spec.js +0 -109
  2595. package/dist/app-shell/sidebar-overflow.spec.js.map +0 -1
  2596. package/dist/app-shell/sidebar.spec.d.ts +0 -2
  2597. package/dist/app-shell/sidebar.spec.d.ts.map +0 -1
  2598. package/dist/app-shell/sidebar.spec.js +0 -112
  2599. package/dist/app-shell/sidebar.spec.js.map +0 -1
  2600. package/dist/app-shell/use-persistent-sidebar-collapsed.spec.d.ts +0 -2
  2601. package/dist/app-shell/use-persistent-sidebar-collapsed.spec.d.ts.map +0 -1
  2602. package/dist/app-shell/use-persistent-sidebar-collapsed.spec.js +0 -157
  2603. package/dist/app-shell/use-persistent-sidebar-collapsed.spec.js.map +0 -1
  2604. package/dist/canvas-annotations/DrawOverlay.spec.d.ts +0 -2
  2605. package/dist/canvas-annotations/DrawOverlay.spec.d.ts.map +0 -1
  2606. package/dist/canvas-annotations/DrawOverlay.spec.js +0 -119
  2607. package/dist/canvas-annotations/DrawOverlay.spec.js.map +0 -1
  2608. package/dist/canvas-interactions/canvas-interactions.spec.d.ts +0 -2
  2609. package/dist/canvas-interactions/canvas-interactions.spec.d.ts.map +0 -1
  2610. package/dist/canvas-interactions/canvas-interactions.spec.js +0 -593
  2611. package/dist/canvas-interactions/canvas-interactions.spec.js.map +0 -1
  2612. package/dist/chat-history/ChatHistoryList.spec.d.ts +0 -2
  2613. package/dist/chat-history/ChatHistoryList.spec.d.ts.map +0 -1
  2614. package/dist/chat-history/ChatHistoryList.spec.js +0 -289
  2615. package/dist/chat-history/ChatHistoryList.spec.js.map +0 -1
  2616. package/dist/chat-history/ChatHistoryRail.spec.d.ts +0 -2
  2617. package/dist/chat-history/ChatHistoryRail.spec.d.ts.map +0 -1
  2618. package/dist/chat-history/ChatHistoryRail.spec.js +0 -185
  2619. package/dist/chat-history/ChatHistoryRail.spec.js.map +0 -1
  2620. package/dist/chat-history/useChatHistoryRailController.spec.d.ts +0 -2
  2621. package/dist/chat-history/useChatHistoryRailController.spec.d.ts.map +0 -1
  2622. package/dist/chat-history/useChatHistoryRailController.spec.js +0 -101
  2623. package/dist/chat-history/useChatHistoryRailController.spec.js.map +0 -1
  2624. package/dist/collab-ui/PresenceBar.spec.d.ts +0 -2
  2625. package/dist/collab-ui/PresenceBar.spec.d.ts.map +0 -1
  2626. package/dist/collab-ui/PresenceBar.spec.js +0 -101
  2627. package/dist/collab-ui/PresenceBar.spec.js.map +0 -1
  2628. package/dist/collab-ui/lead-client.spec.d.ts +0 -2
  2629. package/dist/collab-ui/lead-client.spec.d.ts.map +0 -1
  2630. package/dist/collab-ui/lead-client.spec.js +0 -15
  2631. package/dist/collab-ui/lead-client.spec.js.map +0 -1
  2632. package/dist/collab-ui/types.spec.d.ts +0 -2
  2633. package/dist/collab-ui/types.spec.d.ts.map +0 -1
  2634. package/dist/collab-ui/types.spec.js +0 -49
  2635. package/dist/collab-ui/types.spec.js.map +0 -1
  2636. package/dist/composer/AgentComposerFrame.spec.d.ts +0 -2
  2637. package/dist/composer/AgentComposerFrame.spec.d.ts.map +0 -1
  2638. package/dist/composer/AgentComposerFrame.spec.js +0 -18
  2639. package/dist/composer/AgentComposerFrame.spec.js.map +0 -1
  2640. package/dist/composer/AgentComposerFrame.viewport.spec.d.ts +0 -2
  2641. package/dist/composer/AgentComposerFrame.viewport.spec.d.ts.map +0 -1
  2642. package/dist/composer/AgentComposerFrame.viewport.spec.js +0 -96
  2643. package/dist/composer/AgentComposerFrame.viewport.spec.js.map +0 -1
  2644. package/dist/composer/AgentSuggestionBar.spec.d.ts +0 -2
  2645. package/dist/composer/AgentSuggestionBar.spec.d.ts.map +0 -1
  2646. package/dist/composer/AgentSuggestionBar.spec.js +0 -63
  2647. package/dist/composer/AgentSuggestionBar.spec.js.map +0 -1
  2648. package/dist/composer/ComposerContextMenu.spec.d.ts +0 -2
  2649. package/dist/composer/ComposerContextMenu.spec.d.ts.map +0 -1
  2650. package/dist/composer/ComposerContextMenu.spec.js +0 -307
  2651. package/dist/composer/ComposerContextMenu.spec.js.map +0 -1
  2652. package/dist/composer/ComposerContextPicker.spec.d.ts +0 -2
  2653. package/dist/composer/ComposerContextPicker.spec.d.ts.map +0 -1
  2654. package/dist/composer/ComposerContextPicker.spec.js +0 -454
  2655. package/dist/composer/ComposerContextPicker.spec.js.map +0 -1
  2656. package/dist/composer/ComposerContextPickerDialog.spec.d.ts +0 -2
  2657. package/dist/composer/ComposerContextPickerDialog.spec.d.ts.map +0 -1
  2658. package/dist/composer/ComposerContextPickerDialog.spec.js +0 -336
  2659. package/dist/composer/ComposerContextPickerDialog.spec.js.map +0 -1
  2660. package/dist/composer/ComposerPlusMenu.spec.d.ts +0 -2
  2661. package/dist/composer/ComposerPlusMenu.spec.d.ts.map +0 -1
  2662. package/dist/composer/ComposerPlusMenu.spec.js +0 -12
  2663. package/dist/composer/ComposerPlusMenu.spec.js.map +0 -1
  2664. package/dist/composer/MentionItemMedia.spec.d.ts +0 -2
  2665. package/dist/composer/MentionItemMedia.spec.d.ts.map +0 -1
  2666. package/dist/composer/MentionItemMedia.spec.js +0 -72
  2667. package/dist/composer/MentionItemMedia.spec.js.map +0 -1
  2668. package/dist/composer/MessageQueueDrawer.spec.d.ts +0 -2
  2669. package/dist/composer/MessageQueueDrawer.spec.d.ts.map +0 -1
  2670. package/dist/composer/MessageQueueDrawer.spec.js +0 -108
  2671. package/dist/composer/MessageQueueDrawer.spec.js.map +0 -1
  2672. package/dist/composer/PastedTextChip.spec.d.ts +0 -2
  2673. package/dist/composer/PastedTextChip.spec.d.ts.map +0 -1
  2674. package/dist/composer/PastedTextChip.spec.js +0 -42
  2675. package/dist/composer/PastedTextChip.spec.js.map +0 -1
  2676. package/dist/composer/PromptComposer.context.spec.d.ts +0 -2
  2677. package/dist/composer/PromptComposer.context.spec.d.ts.map +0 -1
  2678. package/dist/composer/PromptComposer.context.spec.js +0 -671
  2679. package/dist/composer/PromptComposer.context.spec.js.map +0 -1
  2680. package/dist/composer/PromptComposer.spec.d.ts +0 -2
  2681. package/dist/composer/PromptComposer.spec.d.ts.map +0 -1
  2682. package/dist/composer/PromptComposer.spec.js +0 -188
  2683. package/dist/composer/PromptComposer.spec.js.map +0 -1
  2684. package/dist/composer/RealtimeVoiceMode.spec.d.ts +0 -2
  2685. package/dist/composer/RealtimeVoiceMode.spec.d.ts.map +0 -1
  2686. package/dist/composer/RealtimeVoiceMode.spec.js +0 -541
  2687. package/dist/composer/RealtimeVoiceMode.spec.js.map +0 -1
  2688. package/dist/composer/TiptapComposer.spec.d.ts +0 -2
  2689. package/dist/composer/TiptapComposer.spec.d.ts.map +0 -1
  2690. package/dist/composer/TiptapComposer.spec.js +0 -1780
  2691. package/dist/composer/TiptapComposer.spec.js.map +0 -1
  2692. package/dist/composer/VoiceButton.spec.d.ts +0 -2
  2693. package/dist/composer/VoiceButton.spec.d.ts.map +0 -1
  2694. package/dist/composer/VoiceButton.spec.js +0 -27
  2695. package/dist/composer/VoiceButton.spec.js.map +0 -1
  2696. package/dist/composer/asset-picker-url.spec.d.ts +0 -2
  2697. package/dist/composer/asset-picker-url.spec.d.ts.map +0 -1
  2698. package/dist/composer/asset-picker-url.spec.js +0 -23
  2699. package/dist/composer/asset-picker-url.spec.js.map +0 -1
  2700. package/dist/composer/attachment-accept.spec.d.ts +0 -2
  2701. package/dist/composer/attachment-accept.spec.d.ts.map +0 -1
  2702. package/dist/composer/attachment-accept.spec.js +0 -39
  2703. package/dist/composer/attachment-accept.spec.js.map +0 -1
  2704. package/dist/composer/context-items.spec.d.ts +0 -2
  2705. package/dist/composer/context-items.spec.d.ts.map +0 -1
  2706. package/dist/composer/context-items.spec.js +0 -43
  2707. package/dist/composer/context-items.spec.js.map +0 -1
  2708. package/dist/composer/draft-key.spec.d.ts +0 -2
  2709. package/dist/composer/draft-key.spec.d.ts.map +0 -1
  2710. package/dist/composer/draft-key.spec.js +0 -13
  2711. package/dist/composer/draft-key.spec.js.map +0 -1
  2712. package/dist/composer/model-selection.spec.d.ts +0 -2
  2713. package/dist/composer/model-selection.spec.d.ts.map +0 -1
  2714. package/dist/composer/model-selection.spec.js +0 -46
  2715. package/dist/composer/model-selection.spec.js.map +0 -1
  2716. package/dist/composer/pasted-text.spec.d.ts +0 -2
  2717. package/dist/composer/pasted-text.spec.d.ts.map +0 -1
  2718. package/dist/composer/pasted-text.spec.js +0 -105
  2719. package/dist/composer/pasted-text.spec.js.map +0 -1
  2720. package/dist/composer/prompt-attachments.spec.d.ts +0 -2
  2721. package/dist/composer/prompt-attachments.spec.d.ts.map +0 -1
  2722. package/dist/composer/prompt-attachments.spec.js +0 -63
  2723. package/dist/composer/prompt-attachments.spec.js.map +0 -1
  2724. package/dist/composer/realtime-voice-audio-level.spec.d.ts +0 -2
  2725. package/dist/composer/realtime-voice-audio-level.spec.d.ts.map +0 -1
  2726. package/dist/composer/realtime-voice-audio-level.spec.js +0 -32
  2727. package/dist/composer/realtime-voice-audio-level.spec.js.map +0 -1
  2728. package/dist/composer/realtime-voice-transcript.spec.d.ts +0 -2
  2729. package/dist/composer/realtime-voice-transcript.spec.d.ts.map +0 -1
  2730. package/dist/composer/realtime-voice-transcript.spec.js +0 -73
  2731. package/dist/composer/realtime-voice-transcript.spec.js.map +0 -1
  2732. package/dist/composer/runtime-adapters.spec.d.ts +0 -2
  2733. package/dist/composer/runtime-adapters.spec.d.ts.map +0 -1
  2734. package/dist/composer/runtime-adapters.spec.js +0 -68
  2735. package/dist/composer/runtime-adapters.spec.js.map +0 -1
  2736. package/dist/composer/useRealtimeVoiceMode.spec.d.ts +0 -2
  2737. package/dist/composer/useRealtimeVoiceMode.spec.d.ts.map +0 -1
  2738. package/dist/composer/useRealtimeVoiceMode.spec.js +0 -959
  2739. package/dist/composer/useRealtimeVoiceMode.spec.js.map +0 -1
  2740. package/dist/composer/useVoiceDictation.browser.spec.d.ts +0 -2
  2741. package/dist/composer/useVoiceDictation.browser.spec.d.ts.map +0 -1
  2742. package/dist/composer/useVoiceDictation.browser.spec.js +0 -220
  2743. package/dist/composer/useVoiceDictation.browser.spec.js.map +0 -1
  2744. package/dist/composer/useVoiceDictation.spec.d.ts +0 -2
  2745. package/dist/composer/useVoiceDictation.spec.d.ts.map +0 -1
  2746. package/dist/composer/useVoiceDictation.spec.js +0 -32
  2747. package/dist/composer/useVoiceDictation.spec.js.map +0 -1
  2748. package/dist/conformance/conformance.spec.d.ts +0 -2
  2749. package/dist/conformance/conformance.spec.d.ts.map +0 -1
  2750. package/dist/conformance/conformance.spec.js +0 -87
  2751. package/dist/conformance/conformance.spec.js.map +0 -1
  2752. package/dist/context-ui/ContextMeter.spec.d.ts +0 -2
  2753. package/dist/context-ui/ContextMeter.spec.d.ts.map +0 -1
  2754. package/dist/context-ui/ContextMeter.spec.js +0 -52
  2755. package/dist/context-ui/ContextMeter.spec.js.map +0 -1
  2756. package/dist/dashboard/GenericChartPanel.spec.d.ts +0 -2
  2757. package/dist/dashboard/GenericChartPanel.spec.d.ts.map +0 -1
  2758. package/dist/dashboard/GenericChartPanel.spec.js +0 -41
  2759. package/dist/dashboard/GenericChartPanel.spec.js.map +0 -1
  2760. package/dist/dashboard/dashboard-layout.spec.d.ts +0 -2
  2761. package/dist/dashboard/dashboard-layout.spec.d.ts.map +0 -1
  2762. package/dist/dashboard/dashboard-layout.spec.js +0 -52
  2763. package/dist/dashboard/dashboard-layout.spec.js.map +0 -1
  2764. package/dist/data-grid/DataGrid.spec.d.ts +0 -2
  2765. package/dist/data-grid/DataGrid.spec.d.ts.map +0 -1
  2766. package/dist/data-grid/DataGrid.spec.js +0 -226
  2767. package/dist/data-grid/DataGrid.spec.js.map +0 -1
  2768. package/dist/design-system/default-adapter.spec.d.ts +0 -2
  2769. package/dist/design-system/default-adapter.spec.d.ts.map +0 -1
  2770. package/dist/design-system/default-adapter.spec.js +0 -129
  2771. package/dist/design-system/default-adapter.spec.js.map +0 -1
  2772. package/dist/design-system/design-system.spec.d.ts +0 -2
  2773. package/dist/design-system/design-system.spec.d.ts.map +0 -1
  2774. package/dist/design-system/design-system.spec.js +0 -231
  2775. package/dist/design-system/design-system.spec.js.map +0 -1
  2776. package/dist/design-system/theme.spec.d.ts +0 -2
  2777. package/dist/design-system/theme.spec.d.ts.map +0 -1
  2778. package/dist/design-system/theme.spec.js +0 -43
  2779. package/dist/design-system/theme.spec.js.map +0 -1
  2780. package/dist/design-tweaks/font-family.spec.d.ts +0 -2
  2781. package/dist/design-tweaks/font-family.spec.d.ts.map +0 -1
  2782. package/dist/design-tweaks/font-family.spec.js +0 -29
  2783. package/dist/design-tweaks/font-family.spec.js.map +0 -1
  2784. package/dist/design-tweaks/visual-style-controls.spec.d.ts +0 -2
  2785. package/dist/design-tweaks/visual-style-controls.spec.d.ts.map +0 -1
  2786. package/dist/design-tweaks/visual-style-controls.spec.js +0 -457
  2787. package/dist/design-tweaks/visual-style-controls.spec.js.map +0 -1
  2788. package/dist/editor/DragHandle.spec.d.ts +0 -2
  2789. package/dist/editor/DragHandle.spec.d.ts.map +0 -1
  2790. package/dist/editor/DragHandle.spec.js +0 -532
  2791. package/dist/editor/DragHandle.spec.js.map +0 -1
  2792. package/dist/editor/ImageExtension.roundtrip.spec.d.ts +0 -2
  2793. package/dist/editor/ImageExtension.roundtrip.spec.d.ts.map +0 -1
  2794. package/dist/editor/ImageExtension.roundtrip.spec.js +0 -83
  2795. package/dist/editor/ImageExtension.roundtrip.spec.js.map +0 -1
  2796. package/dist/editor/RegistryBlockNode.spec.d.ts +0 -2
  2797. package/dist/editor/RegistryBlockNode.spec.d.ts.map +0 -1
  2798. package/dist/editor/RegistryBlockNode.spec.js +0 -275
  2799. package/dist/editor/RegistryBlockNode.spec.js.map +0 -1
  2800. package/dist/editor/RichMarkdownEditor.collab.spec.d.ts +0 -2
  2801. package/dist/editor/RichMarkdownEditor.collab.spec.d.ts.map +0 -1
  2802. package/dist/editor/RichMarkdownEditor.collab.spec.js +0 -57
  2803. package/dist/editor/RichMarkdownEditor.collab.spec.js.map +0 -1
  2804. package/dist/editor/RichMarkdownEditor.roundtrip.spec.d.ts +0 -2
  2805. package/dist/editor/RichMarkdownEditor.roundtrip.spec.d.ts.map +0 -1
  2806. package/dist/editor/RichMarkdownEditor.roundtrip.spec.js +0 -131
  2807. package/dist/editor/RichMarkdownEditor.roundtrip.spec.js.map +0 -1
  2808. package/dist/editor/SharedRichEditor.spec.d.ts +0 -2
  2809. package/dist/editor/SharedRichEditor.spec.d.ts.map +0 -1
  2810. package/dist/editor/SharedRichEditor.spec.js +0 -133
  2811. package/dist/editor/SharedRichEditor.spec.js.map +0 -1
  2812. package/dist/editor/SlashCommandMenu.spec.d.ts +0 -2
  2813. package/dist/editor/SlashCommandMenu.spec.d.ts.map +0 -1
  2814. package/dist/editor/SlashCommandMenu.spec.js +0 -67
  2815. package/dist/editor/SlashCommandMenu.spec.js.map +0 -1
  2816. package/dist/editor/TaskListPaste.spec.d.ts +0 -2
  2817. package/dist/editor/TaskListPaste.spec.d.ts.map +0 -1
  2818. package/dist/editor/TaskListPaste.spec.js +0 -239
  2819. package/dist/editor/TaskListPaste.spec.js.map +0 -1
  2820. package/dist/editor/disableHistory.spec.d.ts +0 -2
  2821. package/dist/editor/disableHistory.spec.d.ts.map +0 -1
  2822. package/dist/editor/disableHistory.spec.js +0 -57
  2823. package/dist/editor/disableHistory.spec.js.map +0 -1
  2824. package/dist/editor/gfmDoc.spec.d.ts +0 -2
  2825. package/dist/editor/gfmDoc.spec.d.ts.map +0 -1
  2826. package/dist/editor/gfmDoc.spec.js +0 -159
  2827. package/dist/editor/gfmDoc.spec.js.map +0 -1
  2828. package/dist/editor/structuralReorderUndo.spec.d.ts +0 -2
  2829. package/dist/editor/structuralReorderUndo.spec.d.ts.map +0 -1
  2830. package/dist/editor/structuralReorderUndo.spec.js +0 -92
  2831. package/dist/editor/structuralReorderUndo.spec.js.map +0 -1
  2832. package/dist/editor/surgical-apply.spec.d.ts +0 -2
  2833. package/dist/editor/surgical-apply.spec.d.ts.map +0 -1
  2834. package/dist/editor/surgical-apply.spec.js +0 -398
  2835. package/dist/editor/surgical-apply.spec.js.map +0 -1
  2836. package/dist/editor/useCollabReconcile.concurrent.spec.d.ts +0 -2
  2837. package/dist/editor/useCollabReconcile.concurrent.spec.d.ts.map +0 -1
  2838. package/dist/editor/useCollabReconcile.concurrent.spec.js +0 -2062
  2839. package/dist/editor/useCollabReconcile.concurrent.spec.js.map +0 -1
  2840. package/dist/editor/useCollabReconcile.idempotent.spec.d.ts +0 -2
  2841. package/dist/editor/useCollabReconcile.idempotent.spec.d.ts.map +0 -1
  2842. package/dist/editor/useCollabReconcile.idempotent.spec.js +0 -199
  2843. package/dist/editor/useCollabReconcile.idempotent.spec.js.map +0 -1
  2844. package/dist/editor/useCollabReconcile.seed.spec.d.ts +0 -2
  2845. package/dist/editor/useCollabReconcile.seed.spec.d.ts.map +0 -1
  2846. package/dist/editor/useCollabReconcile.seed.spec.js +0 -55
  2847. package/dist/editor/useCollabReconcile.seed.spec.js.map +0 -1
  2848. package/dist/editor/useCollabReconcile.spec.d.ts +0 -2
  2849. package/dist/editor/useCollabReconcile.spec.d.ts.map +0 -1
  2850. package/dist/editor/useCollabReconcile.spec.js +0 -20
  2851. package/dist/editor/useCollabReconcile.spec.js.map +0 -1
  2852. package/dist/icons/ResourceIcon.spec.d.ts +0 -2
  2853. package/dist/icons/ResourceIcon.spec.d.ts.map +0 -1
  2854. package/dist/icons/ResourceIcon.spec.js +0 -23
  2855. package/dist/icons/ResourceIcon.spec.js.map +0 -1
  2856. package/dist/icons/catalog.spec.d.ts +0 -2
  2857. package/dist/icons/catalog.spec.d.ts.map +0 -1
  2858. package/dist/icons/catalog.spec.js +0 -29
  2859. package/dist/icons/catalog.spec.js.map +0 -1
  2860. package/dist/icons/emoji-catalog.spec.d.ts +0 -2
  2861. package/dist/icons/emoji-catalog.spec.d.ts.map +0 -1
  2862. package/dist/icons/emoji-catalog.spec.js +0 -29
  2863. package/dist/icons/emoji-catalog.spec.js.map +0 -1
  2864. package/dist/icons/icon-persistence.spec.d.ts +0 -2
  2865. package/dist/icons/icon-persistence.spec.d.ts.map +0 -1
  2866. package/dist/icons/icon-persistence.spec.js +0 -38
  2867. package/dist/icons/icon-persistence.spec.js.map +0 -1
  2868. package/dist/icons/recents.spec.d.ts +0 -2
  2869. package/dist/icons/recents.spec.d.ts.map +0 -1
  2870. package/dist/icons/recents.spec.js +0 -29
  2871. package/dist/icons/recents.spec.js.map +0 -1
  2872. package/dist/onboarding/AuthForm.spec.d.ts +0 -2
  2873. package/dist/onboarding/AuthForm.spec.d.ts.map +0 -1
  2874. package/dist/onboarding/AuthForm.spec.js +0 -25
  2875. package/dist/onboarding/AuthForm.spec.js.map +0 -1
  2876. package/dist/sharing/ShareControls.spec.d.ts +0 -2
  2877. package/dist/sharing/ShareControls.spec.d.ts.map +0 -1
  2878. package/dist/sharing/ShareControls.spec.js +0 -55
  2879. package/dist/sharing/ShareControls.spec.js.map +0 -1
  2880. package/dist/sharing/VisibilityBadge.spec.d.ts +0 -2
  2881. package/dist/sharing/VisibilityBadge.spec.d.ts.map +0 -1
  2882. package/dist/sharing/VisibilityBadge.spec.js +0 -60
  2883. package/dist/sharing/VisibilityBadge.spec.js.map +0 -1
  2884. package/dist/ui/command.spec.d.ts +0 -2
  2885. package/dist/ui/command.spec.d.ts.map +0 -1
  2886. package/dist/ui/command.spec.js +0 -48
  2887. package/dist/ui/command.spec.js.map +0 -1
  2888. package/dist/ui/cube-loader.spec.d.ts +0 -2
  2889. package/dist/ui/cube-loader.spec.d.ts.map +0 -1
  2890. package/dist/ui/cube-loader.spec.js +0 -79
  2891. package/dist/ui/cube-loader.spec.js.map +0 -1
  2892. package/dist/ui/dialog.spec.d.ts +0 -2
  2893. package/dist/ui/dialog.spec.d.ts.map +0 -1
  2894. package/dist/ui/dialog.spec.js +0 -21
  2895. package/dist/ui/dialog.spec.js.map +0 -1
  2896. package/dist/ui/filter-trigger.spec.d.ts +0 -2
  2897. package/dist/ui/filter-trigger.spec.d.ts.map +0 -1
  2898. package/dist/ui/filter-trigger.spec.js +0 -22
  2899. package/dist/ui/filter-trigger.spec.js.map +0 -1
  2900. package/dist/ui/menu-shortcut-spacing.test.d.ts +0 -2
  2901. package/dist/ui/menu-shortcut-spacing.test.d.ts.map +0 -1
  2902. package/dist/ui/menu-shortcut-spacing.test.js +0 -18
  2903. package/dist/ui/menu-shortcut-spacing.test.js.map +0 -1
@@ -0,0 +1,4887 @@
1
+ import {
2
+ hasActiveAgentRuns,
3
+ selectAgentSuggestions,
4
+ isCurrentAgentSuggestion,
5
+ type AgentKitUploadDriver,
6
+ type AgentThreadState,
7
+ } from "@agent-native/agentkit";
8
+ import type {
9
+ AgentActionResult,
10
+ AgentApprovalRequest,
11
+ AgentConnectionRequest,
12
+ AgentEvent,
13
+ AgentMessage,
14
+ AgentStreamIntegrityReport,
15
+ AgentThreadSnapshot,
16
+ AgentToolCall,
17
+ AgentUploadTarget,
18
+ FilePart,
19
+ } from "@agent-native/agentkit/protocol";
20
+ import type { AgentChatAttachment } from "@agent-native/core";
21
+ import {
22
+ appendAgentChatContextToMessage,
23
+ filterAgentChatContextItems,
24
+ formatAgentChatContextItemsForPrompt,
25
+ getAgentChatContextState,
26
+ normalizeAgentChatContextItem,
27
+ publishAgentChatContextItems,
28
+ reportAgentChatSubmitResult,
29
+ refreshAgentChatContext,
30
+ subscribeAgentChatContext,
31
+ type AgentChatContextItem,
32
+ } from "@agent-native/core/client/agent-chat";
33
+ import type { CreateAgentNativeAgentKitTransportOptions } from "@agent-native/core/client/agent-chat";
34
+ import { AGENT_NATIVE_PROTOCOL_METADATA_KEY } from "@agent-native/core/client/agent-chat";
35
+ import {
36
+ readAssistantChatComposerDraft,
37
+ writeAssistantChatComposerDraft,
38
+ } from "@agent-native/core/client/agent-chat";
39
+ import { createAgentNativeChatRuntime } from "@agent-native/core/client/agent-chat";
40
+ import type { CreateAgentNativeChatRuntimeOptions } from "@agent-native/core/client/agent-chat";
41
+ import { useAgentDynamicSuggestionsResult } from "@agent-native/core/client/agent-chat";
42
+ import {
43
+ formatChatErrorText,
44
+ localizeKnownChatErrorText,
45
+ } from "@agent-native/core/client/agent-chat";
46
+ import { dispatchAgentChatRunning } from "@agent-native/core/client/agent-chat";
47
+ import {
48
+ useAgentEngineConfigured,
49
+ type AgentEngineConfiguredState,
50
+ } from "@agent-native/core/client/agent-chat";
51
+ import { agentNativePath } from "@agent-native/core/client/api-path";
52
+ import {
53
+ compareAndSetClientAppState,
54
+ deleteClientAppState,
55
+ isClientAppStateMutationPending,
56
+ readClientAppState,
57
+ } from "@agent-native/core/client/application-state";
58
+ import { signOut } from "@agent-native/core/client/hooks";
59
+ import { callAction } from "@agent-native/core/client/hooks";
60
+ import { isInBuilderFrame } from "@agent-native/core/client/host";
61
+ import { useFormatters, useT } from "@agent-native/core/client/i18n";
62
+ import { buildSignInReturnHref } from "@agent-native/core/client/sign-in-return";
63
+ import { useFileUploadStatus } from "@agent-native/core/client/uploads";
64
+ import { useSession } from "@agent-native/core/client/use-session";
65
+ import { AGENTKIT_CHAT_MIGRATION_GUIDE_URL } from "@agent-native/core/package-lifecycle/migration-message";
66
+ import { splitAgentChatContextFromMessage } from "@agent-native/core/shared";
67
+ import { writeClipboardText } from "@agent-native/toolkit/clipboard";
68
+ import {
69
+ AgentSuggestionBar,
70
+ agentSuggestionPrompt,
71
+ snapshotComposerContextItems,
72
+ type PromptComposerFile,
73
+ type PromptComposerSubmitOptions,
74
+ type Reference,
75
+ type AgentSuggestionInput,
76
+ type TiptapComposerHandle,
77
+ } from "@agent-native/toolkit/composer";
78
+ import {
79
+ appendRealtimeVoiceTranscriptToRepository,
80
+ realtimeVoiceTranscriptRegistry,
81
+ type RealtimeVoiceTranscriptMessage,
82
+ } from "@agent-native/toolkit/composer/realtime-voice-transcript";
83
+ import { cn } from "@agent-native/toolkit/utils";
84
+ import {
85
+ IconAlertTriangle,
86
+ IconMessage,
87
+ IconPlayerStopFilled,
88
+ IconQuote,
89
+ IconRefresh,
90
+ IconX,
91
+ } from "@tabler/icons-react";
92
+ import React, {
93
+ createContext,
94
+ forwardRef,
95
+ useCallback,
96
+ useEffect,
97
+ useImperativeHandle,
98
+ useMemo,
99
+ useRef,
100
+ useState,
101
+ } from "react";
102
+
103
+ import {
104
+ AgentKitChat,
105
+ AgentKitComposer,
106
+ AgentApprovalPrompt,
107
+ AgentMessageView,
108
+ useAgentKit,
109
+ useAgentKitControl,
110
+ useAgentThread,
111
+ type AgentKitRenderProps,
112
+ type AgentKitRegionRenderProps,
113
+ type AgentConnectionErrorRenderProps,
114
+ type AgentKitBranchNavigation,
115
+ } from "../agentkit/react/index.js";
116
+ import { AgentKitRoot } from "../agentkit/react/root.js";
117
+ import {
118
+ AgentKitDevCheckpointProvider,
119
+ AgentKitDevCheckpointRestore,
120
+ useOptionalAgentKitHistory,
121
+ } from "./agentkit-chat/history.js";
122
+ import {
123
+ CoreComposerRuntimeProvider,
124
+ createAgentNativeAgentKitTransport,
125
+ GuidedQuestionProviderGate,
126
+ findMcpConnectionSuggestionIntegration,
127
+ GuidedQuestionFlow,
128
+ McpAgentKitConnectionRequestCard,
129
+ McpAgentKitConnectionResume,
130
+ McpConnectionSuggestion,
131
+ AgentKitHistoryBeginningRevert,
132
+ AgentKitHistoryMessageSupplement,
133
+ AgentKitHistoryProvider,
134
+ useGuidedQuestionFlow,
135
+ type AgentKitHistoryConfig,
136
+ } from "./agentkit-chat/index.js";
137
+ import {
138
+ AgentKitFilesChangedSummary,
139
+ AgentKitMarkdownText,
140
+ } from "./agentkit-chat/parity-renderers.js";
141
+ import { AgentApprovalCard } from "./chat/agent-approval-card.js";
142
+ import { renderMarkdownToClipboardHtml } from "./chat/markdown-renderer.js";
143
+ import {
144
+ RunErrorRecoveryCard,
145
+ BuilderSetupCard,
146
+ LoopLimitContinueCard,
147
+ PlanModeCallout,
148
+ getRequestModeMetadata,
149
+ type RunErrorInfo,
150
+ } from "./chat/run-recovery.js";
151
+ import type {
152
+ AssistantChatAdapterContext,
153
+ AssistantChatComposerContext,
154
+ AssistantChatHandle,
155
+ AssistantChatProps,
156
+ AssistantChatSendOptions,
157
+ AssistantChatSubmitResult,
158
+ } from "./chat/surface-types.js";
159
+ import {
160
+ ChatRunningContext,
161
+ SuppressInlineOpenAppContext,
162
+ ReasoningCell,
163
+ ToolCallDisplay,
164
+ } from "./chat/tool-call-display.js";
165
+ import { resolveAgentKitToolSource } from "./chat/tool-integration.js";
166
+ import { ExternalAgentNudge } from "./external-agent-host.js";
167
+ import { FileStorageSetupPopover } from "./FileStorageSetupPopover.js";
168
+ import { RunStuckBanner } from "./RunStuckBanner.js";
169
+ import { ThinkingDisplayProvider } from "./thinking-display.js";
170
+
171
+ export interface AgentKitAssistantChatProps extends AssistantChatProps {
172
+ /** Called after AgentKit creates a fork so the host can add and activate a tab. */
173
+ onForkedThread?: (threadId: string) => void;
174
+ branchNavigation?: AgentKitBranchNavigation;
175
+ /**
176
+ * @deprecated Removed in Core 0.194.0. Pass `runtime` or `createTransport`.
177
+ * @see https://github.com/BuilderIO/agent-native/blob/main/packages/core/docs/migrations/agentkit-chat.md
178
+ */
179
+ createAdapter?: "Removed. See https://github.com/BuilderIO/agent-native/blob/main/packages/core/docs/migrations/agentkit-chat.md";
180
+ }
181
+
182
+ const reportIntegrity = (report: AgentStreamIntegrityReport) => {
183
+ if (typeof window === "undefined") return;
184
+ window.dispatchEvent(
185
+ new CustomEvent("agentkit:stream-integrity", { detail: report }),
186
+ );
187
+ };
188
+
189
+ const PENDING_SELECTION_TTL_MS = 5 * 60 * 1000;
190
+ const MAX_SELECTION_CONTEXT_CHARS = 8_000;
191
+ const THREAD_HANDOFF_TTL_MS = 60_000;
192
+ const MAX_THREAD_HANDOFF_SNAPSHOTS = 20;
193
+ const DEFERRED_PROVIDER_SUBMISSIONS_VERSION = 1;
194
+ const DEFERRED_PROVIDER_SUBMISSION_CLAIM_TTL_MS = 15 * 60 * 1000;
195
+ const DEFERRED_PROVIDER_SUBMISSION_MAX_RETRIES = 3;
196
+ const DEFERRED_PROVIDER_SUBMISSIONS_KEY_PREFIX =
197
+ "agentkit-deferred-provider-submissions:";
198
+ const threadHandoffSnapshots = new Map<
199
+ string,
200
+ { snapshot: AgentThreadSnapshot; expiresAt: number }
201
+ >();
202
+ const deferredProviderSubmissionOperations = new Map<
203
+ string,
204
+ Promise<unknown>
205
+ >();
206
+ // i18n-ignore: Internal recovery instruction sent to the agent, never shown as product copy.
207
+ const RECOVERY_CONTINUE_PROMPT =
208
+ "Continue from where you left off and finish my last request. Do not repeat completed work.";
209
+
210
+ type ThreadRestoreState =
211
+ | { status: "ready" | "loading" }
212
+ | { status: "error"; notFound: boolean };
213
+
214
+ type AgentKitInternalSendOptions = AssistantChatSendOptions & {
215
+ recoveryAction?: "continue" | "retry";
216
+ recoveryReferences?: Reference[];
217
+ recoveryModel?: string;
218
+ recoveryEngine?: string;
219
+ recoveryEffort?: string;
220
+ recoveryRequestMode?: "act" | "plan";
221
+ deferredFileParts?: FilePart[];
222
+ contextAlreadyIncluded?: boolean;
223
+ pendingSelectionCapturedAt?: number | null;
224
+ skipAmbientSelectionContext?: boolean;
225
+ deferredAgentId?: string | null;
226
+ deferredContextScope?: AgentKitAssistantChatProps["contextScope"] | null;
227
+ deferredSubmissionId?: string;
228
+ };
229
+
230
+ interface PendingProviderSubmission {
231
+ id: string;
232
+ threadId: string;
233
+ text: string;
234
+ fileParts: FilePart[];
235
+ references: Reference[];
236
+ composerOptions: PromptComposerSubmitOptions;
237
+ options: AgentKitInternalSendOptions;
238
+ attempts?: number;
239
+ failed?: true;
240
+ claim?: { token: string; expiresAt: number };
241
+ }
242
+
243
+ interface DeferredProviderSubmissionsState {
244
+ version: typeof DEFERRED_PROVIDER_SUBMISSIONS_VERSION;
245
+ threadId: string;
246
+ submissions: PendingProviderSubmission[];
247
+ }
248
+
249
+ interface PendingSelectionContext {
250
+ text: string;
251
+ capturedAt: number;
252
+ }
253
+
254
+ interface PendingSelectionHydration {
255
+ threadId: string;
256
+ promise: Promise<void>;
257
+ resolve: () => void;
258
+ status: "pending" | "loaded" | "failed";
259
+ }
260
+
261
+ function createPendingSelectionHydration(
262
+ threadId: string,
263
+ ): PendingSelectionHydration {
264
+ let resolve!: () => void;
265
+ const promise = new Promise<void>((resolvePromise) => {
266
+ resolve = resolvePromise;
267
+ });
268
+ return { threadId, promise, resolve, status: "pending" };
269
+ }
270
+
271
+ function deferredProviderSubmissionsStateKey(threadId: string): string {
272
+ const encodedThreadId = Array.from(threadId, (character) =>
273
+ character.codePointAt(0)!.toString(16),
274
+ ).join("-");
275
+ return `${DEFERRED_PROVIDER_SUBMISSIONS_KEY_PREFIX}${encodedThreadId}`;
276
+ }
277
+
278
+ function parseDeferredProviderSubmissions(
279
+ value: unknown,
280
+ threadId: string,
281
+ ): PendingProviderSubmission[] {
282
+ if (value === null) return [];
283
+ const state = asRecord(value);
284
+ if (
285
+ state?.version !== DEFERRED_PROVIDER_SUBMISSIONS_VERSION ||
286
+ state.threadId !== threadId ||
287
+ !Array.isArray(state.submissions)
288
+ ) {
289
+ throw new Error(
290
+ `Deferred AgentKit submissions for ${threadId} have an invalid state shape.`,
291
+ );
292
+ }
293
+
294
+ return state.submissions.map((value) => {
295
+ const submission = asRecord(value);
296
+ const fileParts = submission?.fileParts;
297
+ const composerOptions = asRecord(submission?.composerOptions);
298
+ const options = asRecord(submission?.options);
299
+ const claim = asRecord(submission?.claim);
300
+ if (
301
+ typeof submission?.id !== "string" ||
302
+ submission.threadId !== threadId ||
303
+ typeof submission.text !== "string" ||
304
+ !Array.isArray(fileParts) ||
305
+ !fileParts.every((part) => {
306
+ const filePart = asRecord(part);
307
+ return (
308
+ filePart?.type === "file" &&
309
+ typeof filePart.name === "string" &&
310
+ (typeof filePart.url === "string" ||
311
+ typeof filePart.fileId === "string")
312
+ );
313
+ }) ||
314
+ !Array.isArray(submission.references) ||
315
+ !composerOptions ||
316
+ !options ||
317
+ (submission.attempts !== undefined &&
318
+ (!Number.isSafeInteger(submission.attempts) ||
319
+ (submission.attempts as number) < 0)) ||
320
+ (submission.failed !== undefined && submission.failed !== true) ||
321
+ (submission.claim !== undefined &&
322
+ (typeof claim?.token !== "string" ||
323
+ typeof claim.expiresAt !== "number" ||
324
+ !Number.isFinite(claim.expiresAt)))
325
+ ) {
326
+ throw new Error(
327
+ `Deferred AgentKit submission for ${threadId} is incomplete.`,
328
+ );
329
+ }
330
+ return {
331
+ id: submission.id,
332
+ threadId,
333
+ text: submission.text,
334
+ fileParts: fileParts as FilePart[],
335
+ references: submission.references as Reference[],
336
+ composerOptions: composerOptions as PromptComposerSubmitOptions,
337
+ options: options as AgentKitInternalSendOptions,
338
+ ...(typeof submission.attempts === "number"
339
+ ? { attempts: submission.attempts }
340
+ : {}),
341
+ ...(submission.failed === true ? { failed: true as const } : {}),
342
+ ...(claim
343
+ ? {
344
+ claim: {
345
+ token: claim.token as string,
346
+ expiresAt: claim.expiresAt as number,
347
+ },
348
+ }
349
+ : {}),
350
+ };
351
+ });
352
+ }
353
+
354
+ function runDeferredProviderSubmissionStateOperation<T>(
355
+ threadId: string,
356
+ operation: (stateKey: string) => Promise<T> | T,
357
+ ): Promise<T> {
358
+ const stateKey = deferredProviderSubmissionsStateKey(threadId);
359
+ const previous = deferredProviderSubmissionOperations.get(stateKey);
360
+ const next = (previous ?? Promise.resolve())
361
+ .catch(() => undefined)
362
+ .then(() => operation(stateKey));
363
+ deferredProviderSubmissionOperations.set(stateKey, next);
364
+ const clearOperation = () => {
365
+ if (deferredProviderSubmissionOperations.get(stateKey) === next) {
366
+ deferredProviderSubmissionOperations.delete(stateKey);
367
+ }
368
+ };
369
+ void next.then(clearOperation, clearOperation);
370
+ return next;
371
+ }
372
+
373
+ function readDeferredProviderSubmissions(
374
+ threadId: string,
375
+ ): Promise<PendingProviderSubmission[]> {
376
+ return runDeferredProviderSubmissionStateOperation(
377
+ threadId,
378
+ async (stateKey) =>
379
+ parseDeferredProviderSubmissions(
380
+ await readClientAppState<unknown>(stateKey),
381
+ threadId,
382
+ ),
383
+ );
384
+ }
385
+
386
+ function updateDeferredProviderSubmissions(
387
+ threadId: string,
388
+ update: (
389
+ submissions: PendingProviderSubmission[],
390
+ ) => PendingProviderSubmission[],
391
+ ): Promise<PendingProviderSubmission[]> {
392
+ return runDeferredProviderSubmissionStateOperation(
393
+ threadId,
394
+ async (stateKey) => {
395
+ for (let attempt = 0; attempt < 12; attempt += 1) {
396
+ const persisted = await readClientAppState<unknown>(stateKey);
397
+ const current = parseDeferredProviderSubmissions(persisted, threadId);
398
+ const submissions = update(current);
399
+ if (JSON.stringify(submissions) === JSON.stringify(current)) {
400
+ return current;
401
+ }
402
+ const next: DeferredProviderSubmissionsState | null =
403
+ submissions.length > 0
404
+ ? {
405
+ version: DEFERRED_PROVIDER_SUBMISSIONS_VERSION,
406
+ threadId,
407
+ submissions,
408
+ }
409
+ : null;
410
+ const expected = persisted === null ? null : asRecord(persisted);
411
+ if (expected === undefined) {
412
+ throw new Error(
413
+ `Deferred AgentKit submissions for ${threadId} have an invalid state shape.`,
414
+ );
415
+ }
416
+ if (
417
+ await compareAndSetClientAppState(
418
+ stateKey,
419
+ expected,
420
+ next as Record<string, unknown> | null,
421
+ { requestSource: "agentkit-deferred-submit" },
422
+ )
423
+ ) {
424
+ return submissions;
425
+ }
426
+ await new Promise((resolve) => setTimeout(resolve, attempt * 10));
427
+ }
428
+ throw new Error(
429
+ `Deferred AgentKit submissions for ${threadId} changed too often to update safely.`,
430
+ );
431
+ },
432
+ );
433
+ }
434
+
435
+ function isRetryableDeferredProviderSubmissionError(error: unknown): boolean {
436
+ const record = asRecord(error);
437
+ if (typeof record?.retryable === "boolean") return record.retryable;
438
+ if (typeof record?.status === "number") {
439
+ return (
440
+ record.status === 408 ||
441
+ record.status === 425 ||
442
+ record.status === 429 ||
443
+ record.status >= 500
444
+ );
445
+ }
446
+ return error instanceof TypeError || record?.name === "AbortError";
447
+ }
448
+
449
+ type AgentKitComposerSubmit = (
450
+ text: string,
451
+ files: PromptComposerFile[],
452
+ references: Reference[],
453
+ options: AgentKitSuggestionSubmitOptions,
454
+ prepare?: () => Promise<PromptComposerSubmitOptions>,
455
+ ) => Promise<void>;
456
+
457
+ type AgentKitSuggestionSubmitOptions = PromptComposerSubmitOptions & {
458
+ suggestion?: Exclude<AgentSuggestionInput, string>;
459
+ validateSubmission?: () => void;
460
+ };
461
+
462
+ type AgentKitSuggestionSubmitRef = React.MutableRefObject<{
463
+ threadId: string;
464
+ submit: (suggestion: AgentSuggestionInput) => Promise<void>;
465
+ } | null>;
466
+
467
+ interface AgentKitSurfaceContextValue {
468
+ props: AgentKitAssistantChatProps;
469
+ handoffSnapshot: AgentThreadSnapshot | null;
470
+ hasRenderedMessages: boolean;
471
+ canChat: boolean;
472
+ setupMissing: boolean;
473
+ providerStatus: AgentEngineConfiguredState;
474
+ retryProviderStatus: () => void;
475
+ fileStorageConfigured: boolean;
476
+ fileStorageMissing: boolean;
477
+ retryFileStorageStatus: () => void;
478
+ deferredSubmissionFailed: boolean;
479
+ retryDeferredSubmission: () => Promise<void>;
480
+ dismissDeferredSubmission: () => Promise<void>;
481
+ isRunning: boolean;
482
+ isRestoring: boolean;
483
+ threadRestore:
484
+ | { status: "ready" | "loading" }
485
+ | { status: "error"; notFound: boolean };
486
+ retryThreadRestore: () => void;
487
+ authError: { sessionExpired?: boolean } | null;
488
+ authSessionAvailable: boolean;
489
+ setupBouncePulse: number;
490
+ bounceSetupCard: () => void;
491
+ isSubmissionInFlight: boolean;
492
+ contextItems: AgentChatContextItem[];
493
+ suggestions: AgentSuggestionInput[];
494
+ showSuggestions: boolean;
495
+ voiceTranscriptMessages: AgentMessage[];
496
+ selectionLength: number | null;
497
+ prefillRevision: number;
498
+ text: string;
499
+ onTextChange: (text: string) => void;
500
+ onRemoveContextItem: (key: string) => void;
501
+ onClearSelection: () => void;
502
+ onBeforeSubmit: () => Promise<boolean>;
503
+ onSubmit: AgentKitComposerSubmit;
504
+ sendMessage: (
505
+ text: string,
506
+ images?: string[],
507
+ options?: AssistantChatSendOptions,
508
+ ) => Promise<AssistantChatSubmitResult>;
509
+ sendRecoveryMessage: (
510
+ text: string,
511
+ recoveryAction: "continue" | "retry",
512
+ images?: string[],
513
+ attachments?: AgentChatAttachment[],
514
+ references?: Reference[],
515
+ recoveryOptions?: Pick<
516
+ AgentKitInternalSendOptions,
517
+ | "recoveryModel"
518
+ | "recoveryEngine"
519
+ | "recoveryEffort"
520
+ | "recoveryRequestMode"
521
+ >,
522
+ ) => Promise<AssistantChatSubmitResult>;
523
+ submitSuggestion: (suggestion: AgentSuggestionInput) => void;
524
+ suggestionSubmitRef: AgentKitSuggestionSubmitRef;
525
+ onImplementPlan: () => boolean;
526
+ }
527
+
528
+ const AgentKitSurfaceContext =
529
+ createContext<AgentKitSurfaceContextValue | null>(null);
530
+
531
+ function useAgentKitSurface() {
532
+ const value = React.useContext(AgentKitSurfaceContext);
533
+ if (!value) throw new Error("AgentKit chat surface context is missing.");
534
+ return value;
535
+ }
536
+
537
+ const agentKitSlots = {
538
+ composer: AgentKitComposerSlot,
539
+ // Core owns suggestion placement across the transcript and empty states.
540
+ suggestions: () => null,
541
+ emptyState: AgentKitEmptyState,
542
+ transcript: AgentKitTranscript,
543
+ message: AgentKitUserMessage,
544
+ messageSupplement: AgentKitMessageSupplement,
545
+ messageActionsTrailing: AgentKitHistoryMessageSupplement,
546
+ text: AgentKitMarkdownText,
547
+ tool: AgentKitTool,
548
+ connectionRequest: AgentKitConnectionRequest,
549
+ runFailure: AgentKitRunFailure,
550
+ connectionError: AgentKitConnectionError,
551
+ approval: AgentKitApproval,
552
+ reasoning: AgentKitReasoning,
553
+ };
554
+
555
+ const agentKitRegistry = {
556
+ toolSource: resolveAgentKitToolSource,
557
+ tools: {
558
+ "connect-builder": AgentKitTool,
559
+ "connect-file-storage": AgentKitTool,
560
+ },
561
+ };
562
+
563
+ export const AgentKitAssistantChat = forwardRef<
564
+ AssistantChatHandle,
565
+ AgentKitAssistantChatProps
566
+ >(function AgentKitAssistantChat(props, ref) {
567
+ if ((props as { createAdapter?: unknown }).createAdapter !== undefined) {
568
+ throw new Error(
569
+ `AssistantChat's createAdapter prop was removed. Pass runtime or createTransport instead. Migration guide: ${AGENTKIT_CHAT_MIGRATION_GUIDE_URL}`,
570
+ );
571
+ }
572
+ const t = useT();
573
+ const { formatDate } = useFormatters();
574
+ const threadId = props.threadId ?? props.tabId;
575
+ if (!threadId) {
576
+ throw new Error("AgentKit chat requires a stable thread or tab id.");
577
+ }
578
+ const handoffSnapshot =
579
+ props.createTransport || props.runtime
580
+ ? null
581
+ : readAgentKitThreadHandoffSnapshot(
582
+ createAgentKitThreadHandoffKey(props, threadId),
583
+ );
584
+ const [threadRestore, setThreadRestore] = useState<ThreadRestoreState>(() =>
585
+ props.isThreadStateLoading || !props.isNewThread
586
+ ? { status: "loading" }
587
+ : { status: "ready" },
588
+ );
589
+ const [restoreRetryLoadPhase, setRestoreRetryLoadPhase] = useState<
590
+ "idle" | "release" | "reopen"
591
+ >("idle");
592
+ const [restoreRetryThreadId, setRestoreRetryThreadId] = useState<
593
+ string | null
594
+ >(null);
595
+ const notifiedMissingThreadsRef = useRef(new Set<string>());
596
+ const onThreadRestoreLoaded = useCallback(() => {
597
+ setThreadRestore({ status: "ready" });
598
+ setRestoreRetryLoadPhase("idle");
599
+ setRestoreRetryThreadId(null);
600
+ }, []);
601
+ useEffect(() => {
602
+ setThreadRestore(
603
+ props.isThreadStateLoading || !props.isNewThread
604
+ ? { status: "loading" }
605
+ : { status: "ready" },
606
+ );
607
+ setRestoreRetryLoadPhase("idle");
608
+ setRestoreRetryThreadId(null);
609
+ }, [props.isNewThread, props.isThreadStateLoading, threadId]);
610
+ const onThreadRestoreLoadError = useCallback(
611
+ (error: unknown) => {
612
+ const record = asRecord(error);
613
+ const response = asRecord(record?.response);
614
+ const status = record?.status ?? record?.statusCode ?? response?.status;
615
+ const code =
616
+ typeof record?.code === "string" ? record.code.toLowerCase() : "";
617
+ const notFound =
618
+ status === 404 || code === "not_found" || code === "http_404";
619
+ setThreadRestore({ status: "error", notFound });
620
+ if (
621
+ notFound &&
622
+ props.onThreadRestoreNotFound &&
623
+ !notifiedMissingThreadsRef.current.has(threadId)
624
+ ) {
625
+ notifiedMissingThreadsRef.current.add(threadId);
626
+ props.onThreadRestoreNotFound();
627
+ }
628
+ },
629
+ [props.onThreadRestoreNotFound, threadId],
630
+ );
631
+ const retryThreadRestore = useCallback(() => {
632
+ if (props.isNewThread) return;
633
+ setThreadRestore({ status: "loading" });
634
+ setRestoreRetryThreadId(threadId);
635
+ setRestoreRetryLoadPhase("release");
636
+ }, [props.isNewThread, threadId]);
637
+ useEffect(() => {
638
+ if (
639
+ restoreRetryLoadPhase !== "release" ||
640
+ restoreRetryThreadId !== threadId
641
+ ) {
642
+ return;
643
+ }
644
+ const timer = window.setTimeout(() => {
645
+ setRestoreRetryLoadPhase("reopen");
646
+ }, 0);
647
+ return () => window.clearTimeout(timer);
648
+ }, [restoreRetryLoadPhase, restoreRetryThreadId, threadId]);
649
+ const labels = useMemo(
650
+ () => ({
651
+ conversation: t("agentChat.message.messages"),
652
+ assistant: t("agentChat.common.agent"),
653
+ you: t("agentChat.common.you"),
654
+ approvalApprove: t("agentChat.approval.approve"),
655
+ approvalDeny: t("agentChat.approval.deny"),
656
+ approvalSubmit: t("agentChat.approval.submit"),
657
+ approvalOther: t("agentChat.approval.other"),
658
+ approvalOtherPlaceholder: t("agentChat.approval.otherPlaceholder"),
659
+ connectionConnect: t("agentChat.common.connect"),
660
+ connectionConnecting: t("agentChat.connection.connecting"),
661
+ connectionRetry: t("agentChat.common.retry"),
662
+ connectionConnected: t("agentChat.integrations.connectedSection"),
663
+ connectionNotNow: t("agentChat.connection.notNow"),
664
+ connectionFailed: t("agentChat.connection.failed"),
665
+ connectionAdminRequired: t("agentChat.connection.adminRequired"),
666
+ activities: t("agentChat.activity.groupLabel"),
667
+ activityBuckets: {
668
+ thinking: t("agentChat.activity.bucketThinking"),
669
+ research: t("agentChat.activity.bucketResearch"),
670
+ actions: t("agentChat.activity.bucketActions"),
671
+ other: t("agentChat.activity.bucketOther"),
672
+ },
673
+ agents: t("agentChat.activity.agents"),
674
+ tasks: t("agentChat.activity.tasks"),
675
+ working: t("agentChat.status.working"),
676
+ workingFor: t("agentChat.status.workingFor", {
677
+ duration: "{{duration}}",
678
+ }),
679
+ worked: t("agentChat.tool.worked"),
680
+ workedFor: t("agentChat.tool.workedFor", { duration: "{{duration}}" }),
681
+ durationHourShort: t("agentChat.duration.hourShort"),
682
+ durationMinuteShort: t("agentChat.duration.minuteShort"),
683
+ durationSecondShort: t("agentChat.duration.secondShort"),
684
+ composerLabel: t("agentChat.composer.messageAgent"),
685
+ composerPlaceholder: t("agentChat.composer.messageAgent"),
686
+ queue: t("agentChat.queue.label"),
687
+ queueSteer: t("agentChat.queue.steer"),
688
+ queueSteerHint: t("agentChat.queue.steerHint"),
689
+ queueMoveToTop: t("agentChat.queue.moveToTop"),
690
+ queueRemove: t("agentChat.queue.remove"),
691
+ queueMore: t("agentChat.queue.moreActions"),
692
+ suggestions: t("agentChat.composer.suggestedPrompts"),
693
+ copy: t("agentChat.message.copyMessage"),
694
+ copied: t("agentChat.common.copied"),
695
+ messageActions: t("agentChat.message.actions"),
696
+ copyRequestId: t("agentChat.message.copyRequestId"),
697
+ requestIdUnavailable: t("agentChat.message.requestIdUnavailable"),
698
+ messageUnavailable: t("agentChat.message.unavailable"),
699
+ navigationUnavailable: t("agentChat.message.navigationUnavailable"),
700
+ copyUnavailable: t("agentChat.recovery.copyFailed"),
701
+ positiveFeedback: t("agentChat.feedback.thumbsUp"),
702
+ negativeFeedback: t("agentChat.feedback.notHelpful"),
703
+ feedbackSubmitted: t("agentChat.feedback.submitted"),
704
+ feedbackWhatWentWrong: t("agentChat.feedback.whatWentWrong"),
705
+ feedbackPlaceholder: t("agentChat.feedback.placeholder"),
706
+ feedbackKeyboardHint: t("agentChat.feedback.keyboardHint", {
707
+ shortcut: "{{shortcut}}",
708
+ }),
709
+ feedbackSubmit: t("agentChat.feedback.submit"),
710
+ fork: t("agentChat.message.forkChat"),
711
+ previousBranch: t("agentChat.message.previousBranch"),
712
+ nextBranch: t("agentChat.message.nextBranch"),
713
+ branchPosition: "{{index}}/{{count}}",
714
+ error: t("agentChat.error.failed"),
715
+ renderError: t("agentChat.error.render"),
716
+ runFailed: t("agentChat.error.failed"),
717
+ reconnect: t("agentChat.agentPanel.chatgptSubscriptionReconnect"),
718
+ reasoning: t("agentChat.status.thinking"),
719
+ expandActivity: t("agentChat.common.expand"),
720
+ collapseActivity: t("agentChat.common.collapse"),
721
+ agentStarted: t("agentChat.agent.started"),
722
+ agentResumed: t("agentChat.agent.resumed"),
723
+ agentMessaged: t("agentChat.agent.messaged"),
724
+ agentDelegated: t("agentChat.agent.delegated"),
725
+ agentPaused: t("agentChat.agent.paused"),
726
+ agentCompleted: t("agentChat.agent.completed"),
727
+ agentFailed: t("agentChat.agent.failed"),
728
+ agentClosed: t("agentChat.agent.closed"),
729
+ editMessage: t("agentChat.message.edit"),
730
+ cancelEditing: t("agentChat.common.cancel"),
731
+ regenerateResponse: t("agentChat.message.regenerate"),
732
+ expandMessage: t("agentChat.common.expand"),
733
+ collapseMessage: t("agentChat.common.collapse"),
734
+ previewAttachment: t("agentChat.composer.previewAttachment", {
735
+ name: "{{name}}",
736
+ }),
737
+ pastedText: t("agentChat.pastedText.title"),
738
+ imagePreview: t("agentChat.composer.imagePreview"),
739
+ closePreview: t("agentChat.composer.closePreview"),
740
+ dropFilesToAttach: t("agentChat.composer.dropToAttach"),
741
+ scrollToBottom: t("agentChat.composer.scrollToBottom"),
742
+ formatTimestamp: (createdAt: string) => {
743
+ const date = new Date(createdAt);
744
+ if (Number.isNaN(date.getTime())) return createdAt;
745
+ const now = new Date();
746
+ const yesterday = new Date(now);
747
+ yesterday.setDate(now.getDate() - 1);
748
+ const time = formatDate(date, {
749
+ hour: "numeric",
750
+ minute: "2-digit",
751
+ });
752
+ const sameDay = (left: Date, right: Date) =>
753
+ left.getFullYear() === right.getFullYear() &&
754
+ left.getMonth() === right.getMonth() &&
755
+ left.getDate() === right.getDate();
756
+ if (sameDay(date, now)) return time;
757
+ if (sameDay(date, yesterday)) {
758
+ return `${t("agentChat.history.yesterday")} ${time}`;
759
+ }
760
+ return formatDate(date, {
761
+ month: "short",
762
+ day: "numeric",
763
+ hour: "numeric",
764
+ minute: "2-digit",
765
+ });
766
+ },
767
+ }),
768
+ [formatDate, t],
769
+ );
770
+ const uploadedFilesRef = useRef(new Map<string, FilePart>());
771
+ const upload: AgentKitUploadDriver = useCallback(
772
+ async (target, file, context) => {
773
+ const form = new FormData();
774
+ for (const [key, value] of Object.entries(target.fields ?? {})) {
775
+ form.set(key, value);
776
+ }
777
+ form.set("file", file.body, file.name);
778
+ const response = await fetch(target.url, {
779
+ method: target.method,
780
+ headers: target.headers,
781
+ body: form,
782
+ signal: context?.signal,
783
+ });
784
+ if (!response.ok) {
785
+ throw new Error(`Upload failed with ${response.status}.`);
786
+ }
787
+ const result: unknown = await response.json();
788
+ const uploaded = asRecord(result);
789
+ if (typeof uploaded?.url !== "string" || !uploaded.url) {
790
+ throw new TypeError("File upload response did not include a URL.");
791
+ }
792
+ uploadedFilesRef.current.set(target.uploadId, {
793
+ type: "file",
794
+ name: file.name,
795
+ mediaType: file.mediaType,
796
+ url: uploaded.url,
797
+ ...(typeof uploaded.id === "string" ? { fileId: uploaded.id } : {}),
798
+ });
799
+ },
800
+ [],
801
+ );
802
+ const transportThreadIdRef = useRef(threadId);
803
+ const modelRef = useRef<string | undefined>(props.selectedModel);
804
+ const engineRef = useRef<string | undefined>(props.selectedEngine);
805
+ const effortRef = useRef<AssistantChatAdapterContext["effortRef"]["current"]>(
806
+ props.selectedEffort,
807
+ );
808
+ const harnessRef = useRef<string | undefined>(
809
+ props.hostedHarness ? props.selectedAgent : undefined,
810
+ );
811
+ const hostedHarnessRef = useRef(props.hostedHarness === true);
812
+ const execModeRef = useRef<"build" | "plan" | undefined>(props.execMode);
813
+ const scopeRef = useRef<AssistantChatAdapterContext["scopeRef"]["current"]>(
814
+ props.contextScope,
815
+ );
816
+ const isolateHistoryByScopeRef = useRef(props.isolateHistoryByScope);
817
+ const createTransportRef = useRef(props.createTransport);
818
+ const injectedRuntimeRef = useRef(props.runtime);
819
+ const adapterReloadKeyRef = useRef(props.adapterReloadKey);
820
+ transportThreadIdRef.current = threadId;
821
+ if (adapterReloadKeyRef.current !== props.adapterReloadKey) {
822
+ adapterReloadKeyRef.current = props.adapterReloadKey;
823
+ injectedRuntimeRef.current = props.runtime;
824
+ }
825
+ modelRef.current = props.selectedModel;
826
+ engineRef.current = props.selectedEngine;
827
+ effortRef.current = props.selectedEffort;
828
+ harnessRef.current = props.hostedHarness ? props.selectedAgent : undefined;
829
+ hostedHarnessRef.current = props.hostedHarness === true;
830
+ execModeRef.current = props.execMode;
831
+ scopeRef.current = props.contextScope;
832
+ isolateHistoryByScopeRef.current = props.isolateHistoryByScope;
833
+ createTransportRef.current = props.createTransport;
834
+ const transport = useMemo(() => {
835
+ const operations: NonNullable<
836
+ CreateAgentNativeAgentKitTransportOptions["operations"]
837
+ > = {
838
+ createUpload: async () =>
839
+ ({
840
+ uploadId: createAgentUploadId(),
841
+ method: "POST",
842
+ url: agentNativePath("/_agent-native/file-upload"),
843
+ fields: {},
844
+ }) satisfies AgentUploadTarget,
845
+ completeUpload: async ({ uploadId }) => {
846
+ const uploaded = uploadedFilesRef.current.get(uploadId);
847
+ if (!uploaded) {
848
+ throw new Error(`Upload ${uploadId} did not complete.`);
849
+ }
850
+ uploadedFilesRef.current.delete(uploadId);
851
+ return uploaded;
852
+ },
853
+ invokeAction: async ({ invocation }) => {
854
+ try {
855
+ const result = await callAction(
856
+ invocation.action,
857
+ asRecord(invocation.payload) ?? {},
858
+ );
859
+ return {
860
+ invocationId: invocation.id,
861
+ status: "completed",
862
+ data: result,
863
+ ...(invocation.metadata ? { metadata: invocation.metadata } : {}),
864
+ } satisfies AgentActionResult;
865
+ } catch (error) {
866
+ const errorRecord = asRecord(error);
867
+ return {
868
+ invocationId: invocation.id,
869
+ status: "failed",
870
+ error: {
871
+ code:
872
+ typeof errorRecord?.code === "string"
873
+ ? errorRecord.code
874
+ : "action_failed",
875
+ message: error instanceof Error ? error.message : String(error),
876
+ },
877
+ ...(invocation.metadata ? { metadata: invocation.metadata } : {}),
878
+ } satisfies AgentActionResult;
879
+ }
880
+ },
881
+ };
882
+ const surface =
883
+ props.agentChatSurface === "dev-frame"
884
+ ? "dev-frame"
885
+ : props.agentChatSurface === "desktop"
886
+ ? "desktop"
887
+ : "app";
888
+ const adapterContext: AssistantChatAdapterContext = {
889
+ apiUrl: props.apiUrl ?? agentNativePath("/_agent-native/agent-chat"),
890
+ streamingUrl: props.streamingUrl,
891
+ tabId: props.tabId,
892
+ threadId,
893
+ modelRef,
894
+ engineRef,
895
+ effortRef,
896
+ harnessRef,
897
+ hostedHarnessRef,
898
+ execModeRef,
899
+ browserTabId: props.browserTabId,
900
+ scopeRef,
901
+ surface,
902
+ };
903
+ const customTransport = createTransportRef.current;
904
+ if (customTransport) return customTransport(adapterContext);
905
+ const runtimeOptions: CreateAgentNativeChatRuntimeOptions = {
906
+ apiUrl: props.apiUrl ?? agentNativePath("/_agent-native/agent-chat"),
907
+ streamingUrl: props.streamingUrl,
908
+ browserTabId: props.browserTabId,
909
+ get threadId() {
910
+ return transportThreadIdRef.current;
911
+ },
912
+ surface,
913
+ get mode() {
914
+ return execModeRef.current === "plan" ? "plan" : "act";
915
+ },
916
+ get model() {
917
+ return modelRef.current;
918
+ },
919
+ get engine() {
920
+ return engineRef.current;
921
+ },
922
+ get effort() {
923
+ return effortRef.current;
924
+ },
925
+ get scope() {
926
+ return scopeRef.current;
927
+ },
928
+ };
929
+ const builtTransport = createAgentNativeAgentKitTransport({
930
+ apiUrl: props.apiUrl ?? agentNativePath("/_agent-native/agent-chat"),
931
+ runtime:
932
+ injectedRuntimeRef.current ??
933
+ createAgentNativeChatRuntime(runtimeOptions),
934
+ browserTabId: props.browserTabId,
935
+ get threadId() {
936
+ return transportThreadIdRef.current;
937
+ },
938
+ surface,
939
+ get scope() {
940
+ return scopeRef.current;
941
+ },
942
+ get isolateHistoryByScope() {
943
+ return isolateHistoryByScopeRef.current;
944
+ },
945
+ adapter: { textFormat: "markdown" },
946
+ operations,
947
+ });
948
+ const getThreadSnapshot = builtTransport.getThreadSnapshot;
949
+ if (!getThreadSnapshot || injectedRuntimeRef.current) return builtTransport;
950
+ return {
951
+ ...builtTransport,
952
+ getThreadSnapshot: async (input, context) => {
953
+ const handoff = readAgentKitThreadHandoffSnapshot(
954
+ createAgentKitThreadHandoffKey(
955
+ {
956
+ apiUrl: props.apiUrl,
957
+ browserTabId: props.browserTabId,
958
+ contextScope: scopeRef.current,
959
+ },
960
+ input.threadId,
961
+ ),
962
+ true,
963
+ );
964
+ return handoff ?? getThreadSnapshot(input, context);
965
+ },
966
+ };
967
+ }, [
968
+ props.adapterReloadKey,
969
+ props.agentChatSurface,
970
+ props.apiUrl,
971
+ props.browserTabId,
972
+ props.createTransport,
973
+ props.streamingUrl,
974
+ props.tabId,
975
+ props.createTransport ? threadId : undefined,
976
+ ]);
977
+ const agentKitLoad =
978
+ props.isThreadStateLoading ||
979
+ props.isNewThread ||
980
+ (restoreRetryThreadId === threadId && restoreRetryLoadPhase === "release")
981
+ ? "manual"
982
+ : "auto";
983
+ const getThreadSnapshot = useCallback(
984
+ async (requestedThreadId: string) =>
985
+ (await transport.getThreadSnapshot?.({ threadId: requestedThreadId })) ??
986
+ null,
987
+ [transport],
988
+ );
989
+ const history = props.chatHistory as
990
+ | AgentKitHistoryConfig<unknown, any, any>
991
+ | undefined;
992
+
993
+ return (
994
+ <ThinkingDisplayProvider value={props.thinkingDisplay}>
995
+ <CoreComposerRuntimeProvider>
996
+ <AgentKitRoot
997
+ transport={transport}
998
+ clientOptions={{
999
+ transportOwnership: "owned",
1000
+ retainActiveRunsOnThreadRelease: true,
1001
+ onIntegrityReport: reportIntegrity,
1002
+ upload,
1003
+ }}
1004
+ threadId={threadId}
1005
+ load={agentKitLoad}
1006
+ onLoadError={onThreadRestoreLoadError}
1007
+ slots={agentKitSlots}
1008
+ registry={agentKitRegistry}
1009
+ labels={labels}
1010
+ branchNavigation={props.branchNavigation}
1011
+ onThreadForked={(thread) => props.onForkedThread?.(thread.id)}
1012
+ onCopyMessage={({ text }) => {
1013
+ const html = renderMarkdownToClipboardHtml(text);
1014
+ return html === null ? false : writeClipboardText(text, { html });
1015
+ }}
1016
+ onClientEffect={(effect) => {
1017
+ window.dispatchEvent(
1018
+ new CustomEvent("agent-chat:client-effect", { detail: effect }),
1019
+ );
1020
+ }}
1021
+ >
1022
+ {history ? (
1023
+ <AgentKitHistoryProvider history={history}>
1024
+ <AgentKitDevCheckpointProvider
1025
+ apiUrl={
1026
+ props.apiUrl ?? agentNativePath("/_agent-native/agent-chat")
1027
+ }
1028
+ >
1029
+ <AgentKitAssistantChatBody
1030
+ {...props}
1031
+ threadId={threadId}
1032
+ handoffSnapshot={handoffSnapshot}
1033
+ getThreadSnapshot={getThreadSnapshot}
1034
+ threadRestore={threadRestore}
1035
+ retryThreadRestore={retryThreadRestore}
1036
+ onThreadRestoreLoaded={onThreadRestoreLoaded}
1037
+ ref={ref}
1038
+ />
1039
+ </AgentKitDevCheckpointProvider>
1040
+ </AgentKitHistoryProvider>
1041
+ ) : (
1042
+ <AgentKitDevCheckpointProvider
1043
+ apiUrl={
1044
+ props.apiUrl ?? agentNativePath("/_agent-native/agent-chat")
1045
+ }
1046
+ >
1047
+ <AgentKitAssistantChatBody
1048
+ {...props}
1049
+ threadId={threadId}
1050
+ handoffSnapshot={handoffSnapshot}
1051
+ getThreadSnapshot={getThreadSnapshot}
1052
+ threadRestore={threadRestore}
1053
+ retryThreadRestore={retryThreadRestore}
1054
+ onThreadRestoreLoaded={onThreadRestoreLoaded}
1055
+ ref={ref}
1056
+ />
1057
+ </AgentKitDevCheckpointProvider>
1058
+ )}
1059
+ </AgentKitRoot>
1060
+ </CoreComposerRuntimeProvider>
1061
+ </ThinkingDisplayProvider>
1062
+ );
1063
+ });
1064
+
1065
+ const AgentKitAssistantChatBody = forwardRef<
1066
+ AssistantChatHandle,
1067
+ AgentKitAssistantChatProps & {
1068
+ threadId: string;
1069
+ handoffSnapshot: AgentThreadSnapshot | null;
1070
+ getThreadSnapshot: (
1071
+ threadId: string,
1072
+ ) => Promise<AgentThreadSnapshot | null>;
1073
+ threadRestore: ThreadRestoreState;
1074
+ retryThreadRestore: () => void;
1075
+ onThreadRestoreLoaded: () => void;
1076
+ }
1077
+ >(function AgentKitAssistantChatBody(props, ref) {
1078
+ const { controller, threadId, requestComposerFocus } = useAgentKit();
1079
+ const control = useAgentKitControl(threadId);
1080
+ const thread = useAgentThread(threadId);
1081
+ const history = useOptionalAgentKitHistory();
1082
+ const suggestionSubmitRef =
1083
+ useRef<AgentKitSuggestionSubmitRef["current"]>(null);
1084
+ const t = useT();
1085
+ const providerChecksEnabled = props.providerStatusChecksEnabled !== false;
1086
+ const readiness = useAgentEngineConfigured(providerChecksEnabled, {
1087
+ tabId: props.tabId,
1088
+ threadId,
1089
+ });
1090
+ const canChat = !providerChecksEnabled || readiness.canChat;
1091
+ const setupMissing = providerChecksEnabled && readiness.missing;
1092
+ const providerStatus: AgentEngineConfiguredState = providerChecksEnabled
1093
+ ? readiness.state
1094
+ : "configured";
1095
+ const providerSubmissionPending =
1096
+ !canChat &&
1097
+ !setupMissing &&
1098
+ (providerStatus === "unknown" || providerStatus === "unavailable");
1099
+ const retryProviderStatus = useCallback(() => {
1100
+ window.dispatchEvent(new Event("agent-engine:configured-changed"));
1101
+ }, []);
1102
+ const fileUploadStatus = useFileUploadStatus(
1103
+ props.isActiveComposer !== false,
1104
+ );
1105
+ const fileStorageConfigured =
1106
+ fileUploadStatus.data?.configured === true && !fileUploadStatus.isError;
1107
+ const fileStorageMissing =
1108
+ fileUploadStatus.data?.configured === false && !fileUploadStatus.isError;
1109
+ const retryFileStorageStatus = useCallback(() => {
1110
+ void fileUploadStatus.refetch();
1111
+ }, [fileUploadStatus.refetch]);
1112
+ const isRestoring =
1113
+ history?.isRestoring === true || props.threadRestore.status === "loading";
1114
+ const isSubmissionInFlight = history?.isSubmissionInFlight === true;
1115
+ const [authError, setAuthError] = useState<{
1116
+ sessionExpired?: boolean;
1117
+ } | null>(null);
1118
+ const [authSessionAvailable, setAuthSessionAvailable] = useState(false);
1119
+ const [composerText, setComposerText] = useState(
1120
+ () => readAssistantChatComposerDraft(props.tabId ?? threadId) ?? "",
1121
+ );
1122
+ const onComposerTextChange = useCallback(
1123
+ (text: string) => {
1124
+ setComposerText(text);
1125
+ writeAssistantChatComposerDraft(props.tabId ?? threadId, text);
1126
+ props.onComposerTextChange?.(text);
1127
+ },
1128
+ [props.onComposerTextChange, props.tabId, threadId],
1129
+ );
1130
+ const [prefillRevision, setPrefillRevision] = useState(0);
1131
+ const [
1132
+ pendingProviderSubmissionVersion,
1133
+ setPendingProviderSubmissionVersion,
1134
+ ] = useState(0);
1135
+ const [deferredSubmissionsLoadedThread, setDeferredSubmissionsLoadedThread] =
1136
+ useState<string | null>(null);
1137
+ const pendingProviderRetryTimerRef = useRef<number | undefined>(undefined);
1138
+ const pendingProviderSubmissionsRef = useRef<PendingProviderSubmission[]>([]);
1139
+ const drainingProviderSubmissionsRef = useRef(false);
1140
+ const [
1141
+ deferredProviderSubmissionFailureId,
1142
+ setDeferredProviderSubmissionFailureId,
1143
+ ] = useState<string | null>(null);
1144
+ const scheduleProviderSubmissionRetry = useCallback((delayMs = 300) => {
1145
+ if (pendingProviderRetryTimerRef.current !== undefined) return;
1146
+ pendingProviderRetryTimerRef.current = window.setTimeout(() => {
1147
+ pendingProviderRetryTimerRef.current = undefined;
1148
+ setPendingProviderSubmissionVersion((version) => version + 1);
1149
+ }, delayMs);
1150
+ }, []);
1151
+ useEffect(() => {
1152
+ if (deferredSubmissionsLoadedThread === threadId) return;
1153
+ let active = true;
1154
+ pendingProviderSubmissionsRef.current = [];
1155
+ setDeferredSubmissionsLoadedThread(null);
1156
+ void readDeferredProviderSubmissions(threadId).then(
1157
+ (submissions) => {
1158
+ if (!active) return;
1159
+ pendingProviderSubmissionsRef.current = submissions;
1160
+ setDeferredProviderSubmissionFailureId(
1161
+ submissions.find((submission) => submission.failed)?.id ?? null,
1162
+ );
1163
+ setDeferredSubmissionsLoadedThread(threadId);
1164
+ },
1165
+ () => {
1166
+ if (active) scheduleProviderSubmissionRetry(1000);
1167
+ },
1168
+ );
1169
+ return () => {
1170
+ active = false;
1171
+ };
1172
+ }, [
1173
+ deferredSubmissionsLoadedThread,
1174
+ pendingProviderSubmissionVersion,
1175
+ scheduleProviderSubmissionRetry,
1176
+ threadId,
1177
+ ]);
1178
+ useEffect(
1179
+ () => () => {
1180
+ if (pendingProviderRetryTimerRef.current !== undefined) {
1181
+ window.clearTimeout(pendingProviderRetryTimerRef.current);
1182
+ }
1183
+ },
1184
+ [],
1185
+ );
1186
+ const [setupBouncePulse, setSetupBouncePulse] = useState(0);
1187
+ const previousPrefillRevisionRef = useRef(prefillRevision);
1188
+ const [contextItems, setContextItems] = useState<AgentChatContextItem[]>([]);
1189
+ const [pendingSelection, setPendingSelection] =
1190
+ useState<PendingSelectionContext | null>(null);
1191
+ const pendingSelectionRef = useRef<PendingSelectionContext | null>(null);
1192
+ const updatePendingSelection = useCallback(
1193
+ (selection: PendingSelectionContext | null) => {
1194
+ pendingSelectionRef.current = selection;
1195
+ setPendingSelection(selection);
1196
+ },
1197
+ [],
1198
+ );
1199
+ const pendingSelectionHydrationRef = useRef<PendingSelectionHydration | null>(
1200
+ null,
1201
+ );
1202
+ if (pendingSelectionHydrationRef.current?.threadId !== threadId) {
1203
+ pendingSelectionHydrationRef.current?.resolve();
1204
+ pendingSelectionHydrationRef.current =
1205
+ createPendingSelectionHydration(threadId);
1206
+ }
1207
+ const selectionRevisionRef = useRef(0);
1208
+ const selectionLength = pendingSelection?.text.length ?? null;
1209
+ const [voiceTranscriptState, setVoiceTranscriptState] = useState({
1210
+ threadId,
1211
+ messages: [] as AgentMessage[],
1212
+ });
1213
+ const voiceTranscriptMessages =
1214
+ voiceTranscriptState.threadId === threadId
1215
+ ? voiceTranscriptState.messages
1216
+ : [];
1217
+ const voiceTranscriptsRef = useRef({
1218
+ threadId,
1219
+ messages: [] as RealtimeVoiceTranscriptMessage[],
1220
+ });
1221
+ if (voiceTranscriptsRef.current.threadId !== threadId) {
1222
+ voiceTranscriptsRef.current = { threadId, messages: [] };
1223
+ }
1224
+ const threadMessageIds = new Set(
1225
+ thread.messages.map((message) => message.id),
1226
+ );
1227
+ const hasRenderedMessages =
1228
+ thread.messages.length > 0 ||
1229
+ props.threadContentSlot != null ||
1230
+ getAgentKitThreadHandoffMessages(
1231
+ thread,
1232
+ props.threadRestore.status === "error" ? null : props.handoffSnapshot,
1233
+ ).length > 0 ||
1234
+ voiceTranscriptMessages.some(
1235
+ (message) => !threadMessageIds.has(message.id),
1236
+ );
1237
+ const seenEventsRef = useRef({
1238
+ threadId,
1239
+ initialized: false,
1240
+ ids: new Set<string>(),
1241
+ });
1242
+ const observedMessagesRef = useRef(new Set<string>());
1243
+ const toolInputArgsRef = useRef(new Map<string, string>());
1244
+ const observedThreadIdRef = useRef(threadId);
1245
+ const observedTerminalEventsRef = useRef({
1246
+ threadId,
1247
+ ids: new Set<string>(),
1248
+ });
1249
+ const lastSavedThreadDataRef = useRef<string | null>(null);
1250
+ const saveSnapshotRef = useRef<() => void>(() => undefined);
1251
+ const isUnmountingRef = useRef(false);
1252
+ const localSubmissionRef = useRef(false);
1253
+ const latestAssistant = useMemo(
1254
+ () =>
1255
+ [...thread.messages]
1256
+ .reverse()
1257
+ .find((message) => message.role === "assistant"),
1258
+ [thread.messages],
1259
+ );
1260
+ const isRunning = hasActiveAgentRuns(thread);
1261
+ const isThreadRunning = useCallback(
1262
+ () => hasActiveAgentRuns(controller.getThread(threadId)),
1263
+ [controller, threadId],
1264
+ );
1265
+
1266
+ useEffect(() => {
1267
+ if (previousPrefillRevisionRef.current === prefillRevision) return;
1268
+ previousPrefillRevisionRef.current = prefillRevision;
1269
+ requestComposerFocus(threadId);
1270
+ }, [prefillRevision, requestComposerFocus, threadId]);
1271
+
1272
+ const bounceSetupCard = useCallback(() => {
1273
+ if (setupMissing) setSetupBouncePulse((pulse) => pulse + 1);
1274
+ }, [setupMissing]);
1275
+ const lastCustomRunningStateRef = useRef<{
1276
+ custom: boolean;
1277
+ isRunning: boolean;
1278
+ runId?: string;
1279
+ turnId?: string;
1280
+ } | null>(null);
1281
+
1282
+ useEffect(() => {
1283
+ const isCustomTransport = typeof props.createTransport === "function";
1284
+ const previous = lastCustomRunningStateRef.current;
1285
+ const runId =
1286
+ thread.activeRunIds[0] ??
1287
+ (previous?.isRunning ? previous.runId : undefined);
1288
+ const runStartedEvent = runId
1289
+ ? [...thread.events]
1290
+ .reverse()
1291
+ .find(
1292
+ (event) => event.type === "run.started" && event.runId === runId,
1293
+ )
1294
+ : undefined;
1295
+ const observability = asRecord(
1296
+ asRecord(
1297
+ asRecord(runStartedEvent?.metadata)?.[
1298
+ AGENT_NATIVE_PROTOCOL_METADATA_KEY
1299
+ ],
1300
+ )?.observability,
1301
+ );
1302
+ const turnId =
1303
+ (typeof observability?.turnId === "string"
1304
+ ? observability.turnId
1305
+ : undefined) ??
1306
+ (previous && previous.runId === runId ? previous.turnId : undefined);
1307
+ const next = {
1308
+ custom: isCustomTransport,
1309
+ isRunning,
1310
+ ...(runId ? { runId } : {}),
1311
+ ...(turnId ? { turnId } : {}),
1312
+ };
1313
+ if (
1314
+ !isCustomTransport ||
1315
+ (previous?.custom === true &&
1316
+ previous.isRunning === isRunning &&
1317
+ previous.runId === runId &&
1318
+ previous.turnId === turnId)
1319
+ ) {
1320
+ return;
1321
+ }
1322
+ lastCustomRunningStateRef.current = next;
1323
+ dispatchAgentChatRunning({
1324
+ isRunning,
1325
+ phase: isRunning ? "working" : "idle",
1326
+ threadId,
1327
+ tabId: props.tabId ?? threadId,
1328
+ ...(runId ? { runId } : {}),
1329
+ ...(turnId ? { turnId } : {}),
1330
+ reason: isRunning ? "run.started" : "run.completed",
1331
+ });
1332
+ }, [
1333
+ isRunning,
1334
+ props.createTransport,
1335
+ props.tabId,
1336
+ thread.activeRunIds,
1337
+ thread.events,
1338
+ threadId,
1339
+ ]);
1340
+
1341
+ useEffect(() => {
1342
+ if (thread.thread) props.onThreadRestoreLoaded();
1343
+ }, [props.onThreadRestoreLoaded, thread.thread]);
1344
+
1345
+ const checkAuthSession = useCallback(async (): Promise<
1346
+ "available" | "missing" | "unknown"
1347
+ > => {
1348
+ try {
1349
+ const response = await fetch(
1350
+ agentNativePath("/_agent-native/auth/session"),
1351
+ {
1352
+ cache: "no-store",
1353
+ },
1354
+ );
1355
+ if (!response.ok) {
1356
+ return response.status === 401 || response.status === 403
1357
+ ? "missing"
1358
+ : "unknown";
1359
+ }
1360
+ let data: unknown;
1361
+ try {
1362
+ data = await response.json();
1363
+ } catch {
1364
+ return "unknown";
1365
+ }
1366
+ const hasSession = Boolean(data) && !asRecord(data)?.error;
1367
+ setAuthSessionAvailable(hasSession);
1368
+ if (hasSession) setAuthError(null);
1369
+ return hasSession ? "available" : "missing";
1370
+ } catch {
1371
+ return "unknown";
1372
+ }
1373
+ }, []);
1374
+
1375
+ useEffect(() => {
1376
+ const onAuthError = (event: Event) => {
1377
+ const detail = asRecord((event as CustomEvent).detail);
1378
+ const eventTabId =
1379
+ typeof detail?.tabId === "string" ? detail.tabId : null;
1380
+ const eventThreadId =
1381
+ typeof detail?.threadId === "string" ? detail.threadId : null;
1382
+ if (
1383
+ (eventTabId || eventThreadId) &&
1384
+ eventTabId !== props.tabId &&
1385
+ eventThreadId !== threadId
1386
+ ) {
1387
+ return;
1388
+ }
1389
+ void (async () => {
1390
+ const state = await checkAuthSession();
1391
+ if (state !== "missing") return;
1392
+ setAuthSessionAvailable(false);
1393
+ setAuthError({ sessionExpired: detail?.reason === "session-expired" });
1394
+ })();
1395
+ };
1396
+ window.addEventListener("agent-chat:auth-error", onAuthError);
1397
+ return () =>
1398
+ window.removeEventListener("agent-chat:auth-error", onAuthError);
1399
+ }, [checkAuthSession, props.tabId, threadId]);
1400
+
1401
+ useEffect(() => {
1402
+ if (!authError) return;
1403
+ const timer = window.setTimeout(() => void checkAuthSession(), 250);
1404
+ window.addEventListener("focus", checkAuthSession);
1405
+ window.addEventListener(
1406
+ "agent-engine:configured-changed",
1407
+ checkAuthSession,
1408
+ );
1409
+ return () => {
1410
+ window.clearTimeout(timer);
1411
+ window.removeEventListener("focus", checkAuthSession);
1412
+ window.removeEventListener(
1413
+ "agent-engine:configured-changed",
1414
+ checkAuthSession,
1415
+ );
1416
+ };
1417
+ }, [authError, checkAuthSession]);
1418
+ const staticSuggestionPrompts = useMemo(
1419
+ () => props.suggestions?.map(agentSuggestionPrompt),
1420
+ [props.suggestions],
1421
+ );
1422
+ const { suggestions: dynamicSuggestionPrompts } =
1423
+ useAgentDynamicSuggestionsResult({
1424
+ staticSuggestions: staticSuggestionPrompts,
1425
+ dynamicSuggestions: props.dynamicSuggestions,
1426
+ browserTabId: props.browserTabId,
1427
+ scope: props.contextScope,
1428
+ enabled:
1429
+ canChat &&
1430
+ thread.messages.length === 0 &&
1431
+ Object.keys(thread.runs).length === 0,
1432
+ });
1433
+ const isInitialThread =
1434
+ thread.messages.length === 0 && Object.keys(thread.runs).length === 0;
1435
+ const suggestions = isInitialThread
1436
+ ? resolveAgentKitSuggestionInputs(
1437
+ dynamicSuggestionPrompts,
1438
+ props.suggestions,
1439
+ )
1440
+ : selectAgentSuggestions(thread);
1441
+ const showSuggestions =
1442
+ canChat &&
1443
+ !isRestoring &&
1444
+ !isSubmissionInFlight &&
1445
+ !isRunning &&
1446
+ (!isInitialThread || props.suggestionVisibility !== "after-agent-response");
1447
+
1448
+ const clearPendingSelection = useCallback(() => {
1449
+ const selectionRevision = ++selectionRevisionRef.current;
1450
+ return deleteClientAppState("pending-selection-context", {
1451
+ keepalive: true,
1452
+ }).then(() => {
1453
+ if (selectionRevision !== selectionRevisionRef.current) return;
1454
+ updatePendingSelection(null);
1455
+ if (typeof window !== "undefined") {
1456
+ window.dispatchEvent(new Event("agent-panel:selection-cleared"));
1457
+ }
1458
+ });
1459
+ }, [updatePendingSelection]);
1460
+ const requestPendingSelectionClear = useCallback(() => {
1461
+ void clearPendingSelection().catch((error: unknown) => {
1462
+ console.warn("[agent-chat] Couldn't clear the pending selection", error);
1463
+ });
1464
+ }, [clearPendingSelection]);
1465
+
1466
+ useEffect(() => {
1467
+ let cancelled = false;
1468
+ const hydration = pendingSelectionHydrationRef.current;
1469
+ updatePendingSelection(null);
1470
+ const selectionRevision = selectionRevisionRef.current;
1471
+ void readClientAppState<unknown>("pending-selection-context")
1472
+ .then((value) => {
1473
+ if (cancelled || hydration?.threadId !== threadId) return;
1474
+ const state = asRecord(value);
1475
+ const nestedValue = asRecord(state?.value);
1476
+ const text =
1477
+ typeof nestedValue?.text === "string"
1478
+ ? nestedValue.text
1479
+ : typeof state?.text === "string"
1480
+ ? state.text
1481
+ : undefined;
1482
+ const capturedAt =
1483
+ typeof nestedValue?.capturedAt === "number"
1484
+ ? nestedValue.capturedAt
1485
+ : typeof state?.capturedAt === "number"
1486
+ ? state.capturedAt
1487
+ : 0;
1488
+ if (selectionRevision === selectionRevisionRef.current) {
1489
+ updatePendingSelection(
1490
+ text && Date.now() - capturedAt <= PENDING_SELECTION_TTL_MS
1491
+ ? { text, capturedAt }
1492
+ : null,
1493
+ );
1494
+ }
1495
+ if (hydration) hydration.status = "loaded";
1496
+ })
1497
+ .catch(() => {
1498
+ if (hydration) hydration.status = "failed";
1499
+ })
1500
+ .finally(() => {
1501
+ if (hydration?.status === "pending") hydration.status = "failed";
1502
+ hydration?.resolve();
1503
+ });
1504
+ return () => {
1505
+ cancelled = true;
1506
+ if (hydration?.status === "pending") hydration.status = "failed";
1507
+ hydration?.resolve();
1508
+ };
1509
+ }, [threadId, updatePendingSelection]);
1510
+
1511
+ useEffect(() => {
1512
+ const onAttached = (event: Event) => {
1513
+ const detail = asRecord((event as CustomEvent).detail);
1514
+ if (typeof detail?.text === "string" && detail.text) {
1515
+ selectionRevisionRef.current += 1;
1516
+ updatePendingSelection({ text: detail.text, capturedAt: Date.now() });
1517
+ }
1518
+ };
1519
+ const onCleared = () => {
1520
+ selectionRevisionRef.current += 1;
1521
+ updatePendingSelection(null);
1522
+ };
1523
+ const onClearRequested = requestPendingSelectionClear;
1524
+ window.addEventListener("agent-panel:selection-attached", onAttached);
1525
+ window.addEventListener("agent-panel:selection-cleared", onCleared);
1526
+ window.addEventListener(
1527
+ "agent-panel:selection-clear-requested",
1528
+ onClearRequested,
1529
+ );
1530
+ return () => {
1531
+ window.removeEventListener("agent-panel:selection-attached", onAttached);
1532
+ window.removeEventListener("agent-panel:selection-cleared", onCleared);
1533
+ window.removeEventListener(
1534
+ "agent-panel:selection-clear-requested",
1535
+ onClearRequested,
1536
+ );
1537
+ };
1538
+ }, [requestPendingSelectionClear, updatePendingSelection]);
1539
+
1540
+ useEffect(() => {
1541
+ const apply = () => {
1542
+ if (!props.isActiveComposer && props.isActiveComposer !== undefined)
1543
+ return;
1544
+ setContextItems(
1545
+ filterAgentChatContextItems(
1546
+ getAgentChatContextState().items,
1547
+ props.contextNamespace,
1548
+ ),
1549
+ );
1550
+ };
1551
+ apply();
1552
+ void refreshAgentChatContext().then(apply);
1553
+ return subscribeAgentChatContext(apply);
1554
+ }, [props.contextNamespace, props.isActiveComposer]);
1555
+
1556
+ useEffect(() => {
1557
+ if (seenEventsRef.current.threadId !== threadId) {
1558
+ seenEventsRef.current = {
1559
+ threadId,
1560
+ initialized: false,
1561
+ ids: new Set(),
1562
+ };
1563
+ }
1564
+ const seen = seenEventsRef.current;
1565
+ if (!seen.initialized && thread.thread && !localSubmissionRef.current) {
1566
+ seen.ids = new Set(thread.events.map((event) => event.id));
1567
+ seen.initialized = true;
1568
+ return;
1569
+ }
1570
+ if (!seen.initialized && thread.events.length === 0) return;
1571
+ seen.initialized = true;
1572
+ for (const event of thread.events) {
1573
+ if (seen.ids.has(event.id)) continue;
1574
+ seen.ids.add(event.id);
1575
+ dispatchAgentKitCompatibilityEvent(
1576
+ event,
1577
+ props.tabId ?? threadId,
1578
+ thread,
1579
+ toolInputArgsRef.current,
1580
+ );
1581
+ }
1582
+ }, [props.tabId, thread, threadId]);
1583
+
1584
+ useEffect(() => {
1585
+ if (observedThreadIdRef.current !== threadId) {
1586
+ observedThreadIdRef.current = threadId;
1587
+ observedMessagesRef.current = new Set();
1588
+ }
1589
+ if (
1590
+ observedMessagesRef.current.size === 0 &&
1591
+ thread.thread &&
1592
+ thread.messages.length > 0 &&
1593
+ !localSubmissionRef.current
1594
+ ) {
1595
+ observedMessagesRef.current = new Set(
1596
+ thread.messages.map((message) => message.id),
1597
+ );
1598
+ observedTerminalEventsRef.current = {
1599
+ threadId,
1600
+ ids: new Set(
1601
+ thread.events
1602
+ .filter(
1603
+ (event) =>
1604
+ event.type === "run.completed" ||
1605
+ event.type === "run.cancelled" ||
1606
+ event.type === "run.failed",
1607
+ )
1608
+ .map((event) => event.id),
1609
+ ),
1610
+ };
1611
+ props.onMessageCountChange?.(thread.messages.length);
1612
+ return;
1613
+ }
1614
+ let addedUserMessage = false;
1615
+ for (let index = 0; index < thread.messages.length; index += 1) {
1616
+ const message = thread.messages[index];
1617
+ if (!message) continue;
1618
+ if (observedMessagesRef.current.has(message.id)) continue;
1619
+ observedMessagesRef.current.add(message.id);
1620
+ if (message.role !== "user") continue;
1621
+ localSubmissionRef.current = false;
1622
+ addedUserMessage = true;
1623
+ const text = agentMessageText(message);
1624
+ if (
1625
+ !thread.messages.slice(0, index).some((item) => item.role === "user")
1626
+ ) {
1627
+ props.onGenerateTitle?.(threadId, text);
1628
+ }
1629
+ }
1630
+ const terminalEvents = thread.events.filter(
1631
+ (event) =>
1632
+ event.type === "run.completed" ||
1633
+ event.type === "run.cancelled" ||
1634
+ event.type === "run.failed",
1635
+ );
1636
+ let terminalEventAdded = false;
1637
+ if (observedTerminalEventsRef.current.threadId !== threadId) {
1638
+ observedTerminalEventsRef.current = {
1639
+ threadId,
1640
+ ids: new Set(terminalEvents.map((event) => event.id)),
1641
+ };
1642
+ } else {
1643
+ for (const event of terminalEvents) {
1644
+ if (observedTerminalEventsRef.current.ids.has(event.id)) continue;
1645
+ observedTerminalEventsRef.current.ids.add(event.id);
1646
+ terminalEventAdded = true;
1647
+ }
1648
+ }
1649
+ if (
1650
+ addedUserMessage ||
1651
+ terminalEventAdded ||
1652
+ (!isRunning &&
1653
+ thread.messages.at(-1)?.role === "assistant" &&
1654
+ thread.messages.at(-1)?.status === "complete")
1655
+ ) {
1656
+ saveSnapshotRef.current();
1657
+ }
1658
+ props.onMessageCountChange?.(
1659
+ thread.messages.length +
1660
+ voiceTranscriptMessages.filter(
1661
+ (message) => !thread.messages.some((item) => item.id === message.id),
1662
+ ).length,
1663
+ );
1664
+ }, [isRunning, props, thread, threadId, voiceTranscriptMessages]);
1665
+
1666
+ saveSnapshotRef.current = () => {
1667
+ const transcripts = voiceTranscriptsRef.current.messages;
1668
+ if (thread.messages.length === 0 && transcripts.length === 0) {
1669
+ return;
1670
+ }
1671
+ const baseSnapshot = createAgentKitThreadSnapshot(thread);
1672
+ const snapshot = transcripts.length
1673
+ ? appendVoiceTranscriptsToThreadSnapshot(
1674
+ baseSnapshot,
1675
+ thread,
1676
+ transcripts,
1677
+ )
1678
+ : baseSnapshot;
1679
+ if (
1680
+ isUnmountingRef.current &&
1681
+ props.onSaveThread &&
1682
+ !props.createTransport &&
1683
+ !props.runtime
1684
+ ) {
1685
+ storeAgentKitThreadHandoffSnapshot(
1686
+ createAgentKitThreadHandoffKey(props, threadId),
1687
+ thread,
1688
+ snapshot,
1689
+ );
1690
+ }
1691
+ if (!props.onSaveThread) return;
1692
+ if (snapshot.threadData === lastSavedThreadDataRef.current) return;
1693
+ lastSavedThreadDataRef.current = snapshot.threadData;
1694
+ props.onSaveThread(threadId, snapshot);
1695
+ };
1696
+
1697
+ useEffect(() => {
1698
+ isUnmountingRef.current = false;
1699
+ return () => {
1700
+ isUnmountingRef.current = true;
1701
+ saveSnapshotRef.current();
1702
+ };
1703
+ }, []);
1704
+
1705
+ const appendRealtimeVoiceTranscript = useCallback(
1706
+ (transcript: RealtimeVoiceTranscriptMessage) => {
1707
+ if (
1708
+ isRestoring ||
1709
+ isRunning ||
1710
+ transcript.threadId !== threadId ||
1711
+ voiceTranscriptsRef.current.threadId !== threadId
1712
+ ) {
1713
+ return false;
1714
+ }
1715
+ const currentTranscripts = voiceTranscriptsRef.current.messages;
1716
+ if (
1717
+ thread.messages.some((message) => message.id === transcript.id) ||
1718
+ currentTranscripts.some((message) => message.id === transcript.id)
1719
+ ) {
1720
+ return true;
1721
+ }
1722
+ const transcripts = [...currentTranscripts, transcript];
1723
+ const messages = transcripts.map(realtimeVoiceTranscriptAgentMessage);
1724
+ voiceTranscriptsRef.current = { threadId, messages: transcripts };
1725
+ setVoiceTranscriptState({ threadId, messages });
1726
+ const baseSnapshot = createAgentKitThreadSnapshot(thread);
1727
+ const snapshot = appendVoiceTranscriptsToThreadSnapshot(
1728
+ baseSnapshot,
1729
+ thread,
1730
+ transcripts,
1731
+ );
1732
+ if (props.onSaveThread) {
1733
+ lastSavedThreadDataRef.current = snapshot.threadData;
1734
+ props.onSaveThread(threadId, snapshot);
1735
+ }
1736
+ return true;
1737
+ },
1738
+ [isRestoring, isRunning, props, thread, threadId],
1739
+ );
1740
+
1741
+ useEffect(() => {
1742
+ return realtimeVoiceTranscriptRegistry.register({
1743
+ threadId,
1744
+ active: props.isActiveComposer !== false,
1745
+ append: appendRealtimeVoiceTranscript,
1746
+ });
1747
+ }, [appendRealtimeVoiceTranscript, props.isActiveComposer, threadId]);
1748
+
1749
+ useEffect(() => {
1750
+ if (!isRunning) return;
1751
+ const interval = window.setInterval(() => saveSnapshotRef.current(), 5000);
1752
+ return () => window.clearInterval(interval);
1753
+ }, [isRunning]);
1754
+
1755
+ const acquireSubmission = useCallback(async () => {
1756
+ if (
1757
+ isRestoring ||
1758
+ props.composerDisabled ||
1759
+ props.composerSubmissionDisabled
1760
+ )
1761
+ return null;
1762
+ if (!canChat) {
1763
+ if (setupMissing) {
1764
+ bounceSetupCard();
1765
+ window.dispatchEvent(
1766
+ new CustomEvent("agent-chat:missing-api-key", {
1767
+ detail: { tabId: props.tabId, threadId },
1768
+ }),
1769
+ );
1770
+ }
1771
+ return null;
1772
+ }
1773
+ if (history) {
1774
+ const release = await history.beginSubmission();
1775
+ if (!release) return null;
1776
+ return release;
1777
+ }
1778
+ return () => undefined;
1779
+ }, [
1780
+ bounceSetupCard,
1781
+ canChat,
1782
+ history,
1783
+ isRestoring,
1784
+ props.composerDisabled,
1785
+ props.composerSubmissionDisabled,
1786
+ props.tabId,
1787
+ setupMissing,
1788
+ threadId,
1789
+ ]);
1790
+
1791
+ const beforeSubmit = useCallback(async () => {
1792
+ if (
1793
+ isRestoring ||
1794
+ props.composerDisabled ||
1795
+ props.composerSubmissionDisabled
1796
+ )
1797
+ return false;
1798
+ if (!canChat) {
1799
+ if (setupMissing) {
1800
+ bounceSetupCard();
1801
+ window.dispatchEvent(
1802
+ new CustomEvent("agent-chat:missing-api-key", {
1803
+ detail: { tabId: props.tabId, threadId },
1804
+ }),
1805
+ );
1806
+ }
1807
+ return providerSubmissionPending;
1808
+ }
1809
+ return true;
1810
+ }, [
1811
+ bounceSetupCard,
1812
+ canChat,
1813
+ isRestoring,
1814
+ props.composerDisabled,
1815
+ props.composerSubmissionDisabled,
1816
+ props.tabId,
1817
+ providerSubmissionPending,
1818
+ setupMissing,
1819
+ threadId,
1820
+ ]);
1821
+
1822
+ const dispatch = useCallback(
1823
+ async (
1824
+ text: string,
1825
+ files: PromptComposerFile[],
1826
+ references: Reference[],
1827
+ composerOptions: AgentKitSuggestionSubmitOptions,
1828
+ options: AgentKitInternalSendOptions = {},
1829
+ ) => {
1830
+ const selectionHydration = pendingSelectionHydrationRef.current;
1831
+ await selectionHydration?.promise;
1832
+ const currentPendingSelection = pendingSelectionRef.current;
1833
+ const selectionRevision = selectionRevisionRef.current;
1834
+ const context =
1835
+ options.recoveryAction || options.contextAlreadyIncluded
1836
+ ? ""
1837
+ : [
1838
+ composerOptions.composerModeContext,
1839
+ formatAgentChatContextItemsForPrompt(
1840
+ composerOptions.contextItems ?? contextItems,
1841
+ ),
1842
+ pendingSelectionPromptContext(currentPendingSelection),
1843
+ ]
1844
+ .filter(Boolean)
1845
+ .join("\n\n");
1846
+ const message = options.contextAlreadyIncluded
1847
+ ? text
1848
+ : appendAgentChatContextToMessage(text, context);
1849
+ const attachments = options.attachments ?? [];
1850
+ const needsFileStorage =
1851
+ files.length > 0 ||
1852
+ attachments.some(
1853
+ (attachment) => !attachment.displayOnly && !attachment.url,
1854
+ );
1855
+ if (needsFileStorage && !fileStorageConfigured) {
1856
+ throw new Error(t("onboarding.fileStorage.title"));
1857
+ }
1858
+ const fileParts =
1859
+ options.deferredFileParts ??
1860
+ (await uploadAgentChatAttachments(control, attachments, files));
1861
+ composerOptions.validateSubmission?.();
1862
+ const selectionChangedDuringSubmission =
1863
+ selectionRevision !== selectionRevisionRef.current ||
1864
+ (options.pendingSelectionCapturedAt !== undefined &&
1865
+ options.pendingSelectionCapturedAt !==
1866
+ (currentPendingSelection?.capturedAt ?? null));
1867
+ const skipAmbientSelectionContext =
1868
+ options.skipAmbientSelectionContext === true ||
1869
+ selectionHydration?.status === "pending" ||
1870
+ isClientAppStateMutationPending("pending-selection-context") ||
1871
+ selectionChangedDuringSubmission ||
1872
+ Boolean(pendingSelectionPromptContext(currentPendingSelection));
1873
+ const requestMode =
1874
+ options.requestMode ??
1875
+ options.recoveryRequestMode ??
1876
+ (props.execMode === "plan" ? "plan" : "act");
1877
+ const model =
1878
+ composerOptions.model ?? options.recoveryModel ?? props.selectedModel;
1879
+ const engine =
1880
+ composerOptions.engine ??
1881
+ options.recoveryEngine ??
1882
+ props.selectedEngine;
1883
+ const effort =
1884
+ composerOptions.effort ??
1885
+ options.recoveryEffort ??
1886
+ props.selectedEffort;
1887
+ const contextScope =
1888
+ options.deferredContextScope !== undefined
1889
+ ? (options.deferredContextScope ?? undefined)
1890
+ : props.contextScope;
1891
+ const selectedAgent =
1892
+ options.deferredAgentId !== undefined
1893
+ ? (options.deferredAgentId ?? undefined)
1894
+ : props.selectedAgent;
1895
+ const actionScope = options.actionScope ?? contextScope;
1896
+ const metadata = {
1897
+ ...(composerOptions.suggestion
1898
+ ? { suggestion: composerOptions.suggestion }
1899
+ : {}),
1900
+ ...(options.submitMessageId
1901
+ ? { submitMessageId: options.submitMessageId }
1902
+ : {}),
1903
+ ...(options.usageLabel ? { usageLabel: options.usageLabel } : {}),
1904
+ ...(options.trackInRunsTray ? { trackInRunsTray: true } : {}),
1905
+ ...(skipAmbientSelectionContext
1906
+ ? { agentNativeSkipPendingSelectionContext: true }
1907
+ : {}),
1908
+ ...(actionScope ? { actionScope } : {}),
1909
+ ...(options.approvedToolCalls
1910
+ ? { approvedToolCalls: options.approvedToolCalls }
1911
+ : {}),
1912
+ ...(options.hideUserMessage ? { hideUserMessage: true } : {}),
1913
+ ...(options.recoveryAction || options.deferredSubmissionId
1914
+ ? {
1915
+ custom: {
1916
+ ...(options.recoveryAction
1917
+ ? { agentNativeRecoveryAction: options.recoveryAction }
1918
+ : {}),
1919
+ ...(options.deferredSubmissionId
1920
+ ? {
1921
+ agentNativeDeferredSubmissionId:
1922
+ options.deferredSubmissionId,
1923
+ }
1924
+ : {}),
1925
+ },
1926
+ }
1927
+ : {}),
1928
+ ...(options.recoveryAction === "continue"
1929
+ ? { agentNativeInternalContinuation: true }
1930
+ : {}),
1931
+ ...(contextScope ? { chatScope: contextScope } : {}),
1932
+ ...(references.length || options.recoveryReferences?.length
1933
+ ? {
1934
+ references: [
1935
+ ...references,
1936
+ ...(options.recoveryReferences ?? []),
1937
+ ],
1938
+ }
1939
+ : {}),
1940
+ ...(model ? { model } : {}),
1941
+ ...(engine ? { engine } : {}),
1942
+ ...(effort ? { effort } : {}),
1943
+ ...(selectedAgent ? { agentId: selectedAgent } : {}),
1944
+ requestMode,
1945
+ };
1946
+ localSubmissionRef.current = true;
1947
+ try {
1948
+ if (composerOptions.intent === "queued") {
1949
+ await control.queueMessage({
1950
+ text: message,
1951
+ attachments: fileParts,
1952
+ metadata,
1953
+ onLocalSubmit: composerOptions.onLocalSubmit,
1954
+ });
1955
+ } else {
1956
+ await control.sendMessage({
1957
+ text: message,
1958
+ attachments: fileParts,
1959
+ options: {
1960
+ model,
1961
+ mode: requestMode,
1962
+ agentId: selectedAgent,
1963
+ reasoningEffort:
1964
+ effort && effort !== "auto" && effort !== "max"
1965
+ ? (effort as "low" | "medium" | "high" | "xhigh")
1966
+ : undefined,
1967
+ metadata,
1968
+ },
1969
+ metadata,
1970
+ onLocalSubmit: composerOptions.onLocalSubmit,
1971
+ });
1972
+ }
1973
+ reportAgentChatSubmitResult(options.submitMessageId, true);
1974
+ if (
1975
+ !options.recoveryAction &&
1976
+ !selectionChangedDuringSubmission &&
1977
+ selectionRevision === selectionRevisionRef.current &&
1978
+ Boolean(pendingSelectionPromptContext(currentPendingSelection))
1979
+ ) {
1980
+ requestPendingSelectionClear();
1981
+ }
1982
+ const usedKeys = new Set(contextItems.map((item) => item.key));
1983
+ publishAgentChatContextItems(
1984
+ getAgentChatContextState().items.filter(
1985
+ (item) => !usedKeys.has(item.key),
1986
+ ),
1987
+ );
1988
+ setContextItems((items) =>
1989
+ items.filter((item) => !usedKeys.has(item.key)),
1990
+ );
1991
+ } catch (error) {
1992
+ localSubmissionRef.current = false;
1993
+ throw error;
1994
+ }
1995
+ },
1996
+ [
1997
+ contextItems,
1998
+ control,
1999
+ props.contextScope,
2000
+ props.execMode,
2001
+ props.selectedAgent,
2002
+ props.selectedEffort,
2003
+ props.selectedEngine,
2004
+ props.selectedModel,
2005
+ fileStorageConfigured,
2006
+ t,
2007
+ requestPendingSelectionClear,
2008
+ ],
2009
+ );
2010
+
2011
+ const submit = useCallback(
2012
+ async (
2013
+ text: string,
2014
+ files: PromptComposerFile[],
2015
+ references: Reference[],
2016
+ composerOptions: AgentKitSuggestionSubmitOptions,
2017
+ options: AgentKitInternalSendOptions = {},
2018
+ ): Promise<AssistantChatSubmitResult> => {
2019
+ const release = await acquireSubmission();
2020
+ if (!release) {
2021
+ if (
2022
+ !setupMissing &&
2023
+ (isRestoring ||
2024
+ (providerChecksEnabled &&
2025
+ (readiness.state === "unknown" ||
2026
+ readiness.state === "unavailable")))
2027
+ ) {
2028
+ try {
2029
+ const selectionHydration = pendingSelectionHydrationRef.current;
2030
+ await selectionHydration?.promise;
2031
+ const currentPendingSelection = pendingSelectionRef.current;
2032
+ const selectionRevision = selectionRevisionRef.current;
2033
+ const attachments = options.attachments ?? [];
2034
+ const needsFileStorage =
2035
+ files.length > 0 ||
2036
+ attachments.some(
2037
+ (attachment) => !attachment.displayOnly && !attachment.url,
2038
+ );
2039
+ if (needsFileStorage && !fileStorageConfigured) {
2040
+ throw new Error(t("onboarding.fileStorage.title"));
2041
+ }
2042
+ // Persist only URLs or opaque file handles; application_state is
2043
+ // not a file store and must never receive attachment bodies.
2044
+ const fileParts = await uploadAgentChatAttachments(
2045
+ control,
2046
+ attachments,
2047
+ files,
2048
+ );
2049
+ const selectionChangedDuringUpload =
2050
+ selectionRevision !== selectionRevisionRef.current;
2051
+ const context = options.recoveryAction
2052
+ ? ""
2053
+ : [
2054
+ composerOptions.composerModeContext,
2055
+ formatAgentChatContextItemsForPrompt(
2056
+ composerOptions.contextItems ?? contextItems,
2057
+ ),
2058
+ pendingSelectionPromptContext(currentPendingSelection),
2059
+ ]
2060
+ .filter(Boolean)
2061
+ .join("\n\n");
2062
+ const { submitMessageId } = options;
2063
+ const deferredOptions = { ...options };
2064
+ deferredOptions.pendingSelectionCapturedAt =
2065
+ currentPendingSelection?.capturedAt ?? null;
2066
+ if (
2067
+ options.skipAmbientSelectionContext === true ||
2068
+ selectionHydration?.status === "pending" ||
2069
+ selectionChangedDuringUpload
2070
+ ) {
2071
+ deferredOptions.skipAmbientSelectionContext = true;
2072
+ }
2073
+ delete deferredOptions.submitMessageId;
2074
+ delete deferredOptions.attachments;
2075
+ deferredOptions.contextAlreadyIncluded = true;
2076
+ deferredOptions.deferredSubmissionId =
2077
+ submitMessageId ?? createAgentUploadId();
2078
+ deferredOptions.deferredAgentId = props.selectedAgent ?? null;
2079
+ deferredOptions.deferredContextScope =
2080
+ props.contextScope === undefined ? null : props.contextScope;
2081
+ deferredOptions.requestMode ??=
2082
+ props.execMode === "plan" ? "plan" : "act";
2083
+ const deferredComposerOptions = { ...composerOptions };
2084
+ delete deferredComposerOptions.attachments;
2085
+ delete deferredComposerOptions.onLocalSubmit;
2086
+ delete deferredComposerOptions.validateSubmission;
2087
+ deferredComposerOptions.model ??= props.selectedModel;
2088
+ deferredComposerOptions.engine ??= props.selectedEngine;
2089
+ deferredComposerOptions.effort ??= props.selectedEffort;
2090
+ const submission: PendingProviderSubmission = {
2091
+ id: deferredOptions.deferredSubmissionId,
2092
+ threadId,
2093
+ text: appendAgentChatContextToMessage(text, context),
2094
+ fileParts,
2095
+ references: [...references],
2096
+ composerOptions: deferredComposerOptions,
2097
+ options: deferredOptions,
2098
+ };
2099
+ const submissions = await updateDeferredProviderSubmissions(
2100
+ threadId,
2101
+ (current) =>
2102
+ current.some(({ id }) => id === submission.id)
2103
+ ? current
2104
+ : [...current, submission],
2105
+ );
2106
+ pendingProviderSubmissionsRef.current = submissions;
2107
+ setDeferredSubmissionsLoadedThread(threadId);
2108
+ reportAgentChatSubmitResult(submitMessageId, true);
2109
+ return { status: "submitted" };
2110
+ } catch (error) {
2111
+ reportAgentChatSubmitResult(
2112
+ options.submitMessageId,
2113
+ false,
2114
+ "submission-failed",
2115
+ );
2116
+ dispatchSetupRequiredEvent(error, props.tabId, threadId);
2117
+ throw error;
2118
+ }
2119
+ }
2120
+ const reason = setupMissing
2121
+ ? "engine-not-configured"
2122
+ : "submission-unavailable";
2123
+ reportAgentChatSubmitResult(options.submitMessageId, false, reason);
2124
+ return { status: "rejected", reason };
2125
+ }
2126
+ try {
2127
+ await dispatch(text, files, references, composerOptions, options);
2128
+ return { status: "submitted" };
2129
+ } catch (error) {
2130
+ reportAgentChatSubmitResult(
2131
+ options.submitMessageId,
2132
+ false,
2133
+ "submission-failed",
2134
+ );
2135
+ dispatchSetupRequiredEvent(error, props.tabId, threadId);
2136
+ throw error;
2137
+ } finally {
2138
+ release?.();
2139
+ }
2140
+ },
2141
+ [
2142
+ acquireSubmission,
2143
+ contextItems,
2144
+ control,
2145
+ dispatch,
2146
+ fileStorageConfigured,
2147
+ props.contextScope,
2148
+ props.execMode,
2149
+ props.selectedAgent,
2150
+ props.selectedEffort,
2151
+ props.selectedEngine,
2152
+ props.selectedModel,
2153
+ isRestoring,
2154
+ props.tabId,
2155
+ providerChecksEnabled,
2156
+ readiness.state,
2157
+ setupMissing,
2158
+ t,
2159
+ threadId,
2160
+ ],
2161
+ );
2162
+
2163
+ const submitPrepared = useCallback(
2164
+ async (
2165
+ text: string,
2166
+ files: PromptComposerFile[],
2167
+ references: Reference[],
2168
+ composerOptions: AgentKitSuggestionSubmitOptions,
2169
+ prepare?: () => Promise<PromptComposerSubmitOptions>,
2170
+ ) => {
2171
+ const release = await acquireSubmission();
2172
+ if (!release) {
2173
+ if (
2174
+ providerSubmissionPending &&
2175
+ !props.composerDisabled &&
2176
+ !props.composerSubmissionDisabled
2177
+ ) {
2178
+ try {
2179
+ const preparedOptions = prepare ? await prepare() : composerOptions;
2180
+ const result = await submit(
2181
+ text,
2182
+ files,
2183
+ references,
2184
+ preparedOptions,
2185
+ );
2186
+ if (result.status === "rejected") {
2187
+ throw new Error(t("agentChat.recovery.deferredSubmissionFailed"));
2188
+ }
2189
+ } catch (error) {
2190
+ dispatchSetupRequiredEvent(error, props.tabId, threadId);
2191
+ throw error;
2192
+ }
2193
+ } else {
2194
+ throw new Error(t("agentChat.recovery.deferredSubmissionFailed"));
2195
+ }
2196
+ return;
2197
+ }
2198
+ try {
2199
+ const preparedOptions = prepare ? await prepare() : composerOptions;
2200
+ await dispatch(text, files, references, preparedOptions);
2201
+ } catch (error) {
2202
+ dispatchSetupRequiredEvent(error, props.tabId, threadId);
2203
+ throw error;
2204
+ } finally {
2205
+ release?.();
2206
+ }
2207
+ },
2208
+ [
2209
+ acquireSubmission,
2210
+ dispatch,
2211
+ props.composerDisabled,
2212
+ props.composerSubmissionDisabled,
2213
+ props.tabId,
2214
+ providerSubmissionPending,
2215
+ submit,
2216
+ t,
2217
+ threadId,
2218
+ ],
2219
+ );
2220
+
2221
+ useEffect(() => {
2222
+ if (
2223
+ !canChat ||
2224
+ isRestoring ||
2225
+ setupMissing ||
2226
+ deferredSubmissionsLoadedThread !== threadId ||
2227
+ drainingProviderSubmissionsRef.current
2228
+ ) {
2229
+ return;
2230
+ }
2231
+ const submission = pendingProviderSubmissionsRef.current.find(
2232
+ (candidate) => candidate.threadId === threadId,
2233
+ );
2234
+ if (!submission) return;
2235
+ if (submission.failed) {
2236
+ setDeferredProviderSubmissionFailureId(submission.id);
2237
+ return;
2238
+ }
2239
+
2240
+ let active = true;
2241
+ drainingProviderSubmissionsRef.current = true;
2242
+ void (async () => {
2243
+ let release: (() => void) | null = null;
2244
+ let claimToken: string | undefined;
2245
+ let claimRenewalTimer: number | undefined;
2246
+ try {
2247
+ release = await acquireSubmission();
2248
+ if (!release) {
2249
+ if (active) scheduleProviderSubmissionRetry();
2250
+ return;
2251
+ }
2252
+ const hasSubmissionMarker = (message: { metadata?: unknown }) => {
2253
+ const custom = asRecord(asRecord(message.metadata)?.custom);
2254
+ return custom?.agentNativeDeferredSubmissionId === submission.id;
2255
+ };
2256
+ const latestThread = await props.getThreadSnapshot(threadId);
2257
+ const alreadySubmitted =
2258
+ (latestThread?.messages ?? thread.messages).some(
2259
+ (message) =>
2260
+ message.role === "user" && hasSubmissionMarker(message),
2261
+ ) ||
2262
+ (latestThread?.queuedMessages ?? thread.queuedMessages).some(
2263
+ (message) => hasSubmissionMarker(message),
2264
+ );
2265
+ if (alreadySubmitted) {
2266
+ const submissions = await updateDeferredProviderSubmissions(
2267
+ threadId,
2268
+ (current) => current.filter(({ id }) => id !== submission.id),
2269
+ );
2270
+ pendingProviderSubmissionsRef.current = submissions;
2271
+ setDeferredProviderSubmissionFailureId(null);
2272
+ setPendingProviderSubmissionVersion((version) => version + 1);
2273
+ return;
2274
+ }
2275
+
2276
+ claimToken = createAgentUploadId();
2277
+ const claimedSubmissions = await updateDeferredProviderSubmissions(
2278
+ threadId,
2279
+ (current) =>
2280
+ current.map((candidate) =>
2281
+ candidate.id !== submission.id ||
2282
+ candidate.failed ||
2283
+ (candidate.claim && candidate.claim.expiresAt > Date.now())
2284
+ ? candidate
2285
+ : {
2286
+ ...candidate,
2287
+ claim: {
2288
+ token: claimToken!,
2289
+ expiresAt:
2290
+ Date.now() + DEFERRED_PROVIDER_SUBMISSION_CLAIM_TTL_MS,
2291
+ },
2292
+ },
2293
+ ),
2294
+ );
2295
+ pendingProviderSubmissionsRef.current = claimedSubmissions;
2296
+ const currentSubmission = claimedSubmissions.find(
2297
+ (candidate) => candidate.id === submission.id,
2298
+ );
2299
+ if (!currentSubmission) {
2300
+ setPendingProviderSubmissionVersion((version) => version + 1);
2301
+ return;
2302
+ }
2303
+ if (currentSubmission.failed) {
2304
+ setDeferredProviderSubmissionFailureId(submission.id);
2305
+ return;
2306
+ }
2307
+ if (currentSubmission.claim?.token !== claimToken) {
2308
+ const waitMs = currentSubmission.claim
2309
+ ? currentSubmission.claim.expiresAt - Date.now()
2310
+ : 1000;
2311
+ scheduleProviderSubmissionRetry(
2312
+ Math.max(1000, Math.min(10_000, waitMs)),
2313
+ );
2314
+ return;
2315
+ }
2316
+
2317
+ claimRenewalTimer = window.setInterval(() => {
2318
+ void updateDeferredProviderSubmissions(threadId, (current) =>
2319
+ current.map((candidate) =>
2320
+ candidate.id === submission.id &&
2321
+ candidate.claim?.token === claimToken
2322
+ ? {
2323
+ ...candidate,
2324
+ claim: {
2325
+ token: claimToken!,
2326
+ expiresAt:
2327
+ Date.now() + DEFERRED_PROVIDER_SUBMISSION_CLAIM_TTL_MS,
2328
+ },
2329
+ }
2330
+ : candidate,
2331
+ ),
2332
+ )
2333
+ .then((submissions) => {
2334
+ pendingProviderSubmissionsRef.current = submissions;
2335
+ })
2336
+ .catch(() => undefined);
2337
+ }, DEFERRED_PROVIDER_SUBMISSION_CLAIM_TTL_MS / 3);
2338
+
2339
+ await dispatch(
2340
+ submission.text,
2341
+ [],
2342
+ submission.references,
2343
+ submission.composerOptions,
2344
+ {
2345
+ ...submission.options,
2346
+ deferredFileParts: submission.fileParts,
2347
+ contextAlreadyIncluded: true,
2348
+ deferredSubmissionId: submission.id,
2349
+ },
2350
+ );
2351
+ const submissions = await updateDeferredProviderSubmissions(
2352
+ threadId,
2353
+ (current) => current.filter(({ id }) => id !== submission.id),
2354
+ );
2355
+ pendingProviderSubmissionsRef.current = submissions;
2356
+ setDeferredProviderSubmissionFailureId(null);
2357
+ setPendingProviderSubmissionVersion((version) => version + 1);
2358
+ } catch (error) {
2359
+ let snapshotReadFailed = false;
2360
+ const latestThread = await props
2361
+ .getThreadSnapshot(threadId)
2362
+ .catch(() => {
2363
+ snapshotReadFailed = true;
2364
+ return null;
2365
+ });
2366
+ const hasSubmissionMarker = (message: { metadata?: unknown }) => {
2367
+ const custom = asRecord(asRecord(message.metadata)?.custom);
2368
+ return custom?.agentNativeDeferredSubmissionId === submission.id;
2369
+ };
2370
+ const alreadySubmitted =
2371
+ (latestThread?.messages ?? thread.messages).some(
2372
+ (message) =>
2373
+ message.role === "user" && hasSubmissionMarker(message),
2374
+ ) ||
2375
+ (latestThread?.queuedMessages ?? thread.queuedMessages).some(
2376
+ (message) => hasSubmissionMarker(message),
2377
+ );
2378
+ if (alreadySubmitted) {
2379
+ const submissions = await updateDeferredProviderSubmissions(
2380
+ threadId,
2381
+ (current) => current.filter(({ id }) => id !== submission.id),
2382
+ );
2383
+ pendingProviderSubmissionsRef.current = submissions;
2384
+ if (active) {
2385
+ setDeferredProviderSubmissionFailureId(null);
2386
+ setPendingProviderSubmissionVersion((version) => version + 1);
2387
+ }
2388
+ return;
2389
+ }
2390
+ const attempts = (submission.attempts ?? 0) + 1;
2391
+ const shouldRetry =
2392
+ !snapshotReadFailed &&
2393
+ isRetryableDeferredProviderSubmissionError(error) &&
2394
+ attempts < DEFERRED_PROVIDER_SUBMISSION_MAX_RETRIES;
2395
+ try {
2396
+ const submissions = await updateDeferredProviderSubmissions(
2397
+ threadId,
2398
+ (current) =>
2399
+ current.map((candidate) => {
2400
+ if (
2401
+ candidate.id !== submission.id ||
2402
+ (candidate.claim && candidate.claim.token !== claimToken)
2403
+ ) {
2404
+ return candidate;
2405
+ }
2406
+ const { claim: _claim, ...withoutClaim } = candidate;
2407
+ return shouldRetry
2408
+ ? { ...withoutClaim, attempts }
2409
+ : { ...withoutClaim, attempts, failed: true };
2410
+ }),
2411
+ );
2412
+ pendingProviderSubmissionsRef.current = submissions;
2413
+ const currentSubmission = submissions.find(
2414
+ (candidate) => candidate.id === submission.id,
2415
+ );
2416
+ if (active && currentSubmission?.failed) {
2417
+ setDeferredProviderSubmissionFailureId(submission.id);
2418
+ } else if (active && shouldRetry) {
2419
+ scheduleProviderSubmissionRetry(500 * 2 ** (attempts - 1));
2420
+ }
2421
+ } catch {
2422
+ if (active) {
2423
+ setDeferredProviderSubmissionFailureId(submission.id);
2424
+ scheduleProviderSubmissionRetry(
2425
+ DEFERRED_PROVIDER_SUBMISSION_CLAIM_TTL_MS,
2426
+ );
2427
+ }
2428
+ }
2429
+ } finally {
2430
+ if (claimRenewalTimer !== undefined) {
2431
+ window.clearInterval(claimRenewalTimer);
2432
+ }
2433
+ release?.();
2434
+ drainingProviderSubmissionsRef.current = false;
2435
+ }
2436
+ })();
2437
+ return () => {
2438
+ active = false;
2439
+ };
2440
+ }, [
2441
+ acquireSubmission,
2442
+ canChat,
2443
+ deferredSubmissionsLoadedThread,
2444
+ dispatch,
2445
+ isRestoring,
2446
+ pendingProviderSubmissionVersion,
2447
+ scheduleProviderSubmissionRetry,
2448
+ setupMissing,
2449
+ props.getThreadSnapshot,
2450
+ thread.messages,
2451
+ thread.queuedMessages,
2452
+ threadId,
2453
+ ]);
2454
+
2455
+ const send = useCallback(
2456
+ async (
2457
+ text: string,
2458
+ images?: string[],
2459
+ options?: AssistantChatSendOptions,
2460
+ ) =>
2461
+ submit(
2462
+ text,
2463
+ [],
2464
+ [],
2465
+ { intent: isThreadRunning() ? "queued" : "immediate" },
2466
+ {
2467
+ ...options,
2468
+ attachments: [
2469
+ ...(options?.attachments ?? []),
2470
+ ...(images ?? []).map((url) => ({
2471
+ type: "image",
2472
+ name: "image",
2473
+ url,
2474
+ })),
2475
+ ],
2476
+ },
2477
+ ),
2478
+ [isThreadRunning, submit],
2479
+ );
2480
+ const sendRecoveryMessage = useCallback(
2481
+ async (
2482
+ text: string,
2483
+ recoveryAction: "continue" | "retry",
2484
+ images?: string[],
2485
+ attachments?: AgentChatAttachment[],
2486
+ references?: Reference[],
2487
+ recoveryOptions?: Pick<
2488
+ AgentKitInternalSendOptions,
2489
+ | "recoveryModel"
2490
+ | "recoveryEngine"
2491
+ | "recoveryEffort"
2492
+ | "recoveryRequestMode"
2493
+ >,
2494
+ ) => {
2495
+ return submit(
2496
+ text,
2497
+ [],
2498
+ [],
2499
+ { intent: isThreadRunning() ? "queued" : "immediate" },
2500
+ {
2501
+ hideUserMessage: true,
2502
+ recoveryAction,
2503
+ recoveryReferences: references,
2504
+ ...recoveryOptions,
2505
+ attachments: [
2506
+ ...(attachments ?? []),
2507
+ ...(images ?? []).map((url) => ({
2508
+ type: "image",
2509
+ name: "image",
2510
+ url,
2511
+ })),
2512
+ ],
2513
+ },
2514
+ );
2515
+ },
2516
+ [isThreadRunning, submit],
2517
+ );
2518
+ const resumeIntegrationPrompt = useCallback(
2519
+ (message: string) => {
2520
+ if (props.isActiveComposer === false) return;
2521
+ void send(message).catch((error) => {
2522
+ dispatchSetupRequiredEvent(error, props.tabId, threadId);
2523
+ });
2524
+ },
2525
+ [props.isActiveComposer, props.tabId, send, threadId],
2526
+ );
2527
+ const submitSuggestion = useCallback(
2528
+ (suggestion: AgentSuggestionInput) => {
2529
+ const handler = suggestionSubmitRef.current;
2530
+ if (!handler || handler.threadId !== threadId) return;
2531
+ void handler.submit(suggestion).catch((error) => {
2532
+ dispatchSetupRequiredEvent(error, props.tabId, threadId);
2533
+ });
2534
+ },
2535
+ [props.tabId, threadId],
2536
+ );
2537
+ const retryDeferredSubmission = useCallback(async () => {
2538
+ if (!deferredProviderSubmissionFailureId) return;
2539
+ const submissions = await updateDeferredProviderSubmissions(
2540
+ threadId,
2541
+ (current) =>
2542
+ current.map((candidate) => {
2543
+ if (candidate.id !== deferredProviderSubmissionFailureId) {
2544
+ return candidate;
2545
+ }
2546
+ if (
2547
+ !candidate.failed ||
2548
+ (candidate.claim && candidate.claim.expiresAt > Date.now())
2549
+ ) {
2550
+ return candidate;
2551
+ }
2552
+ const { claim: _claim, failed: _failed, ...retryable } = candidate;
2553
+ return { ...retryable, attempts: 0 };
2554
+ }),
2555
+ );
2556
+ pendingProviderSubmissionsRef.current = submissions;
2557
+ setDeferredProviderSubmissionFailureId(null);
2558
+ setPendingProviderSubmissionVersion((version) => version + 1);
2559
+ }, [deferredProviderSubmissionFailureId, threadId]);
2560
+ const dismissDeferredSubmission = useCallback(async () => {
2561
+ if (!deferredProviderSubmissionFailureId) return;
2562
+ const submissions = await updateDeferredProviderSubmissions(
2563
+ threadId,
2564
+ (current) =>
2565
+ current.filter(({ id }) => id !== deferredProviderSubmissionFailureId),
2566
+ );
2567
+ pendingProviderSubmissionsRef.current = submissions;
2568
+ setDeferredProviderSubmissionFailureId(null);
2569
+ setPendingProviderSubmissionVersion((version) => version + 1);
2570
+ }, [deferredProviderSubmissionFailureId, threadId]);
2571
+
2572
+ const setContextItem = useCallback(
2573
+ (rawItem: AgentChatContextItem, focus = true) => {
2574
+ const item = normalizeAgentChatContextItem(rawItem);
2575
+ if (!item) return;
2576
+ const current = getAgentChatContextState().items;
2577
+ const next = current
2578
+ .filter((candidate) => candidate.key !== item.key)
2579
+ .concat(item);
2580
+ publishAgentChatContextItems(next);
2581
+ setContextItems(
2582
+ filterAgentChatContextItems(next, props.contextNamespace),
2583
+ );
2584
+ if (focus) requestComposerFocus(threadId);
2585
+ },
2586
+ [props.contextNamespace, requestComposerFocus, threadId],
2587
+ );
2588
+ const removeContextItem = useCallback(
2589
+ (key: string) => {
2590
+ const next = getAgentChatContextState().items.filter(
2591
+ (item) => item.key !== key,
2592
+ );
2593
+ publishAgentChatContextItems(next);
2594
+ setContextItems(
2595
+ filterAgentChatContextItems(next, props.contextNamespace),
2596
+ );
2597
+ },
2598
+ [props.contextNamespace],
2599
+ );
2600
+ const implementPlan = useCallback(() => {
2601
+ const canImplement =
2602
+ props.execMode === "plan" &&
2603
+ getRequestModeMetadata(latestAssistant) === "plan";
2604
+ if (!canImplement) return false;
2605
+ props.onExecModeChange?.("build");
2606
+ void send("Implement the plan.", undefined, { requestMode: "act" });
2607
+ return true;
2608
+ }, [latestAssistant, props.execMode, props.onExecModeChange, send]);
2609
+
2610
+ useImperativeHandle(
2611
+ ref,
2612
+ () => ({
2613
+ sendMessage: (text, images, options) => send(text, images, options),
2614
+ implementPlan,
2615
+ prefillMessage: (text) => {
2616
+ setComposerText(text);
2617
+ writeAssistantChatComposerDraft(props.tabId ?? threadId, text);
2618
+ setPrefillRevision((revision) => revision + 1);
2619
+ },
2620
+ setComposerContextItem: (item, options) =>
2621
+ setContextItem(item, options?.focus !== false),
2622
+ removeComposerContextItem: removeContextItem,
2623
+ clearComposerContextItems: () => {
2624
+ for (const item of contextItems) removeContextItem(item.key);
2625
+ },
2626
+ sendRecoveryMessage: (text, recoveryAction, images) =>
2627
+ sendRecoveryMessage(text, recoveryAction, images),
2628
+ queueMessage: (text, images) =>
2629
+ submit(
2630
+ text,
2631
+ [],
2632
+ [],
2633
+ { intent: "queued" },
2634
+ {
2635
+ attachments: (images ?? []).map((url) => ({
2636
+ type: "image",
2637
+ name: "image",
2638
+ url,
2639
+ })),
2640
+ },
2641
+ ),
2642
+ isRunning: isThreadRunning,
2643
+ hasInFlightWork: () =>
2644
+ Object.values(thread.tools).some((tool) => tool.status === "running") ||
2645
+ Object.values(thread.activities).some(
2646
+ (activity) => activity.status === "running",
2647
+ ),
2648
+ focusComposer: () => requestComposerFocus(threadId),
2649
+ exportThreadSnapshot: () => {
2650
+ if (
2651
+ thread.messages.length === 0 &&
2652
+ voiceTranscriptsRef.current.messages.length === 0
2653
+ ) {
2654
+ return null;
2655
+ }
2656
+ const snapshot = appendVoiceTranscriptsToThreadSnapshot(
2657
+ createAgentKitThreadSnapshot(thread),
2658
+ thread,
2659
+ voiceTranscriptsRef.current.messages,
2660
+ );
2661
+ if (!props.createTransport && !props.runtime) {
2662
+ storeAgentKitThreadHandoffSnapshot(
2663
+ createAgentKitThreadHandoffKey(props, threadId),
2664
+ thread,
2665
+ snapshot,
2666
+ );
2667
+ }
2668
+ return snapshot;
2669
+ },
2670
+ }),
2671
+ [
2672
+ beforeSubmit,
2673
+ contextItems,
2674
+ implementPlan,
2675
+ props.apiUrl,
2676
+ props.browserTabId,
2677
+ props.contextScope,
2678
+ props.createTransport,
2679
+ props.runtime,
2680
+ props.tabId,
2681
+ removeContextItem,
2682
+ requestComposerFocus,
2683
+ send,
2684
+ sendRecoveryMessage,
2685
+ setContextItem,
2686
+ submit,
2687
+ thread,
2688
+ threadId,
2689
+ ],
2690
+ );
2691
+
2692
+ const surfaceContext: AgentKitSurfaceContextValue = {
2693
+ props,
2694
+ handoffSnapshot: props.handoffSnapshot,
2695
+ hasRenderedMessages,
2696
+ canChat,
2697
+ setupMissing,
2698
+ providerStatus,
2699
+ retryProviderStatus,
2700
+ fileStorageConfigured,
2701
+ fileStorageMissing,
2702
+ retryFileStorageStatus,
2703
+ deferredSubmissionFailed: deferredProviderSubmissionFailureId !== null,
2704
+ retryDeferredSubmission,
2705
+ dismissDeferredSubmission,
2706
+ isRunning,
2707
+ isRestoring,
2708
+ threadRestore: props.threadRestore,
2709
+ retryThreadRestore: props.retryThreadRestore,
2710
+ authError,
2711
+ authSessionAvailable,
2712
+ setupBouncePulse,
2713
+ bounceSetupCard,
2714
+ isSubmissionInFlight,
2715
+ contextItems,
2716
+ voiceTranscriptMessages,
2717
+ selectionLength,
2718
+ suggestions: suggestions ?? [],
2719
+ showSuggestions,
2720
+ prefillRevision,
2721
+ text: composerText,
2722
+ onTextChange: onComposerTextChange,
2723
+ onRemoveContextItem: removeContextItem,
2724
+ onClearSelection: requestPendingSelectionClear,
2725
+ onBeforeSubmit: beforeSubmit,
2726
+ onSubmit: submitPrepared,
2727
+ sendMessage: send,
2728
+ sendRecoveryMessage,
2729
+ submitSuggestion,
2730
+ suggestionSubmitRef,
2731
+ onImplementPlan: implementPlan,
2732
+ };
2733
+
2734
+ return (
2735
+ <AgentKitSurfaceContext.Provider value={surfaceContext}>
2736
+ {props.isActiveComposer === false ? null : (
2737
+ <McpAgentKitConnectionResume
2738
+ onResume={(
2739
+ { threadId: targetThreadId, runId, requestId },
2740
+ request,
2741
+ ) => {
2742
+ if (targetThreadId !== threadId) return;
2743
+ return control.resolveConnectionRequest(runId, requestId, {
2744
+ status: "connected",
2745
+ message: request.message,
2746
+ });
2747
+ }}
2748
+ onMessageResume={(request) => {
2749
+ resumeIntegrationPrompt(request.message);
2750
+ }}
2751
+ />
2752
+ )}
2753
+ <RunStuckBanner
2754
+ threadId={threadId}
2755
+ enabled={props.isActiveComposer !== false}
2756
+ apiUrl={props.apiUrl ?? agentNativePath("/_agent-native/agent-chat")}
2757
+ autoRetry
2758
+ autoRetryOwnerId={props.browserTabId}
2759
+ hasInFlightWork={() =>
2760
+ Object.values(thread.tools).some(
2761
+ (tool) => tool.status === "running",
2762
+ ) ||
2763
+ Object.values(thread.activities).some(
2764
+ (activity) => activity.status === "running",
2765
+ )
2766
+ }
2767
+ isAwaitingResponse={() => isRunning}
2768
+ onRetry={() =>
2769
+ void sendRecoveryMessage(RECOVERY_CONTINUE_PROMPT, "continue")
2770
+ }
2771
+ />
2772
+ <AgentKitChat
2773
+ className={props.className}
2774
+ composerProps={{ attachmentsEnabled: fileStorageConfigured }}
2775
+ hasRenderedMessages={hasRenderedMessages}
2776
+ emptyComposerPlacement={
2777
+ props.centerComposerWhenEmpty ? "center" : "bottom"
2778
+ }
2779
+ title={props.showHeader === false ? undefined : props.emptyStateText}
2780
+ autoScroll
2781
+ />
2782
+ </AgentKitSurfaceContext.Provider>
2783
+ );
2784
+ });
2785
+
2786
+ function AgentKitComposerSlot({ threadId }: { threadId: string }) {
2787
+ const surface = useAgentKitSurface();
2788
+ if (surface.props.composerContextProvider) {
2789
+ return (
2790
+ <AgentKitScopedComposerContext threadId={threadId} surface={surface} />
2791
+ );
2792
+ }
2793
+ return <AgentKitComposerSurface threadId={threadId} {...surface} />;
2794
+ }
2795
+
2796
+ function AgentKitScopedComposerContext({
2797
+ threadId,
2798
+ surface,
2799
+ }: {
2800
+ threadId: string;
2801
+ surface: AgentKitSurfaceContextValue;
2802
+ }) {
2803
+ const { session } = useSession();
2804
+ const Provider = surface.props.composerContextProvider!;
2805
+ return (
2806
+ <Provider
2807
+ key={JSON.stringify([
2808
+ threadId,
2809
+ surface.props.tabId,
2810
+ session?.authUserId,
2811
+ session?.email,
2812
+ session?.orgId,
2813
+ ])}
2814
+ threadId={threadId}
2815
+ tabId={surface.props.tabId}
2816
+ isActive={surface.props.isActiveComposer !== false}
2817
+ >
2818
+ {(composerContext) => (
2819
+ <AgentKitComposerSurface
2820
+ threadId={threadId}
2821
+ {...surface}
2822
+ composerContext={composerContext}
2823
+ />
2824
+ )}
2825
+ </Provider>
2826
+ );
2827
+ }
2828
+
2829
+ function AgentKitEmptyState({ threadId }: { threadId: string }) {
2830
+ const surface = useAgentKitSurface();
2831
+ const t = useT();
2832
+ const thread = useAgentThread(threadId);
2833
+ if (
2834
+ surface.threadRestore.status !== "error" &&
2835
+ getAgentKitThreadHandoffMessages(thread, surface.handoffSnapshot).length > 0
2836
+ ) {
2837
+ return null;
2838
+ }
2839
+ const showDefault = surface.props.emptyStateDisplay !== "hidden";
2840
+ if (
2841
+ !showDefault &&
2842
+ !surface.props.emptyStateAddon &&
2843
+ !surface.props.emptyStateFooter
2844
+ ) {
2845
+ return null;
2846
+ }
2847
+ const promptSuggestions =
2848
+ surface.props.suggestionPlacement !== "context-chips" &&
2849
+ surface.props.suggestionPlacement !== "after-composer" &&
2850
+ surface.props.suggestionPlacement !== "hidden" &&
2851
+ surface.showSuggestions
2852
+ ? surface.suggestions
2853
+ : [];
2854
+ return (
2855
+ <div className="flex h-full flex-col items-center justify-center gap-3 px-4 py-16">
2856
+ {showDefault ? (
2857
+ <>
2858
+ <IconMessage className="h-5 w-5 text-muted-foreground/60" />
2859
+ <p className="sr-only">
2860
+ {surface.props.emptyStateText ?? t("agentChat.empty.prompt")}
2861
+ </p>
2862
+ {promptSuggestions.length ? (
2863
+ <div className="flex w-full max-w-[320px] flex-col gap-1.5">
2864
+ {promptSuggestions.map((suggestion, index) => {
2865
+ const prompt = agentSuggestionPrompt(suggestion);
2866
+ return (
2867
+ <button
2868
+ key={
2869
+ typeof suggestion === "string"
2870
+ ? suggestion
2871
+ : suggestion.id
2872
+ }
2873
+ type="button"
2874
+ disabled={
2875
+ !surface.canChat ||
2876
+ surface.props.composerDisabled ||
2877
+ surface.props.composerSubmissionDisabled
2878
+ }
2879
+ onClick={() => surface.submitSuggestion(suggestion)}
2880
+ className="w-full rounded-xl border border-border/70 bg-card/60 px-3 py-2.5 text-left text-[13px] text-muted-foreground shadow-sm transition-colors hover:border-border hover:bg-card hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
2881
+ >
2882
+ {typeof suggestion === "string"
2883
+ ? suggestion
2884
+ : suggestion.label || prompt || String(index)}
2885
+ </button>
2886
+ );
2887
+ })}
2888
+ </div>
2889
+ ) : null}
2890
+ </>
2891
+ ) : null}
2892
+ {surface.props.emptyStateAddon}
2893
+ {surface.props.emptyStateFooter}
2894
+ </div>
2895
+ );
2896
+ }
2897
+
2898
+ function AgentKitSelectionPill({
2899
+ length,
2900
+ onClear,
2901
+ }: {
2902
+ length: number;
2903
+ onClear: () => void;
2904
+ }) {
2905
+ const t = useT();
2906
+ const { formatNumber } = useFormatters();
2907
+ return (
2908
+ <div className="agent-selection-attached-pill shrink-0 px-3 pt-1.5 -mb-1">
2909
+ <div className="inline-flex items-center gap-1.5 rounded-full border border-border bg-muted/50 px-2 py-0.5 text-[11px] text-muted-foreground">
2910
+ <IconQuote size={11} aria-hidden="true" />
2911
+ <span>
2912
+ {t("agentChat.selection.attached", {
2913
+ count: length,
2914
+ formattedCount: formatNumber(length),
2915
+ })}
2916
+ </span>
2917
+ <button
2918
+ type="button"
2919
+ aria-label={t("agentChat.selection.clear")}
2920
+ onClick={onClear}
2921
+ className="flex h-4 w-4 items-center justify-center rounded text-muted-foreground hover:bg-accent/60 hover:text-foreground"
2922
+ >
2923
+ <IconX size={11} aria-hidden="true" />
2924
+ </button>
2925
+ </div>
2926
+ </div>
2927
+ );
2928
+ }
2929
+
2930
+ function AgentKitTranscript({ children, threadId }: AgentKitRegionRenderProps) {
2931
+ const { controller } = useAgentKit();
2932
+ const surface = useAgentKitSurface();
2933
+ const t = useT();
2934
+ const thread = useAgentThread(threadId);
2935
+ const handoffMessages =
2936
+ surface.threadRestore.status === "error"
2937
+ ? []
2938
+ : getAgentKitThreadHandoffMessages(thread, surface.handoffSnapshot);
2939
+ const guided = useGuidedQuestionFlow({
2940
+ enabled: surface.props.isActiveComposer !== false,
2941
+ stateKey: "guided-questions",
2942
+ queryKey: ["guided-questions", "agentkit"],
2943
+ browserTabId: surface.props.browserTabId,
2944
+ threadId,
2945
+ onSubmitMessage: async ({ message, context }) => {
2946
+ await surface.onSubmit(
2947
+ appendAgentChatContextToMessage(message, context),
2948
+ [],
2949
+ [],
2950
+ {
2951
+ intent: hasActiveAgentRuns(controller.getThread(threadId))
2952
+ ? "queued"
2953
+ : "immediate",
2954
+ },
2955
+ );
2956
+ return { delivered: true };
2957
+ },
2958
+ onSkipMessage: async ({ message, context }) => {
2959
+ await surface.onSubmit(
2960
+ appendAgentChatContextToMessage(message, context),
2961
+ [],
2962
+ [],
2963
+ {
2964
+ intent: hasActiveAgentRuns(controller.getThread(threadId))
2965
+ ? "queued"
2966
+ : "immediate",
2967
+ },
2968
+ );
2969
+ return { delivered: true };
2970
+ },
2971
+ });
2972
+ const threadMessageIds = new Set(
2973
+ thread.messages.map((message) => message.id),
2974
+ );
2975
+ const lastMessage = thread.messages.at(-1);
2976
+ const showThinking =
2977
+ (surface.isRunning || surface.isSubmissionInFlight) &&
2978
+ lastMessage?.role === "user" &&
2979
+ lastMessage.metadata?.hideUserMessage !== true;
2980
+ const pendingVoiceMessages = surface.voiceTranscriptMessages.filter(
2981
+ (message) => !threadMessageIds.has(message.id),
2982
+ );
2983
+ const showHomeSuggestions =
2984
+ surface.props.centerComposerWhenEmpty &&
2985
+ !surface.hasRenderedMessages &&
2986
+ surface.threadRestore.status === "ready";
2987
+ const suggestionBar =
2988
+ surface.props.suggestionPlacement !== "hidden" &&
2989
+ (surface.hasRenderedMessages ||
2990
+ surface.props.suggestionPlacement === "context-chips") &&
2991
+ !showHomeSuggestions &&
2992
+ surface.showSuggestions &&
2993
+ surface.suggestions.length > 0 ? (
2994
+ <AgentKitSuggestedPrompts
2995
+ suggestions={surface.suggestions}
2996
+ disabled={
2997
+ !surface.canChat ||
2998
+ surface.props.composerDisabled ||
2999
+ surface.props.composerSubmissionDisabled ||
3000
+ surface.isSubmissionInFlight
3001
+ }
3002
+ onSelect={surface.submitSuggestion}
3003
+ className="agentkit-host-suggestions"
3004
+ />
3005
+ ) : null;
3006
+ if (surface.authError) {
3007
+ const authTitle = surface.authSessionAvailable
3008
+ ? t("agentChat.auth.refreshTitle")
3009
+ : surface.authError.sessionExpired
3010
+ ? t("agentChat.auth.expiredTitle")
3011
+ : t("agentChat.auth.requiredTitle");
3012
+ const authDescription = surface.authSessionAvailable
3013
+ ? t("agentChat.auth.refreshDescription")
3014
+ : surface.authError.sessionExpired
3015
+ ? t("agentChat.auth.expiredDescription")
3016
+ : t("agentChat.auth.requiredDescription");
3017
+ return (
3018
+ <div className="flex h-full flex-col items-center justify-center gap-3 px-4 py-16">
3019
+ <div className="flex h-10 w-10 items-center justify-center rounded-full bg-muted">
3020
+ {surface.authSessionAvailable ? (
3021
+ <IconRefresh className="h-5 w-5 text-muted-foreground" />
3022
+ ) : (
3023
+ <IconMessage className="h-5 w-5 text-muted-foreground" />
3024
+ )}
3025
+ </div>
3026
+ <div className="max-w-[280px] text-center">
3027
+ <p className="mb-1 text-sm font-medium text-foreground">
3028
+ {authTitle}
3029
+ </p>
3030
+ <p className="text-xs leading-relaxed text-muted-foreground">
3031
+ {authDescription}
3032
+ </p>
3033
+ </div>
3034
+ <div className="flex gap-2">
3035
+ {!surface.authError.sessionExpired &&
3036
+ !surface.authSessionAvailable ? (
3037
+ <button
3038
+ type="button"
3039
+ onClick={() => {
3040
+ window.location.href = buildSignInReturnHref();
3041
+ }}
3042
+ className="rounded-md bg-foreground px-3 py-1.5 text-xs text-background hover:opacity-90"
3043
+ >
3044
+ {t("agentChat.auth.logIn")}
3045
+ </button>
3046
+ ) : null}
3047
+ {surface.authError.sessionExpired && !surface.authSessionAvailable ? (
3048
+ <button
3049
+ type="button"
3050
+ onClick={() => void signOut()}
3051
+ className="rounded-md border border-destructive/30 px-3 py-1.5 text-xs text-destructive hover:bg-destructive/10"
3052
+ >
3053
+ {t("agentChat.auth.logOut")}
3054
+ </button>
3055
+ ) : null}
3056
+ <button
3057
+ type="button"
3058
+ onClick={() => window.location.reload()}
3059
+ className="rounded-md border border-border px-3 py-1.5 text-xs text-muted-foreground hover:bg-accent hover:text-foreground"
3060
+ >
3061
+ {t("agentChat.auth.refreshChat")}
3062
+ </button>
3063
+ </div>
3064
+ </div>
3065
+ );
3066
+ }
3067
+ if (
3068
+ surface.threadRestore.status === "loading" &&
3069
+ thread.messages.length === 0 &&
3070
+ handoffMessages.length === 0
3071
+ ) {
3072
+ return (
3073
+ <div
3074
+ className="flex h-full flex-col gap-3 p-4"
3075
+ aria-busy="true"
3076
+ role="status"
3077
+ >
3078
+ <span className="sr-only">{t("agentChat.empty.loadingChat")}</span>
3079
+ <div className="flex justify-end">
3080
+ <div className="h-8 w-32 animate-pulse rounded-lg bg-muted" />
3081
+ </div>
3082
+ <div className="flex flex-col gap-1.5">
3083
+ <div className="h-4 w-48 animate-pulse rounded bg-muted" />
3084
+ <div className="h-4 w-64 animate-pulse rounded bg-muted" />
3085
+ <div className="h-4 w-40 animate-pulse rounded bg-muted" />
3086
+ </div>
3087
+ </div>
3088
+ );
3089
+ }
3090
+ if (
3091
+ surface.threadRestore.status === "error" &&
3092
+ thread.messages.length === 0 &&
3093
+ handoffMessages.length === 0
3094
+ ) {
3095
+ return (
3096
+ <div className="flex h-full flex-col items-center justify-center gap-3 px-4 py-16">
3097
+ <p className="max-w-[420px] text-center text-sm text-muted-foreground">
3098
+ {surface.threadRestore.notFound
3099
+ ? t("agentChat.message.threadNotFound")
3100
+ : t("agentChat.message.restoreRequestFailed")}
3101
+ </p>
3102
+ <button
3103
+ type="button"
3104
+ onClick={surface.retryThreadRestore}
3105
+ className="rounded-md border border-border px-3 py-1.5 text-xs text-muted-foreground hover:bg-accent hover:text-foreground"
3106
+ >
3107
+ {t("agentChat.common.retry")}
3108
+ </button>
3109
+ </div>
3110
+ );
3111
+ }
3112
+ return (
3113
+ <>
3114
+ {thread.messages.length > 0 || surface.hasRenderedMessages ? (
3115
+ <AgentKitHistoryBeginningRevert />
3116
+ ) : null}
3117
+ {surface.threadRestore.status === "error" ? (
3118
+ <div
3119
+ className="mx-4 mt-3 flex items-center justify-between gap-3 rounded-md border border-border px-3 py-2 text-xs text-muted-foreground"
3120
+ role="alert"
3121
+ >
3122
+ <span>
3123
+ {surface.threadRestore.notFound
3124
+ ? t("agentChat.message.threadNotFound")
3125
+ : t("agentChat.message.restoreRequestFailed")}
3126
+ </span>
3127
+ <button
3128
+ type="button"
3129
+ onClick={surface.retryThreadRestore}
3130
+ className="shrink-0 rounded px-2 py-1 hover:bg-accent hover:text-foreground"
3131
+ >
3132
+ {t("agentChat.common.retry")}
3133
+ </button>
3134
+ </div>
3135
+ ) : null}
3136
+ {renderThreadSlot(
3137
+ surface.props.threadContentSlot,
3138
+ threadId,
3139
+ surface.props.tabId,
3140
+ )}
3141
+ {children}
3142
+ {handoffMessages.map((message) => (
3143
+ <AgentMessageView
3144
+ key={message.id}
3145
+ value={message}
3146
+ threadId={threadId}
3147
+ />
3148
+ ))}
3149
+ {pendingVoiceMessages.map((message) => (
3150
+ <AgentMessageView
3151
+ key={message.id}
3152
+ value={message}
3153
+ threadId={threadId}
3154
+ />
3155
+ ))}
3156
+ {showThinking ? (
3157
+ <div
3158
+ role="status"
3159
+ aria-live="polite"
3160
+ className="px-3 py-2 text-sm text-muted-foreground"
3161
+ >
3162
+ {t("agentChat.status.thinking")}
3163
+ </div>
3164
+ ) : null}
3165
+ {guided.questions?.length ? (
3166
+ <div className="px-3 pb-3">
3167
+ <GuidedQuestionFlow
3168
+ questions={guided.questions}
3169
+ onSubmit={guided.handleSubmit}
3170
+ onSkip={guided.handleSkip}
3171
+ isSubmitting={guided.isSubmitting}
3172
+ isSubmissionBlocked={!surface.canChat}
3173
+ providerStatus={surface.providerStatus}
3174
+ onRetryProviderStatus={surface.retryProviderStatus}
3175
+ {...(guided.title ? { title: guided.title } : {})}
3176
+ {...(guided.description ? { description: guided.description } : {})}
3177
+ {...(guided.skipLabel ? { skipLabel: guided.skipLabel } : {})}
3178
+ {...(guided.submitLabel ? { submitLabel: guided.submitLabel } : {})}
3179
+ className="h-auto items-stretch justify-stretch bg-transparent"
3180
+ />
3181
+ </div>
3182
+ ) : null}
3183
+ {suggestionBar}
3184
+ {renderThreadSlot(
3185
+ surface.props.threadFooterSlot,
3186
+ threadId,
3187
+ surface.props.tabId,
3188
+ )}
3189
+ </>
3190
+ );
3191
+ }
3192
+
3193
+ function renderThreadSlot(
3194
+ slot: AssistantChatProps["threadContentSlot"],
3195
+ threadId: string,
3196
+ tabId?: string,
3197
+ ) {
3198
+ return typeof slot === "function"
3199
+ ? slot({ threadId, tabId: tabId ?? null })
3200
+ : slot;
3201
+ }
3202
+
3203
+ function composerPlaceholder({
3204
+ props,
3205
+ canChat,
3206
+ providerStatus,
3207
+ setupMissing,
3208
+ isRunning,
3209
+ thread,
3210
+ t,
3211
+ }: {
3212
+ props: AgentKitAssistantChatProps;
3213
+ canChat: boolean;
3214
+ providerStatus: AgentEngineConfiguredState;
3215
+ setupMissing: boolean;
3216
+ isRunning: boolean;
3217
+ thread: ReturnType<typeof useAgentThread>;
3218
+ t: ReturnType<typeof useT>;
3219
+ }) {
3220
+ if (setupMissing) return t("agentChat.setup.connectPlaceholder");
3221
+ if (props.composerDisabled) {
3222
+ return (
3223
+ props.composerDisabledPlaceholder ?? t("agentChat.composer.openDesktop")
3224
+ );
3225
+ }
3226
+ if (isRunning) {
3227
+ return thread.queuedMessages.length
3228
+ ? t("agentChat.queue.followUpWithCount", {
3229
+ count: thread.queuedMessages.length,
3230
+ })
3231
+ : t("agentChat.queue.followUp");
3232
+ }
3233
+ return (
3234
+ props.composerPlaceholder ??
3235
+ (canChat || providerStatus === "unknown" || providerStatus === "unavailable"
3236
+ ? "Ask the agent to explore, build, or explain…"
3237
+ : "")
3238
+ );
3239
+ }
3240
+
3241
+ function resolveAgentKitSuggestionInputs(
3242
+ prompts: readonly string[] | undefined,
3243
+ provided: readonly AgentSuggestionInput[] | undefined,
3244
+ ): AgentSuggestionInput[] | undefined {
3245
+ if (!prompts?.length) return undefined;
3246
+ const byPrompt = new Map(
3247
+ (provided ?? []).map((suggestion) => [
3248
+ agentSuggestionPrompt(suggestion),
3249
+ suggestion,
3250
+ ]),
3251
+ );
3252
+ return prompts.map((prompt) => byPrompt.get(prompt) ?? prompt);
3253
+ }
3254
+
3255
+ function pendingSelectionPromptContext(
3256
+ selection: PendingSelectionContext | null,
3257
+ ): string {
3258
+ if (
3259
+ !selection?.text ||
3260
+ Date.now() - selection.capturedAt > PENDING_SELECTION_TTL_MS
3261
+ ) {
3262
+ return "";
3263
+ }
3264
+ const selectedText = selection.text.slice(0, MAX_SELECTION_CONTEXT_CHARS);
3265
+ const truncationNotice =
3266
+ selection.text.length > MAX_SELECTION_CONTEXT_CHARS
3267
+ ? "\n\n…[selection truncated after 8,000 characters. Use an app data action if the omitted text is required.]"
3268
+ : "";
3269
+ // i18n-ignore: This instruction is internal prompt context, never rendered as product copy.
3270
+ return (
3271
+ "The user selected this text and pressed Cmd+I to focus the agent. " +
3272
+ "Treat it as the immediate context to act on:\n<selection>\n" /* i18n-ignore: Internal prompt instruction and selection delimiters, never product copy. */ +
3273
+ selectedText +
3274
+ truncationNotice +
3275
+ "\n</selection>" /* i18n-ignore: Internal prompt envelope delimiter, never shown as product copy. */
3276
+ );
3277
+ }
3278
+
3279
+ class AgentKitComposerContextError extends Error {
3280
+ readonly code = "composer_context_mismatch";
3281
+
3282
+ constructor(message: string) {
3283
+ super(message);
3284
+ this.name = "AgentKitComposerContextError";
3285
+ }
3286
+ }
3287
+
3288
+ function AgentKitComposerSurface({
3289
+ threadId,
3290
+ props,
3291
+ composerContext,
3292
+ canChat,
3293
+ setupMissing,
3294
+ providerStatus,
3295
+ retryProviderStatus,
3296
+ fileStorageConfigured,
3297
+ fileStorageMissing,
3298
+ retryFileStorageStatus,
3299
+ deferredSubmissionFailed,
3300
+ retryDeferredSubmission,
3301
+ dismissDeferredSubmission,
3302
+ isRunning,
3303
+ isRestoring,
3304
+ isSubmissionInFlight,
3305
+ hasRenderedMessages,
3306
+ threadRestore,
3307
+ suggestions,
3308
+ showSuggestions,
3309
+ setupBouncePulse,
3310
+ bounceSetupCard,
3311
+ contextItems,
3312
+ selectionLength,
3313
+ prefillRevision,
3314
+ text,
3315
+ onTextChange,
3316
+ onRemoveContextItem,
3317
+ onClearSelection,
3318
+ onBeforeSubmit,
3319
+ onSubmit,
3320
+ submitSuggestion,
3321
+ suggestionSubmitRef,
3322
+ onImplementPlan,
3323
+ }: {
3324
+ threadId: string;
3325
+ props: AgentKitAssistantChatProps;
3326
+ composerContext?: AssistantChatComposerContext;
3327
+ canChat: boolean;
3328
+ setupMissing: boolean;
3329
+ providerStatus: AgentEngineConfiguredState;
3330
+ retryProviderStatus: () => void;
3331
+ fileStorageConfigured: boolean;
3332
+ fileStorageMissing: boolean;
3333
+ retryFileStorageStatus: () => void;
3334
+ deferredSubmissionFailed: boolean;
3335
+ retryDeferredSubmission: () => Promise<void>;
3336
+ dismissDeferredSubmission: () => Promise<void>;
3337
+ isRunning: boolean;
3338
+ isRestoring: boolean;
3339
+ isSubmissionInFlight: boolean;
3340
+ hasRenderedMessages: boolean;
3341
+ setupBouncePulse: number;
3342
+ bounceSetupCard: () => void;
3343
+ contextItems: AgentChatContextItem[];
3344
+ selectionLength: number | null;
3345
+ prefillRevision: number;
3346
+ text: string;
3347
+ onTextChange: (text: string) => void;
3348
+ onRemoveContextItem: (key: string) => void;
3349
+ onClearSelection: () => void;
3350
+ onBeforeSubmit: () => Promise<boolean>;
3351
+ onSubmit: AgentKitComposerSubmit;
3352
+ threadRestore:
3353
+ | { status: "ready" | "loading" }
3354
+ | { status: "error"; notFound: boolean };
3355
+ suggestions: AgentSuggestionInput[];
3356
+ showSuggestions: boolean;
3357
+ submitSuggestion: (suggestion: AgentSuggestionInput) => void;
3358
+ suggestionSubmitRef: AgentKitSuggestionSubmitRef;
3359
+ onImplementPlan: () => boolean;
3360
+ }) {
3361
+ const t = useT();
3362
+ const [composerError, setComposerError] = useState<string | null>(null);
3363
+ const mounted = useRef(true);
3364
+ const submissionAllowed = useRef(false);
3365
+ submissionAllowed.current =
3366
+ !props.composerDisabled &&
3367
+ !props.composerSubmissionDisabled &&
3368
+ !isRestoring &&
3369
+ props.isActiveComposer !== false;
3370
+ useEffect(() => {
3371
+ mounted.current = true;
3372
+ return () => {
3373
+ mounted.current = false;
3374
+ };
3375
+ }, []);
3376
+ const providerContextKeys = new Set(
3377
+ composerContext?.contextItems.map((item) => item.key),
3378
+ );
3379
+ const visibleContextItems = composerContext
3380
+ ? [...contextItems, ...composerContext.contextItems]
3381
+ : contextItems;
3382
+ const submissionScope = JSON.stringify([
3383
+ threadId,
3384
+ props.tabId,
3385
+ props.contextScope,
3386
+ ]);
3387
+ const currentSubmissionScope = useRef(submissionScope);
3388
+ currentSubmissionScope.current = submissionScope;
3389
+ const currentProviderStatus = useRef(providerStatus);
3390
+ currentProviderStatus.current = providerStatus;
3391
+ const { controller } = useAgentKit();
3392
+ const composerRef = useRef<TiptapComposerHandle>(null);
3393
+ const selectedSuggestionRef = useRef<
3394
+ Exclude<AgentSuggestionInput, string> | undefined
3395
+ >(undefined);
3396
+ const submitComposer = async (
3397
+ message: string,
3398
+ files: PromptComposerFile[],
3399
+ references: Reference[],
3400
+ options: AgentKitSuggestionSubmitOptions,
3401
+ ) => {
3402
+ const submissionProviderStatus = currentProviderStatus.current;
3403
+ options = {
3404
+ ...options,
3405
+ ...(selectedSuggestionRef.current
3406
+ ? { suggestion: selectedSuggestionRef.current }
3407
+ : {}),
3408
+ };
3409
+ setComposerError(null);
3410
+ const assertCurrentSubmission = () => {
3411
+ if (
3412
+ !submissionAllowed.current ||
3413
+ !mounted.current ||
3414
+ currentSubmissionScope.current !== submissionScope ||
3415
+ currentProviderStatus.current !== submissionProviderStatus
3416
+ ) {
3417
+ throw new Error(t("agentChat.error.failed"));
3418
+ }
3419
+ const latest = controller.getThread(threadId);
3420
+ if (
3421
+ options.suggestion &&
3422
+ (latest.messages.length || Object.keys(latest.runs).length) &&
3423
+ !isCurrentAgentSuggestion(latest, options.suggestion)
3424
+ )
3425
+ throw new Error(t("agentChat.error.failed"));
3426
+ };
3427
+ assertCurrentSubmission();
3428
+ options = { ...options, validateSubmission: assertCurrentSubmission };
3429
+ const captured = snapshotComposerContextItems(
3430
+ options.contextItems ?? visibleContextItems,
3431
+ );
3432
+ let prepared: AssistantChatComposerContext["contextItems"] | undefined;
3433
+ await onSubmit(message, files, references, options, async () => {
3434
+ assertCurrentSubmission();
3435
+ if (!composerContext) return { ...options, contextItems: captured };
3436
+ const capturedProvider = snapshotComposerContextItems(
3437
+ captured.filter((item) => providerContextKeys.has(item.key)),
3438
+ );
3439
+ prepared = await composerContext.prepareSubmission(capturedProvider);
3440
+ const preparedSnapshot = snapshotComposerContextItems(prepared);
3441
+ const capturedKeys = new Set(capturedProvider.map((item) => item.key));
3442
+ const preparedByKey = new Map(
3443
+ preparedSnapshot.map((item) => [item.key, item]),
3444
+ );
3445
+ if (
3446
+ preparedByKey.size !== preparedSnapshot.length ||
3447
+ preparedByKey.size !== capturedKeys.size ||
3448
+ preparedSnapshot.some((item) => !capturedKeys.has(item.key))
3449
+ ) {
3450
+ throw new AgentKitComposerContextError(t("agentChat.error.failed"));
3451
+ }
3452
+ assertCurrentSubmission();
3453
+ return {
3454
+ ...options,
3455
+ contextItems: captured.map((item) =>
3456
+ capturedKeys.has(item.key) ? preparedByKey.get(item.key)! : item,
3457
+ ),
3458
+ };
3459
+ });
3460
+ if (prepared) composerContext?.submissionAccepted(prepared);
3461
+ };
3462
+ React.useLayoutEffect(() => {
3463
+ const registration = {
3464
+ threadId,
3465
+ submit: async (suggestion: AgentSuggestionInput) => {
3466
+ const latest = controller.getThread(threadId);
3467
+ if (hasActiveAgentRuns(latest)) return;
3468
+ if (
3469
+ (latest.messages.length || Object.keys(latest.runs).length) &&
3470
+ (typeof suggestion === "string" ||
3471
+ !isCurrentAgentSuggestion(latest, suggestion))
3472
+ )
3473
+ return;
3474
+ const composer = composerRef.current;
3475
+ if (!composer || selectedSuggestionRef.current) return;
3476
+ const selected =
3477
+ typeof suggestion === "string" ? undefined : suggestion;
3478
+ selectedSuggestionRef.current = selected;
3479
+ try {
3480
+ await composer.submitWithText(agentSuggestionPrompt(suggestion));
3481
+ } catch (error) {
3482
+ if (mounted.current)
3483
+ setComposerError(
3484
+ error instanceof Error
3485
+ ? error.message
3486
+ : t("agentChat.error.failed"),
3487
+ );
3488
+ throw error;
3489
+ } finally {
3490
+ if (selectedSuggestionRef.current === selected)
3491
+ selectedSuggestionRef.current = undefined;
3492
+ }
3493
+ },
3494
+ };
3495
+ suggestionSubmitRef.current = registration;
3496
+ return () => {
3497
+ if (suggestionSubmitRef.current === registration)
3498
+ suggestionSubmitRef.current = null;
3499
+ };
3500
+ });
3501
+ const [fileStoragePromptOpen, setFileStoragePromptOpen] = useState(false);
3502
+ const fileStorageAnchorRef = useRef<HTMLDivElement>(null);
3503
+ useEffect(() => {
3504
+ if (fileStorageConfigured) setFileStoragePromptOpen(false);
3505
+ }, [fileStorageConfigured]);
3506
+ const requestFileStorage = useCallback(() => {
3507
+ if (document.activeElement instanceof HTMLElement) {
3508
+ document.activeElement.blur();
3509
+ }
3510
+ setFileStoragePromptOpen(true);
3511
+ }, []);
3512
+ const thread = useAgentThread(threadId);
3513
+ const providerSubmissionPending =
3514
+ !canChat &&
3515
+ !setupMissing &&
3516
+ (providerStatus === "unknown" || providerStatus === "unavailable");
3517
+ const latestAssistant = [...thread.messages]
3518
+ .reverse()
3519
+ .find((message) => message.role === "assistant");
3520
+ const latestAssistantWasPlan =
3521
+ getRequestModeMetadata(latestAssistant) === "plan";
3522
+ const showPlanCallout =
3523
+ props.execMode === "plan" &&
3524
+ !props.planModeDisabled &&
3525
+ !props.composerDisabled;
3526
+ const control = useAgentKitControl(threadId);
3527
+ const integration = findMcpConnectionSuggestionIntegration({
3528
+ text,
3529
+ variant: "composer",
3530
+ requestedByUser: true,
3531
+ });
3532
+ const showHomeIntro =
3533
+ props.homeIntroSlot &&
3534
+ !hasRenderedMessages &&
3535
+ threadRestore.status === "ready";
3536
+ const showHomeSuggestions =
3537
+ props.centerComposerWhenEmpty &&
3538
+ !hasRenderedMessages &&
3539
+ threadRestore.status === "ready" &&
3540
+ props.suggestionPlacement === "context-chips" &&
3541
+ showSuggestions &&
3542
+ suggestions.length > 0;
3543
+ const showAfterComposerSuggestions =
3544
+ props.suggestionPlacement === "after-composer" &&
3545
+ !hasRenderedMessages &&
3546
+ threadRestore.status === "ready" &&
3547
+ showSuggestions &&
3548
+ suggestions.length > 0;
3549
+ const showAfterComposerSlot =
3550
+ props.afterComposerSlot &&
3551
+ !hasRenderedMessages &&
3552
+ threadRestore.status === "ready";
3553
+ return (
3554
+ <div
3555
+ ref={fileStorageAnchorRef}
3556
+ className={cn(
3557
+ "agentkit-host-composer",
3558
+ setupMissing && "agent-composer-area--attached-above",
3559
+ props.composerAreaClassName,
3560
+ )}
3561
+ >
3562
+ <FileStorageSetupPopover
3563
+ open={fileStoragePromptOpen && !fileStorageConfigured}
3564
+ onOpenChange={setFileStoragePromptOpen}
3565
+ onConnected={retryFileStorageStatus}
3566
+ anchorRef={fileStorageAnchorRef}
3567
+ {...(fileStorageMissing
3568
+ ? { status: "missing" as const }
3569
+ : {
3570
+ status: "unavailable" as const,
3571
+ onRetry: retryFileStorageStatus,
3572
+ })}
3573
+ />
3574
+ {props.composerSlot}
3575
+ {showHomeIntro ? (
3576
+ <div className="agentkit-home-intro">{props.homeIntroSlot}</div>
3577
+ ) : null}
3578
+ {showHomeSuggestions ? (
3579
+ <AgentKitSuggestedPrompts
3580
+ suggestions={suggestions}
3581
+ disabled={
3582
+ !canChat ||
3583
+ props.composerDisabled ||
3584
+ props.composerSubmissionDisabled ||
3585
+ isSubmissionInFlight
3586
+ }
3587
+ onSelect={submitSuggestion}
3588
+ className="agentkit-home-suggestions"
3589
+ />
3590
+ ) : null}
3591
+ {showPlanCallout ? (
3592
+ <PlanModeCallout
3593
+ canImplementPlan={latestAssistantWasPlan}
3594
+ onImplementPlan={onImplementPlan}
3595
+ onSwitchToAct={() => props.onExecModeChange?.("build")}
3596
+ />
3597
+ ) : null}
3598
+ {setupMissing && props.showMissingApiKeySetup !== false ? (
3599
+ <BuilderSetupCard
3600
+ fullWidth
3601
+ attached
3602
+ bouncePulse={setupBouncePulse}
3603
+ layout={props.missingApiKeySetupLayout ?? "default"}
3604
+ onConnected={() =>
3605
+ window.dispatchEvent(new Event("agent-engine:configured-changed"))
3606
+ }
3607
+ />
3608
+ ) : null}
3609
+ {!canChat && !setupMissing && providerStatus !== "configured" ? (
3610
+ <GuidedQuestionProviderGate
3611
+ providerStatus={providerStatus}
3612
+ onRetry={retryProviderStatus}
3613
+ />
3614
+ ) : null}
3615
+ {integration ? (
3616
+ <McpConnectionSuggestion
3617
+ text={text}
3618
+ variant="composer"
3619
+ requestedByUser
3620
+ integrationId={integration.id}
3621
+ />
3622
+ ) : null}
3623
+ {selectionLength !== null && selectionLength > 0 ? (
3624
+ <AgentKitSelectionPill
3625
+ length={selectionLength}
3626
+ onClear={onClearSelection}
3627
+ />
3628
+ ) : null}
3629
+ <div className="relative">
3630
+ <AgentKitComposer
3631
+ threadId={threadId}
3632
+ disabled={
3633
+ (!canChat && !providerSubmissionPending) ||
3634
+ props.composerDisabled ||
3635
+ isRestoring ||
3636
+ isSubmissionInFlight
3637
+ }
3638
+ submissionDisabled={
3639
+ (!canChat && !providerSubmissionPending) ||
3640
+ props.composerSubmissionDisabled === true
3641
+ }
3642
+ onDisabledClick={
3643
+ props.composerDisabled || !setupMissing
3644
+ ? undefined
3645
+ : () => {
3646
+ bounceSetupCard();
3647
+ window.dispatchEvent(
3648
+ new CustomEvent("agent-chat:missing-api-key", {
3649
+ detail: { tabId: props.tabId, threadId },
3650
+ }),
3651
+ );
3652
+ }
3653
+ }
3654
+ initialText={text}
3655
+ initialTextKey={`${props.tabId ?? threadId}:${prefillRevision}`}
3656
+ requireAgentEngine={false}
3657
+ onTextChange={onTextChange}
3658
+ onBeforeSubmit={onBeforeSubmit}
3659
+ contextItems={visibleContextItems}
3660
+ contextMenuItems={composerContext?.menuItems}
3661
+ onRemoveContextItem={(key) => {
3662
+ if (providerContextKeys.has(key))
3663
+ composerContext?.onRemoveContextItem(key);
3664
+ else onRemoveContextItem(key);
3665
+ }}
3666
+ onRetryContextItem={composerContext?.onRetryContextItem}
3667
+ onInspectContextItem={composerContext?.onInspectContextItem}
3668
+ interceptBuildRequestsForBuilder={isInBuilderFrame()}
3669
+ selectedModel={props.selectedModel ?? props.defaultModel}
3670
+ selectedEngine={props.selectedEngine}
3671
+ selectedEffort={props.selectedEffort}
3672
+ availableModels={props.availableModels}
3673
+ modelListLoading={props.modelListLoading}
3674
+ onModelChange={props.onModelChange}
3675
+ onEffortChange={props.onEffortChange}
3676
+ availableAgents={props.availableAgents}
3677
+ selectedAgent={props.selectedAgent}
3678
+ agentOnly={props.hostedHarness}
3679
+ onAgentChange={props.onAgentChange}
3680
+ showModelSelector={props.showModelSelector}
3681
+ mode={props.execMode === "plan" ? "plan" : "act"}
3682
+ planModeDisabled={props.planModeDisabled}
3683
+ planModeDisabledReason={props.planModeDisabledReason}
3684
+ onModeChange={(mode) =>
3685
+ props.onExecModeChange?.(mode === "plan" ? "plan" : "build")
3686
+ }
3687
+ layoutVariant={props.composerLayoutVariant}
3688
+ plusMenuMode={props.plusMenuMode}
3689
+ placeholder={composerPlaceholder({
3690
+ props,
3691
+ canChat,
3692
+ providerStatus,
3693
+ setupMissing,
3694
+ isRunning,
3695
+ thread,
3696
+ t,
3697
+ })}
3698
+ onConnectProvider={props.onConnectProvider}
3699
+ onConnectLocalRuntime={props.onConnectLocalRuntime}
3700
+ imageModelMenu={props.imageModelMenu}
3701
+ voiceEnabled
3702
+ toolbarSlot={props.composerToolbarSlot}
3703
+ extraActionButton={props.composerExtraActionButton}
3704
+ includeDefaultSlashCommands
3705
+ includeDefaultSlashSkills
3706
+ onSlashCommand={props.onSlashCommand}
3707
+ modelStatusChecksEnabled={
3708
+ props.showModelSelector !== false &&
3709
+ props.availableModels === undefined
3710
+ }
3711
+ attachmentsEnabled={fileStorageConfigured}
3712
+ onAttachmentRequest={requestFileStorage}
3713
+ contextButtonTooltipDisabled={fileStoragePromptOpen}
3714
+ onAttachmentError={setComposerError}
3715
+ onSubmit={submitComposer}
3716
+ composerRef={composerRef}
3717
+ stopButton={
3718
+ isRunning ? (
3719
+ <button
3720
+ type="button"
3721
+ onClick={() => {
3722
+ setComposerError(null);
3723
+ void (async () => {
3724
+ if (props.onStop && (await props.onStop()) === false)
3725
+ return;
3726
+ await Promise.all(
3727
+ thread.activeRunIds.map((runId) => control.cancel(runId)),
3728
+ );
3729
+ })().catch((error: unknown) => {
3730
+ setComposerError(
3731
+ error instanceof Error ? error.message : String(error),
3732
+ );
3733
+ });
3734
+ }}
3735
+ aria-label={t("agentChat.composer.stopResponse")}
3736
+ title={t("agentChat.composer.stopResponse")}
3737
+ data-agent-composer-slot="stop-button"
3738
+ className="flex h-7 w-7 items-center justify-center rounded-full bg-primary text-primary-foreground"
3739
+ >
3740
+ <IconPlayerStopFilled className="h-3 w-3" />
3741
+ </button>
3742
+ ) : undefined
3743
+ }
3744
+ />
3745
+ {deferredSubmissionFailed ? (
3746
+ <div
3747
+ role="alert"
3748
+ className="mx-3 mb-1.5 flex shrink-0 items-center gap-2 rounded-md border border-border bg-muted/70 px-3 py-2 text-xs text-foreground shadow-sm"
3749
+ >
3750
+ <IconAlertTriangle className="size-3.5 shrink-0 text-muted-foreground" />
3751
+ <span className="flex-1 leading-snug">
3752
+ {t("agentChat.recovery.deferredSubmissionFailed")}
3753
+ </span>
3754
+ <button
3755
+ type="button"
3756
+ disabled={!canChat || isSubmissionInFlight}
3757
+ onClick={() =>
3758
+ void retryDeferredSubmission().catch(() => undefined)
3759
+ }
3760
+ className="shrink-0 rounded px-2 py-1 font-medium hover:bg-accent disabled:opacity-60"
3761
+ >
3762
+ {t("agentChat.common.retry")}
3763
+ </button>
3764
+ <button
3765
+ type="button"
3766
+ aria-label={t("agentChat.common.dismissError")}
3767
+ onClick={() =>
3768
+ void dismissDeferredSubmission().catch(() => undefined)
3769
+ }
3770
+ className="-mr-1 flex size-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
3771
+ >
3772
+ <IconX className="size-3.5" />
3773
+ </button>
3774
+ </div>
3775
+ ) : null}
3776
+ {composerError ? (
3777
+ <div
3778
+ role="alert"
3779
+ className="mx-3 mb-1.5 flex shrink-0 items-start gap-2 rounded-md border border-border bg-muted/70 px-3 py-2 text-xs text-foreground shadow-sm"
3780
+ >
3781
+ <IconAlertTriangle className="mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground" />
3782
+ <span className="flex-1 leading-snug">{composerError}</span>
3783
+ <button
3784
+ type="button"
3785
+ aria-label={t("agentChat.common.dismissError")}
3786
+ onClick={() => setComposerError(null)}
3787
+ className="-mr-1 -mt-1 flex h-6 w-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
3788
+ >
3789
+ <IconX className="h-3.5 w-3.5" />
3790
+ </button>
3791
+ </div>
3792
+ ) : null}
3793
+ <ExternalAgentNudge variant="prompt" />
3794
+ </div>
3795
+ {showAfterComposerSuggestions ? (
3796
+ <AgentKitSuggestedPrompts
3797
+ suggestions={suggestions}
3798
+ disabled={
3799
+ !canChat ||
3800
+ props.composerDisabled ||
3801
+ props.composerSubmissionDisabled ||
3802
+ isSubmissionInFlight
3803
+ }
3804
+ onSelect={submitSuggestion}
3805
+ className="agentkit-home-suggestions"
3806
+ />
3807
+ ) : null}
3808
+ {showAfterComposerSlot ? (
3809
+ <div className="agentkit-after-composer-slot">
3810
+ {props.afterComposerSlot}
3811
+ </div>
3812
+ ) : null}
3813
+ {composerContext?.dialogs}
3814
+ </div>
3815
+ );
3816
+ }
3817
+
3818
+ function AgentKitSuggestedPrompts({
3819
+ suggestions,
3820
+ disabled,
3821
+ onSelect,
3822
+ className,
3823
+ }: {
3824
+ suggestions: AgentSuggestionInput[];
3825
+ disabled: boolean;
3826
+ onSelect: (suggestion: AgentSuggestionInput) => void;
3827
+ className: string;
3828
+ }) {
3829
+ const t = useT();
3830
+ return (
3831
+ <AgentSuggestionBar
3832
+ ariaLabel={t("agentChat.composer.suggestedPrompts")}
3833
+ suggestions={suggestions.map((suggestion, index) => ({
3834
+ ...(typeof suggestion === "string"
3835
+ ? {
3836
+ id: `host-suggestion-${index}-${suggestion}`,
3837
+ label: suggestion,
3838
+ prompt: suggestion,
3839
+ }
3840
+ : suggestion),
3841
+ disabled: Boolean(
3842
+ disabled || (typeof suggestion !== "string" && suggestion.disabled),
3843
+ ),
3844
+ }))}
3845
+ onSelect={onSelect}
3846
+ className={className}
3847
+ />
3848
+ );
3849
+ }
3850
+
3851
+ function AgentKitUserMessage(props: AgentKitRenderProps<AgentMessage>) {
3852
+ const message = props.value;
3853
+ if (message.role !== "user") return <AgentMessageView {...props} />;
3854
+ if (message.metadata?.hideUserMessage === true) return null;
3855
+ const visible: AgentMessage = {
3856
+ ...message,
3857
+ parts: message.parts.map((part) =>
3858
+ part.type === "text"
3859
+ ? { ...part, text: splitAgentChatContextFromMessage(part.text).message }
3860
+ : part,
3861
+ ),
3862
+ };
3863
+ return <AgentMessageView {...props} value={visible} />;
3864
+ }
3865
+
3866
+ function AgentKitMessageSupplement(props: AgentKitRenderProps<AgentMessage>) {
3867
+ const value = props.value;
3868
+ const t = useT();
3869
+ const thread = useAgentThread(props.threadId);
3870
+ const assistantIndex = thread.messages.findIndex(
3871
+ (message) => message.id === value.id,
3872
+ );
3873
+ const latestUser =
3874
+ assistantIndex < 0
3875
+ ? undefined
3876
+ : thread.messages
3877
+ .slice(0, assistantIndex)
3878
+ .reverse()
3879
+ .find((message) => message.role === "user");
3880
+ const contextText =
3881
+ latestUser?.parts
3882
+ .filter((part) => part.type === "text")
3883
+ .map((part) =>
3884
+ part.type === "text"
3885
+ ? splitAgentChatContextFromMessage(part.text).message
3886
+ : "",
3887
+ )
3888
+ .join("\n") ?? "";
3889
+ const text = value.parts
3890
+ .filter((part) => part.type === "text")
3891
+ .map((part) => (part.type === "text" ? part.text : ""))
3892
+ .join("\n");
3893
+ const integration =
3894
+ value.role === "assistant" &&
3895
+ value.status === "complete" &&
3896
+ !hasActiveAgentRuns(thread)
3897
+ ? findMcpConnectionSuggestionIntegration({
3898
+ text,
3899
+ contextText,
3900
+ variant: "response",
3901
+ requestedByAgent: true,
3902
+ })
3903
+ : null;
3904
+ const runWarning = asRecord(asRecord(value.metadata?.custom)?.runWarning);
3905
+ const missingFinalResponse =
3906
+ runWarning?.errorCode === "final_response_missing_after_tool";
3907
+ const loopBreakerStopped = runWarning?.errorCode === "tool_loop_stopped";
3908
+ return (
3909
+ <>
3910
+ {missingFinalResponse ? (
3911
+ <div
3912
+ className="rounded-md border border-amber-500/25 bg-amber-500/[0.06] px-3 py-2 text-xs text-muted-foreground"
3913
+ role="status"
3914
+ >
3915
+ {t("agentChat.message.missingFinal")}
3916
+ </div>
3917
+ ) : null}
3918
+ {loopBreakerStopped ? (
3919
+ <div
3920
+ className="rounded-md border border-amber-500/25 bg-amber-500/[0.06] px-3 py-2 text-xs text-muted-foreground"
3921
+ role="status"
3922
+ >
3923
+ <span>{t("agentChat.error.stopped")}</span>
3924
+ </div>
3925
+ ) : null}
3926
+ {value.role === "assistant" && value.status === "complete" ? (
3927
+ <>
3928
+ <AgentKitFilesChangedSummary {...props} />
3929
+ <AgentKitDevCheckpointRestore message={value} />
3930
+ </>
3931
+ ) : null}
3932
+ {integration ? (
3933
+ <McpConnectionSuggestion
3934
+ text={text}
3935
+ contextText={contextText}
3936
+ variant="response"
3937
+ requestedByAgent
3938
+ integrationId={integration.id}
3939
+ />
3940
+ ) : null}
3941
+ </>
3942
+ );
3943
+ }
3944
+
3945
+ function AgentKitTool({ value, active }: AgentKitRenderProps<AgentToolCall>) {
3946
+ const surface = useAgentKitSurface();
3947
+ const metadata = value.metadata ?? {};
3948
+ const input = asRecord(value.input) ?? {};
3949
+ const output =
3950
+ typeof value.output === "string"
3951
+ ? value.output
3952
+ : value.output === undefined
3953
+ ? undefined
3954
+ : JSON.stringify(value.output);
3955
+ return (
3956
+ <ChatRunningContext.Provider
3957
+ value={active === true || value.status === "running"}
3958
+ >
3959
+ <SuppressInlineOpenAppContext.Provider
3960
+ value={surface.props.suppressInlineOpenApp === true}
3961
+ >
3962
+ <ToolCallDisplay
3963
+ toolName={value.name}
3964
+ toolCallId={value.id}
3965
+ args={input}
3966
+ argsText={JSON.stringify(input)}
3967
+ result={output}
3968
+ isRunning={value.status === "running"}
3969
+ outcome={value.status === "failed" ? "unknown" : undefined}
3970
+ structuredMeta={metadata}
3971
+ mcpApp={asRecord(metadata.mcpApp) as never}
3972
+ chatUI={asRecord(metadata.chatUI) as never}
3973
+ activity={metadata.activity === true}
3974
+ isActiveTail={active === true}
3975
+ />
3976
+ </SuppressInlineOpenAppContext.Provider>
3977
+ </ChatRunningContext.Provider>
3978
+ );
3979
+ }
3980
+
3981
+ function AgentKitApproval({
3982
+ value,
3983
+ runId,
3984
+ }: AgentKitRenderProps<AgentApprovalRequest> & { runId: string }) {
3985
+ const surface = useAgentKitSurface();
3986
+ const control = useAgentKitControl();
3987
+ const actions = surface.props.approvalActions;
3988
+ const t = useT();
3989
+ const [pending, setPending] = useState(false);
3990
+ const [saveFailed, setSaveFailed] = useState(false);
3991
+ const metadata = asRecord(value.metadata);
3992
+ const toolName =
3993
+ typeof metadata?.toolName === "string"
3994
+ ? metadata.toolName
3995
+ : (value.description ?? "");
3996
+ const exactCommandScope = actions?.alwaysAllowScope === "exact-command";
3997
+ if (value.options?.length || value.input) {
3998
+ return <AgentApprovalPrompt request={value} runId={runId} />;
3999
+ }
4000
+ const resolve = async (decision: "approve" | "deny") => {
4001
+ setPending(true);
4002
+ setSaveFailed(false);
4003
+ try {
4004
+ await control.resolveApproval(runId, value.id, {
4005
+ decision,
4006
+ optionIds: [decision],
4007
+ });
4008
+ if (decision === "deny") actions?.onDeny?.(value.id);
4009
+ } catch {
4010
+ setSaveFailed(true);
4011
+ } finally {
4012
+ setPending(false);
4013
+ }
4014
+ };
4015
+ const alwaysAllow = async () => {
4016
+ setPending(true);
4017
+ setSaveFailed(false);
4018
+ try {
4019
+ if (actions?.onAlwaysAllow) {
4020
+ await actions.onAlwaysAllow(value.id, toolName);
4021
+ } else {
4022
+ await callAction("set-tool-approval-policy", {
4023
+ toolName,
4024
+ enabled: true,
4025
+ });
4026
+ }
4027
+ await control.resolveApproval(runId, value.id, {
4028
+ decision: "approve",
4029
+ optionIds: ["approve"],
4030
+ });
4031
+ } catch {
4032
+ setSaveFailed(true);
4033
+ } finally {
4034
+ setPending(false);
4035
+ }
4036
+ };
4037
+ return (
4038
+ <AgentApprovalCard
4039
+ toolName={toolName}
4040
+ question={value.title}
4041
+ approveLabel={t("agentChat.approval.approve")}
4042
+ denyLabel={t("agentChat.approval.deny")}
4043
+ moreOptionsLabel={t("agentChat.approval.moreOptions")}
4044
+ alwaysAllowLabel={t(
4045
+ exactCommandScope
4046
+ ? "agentChat.approval.alwaysAllow"
4047
+ : "agentChat.approval.alwaysAllowAction",
4048
+ )}
4049
+ alwaysAllowHint={t(
4050
+ exactCommandScope
4051
+ ? "agentChat.approval.alwaysAllowHint"
4052
+ : "agentChat.approval.alwaysAllowActionHint",
4053
+ )}
4054
+ saveFailedLabel={
4055
+ saveFailed ? t("agentChat.common.saveFailed") : undefined
4056
+ }
4057
+ isAlwaysAllowing={pending}
4058
+ onApprove={() => void resolve("approve")}
4059
+ onDeny={() => void resolve("deny")}
4060
+ onAlwaysAllow={
4061
+ actions?.onAlwaysAllow || !exactCommandScope ? alwaysAllow : undefined
4062
+ }
4063
+ />
4064
+ );
4065
+ }
4066
+
4067
+ function AgentKitReasoning({
4068
+ value,
4069
+ active,
4070
+ resetKey,
4071
+ }: AgentKitRenderProps<
4072
+ Extract<AgentMessage["parts"][number], { type: "reasoning" }>
4073
+ >) {
4074
+ if (value.visibility === "hidden") return null;
4075
+ return (
4076
+ <ReasoningCell
4077
+ text={value.text}
4078
+ isStreaming={active}
4079
+ defaultOpen={active}
4080
+ resetKey={resetKey}
4081
+ />
4082
+ );
4083
+ }
4084
+
4085
+ function AgentKitConnectionRequest({
4086
+ value,
4087
+ runId,
4088
+ threadId,
4089
+ }: AgentKitRenderProps<AgentConnectionRequest> & { runId: string }) {
4090
+ const control = useAgentKitControl();
4091
+ return (
4092
+ <McpAgentKitConnectionRequestCard
4093
+ provider={value.provider}
4094
+ detail={value.detail}
4095
+ target={{ threadId, runId, requestId: value.id }}
4096
+ onConnected={() =>
4097
+ control.resolveConnectionRequest(runId, value.id, {
4098
+ status: "connected",
4099
+ })
4100
+ }
4101
+ onDeclined={() =>
4102
+ control.resolveConnectionRequest(runId, value.id, {
4103
+ status: "declined",
4104
+ })
4105
+ }
4106
+ />
4107
+ );
4108
+ }
4109
+
4110
+ function AgentKitRunFailure({
4111
+ error,
4112
+ runId,
4113
+ threadId,
4114
+ }: {
4115
+ error: {
4116
+ code: string;
4117
+ message: string;
4118
+ details?: unknown;
4119
+ retryable?: boolean;
4120
+ };
4121
+ runId: string;
4122
+ threadId: string;
4123
+ }) {
4124
+ const control = useAgentKitControl(threadId);
4125
+ const thread = useAgentThread(threadId);
4126
+ const surface = useAgentKitSurface();
4127
+ const t = useT();
4128
+ const [dismissed, setDismissed] = useState<string | null>(null);
4129
+ const authErrorReason =
4130
+ error.code === "unauthorized" || error.code === "http_401"
4131
+ ? "session-expired"
4132
+ : error.code === "forbidden" || error.code === "http_403"
4133
+ ? "auth-required"
4134
+ : undefined;
4135
+ useEffect(() => {
4136
+ if (!authErrorReason) return;
4137
+ window.dispatchEvent(
4138
+ new CustomEvent("agent-chat:auth-error", {
4139
+ detail: {
4140
+ reason: authErrorReason,
4141
+ tabId: surface.props.tabId,
4142
+ threadId,
4143
+ },
4144
+ }),
4145
+ );
4146
+ }, [authErrorReason, surface.props.tabId, threadId]);
4147
+ if (dismissed === runId) return null;
4148
+ if (
4149
+ error.code === "AGENT_CHAT_AI_SETUP_REQUIRED" ||
4150
+ error.code === "missing_api_key"
4151
+ ) {
4152
+ if (surface.setupMissing) return null;
4153
+ return (
4154
+ <BuilderSetupCard
4155
+ fullWidth
4156
+ attached
4157
+ layout={surface.props.missingApiKeySetupLayout ?? "default"}
4158
+ onConnected={() =>
4159
+ window.dispatchEvent(new Event("agent-engine:configured-changed"))
4160
+ }
4161
+ onRetry={() =>
4162
+ window.dispatchEvent(new Event("agent-engine:configured-changed"))
4163
+ }
4164
+ />
4165
+ );
4166
+ }
4167
+ if (error.code === "loop_limit") {
4168
+ const details = asRecord(error.details);
4169
+ return (
4170
+ <LoopLimitContinueCard
4171
+ info={{
4172
+ ...(typeof details?.maxIterations === "number"
4173
+ ? { maxIterations: details.maxIterations }
4174
+ : {}),
4175
+ }}
4176
+ onContinue={() =>
4177
+ void surface.sendRecoveryMessage(RECOVERY_CONTINUE_PROMPT, "continue")
4178
+ }
4179
+ />
4180
+ );
4181
+ }
4182
+ const info: RunErrorInfo = {
4183
+ message: formatAgentKitErrorText(error, t),
4184
+ errorCode: error.code,
4185
+ details: formatErrorDetails(error.details),
4186
+ runId,
4187
+ recoverable: error.retryable,
4188
+ };
4189
+ const lastUserMessage = [...thread.messages]
4190
+ .reverse()
4191
+ .find((message) => message.role === "user");
4192
+ const retryText = lastUserMessage ? agentMessageText(lastUserMessage) : "";
4193
+ const retryMetadata = asRecord(lastUserMessage?.metadata);
4194
+ const retryCustomMetadata = asRecord(retryMetadata?.custom);
4195
+ const metadataString = (key: string) => {
4196
+ const value = retryMetadata?.[key] ?? retryCustomMetadata?.[key];
4197
+ return typeof value === "string" && value.trim() ? value : undefined;
4198
+ };
4199
+ const retryAttachments =
4200
+ lastUserMessage?.parts.flatMap((part) =>
4201
+ part.type === "file"
4202
+ ? [
4203
+ {
4204
+ type: "file",
4205
+ name: part.name,
4206
+ ...(part.mediaType ? { contentType: part.mediaType } : {}),
4207
+ ...(part.url ? { url: part.url } : {}),
4208
+ },
4209
+ ]
4210
+ : [],
4211
+ ) ?? [];
4212
+ const retryReferences = Array.isArray(retryMetadata?.references)
4213
+ ? (retryMetadata.references as Reference[])
4214
+ : [];
4215
+ const retryRequestMode = metadataString("requestMode");
4216
+ return (
4217
+ <RunErrorRecoveryCard
4218
+ info={info}
4219
+ onContinue={() =>
4220
+ void surface.sendRecoveryMessage(RECOVERY_CONTINUE_PROMPT, "continue")
4221
+ }
4222
+ onRetry={() =>
4223
+ void surface.sendRecoveryMessage(
4224
+ retryText || "Please retry the last request.",
4225
+ "retry",
4226
+ undefined,
4227
+ retryAttachments,
4228
+ retryReferences,
4229
+ {
4230
+ recoveryModel: metadataString("model"),
4231
+ recoveryEngine: metadataString("engine"),
4232
+ recoveryEffort: metadataString("effort"),
4233
+ ...(retryRequestMode === "plan" || retryRequestMode === "act"
4234
+ ? { recoveryRequestMode: retryRequestMode }
4235
+ : {}),
4236
+ },
4237
+ )
4238
+ }
4239
+ onFork={async () => {
4240
+ if (!lastUserMessage) return surface.props.onForkChat?.();
4241
+ const fork = await control.fork(lastUserMessage.id);
4242
+ surface.props.onForkedThread?.(fork.id);
4243
+ return true;
4244
+ }}
4245
+ onDismiss={() => setDismissed(runId)}
4246
+ />
4247
+ );
4248
+ }
4249
+
4250
+ function AgentKitConnectionError({
4251
+ error,
4252
+ threadId,
4253
+ recover,
4254
+ recovering,
4255
+ recoveryError,
4256
+ }: AgentConnectionErrorRenderProps) {
4257
+ const t = useT();
4258
+ return (
4259
+ <div
4260
+ className="rounded-md border border-border px-3 py-2 text-xs text-muted-foreground"
4261
+ data-error-code={error.code}
4262
+ data-thread-id={threadId}
4263
+ role="alert"
4264
+ >
4265
+ <strong className="mr-2 font-medium text-foreground">
4266
+ {t("agentChat.error.failed")}
4267
+ </strong>
4268
+ <span>{formatAgentKitErrorText(error, t)}</span>
4269
+ {error.retryable ? (
4270
+ <button
4271
+ type="button"
4272
+ disabled={recovering}
4273
+ onClick={() => void recover().catch(() => undefined)}
4274
+ className="ml-3 rounded px-2 py-1 hover:bg-accent hover:text-foreground disabled:opacity-60"
4275
+ >
4276
+ {recovering
4277
+ ? t("agentChat.common.loading")
4278
+ : t("agentChat.agentPanel.chatgptSubscriptionReconnect")}
4279
+ </button>
4280
+ ) : null}
4281
+ {recoveryError ? (
4282
+ <span className="mt-2 block" role="alert">
4283
+ {formatAgentKitErrorText(
4284
+ { code: "runtime_error", message: recoveryError.message },
4285
+ t,
4286
+ )}
4287
+ </span>
4288
+ ) : null}
4289
+ </div>
4290
+ );
4291
+ }
4292
+
4293
+ function formatAgentKitErrorText(
4294
+ error: { code: string; message: string; details?: unknown },
4295
+ t: ReturnType<typeof useT>,
4296
+ ): string {
4297
+ const upgradeUrl = asRecord(error.details)?.upgradeUrl;
4298
+ const formatted = formatChatErrorText(
4299
+ error.message,
4300
+ typeof upgradeUrl === "string" ? upgradeUrl : undefined,
4301
+ error.code,
4302
+ );
4303
+ return localizeKnownChatErrorText(formatted, t);
4304
+ }
4305
+
4306
+ function dispatchAgentKitCompatibilityEvent(
4307
+ event: AgentEvent,
4308
+ tabId: string,
4309
+ thread: ReturnType<typeof useAgentThread>,
4310
+ toolInputArgs: Map<string, string>,
4311
+ ) {
4312
+ if (typeof window === "undefined") return;
4313
+ if (event.type === "activity.started" || event.type === "activity.updated") {
4314
+ const tool =
4315
+ typeof event.activity.metadata?.tool === "string"
4316
+ ? event.activity.metadata.tool
4317
+ : undefined;
4318
+ window.dispatchEvent(
4319
+ new CustomEvent("agent-chat:activity", {
4320
+ detail: {
4321
+ label: event.activity.label,
4322
+ ...(tool ? { tool } : {}),
4323
+ tabId,
4324
+ },
4325
+ }),
4326
+ );
4327
+ return;
4328
+ }
4329
+ if (event.type === "activity.completed") {
4330
+ window.dispatchEvent(
4331
+ new CustomEvent("agent-chat:activity-clear", { detail: { tabId } }),
4332
+ );
4333
+ return;
4334
+ }
4335
+ if (event.type === "tool.started") {
4336
+ const tool = event.toolCall;
4337
+ const input = asRecord(tool.input) ?? {};
4338
+ const argsText = JSON.stringify(input);
4339
+ toolInputArgs.set(tool.id, argsText);
4340
+ window.dispatchEvent(
4341
+ new CustomEvent("agent-native:tool-start", {
4342
+ detail: { tool: tool.name, input },
4343
+ }),
4344
+ );
4345
+ window.dispatchEvent(
4346
+ new CustomEvent("agent-chat:activity", {
4347
+ detail: { label: tool.name, tool: tool.name, tabId },
4348
+ }),
4349
+ );
4350
+ window.dispatchEvent(
4351
+ new CustomEvent("agent-native:tool-input", {
4352
+ detail: {
4353
+ phase: "start",
4354
+ tool: tool.name,
4355
+ id: tool.id,
4356
+ argsText,
4357
+ tabId,
4358
+ },
4359
+ }),
4360
+ );
4361
+ return;
4362
+ }
4363
+ if (event.type === "tool.delta") {
4364
+ const tool = thread.tools[event.toolCallId];
4365
+ if (!tool || !event.inputTextDelta) return;
4366
+ const argsText = `${toolInputArgs.get(tool.id) ?? ""}${event.inputTextDelta}`;
4367
+ toolInputArgs.set(tool.id, argsText);
4368
+ window.dispatchEvent(
4369
+ new CustomEvent("agent-native:tool-input", {
4370
+ detail: {
4371
+ phase: "delta",
4372
+ tool: tool.name,
4373
+ id: tool.id,
4374
+ argsText,
4375
+ text: event.inputTextDelta,
4376
+ tabId,
4377
+ },
4378
+ }),
4379
+ );
4380
+ return;
4381
+ }
4382
+ if (event.type === "tool.updated") {
4383
+ const tool = event.toolCall;
4384
+ if (
4385
+ tool.status === "completed" ||
4386
+ tool.status === "failed" ||
4387
+ tool.status === "cancelled"
4388
+ ) {
4389
+ window.dispatchEvent(
4390
+ new CustomEvent("agent-native:tool-done", {
4391
+ detail: {
4392
+ tool: tool.name,
4393
+ result: tool.output,
4394
+ isError: tool.status !== "completed",
4395
+ completedSideEffect: tool.metadata?.completedSideEffect === true,
4396
+ tabId,
4397
+ eventId: tool.id,
4398
+ },
4399
+ }),
4400
+ );
4401
+ window.dispatchEvent(
4402
+ new CustomEvent("agent-chat:activity-clear", { detail: { tabId } }),
4403
+ );
4404
+ toolInputArgs.delete(tool.id);
4405
+ }
4406
+ return;
4407
+ }
4408
+ if (
4409
+ (event.type === "message.delta" || event.type === "reasoning.delta") &&
4410
+ event.text
4411
+ ) {
4412
+ window.dispatchEvent(
4413
+ new CustomEvent("agent-chat:stream-progress", { detail: { tabId } }),
4414
+ );
4415
+ return;
4416
+ }
4417
+ if (event.type === "run.failed") {
4418
+ if (
4419
+ event.error.code === "AGENT_CHAT_AI_SETUP_REQUIRED" ||
4420
+ event.error.code === "missing_api_key"
4421
+ ) {
4422
+ window.dispatchEvent(
4423
+ new CustomEvent("agent-chat:missing-api-key", {
4424
+ detail: { tabId, threadId: event.threadId },
4425
+ }),
4426
+ );
4427
+ }
4428
+ window.dispatchEvent(
4429
+ new CustomEvent("agent-chat:run-error", {
4430
+ detail: {
4431
+ message: event.error.message,
4432
+ errorCode: event.error.code,
4433
+ details: event.error.details,
4434
+ tabId,
4435
+ runId: event.runId,
4436
+ },
4437
+ }),
4438
+ );
4439
+ window.dispatchEvent(
4440
+ new CustomEvent("agent-chat:activity-clear", { detail: { tabId } }),
4441
+ );
4442
+ } else if (event.type === "run.completed" || event.type === "run.cancelled") {
4443
+ window.dispatchEvent(
4444
+ new CustomEvent("agent-chat:activity-clear", { detail: { tabId } }),
4445
+ );
4446
+ }
4447
+ }
4448
+
4449
+ function asRecord(value: unknown): Record<string, unknown> | undefined {
4450
+ return value && typeof value === "object" && !Array.isArray(value)
4451
+ ? (value as Record<string, unknown>)
4452
+ : undefined;
4453
+ }
4454
+
4455
+ function formatErrorDetails(details: unknown): string | undefined {
4456
+ if (details == null) return undefined;
4457
+ if (typeof details === "string") return details;
4458
+ try {
4459
+ return JSON.stringify(details, null, 2);
4460
+ } catch {
4461
+ return String(details);
4462
+ }
4463
+ }
4464
+
4465
+ function dispatchSetupRequiredEvent(
4466
+ error: unknown,
4467
+ tabId: string | undefined,
4468
+ threadId: string,
4469
+ ) {
4470
+ const code = asRecord(error)?.code;
4471
+ if (code === "AGENT_CHAT_AI_SETUP_REQUIRED" || code === "missing_api_key") {
4472
+ window.dispatchEvent(
4473
+ new CustomEvent("agent-chat:missing-api-key", {
4474
+ detail: { tabId, threadId },
4475
+ }),
4476
+ );
4477
+ }
4478
+ }
4479
+
4480
+ function createAgentUploadId(): string {
4481
+ return `agent-upload-${
4482
+ typeof crypto !== "undefined" && typeof crypto.randomUUID === "function"
4483
+ ? crypto.randomUUID()
4484
+ : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`
4485
+ }`;
4486
+ }
4487
+
4488
+ async function attachmentToFile(
4489
+ attachment: AgentChatAttachment,
4490
+ ): Promise<File | undefined> {
4491
+ if (attachment.storageRequired || attachment.storageUploadFailed) {
4492
+ throw new Error(
4493
+ `Could not create a durable upload for ${attachment.name}. Try attaching it again.`,
4494
+ );
4495
+ }
4496
+ if (attachment.url || attachment.displayOnly) return undefined;
4497
+ if (attachment.data?.startsWith("data:")) {
4498
+ const response = await fetch(attachment.data);
4499
+ if (!response.ok) throw new Error(`Could not read ${attachment.name}.`);
4500
+ const blob = await response.blob();
4501
+ return new File([blob], attachment.name, {
4502
+ type: attachment.contentType ?? blob.type ?? "application/octet-stream",
4503
+ });
4504
+ }
4505
+ if (attachment.data) {
4506
+ const bytes = Uint8Array.from(atob(attachment.data), (character) =>
4507
+ character.charCodeAt(0),
4508
+ );
4509
+ return new File([bytes], attachment.name, {
4510
+ type: attachment.contentType ?? "application/octet-stream",
4511
+ });
4512
+ }
4513
+ if (attachment.text) {
4514
+ return new File([attachment.text], attachment.name, {
4515
+ type: attachment.contentType ?? "text/plain",
4516
+ });
4517
+ }
4518
+ throw new Error(`Attachment ${attachment.name} has no uploadable content.`);
4519
+ }
4520
+
4521
+ async function uploadAgentChatAttachments(
4522
+ control: ReturnType<typeof useAgentKitControl>,
4523
+ attachments: readonly AgentChatAttachment[],
4524
+ files: readonly PromptComposerFile[],
4525
+ ): Promise<FilePart[]> {
4526
+ const entries: Array<FilePart | File> = [];
4527
+ for (const attachment of attachments) {
4528
+ if (attachment.displayOnly) continue;
4529
+ if (attachment.url) {
4530
+ entries.push({
4531
+ type: "file",
4532
+ name: attachment.name,
4533
+ mediaType: attachment.contentType ?? attachment.type,
4534
+ url: attachment.url,
4535
+ });
4536
+ } else {
4537
+ const file = await attachmentToFile(attachment);
4538
+ if (file) entries.push(file);
4539
+ }
4540
+ }
4541
+ entries.push(...files);
4542
+ const pending = entries.filter(
4543
+ (entry): entry is File => entry instanceof File,
4544
+ );
4545
+ const uploaded = pending.length
4546
+ ? await control.uploadFiles(
4547
+ pending.map((file) => ({
4548
+ name: file.name,
4549
+ mediaType: file.type || "application/octet-stream",
4550
+ size: file.size,
4551
+ body: file,
4552
+ })),
4553
+ )
4554
+ : [];
4555
+ let uploadIndex = 0;
4556
+ return entries.map((entry) =>
4557
+ entry instanceof File ? uploaded[uploadIndex++]! : entry,
4558
+ );
4559
+ }
4560
+
4561
+ function agentMessageText(message: AgentMessage): string {
4562
+ return message.parts
4563
+ .filter((part) => part.type === "text")
4564
+ .map((part) =>
4565
+ part.type === "text"
4566
+ ? splitAgentChatContextFromMessage(part.text).message
4567
+ : "",
4568
+ )
4569
+ .join("\n");
4570
+ }
4571
+
4572
+ function persistedAgentMessage(message: AgentMessage): AgentMessage {
4573
+ return {
4574
+ ...message,
4575
+ parts: message.parts.map((part) => {
4576
+ const record = asRecord(part);
4577
+ if (
4578
+ (record?.type === "file" || record?.type === "image") &&
4579
+ typeof record.data === "string" &&
4580
+ record.data.startsWith("data:")
4581
+ ) {
4582
+ const { data: _data, ...withoutInlineBody } = record;
4583
+ return withoutInlineBody as unknown as AgentMessage["parts"][number];
4584
+ }
4585
+ return part;
4586
+ }),
4587
+ };
4588
+ }
4589
+
4590
+ function createAgentKitThreadSnapshot(thread: AgentThreadState) {
4591
+ const messages = thread.messages.map(persistedAgentMessage);
4592
+ const repositoryMessages = messages.map((message, index) => ({
4593
+ parentId: index > 0 ? (messages[index - 1]?.id ?? null) : null,
4594
+ message: {
4595
+ id: message.id,
4596
+ role: message.role,
4597
+ status: message.status,
4598
+ content: message.parts,
4599
+ metadata: message.metadata,
4600
+ createdAt: message.createdAt,
4601
+ },
4602
+ }));
4603
+ const firstUserText =
4604
+ messages.find((message) => message.role === "user") &&
4605
+ agentMessageText(messages.find((message) => message.role === "user")!);
4606
+ const latestUserText =
4607
+ [...messages].reverse().find((message) => message.role === "user") &&
4608
+ agentMessageText(
4609
+ [...messages].reverse().find((message) => message.role === "user")!,
4610
+ );
4611
+ const title = thread.thread?.title ?? firstUserText?.slice(0, 80) ?? "";
4612
+ const runs = Object.entries(thread.runs).map(([id, run]) => ({
4613
+ ...run,
4614
+ id,
4615
+ threadId: thread.id,
4616
+ }));
4617
+ const agentKit = {
4618
+ messages,
4619
+ events: thread.events,
4620
+ runs,
4621
+ activeRunIds: thread.activeRunIds,
4622
+ toolCalls: Object.values(thread.tools),
4623
+ activities: Object.values(thread.activities),
4624
+ };
4625
+ return {
4626
+ threadData: JSON.stringify({
4627
+ headId: messages.at(-1)?.id ?? null,
4628
+ messages: repositoryMessages,
4629
+ queuedMessages: thread.queuedMessages,
4630
+ agentKit,
4631
+ }),
4632
+ title,
4633
+ preview: (latestUserText ?? "").slice(0, 280),
4634
+ messageCount: messages.length,
4635
+ };
4636
+ }
4637
+
4638
+ function createAgentKitThreadHandoffKey(
4639
+ props: Pick<AssistantChatProps, "apiUrl" | "browserTabId" | "contextScope">,
4640
+ threadId: string,
4641
+ ): string {
4642
+ const scope = props.contextScope;
4643
+ return JSON.stringify([
4644
+ props.apiUrl ?? agentNativePath("/_agent-native/agent-chat"),
4645
+ props.browserTabId ?? null,
4646
+ scope?.type ?? null,
4647
+ scope?.id ?? null,
4648
+ threadId,
4649
+ ]);
4650
+ }
4651
+
4652
+ function readAgentKitThreadHandoffSnapshot(
4653
+ key: string,
4654
+ consume = false,
4655
+ ): AgentThreadSnapshot | null {
4656
+ const entry = threadHandoffSnapshots.get(key);
4657
+ if (!entry) return null;
4658
+ if (entry.expiresAt <= Date.now()) {
4659
+ threadHandoffSnapshots.delete(key);
4660
+ return null;
4661
+ }
4662
+ if (consume) threadHandoffSnapshots.delete(key);
4663
+ return entry.snapshot;
4664
+ }
4665
+
4666
+ function storeAgentKitThreadHandoffSnapshot(
4667
+ key: string,
4668
+ thread: AgentThreadState,
4669
+ snapshot: ReturnType<typeof createAgentKitThreadSnapshot>,
4670
+ ) {
4671
+ const serialized = asRecord(JSON.parse(snapshot.threadData));
4672
+ const agentKit = asRecord(serialized?.agentKit);
4673
+ const messages = Array.isArray(agentKit?.messages)
4674
+ ? (agentKit.messages as AgentMessage[])
4675
+ : [];
4676
+ if (!messages.length) return;
4677
+
4678
+ const now = new Date().toISOString();
4679
+ const handoff: AgentThreadSnapshot = {
4680
+ ...(thread.thread ?? {}),
4681
+ id: thread.id,
4682
+ title: snapshot.title || thread.thread?.title,
4683
+ createdAt: thread.thread?.createdAt ?? messages[0]?.createdAt ?? now,
4684
+ updatedAt: thread.thread?.updatedAt ?? messages.at(-1)?.createdAt ?? now,
4685
+ messages,
4686
+ queuedMessages: thread.queuedMessages,
4687
+ events: thread.events,
4688
+ runs: Object.entries(thread.runs).map(([id, run]) => ({
4689
+ ...run,
4690
+ id,
4691
+ threadId: thread.id,
4692
+ })),
4693
+ activeRunIds: thread.activeRunIds,
4694
+ toolCalls: Object.values(thread.tools),
4695
+ activities: Object.values(thread.activities),
4696
+ tasks: Object.values(thread.tasks),
4697
+ taskGroups: Object.values(thread.taskGroups),
4698
+ approvals: Object.entries(thread.approvals).map(([id, request]) => ({
4699
+ request,
4700
+ status: "pending" as const,
4701
+ ...(thread.approvalRunIds[id]
4702
+ ? { runId: thread.approvalRunIds[id] }
4703
+ : {}),
4704
+ })),
4705
+ connectionRequests: Object.entries(thread.connectionRequests).map(
4706
+ ([id, request]) => ({
4707
+ request,
4708
+ ...(thread.connectionRequestRunIds[id]
4709
+ ? { runId: thread.connectionRequestRunIds[id] }
4710
+ : {}),
4711
+ }),
4712
+ ),
4713
+ widgets: Object.entries(thread.widgets).flatMap(([id, widget]) => {
4714
+ const messageId = thread.widgetMessageIds[id];
4715
+ return messageId ? [{ messageId, widget }] : [];
4716
+ }),
4717
+ annotations: Object.entries(thread.annotations).flatMap(
4718
+ ([id, annotation]) => {
4719
+ const messageId = thread.annotationMessageIds[id];
4720
+ return messageId ? [{ messageId, annotation }] : [];
4721
+ },
4722
+ ),
4723
+ agents: Object.values(thread.agents),
4724
+ interactions: thread.agentInteractions,
4725
+ artifacts: thread.artifacts,
4726
+ suggestions: thread.suggestions,
4727
+ };
4728
+
4729
+ const timestamp = Date.now();
4730
+ for (const [existingKey, entry] of threadHandoffSnapshots) {
4731
+ if (entry.expiresAt <= timestamp)
4732
+ threadHandoffSnapshots.delete(existingKey);
4733
+ }
4734
+ threadHandoffSnapshots.delete(key);
4735
+ threadHandoffSnapshots.set(key, {
4736
+ snapshot: handoff,
4737
+ expiresAt: timestamp + THREAD_HANDOFF_TTL_MS,
4738
+ });
4739
+ while (threadHandoffSnapshots.size > MAX_THREAD_HANDOFF_SNAPSHOTS) {
4740
+ const oldestKey = threadHandoffSnapshots.keys().next().value;
4741
+ if (oldestKey === undefined) break;
4742
+ threadHandoffSnapshots.delete(oldestKey);
4743
+ }
4744
+ }
4745
+
4746
+ function getAgentKitThreadHandoffMessages(
4747
+ thread: AgentThreadState,
4748
+ snapshot: AgentThreadSnapshot | null,
4749
+ ): AgentMessage[] {
4750
+ if (
4751
+ !snapshot ||
4752
+ snapshot.id !== thread.id ||
4753
+ snapshot.messages.length <= thread.messages.length
4754
+ ) {
4755
+ return [];
4756
+ }
4757
+ for (let index = 0; index < thread.messages.length; index += 1) {
4758
+ if (snapshot.messages[index]?.id !== thread.messages[index]?.id) return [];
4759
+ }
4760
+ return snapshot.messages.slice(thread.messages.length);
4761
+ }
4762
+
4763
+ function realtimeVoiceTranscriptAgentMessage(
4764
+ transcript: RealtimeVoiceTranscriptMessage,
4765
+ ): AgentMessage {
4766
+ const repository = appendRealtimeVoiceTranscriptToRepository(
4767
+ { messages: [] },
4768
+ transcript,
4769
+ ).repository;
4770
+ const messages = Array.isArray(repository.messages)
4771
+ ? repository.messages
4772
+ : [];
4773
+ const entry = asRecord(messages[0]);
4774
+ const message = asRecord(entry?.message);
4775
+ const createdAt =
4776
+ message?.createdAt instanceof Date
4777
+ ? message.createdAt.toISOString()
4778
+ : new Date(transcript.createdAt).toISOString();
4779
+ return {
4780
+ id: transcript.id,
4781
+ role: transcript.role,
4782
+ parts: [{ type: "text", text: transcript.text }],
4783
+ createdAt,
4784
+ status: "complete",
4785
+ ...(asRecord(message?.metadata)
4786
+ ? { metadata: asRecord(message?.metadata)! }
4787
+ : {}),
4788
+ };
4789
+ }
4790
+
4791
+ function appendVoiceTranscriptsToThreadSnapshot(
4792
+ snapshot: ReturnType<typeof createAgentKitThreadSnapshot>,
4793
+ thread: AgentThreadState,
4794
+ transcripts: readonly RealtimeVoiceTranscriptMessage[],
4795
+ ): ReturnType<typeof createAgentKitThreadSnapshot> {
4796
+ const messagesById = new Map<string, AgentMessage>();
4797
+ for (const message of thread.messages) {
4798
+ messagesById.set(message.id, persistedAgentMessage(message));
4799
+ }
4800
+ for (const transcript of transcripts) {
4801
+ if (!messagesById.has(transcript.id)) {
4802
+ messagesById.set(
4803
+ transcript.id,
4804
+ realtimeVoiceTranscriptAgentMessage(transcript),
4805
+ );
4806
+ }
4807
+ }
4808
+ const messageOrder = new Map(
4809
+ [...messagesById.values()].map((message, index) => [message.id, index]),
4810
+ );
4811
+ const messages = [...messagesById.values()].sort((left, right) => {
4812
+ const leftTime = Date.parse(left.createdAt ?? "");
4813
+ const rightTime = Date.parse(right.createdAt ?? "");
4814
+ if (Number.isFinite(leftTime) && Number.isFinite(rightTime)) {
4815
+ const difference = leftTime - rightTime;
4816
+ if (difference !== 0) return difference;
4817
+ }
4818
+ return (messageOrder.get(left.id) ?? 0) - (messageOrder.get(right.id) ?? 0);
4819
+ });
4820
+
4821
+ const parsedRepository = asRecord(JSON.parse(snapshot.threadData));
4822
+ if (!parsedRepository) {
4823
+ throw new TypeError("AgentKit thread snapshot must contain a repository.");
4824
+ }
4825
+ const originalRepositoryMessages = Array.isArray(parsedRepository.messages)
4826
+ ? parsedRepository.messages
4827
+ : [];
4828
+ const originalById = new Map<string, Record<string, unknown>>();
4829
+ for (const entry of originalRepositoryMessages) {
4830
+ const record = asRecord(entry);
4831
+ const storedMessage = asRecord(record?.message ?? entry);
4832
+ if (typeof storedMessage?.id === "string") {
4833
+ originalById.set(storedMessage.id, record ?? { message: storedMessage });
4834
+ }
4835
+ }
4836
+ const voiceRepositoryMessages = new Map<string, Record<string, unknown>>();
4837
+ for (const transcript of transcripts) {
4838
+ const result = appendRealtimeVoiceTranscriptToRepository(
4839
+ { messages: [] },
4840
+ transcript,
4841
+ );
4842
+ const messages = Array.isArray(result.repository.messages)
4843
+ ? result.repository.messages
4844
+ : [];
4845
+ const entry = asRecord(messages[0]);
4846
+ if (entry) voiceRepositoryMessages.set(transcript.id, entry);
4847
+ }
4848
+ const repositoryMessages = messages.map((message, index) => {
4849
+ const existing =
4850
+ originalById.get(message.id) ?? voiceRepositoryMessages.get(message.id);
4851
+ const savedMessage = asRecord(existing?.message) ?? {
4852
+ id: message.id,
4853
+ role: message.role,
4854
+ status: message.status,
4855
+ content: message.parts,
4856
+ metadata: message.metadata,
4857
+ createdAt: message.createdAt,
4858
+ };
4859
+ return {
4860
+ ...(existing ?? {}),
4861
+ parentId: index > 0 ? (messages[index - 1]?.id ?? null) : null,
4862
+ message: savedMessage,
4863
+ };
4864
+ });
4865
+ const agentKit = asRecord(parsedRepository.agentKit) ?? {};
4866
+ const firstUser = messages.find((message) => message.role === "user");
4867
+ const latestUser = [...messages]
4868
+ .reverse()
4869
+ .find((message) => message.role === "user");
4870
+ return {
4871
+ ...snapshot,
4872
+ threadData: JSON.stringify({
4873
+ ...parsedRepository,
4874
+ headId: messages.at(-1)?.id ?? null,
4875
+ messages: repositoryMessages,
4876
+ agentKit: {
4877
+ ...agentKit,
4878
+ messages,
4879
+ },
4880
+ }),
4881
+ title:
4882
+ snapshot.title ||
4883
+ (firstUser ? agentMessageText(firstUser).slice(0, 80) : ""),
4884
+ preview: latestUser ? agentMessageText(latestUser).slice(0, 280) : "",
4885
+ messageCount: messages.length,
4886
+ };
4887
+ }