@agent-native/toolkit 0.23.1 → 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,4077 @@
1
+ // @vitest-environment happy-dom
2
+
3
+ import { AgentKitClient } from "@agent-native/agentkit/client";
4
+ import type { AgentTransport } from "@agent-native/agentkit/protocol";
5
+ import React, { act, createRef } from "react";
6
+ import { createRoot, type Root } from "react-dom/client";
7
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
8
+
9
+ import { AgentSuggestionBar } from "../../composer/AgentSuggestionBar.js";
10
+
11
+ const chatMocks = vi.hoisted(() => ({
12
+ history: undefined as any,
13
+ session: {
14
+ authUserId: "user-1",
15
+ email: "first@example.test",
16
+ orgId: "workspace-1",
17
+ },
18
+ appState: new Map<string, unknown>(),
19
+ composerDrafts: new Map<string, string>(),
20
+ threadId: "thread-1",
21
+ renderEmptyState: false,
22
+ pendingFiles: [] as File[],
23
+ pendingReferences: [] as any[],
24
+ readThread: () => chatMocks.thread,
25
+ thread: {
26
+ thread: null,
27
+ messages: [] as any[],
28
+ events: [] as any[],
29
+ activeRunIds: [] as string[],
30
+ runs: {} as Record<string, any>,
31
+ approvals: {} as Record<string, any>,
32
+ suggestions: [] as any[],
33
+ tools: {} as Record<string, unknown>,
34
+ activities: {} as Record<string, unknown>,
35
+ queuedMessages: [] as any[],
36
+ },
37
+ history: null as any,
38
+ rootProps: null as any,
39
+ chatProps: null as any,
40
+ composerProps: null as any,
41
+ resumeProps: null as any,
42
+ failureProps: null as any,
43
+ failureError: { code: "test-error", message: "Run failed" } as any,
44
+ setupCardProps: null as any,
45
+ suggestionBarProps: null as any,
46
+ dynamicSuggestionOptions: null as any,
47
+ approvalRequest: null as any,
48
+ approvalCardProps: null as any,
49
+ reasoningProps: null as any,
50
+ thinkingDisplay: null as any,
51
+ requestComposerFocus: vi.fn(),
52
+ readiness: { canChat: true, missing: false, state: "configured" },
53
+ fileUploadStatus: {
54
+ data: { configured: true },
55
+ isError: false,
56
+ isLoading: false,
57
+ refetch: vi.fn(),
58
+ } as any,
59
+ fileStoragePopoverProps: null as any,
60
+ guidedFlowProps: null as any,
61
+ guidedOptions: null as any,
62
+ guidedQuestions: [] as any[],
63
+ runtimeOptions: null as any,
64
+ inBuilder: false,
65
+ useRealRoot: false,
66
+ realComposerController: null as AgentKitClient | null,
67
+ useRealChat: false,
68
+ omitSuggestionsSlot: false,
69
+ voiceTranscriptRegistration: null as any,
70
+ runtime: { kind: "runtime" },
71
+ transport: { kind: "transport" },
72
+ transportOptions: null as any,
73
+ renderMarkdownToClipboardHtml: vi.fn(),
74
+ writeClipboardText: vi.fn(),
75
+ callAction: vi.fn(),
76
+ control: {
77
+ sendMessage: vi.fn(async () => undefined),
78
+ queueMessage: vi.fn(async () => undefined),
79
+ resolveConnectionRequest: vi.fn(async () => undefined),
80
+ resolveApproval: vi.fn(async () => undefined),
81
+ fork: vi.fn(async () => ({ id: "thread-forked" })),
82
+ cancel: vi.fn(async () => undefined),
83
+ uploadFiles: vi.fn(async () => []),
84
+ },
85
+ createRuntime: vi.fn((options: unknown) => {
86
+ chatMocks.runtimeOptions = options;
87
+ return chatMocks.runtime;
88
+ }),
89
+ createTransport: vi.fn((options: unknown) => {
90
+ chatMocks.transportOptions = options;
91
+ return chatMocks.transport;
92
+ }),
93
+ }));
94
+
95
+ (
96
+ globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean }
97
+ ).IS_REACT_ACT_ENVIRONMENT = true;
98
+
99
+ vi.mock("../agentkit/react/index.js", async () => {
100
+ const React = await import("react");
101
+ const { AgentKitChat, AgentKitComposer, AgentMessageView } =
102
+ await import("../agentkit/react/components.js");
103
+ const { useAgentKit, useAgentKitControl, useAgentThread } =
104
+ await import("../agentkit/react/context.js");
105
+ const { useThinkingDisplay } = await import("./thinking-display.js");
106
+ return {
107
+ AgentKitChat: (props: any) => {
108
+ chatMocks.chatProps = props;
109
+ chatMocks.thinkingDisplay = useThinkingDisplay();
110
+ if (chatMocks.useRealChat)
111
+ return React.createElement(AgentKitChat, props);
112
+ const slots = chatMocks.rootProps?.slots;
113
+ const Composer = slots?.composer;
114
+ const EmptyState = slots?.emptyState;
115
+ const Transcript = slots?.transcript;
116
+ const Failure = slots?.runFailure;
117
+ const Approval = slots?.approval;
118
+ const MessageSupplement = slots?.messageSupplement;
119
+ return React.createElement(
120
+ React.Fragment,
121
+ null,
122
+ Composer
123
+ ? React.createElement(Composer, { threadId: chatMocks.threadId })
124
+ : null,
125
+ EmptyState && chatMocks.renderEmptyState
126
+ ? React.createElement(EmptyState, { threadId: chatMocks.threadId })
127
+ : null,
128
+ Transcript
129
+ ? React.createElement(
130
+ "div",
131
+ { className: "agentkit-transcript-content" },
132
+ React.createElement(Transcript, {
133
+ threadId: chatMocks.threadId,
134
+ children: React.createElement("div", {
135
+ "data-testid": "first-transcript-message",
136
+ }),
137
+ }),
138
+ )
139
+ : null,
140
+ Failure
141
+ ? React.createElement(Failure, {
142
+ error: chatMocks.failureError,
143
+ runId: "run-1",
144
+ threadId: chatMocks.threadId,
145
+ })
146
+ : null,
147
+ Approval && chatMocks.approvalRequest
148
+ ? React.createElement(Approval, {
149
+ value: chatMocks.approvalRequest,
150
+ runId: "run-1",
151
+ threadId: chatMocks.threadId,
152
+ })
153
+ : null,
154
+ MessageSupplement
155
+ ? chatMocks.thread.messages.map((value: any) =>
156
+ React.createElement(MessageSupplement, {
157
+ key: value.id,
158
+ value,
159
+ threadId: chatMocks.threadId,
160
+ }),
161
+ )
162
+ : null,
163
+ );
164
+ },
165
+ AgentKitComposer: (props: any) => {
166
+ chatMocks.composerProps = props;
167
+ React.useLayoutEffect(() => {
168
+ if (chatMocks.realComposerController || !props.composerRef) return;
169
+ props.composerRef.current = {
170
+ submitWithText: async (text: string) => {
171
+ if (props.onBeforeSubmit && !(await props.onBeforeSubmit()))
172
+ return false;
173
+ await props.onSubmit(
174
+ text,
175
+ chatMocks.pendingFiles,
176
+ chatMocks.pendingReferences,
177
+ {
178
+ intent: "immediate",
179
+ contextItems: props.contextItems,
180
+ },
181
+ );
182
+ chatMocks.pendingFiles = [];
183
+ chatMocks.pendingReferences = [];
184
+ return true;
185
+ },
186
+ };
187
+ return () => {
188
+ props.composerRef.current = null;
189
+ };
190
+ });
191
+ if (chatMocks.realComposerController) {
192
+ return React.createElement(AgentKitComposer, props);
193
+ }
194
+ return React.createElement("div", {
195
+ "data-testid": "agentkit-composer",
196
+ });
197
+ },
198
+ AgentApprovalPrompt: () => null,
199
+ AgentMessageView: ({ value }: any) => {
200
+ if (chatMocks.useRealChat)
201
+ return React.createElement(AgentMessageView, {
202
+ value,
203
+ threadId: chatMocks.threadId,
204
+ });
205
+ const text = (value?.parts ?? [])
206
+ .filter((part: any) => part.type === "text")
207
+ .map((part: any) => part.text)
208
+ .join("\n");
209
+ return React.createElement(
210
+ "div",
211
+ { "data-testid": "agent-message" },
212
+ text,
213
+ );
214
+ },
215
+ useAgentKit: () =>
216
+ chatMocks.useRealChat
217
+ ? useAgentKit()
218
+ : {
219
+ threadId: chatMocks.threadId,
220
+ requestComposerFocus: chatMocks.requestComposerFocus,
221
+ controller: { getThread: () => chatMocks.readThread() },
222
+ },
223
+ useAgentKitControl: () =>
224
+ chatMocks.useRealChat ? useAgentKitControl() : chatMocks.control,
225
+ useAgentThread: () =>
226
+ chatMocks.useRealChat ? useAgentThread() : chatMocks.readThread(),
227
+ };
228
+ });
229
+
230
+ vi.mock("../agentkit/react/root.js", async () => {
231
+ const React = await import("react");
232
+ const { AgentKitProvider } = await import("../agentkit/react/context.js");
233
+ const actual = await import("../agentkit/react/root.js");
234
+ return {
235
+ AgentKitRoot: (props: any) => {
236
+ chatMocks.rootProps = props;
237
+ if (chatMocks.realComposerController) {
238
+ return React.createElement(AgentKitProvider, {
239
+ ...props,
240
+ controller: chatMocks.realComposerController,
241
+ slots: chatMocks.omitSuggestionsSlot
242
+ ? { ...props.slots, suggestions: undefined }
243
+ : props.slots,
244
+ });
245
+ }
246
+ return chatMocks.useRealRoot
247
+ ? React.createElement(actual.AgentKitRoot, props)
248
+ : props.children;
249
+ },
250
+ };
251
+ });
252
+
253
+ vi.mock("@agent-native/toolkit/composer", async () => ({
254
+ snapshotComposerContextItems: (
255
+ await import("../../composer/context-items.js")
256
+ ).snapshotComposerContextItems,
257
+ AgentSuggestionBar: (props: any) => {
258
+ chatMocks.suggestionBarProps = props;
259
+ if (chatMocks.realComposerController) {
260
+ return React.createElement(AgentSuggestionBar, props);
261
+ }
262
+ return React.createElement(
263
+ "div",
264
+ {
265
+ "data-testid": "agentkit-suggestion-bar",
266
+ className: (props as { className?: string }).className,
267
+ },
268
+ props.suggestions.map((suggestion: any) =>
269
+ React.createElement(
270
+ "button",
271
+ {
272
+ key: suggestion.id,
273
+ disabled: suggestion.disabled,
274
+ onClick: () => props.onSelect(suggestion),
275
+ },
276
+ suggestion.label,
277
+ ),
278
+ ),
279
+ );
280
+ },
281
+ agentSuggestionPrompt: (suggestion: any) =>
282
+ typeof suggestion === "string" ? suggestion : suggestion.prompt,
283
+ }));
284
+
285
+ vi.mock(
286
+ "@agent-native/toolkit/composer/realtime-voice-transcript",
287
+ async (importOriginal) => {
288
+ const actual =
289
+ await importOriginal<
290
+ typeof import("@agent-native/toolkit/composer/realtime-voice-transcript")
291
+ >();
292
+ return {
293
+ ...actual,
294
+ realtimeVoiceTranscriptRegistry: {
295
+ ...actual.realtimeVoiceTranscriptRegistry,
296
+ register: (registration: unknown) => {
297
+ chatMocks.voiceTranscriptRegistration = registration;
298
+ return () => {
299
+ if (chatMocks.voiceTranscriptRegistration === registration) {
300
+ chatMocks.voiceTranscriptRegistration = null;
301
+ }
302
+ };
303
+ },
304
+ },
305
+ };
306
+ },
307
+ );
308
+
309
+ vi.mock("@agent-native/toolkit/agentkit", async (importOriginal) => {
310
+ const { PromptComposer } = await import("../../composer/PromptComposer.js");
311
+ return {
312
+ ...(await importOriginal<
313
+ typeof import("@agent-native/toolkit/agentkit")
314
+ >()),
315
+ PromptComposer: (props: React.ComponentProps<typeof PromptComposer>) =>
316
+ chatMocks.useRealChat ? React.createElement(PromptComposer, props) : null,
317
+ };
318
+ });
319
+
320
+ vi.mock("@tabler/icons-react", async (importOriginal) => ({
321
+ ...(await importOriginal<typeof import("@tabler/icons-react")>()),
322
+ ...Object.fromEntries(
323
+ [
324
+ "IconAlertTriangle",
325
+ "IconCheck",
326
+ "IconChevronDown",
327
+ "IconMessage",
328
+ "IconPlayerStopFilled",
329
+ "IconQuote",
330
+ "IconRefresh",
331
+ "IconShieldCheck",
332
+ "IconX",
333
+ ].map((name) => [name, () => null]),
334
+ ),
335
+ }));
336
+
337
+ vi.mock("./agentkit-chat/history.js", async () => {
338
+ const React = await import("react");
339
+ return {
340
+ AgentKitDevCheckpointProvider: ({ children }: any) =>
341
+ React.createElement(React.Fragment, null, children),
342
+ AgentKitDevCheckpointRestore: () => null,
343
+ useOptionalAgentKitHistory: () => chatMocks.history,
344
+ };
345
+ });
346
+
347
+ vi.mock("./agentkit-chat/index.js", async () => {
348
+ const React = await import("react");
349
+ return {
350
+ CoreComposerRuntimeProvider: ({ children }: any) =>
351
+ React.createElement(React.Fragment, null, children),
352
+ createAgentNativeAgentKitTransport: chatMocks.createTransport,
353
+ findMcpConnectionSuggestionIntegration: () => null,
354
+ GuidedQuestionProviderGate: () => null,
355
+ GuidedQuestionFlow: (props: unknown) => {
356
+ chatMocks.guidedFlowProps = props;
357
+ return null;
358
+ },
359
+ McpAgentKitConnectionRequestCard: () => null,
360
+ McpAgentKitConnectionResume: (props: unknown) => {
361
+ chatMocks.resumeProps = props;
362
+ return null;
363
+ },
364
+ McpConnectionSuggestion: () => null,
365
+ AgentKitHistoryBeginningRevert: () =>
366
+ React.createElement("div", {
367
+ "data-testid": "history-beginning-revert",
368
+ }),
369
+ AgentKitHistoryMessageSupplement: () => null,
370
+ AgentKitHistoryProvider: ({ children }: any) =>
371
+ React.createElement(React.Fragment, null, children),
372
+ useGuidedQuestionFlow: (options: unknown) => {
373
+ chatMocks.guidedOptions = options;
374
+ return { questions: chatMocks.guidedQuestions };
375
+ },
376
+ };
377
+ });
378
+
379
+ vi.mock("./agentkit-chat/parity-renderers.js", () => ({
380
+ AgentKitFilesChangedSummary: () => null,
381
+ AgentKitMarkdownText: () => null,
382
+ }));
383
+
384
+ vi.mock("@agent-native/core/client/application-state", () => ({
385
+ compareAndSetClientAppState: vi.fn(
386
+ async (key: string, expected: unknown, next: unknown) => {
387
+ const current = chatMocks.appState.get(key) ?? null;
388
+ if (JSON.stringify(current) !== JSON.stringify(expected)) return false;
389
+ if (next === null) chatMocks.appState.delete(key);
390
+ else chatMocks.appState.set(key, next);
391
+ return true;
392
+ },
393
+ ),
394
+ deleteClientAppState: vi.fn(async (key: string) => {
395
+ chatMocks.appState.delete(key);
396
+ }),
397
+ isClientAppStateMutationPending: vi.fn(() => false),
398
+ readClientAppState: vi.fn(
399
+ async (key: string) => chatMocks.appState.get(key) ?? null,
400
+ ),
401
+ writeClientAppState: vi.fn(async (key: string, value: unknown) => {
402
+ chatMocks.appState.set(key, value);
403
+ return value;
404
+ }),
405
+ }));
406
+
407
+ vi.mock("@agent-native/core/client/host", async (importOriginal) => {
408
+ const actual =
409
+ await importOriginal<typeof import("@agent-native/core/client/host")>();
410
+ return { ...actual, isInBuilderFrame: () => chatMocks.inBuilder };
411
+ });
412
+
413
+ vi.mock("@agent-native/core/client/agent-chat", async (importOriginal) => {
414
+ const actual =
415
+ await importOriginal<
416
+ typeof import("@agent-native/core/client/agent-chat")
417
+ >();
418
+ return {
419
+ ...actual,
420
+ readAssistantChatComposerDraft: (key: string) =>
421
+ chatMocks.composerDrafts.get(key) ?? null,
422
+ writeAssistantChatComposerDraft: vi.fn((key: string, text: string) => {
423
+ chatMocks.composerDrafts.set(key, text);
424
+ }),
425
+ createAgentNativeChatRuntime: chatMocks.createRuntime,
426
+ useAgentDynamicSuggestionsResult: (options: unknown) => {
427
+ chatMocks.dynamicSuggestionOptions = options;
428
+ return {
429
+ suggestions: (options as { staticSuggestions?: string[] })
430
+ .staticSuggestions,
431
+ };
432
+ },
433
+ ExternalAgentNudge: () => null,
434
+ useDevMode: () => ({ isDevMode: true }),
435
+ useAgentEngineConfigured: () => chatMocks.readiness,
436
+ filterAgentChatContextItems: (items: unknown[]) => items,
437
+ formatAgentChatContextItemsForPrompt:
438
+ actual.formatAgentChatContextItemsForPrompt,
439
+ getAgentChatContextState: () => ({ items: [], updatedAt: 0 }),
440
+ publishAgentChatContextItems: vi.fn(),
441
+ refreshAgentChatContext: vi.fn(async () => undefined),
442
+ subscribeAgentChatContext: vi.fn(() => () => undefined),
443
+ };
444
+ });
445
+
446
+ vi.mock("./chat/run-recovery.js", () => ({
447
+ RunErrorRecoveryCard: (props: unknown) => {
448
+ chatMocks.failureProps = props;
449
+ return null;
450
+ },
451
+ BuilderSetupCard: (props: unknown) => {
452
+ chatMocks.setupCardProps = props;
453
+ return React.createElement("div", { "data-testid": "builder-setup-card" });
454
+ },
455
+ LoopLimitContinueCard: () => null,
456
+ PlanModeCallout: () => null,
457
+ getRequestModeMetadata: () => undefined,
458
+ }));
459
+
460
+ vi.mock("./FileStorageSetupPopover.js", async () => {
461
+ const React = await import("react");
462
+ return {
463
+ FileStorageSetupPopover: (props: unknown) => {
464
+ chatMocks.fileStoragePopoverProps = props;
465
+ return React.createElement("div", {
466
+ "data-testid": "file-storage-setup-popover",
467
+ });
468
+ },
469
+ };
470
+ });
471
+
472
+ vi.mock("@agent-native/core/client/uploads", () => ({
473
+ useFileUploadStatus: () => chatMocks.fileUploadStatus,
474
+ }));
475
+
476
+ vi.mock("./chat/markdown-renderer.js", () => ({
477
+ renderMarkdownToClipboardHtml: chatMocks.renderMarkdownToClipboardHtml,
478
+ }));
479
+
480
+ vi.mock("@agent-native/toolkit/clipboard", () => ({
481
+ writeClipboardText: chatMocks.writeClipboardText,
482
+ }));
483
+
484
+ vi.mock("@agent-native/core/client/i18n", () => ({
485
+ useFormatters: () => ({
486
+ formatNumber: String,
487
+ formatDate: (value: string | Date) =>
488
+ value instanceof Date ? value.toISOString() : value,
489
+ }),
490
+ useT: () => (key: string, options?: Record<string, unknown>) =>
491
+ key === "agentChat.composer.previewAttachment"
492
+ ? `Preview ${String(options?.name ?? "{{name}}")}`
493
+ : key,
494
+ }));
495
+
496
+ vi.mock("./RunStuckBanner.js", () => ({ RunStuckBanner: () => null }));
497
+
498
+ vi.mock("@agent-native/core/client/hooks", async (importOriginal) => {
499
+ const actual =
500
+ await importOriginal<typeof import("@agent-native/core/client/hooks")>();
501
+ return { ...actual, callAction: chatMocks.callAction, signOut: vi.fn() };
502
+ });
503
+
504
+ vi.mock("@agent-native/core/client/use-session", () => ({
505
+ useSession: () => ({ session: chatMocks.session, status: "authenticated" }),
506
+ }));
507
+
508
+ vi.mock("./chat/tool-call-display.js", async () => {
509
+ const React = await import("react");
510
+ return {
511
+ ChatRunningContext: React.createContext(false),
512
+ SuppressInlineOpenAppContext: React.createContext(false),
513
+ ToolCallDisplay: () => null,
514
+ AgentApprovalCard: (props: any) => {
515
+ chatMocks.approvalCardProps = props;
516
+ return React.createElement(
517
+ "div",
518
+ null,
519
+ React.createElement(
520
+ "button",
521
+ { type: "button", onClick: props.onDeny },
522
+ props.denyLabel,
523
+ ),
524
+ props.onAlwaysAllow
525
+ ? React.createElement(
526
+ "button",
527
+ { type: "button", onClick: props.onAlwaysAllow },
528
+ props.alwaysAllowLabel,
529
+ )
530
+ : null,
531
+ );
532
+ },
533
+ ReasoningCell: (props: any) => {
534
+ chatMocks.reasoningProps = props;
535
+ return React.createElement(
536
+ "div",
537
+ { "data-default-open": String(props.defaultOpen) },
538
+ props.text,
539
+ );
540
+ },
541
+ };
542
+ });
543
+
544
+ vi.mock("./chat/agent-approval-card.js", async () => {
545
+ const React = await import("react");
546
+ return {
547
+ AgentApprovalCard: (props: any) => {
548
+ chatMocks.approvalCardProps = props;
549
+ return React.createElement(
550
+ "div",
551
+ null,
552
+ React.createElement(
553
+ "button",
554
+ { type: "button", onClick: props.onDeny },
555
+ props.denyLabel,
556
+ ),
557
+ props.onAlwaysAllow
558
+ ? React.createElement(
559
+ "button",
560
+ { type: "button", onClick: props.onAlwaysAllow },
561
+ props.alwaysAllowLabel,
562
+ )
563
+ : null,
564
+ );
565
+ },
566
+ };
567
+ });
568
+
569
+ import {
570
+ AGENT_CHAT_SUBMIT_RESULT_EVENT,
571
+ appendAgentChatContextToMessage,
572
+ } from "@agent-native/core/client/agent-chat";
573
+ import {
574
+ deleteClientAppState,
575
+ readClientAppState,
576
+ } from "@agent-native/core/client/application-state";
577
+
578
+ import {
579
+ AgentKitAssistantChat,
580
+ type AgentKitAssistantChatProps,
581
+ } from "./AgentKitAssistantChat.js";
582
+ import type {
583
+ AssistantChatComposerContext,
584
+ AssistantChatComposerContextProviderProps,
585
+ AssistantChatHandle,
586
+ AssistantChatSendOptions,
587
+ } from "./chat/surface-types.js";
588
+
589
+ let container: HTMLDivElement;
590
+ let root: Root;
591
+
592
+ class TestErrorBoundary extends React.Component<
593
+ {
594
+ children: React.ReactNode;
595
+ onError: (error: Error) => void;
596
+ },
597
+ { failed: boolean }
598
+ > {
599
+ state = { failed: false };
600
+
601
+ static getDerivedStateFromError() {
602
+ return { failed: true };
603
+ }
604
+
605
+ override componentDidCatch(error: Error) {
606
+ this.props.onError(error);
607
+ }
608
+
609
+ override render() {
610
+ return this.state.failed ? null : this.props.children;
611
+ }
612
+ }
613
+
614
+ async function mount(
615
+ props: AgentKitAssistantChatProps,
616
+ ref?: React.Ref<AssistantChatHandle>,
617
+ ) {
618
+ container = document.createElement("div");
619
+ document.body.appendChild(container);
620
+ root = createRoot(container);
621
+ await act(async () => {
622
+ root.render(<AgentKitAssistantChat {...props} ref={ref} />);
623
+ });
624
+ }
625
+
626
+ async function unmount() {
627
+ if (!root) return;
628
+ await act(async () => root.unmount());
629
+ container.remove();
630
+ }
631
+
632
+ async function flush() {
633
+ await act(async () => {
634
+ await new Promise((resolve) => setTimeout(resolve, 0));
635
+ });
636
+ }
637
+
638
+ function baseProps(
639
+ overrides: Partial<AgentKitAssistantChatProps> = {},
640
+ ): AgentKitAssistantChatProps {
641
+ return {
642
+ threadId: chatMocks.threadId,
643
+ isNewThread: true,
644
+ providerStatusChecksEnabled: false,
645
+ ...overrides,
646
+ };
647
+ }
648
+
649
+ beforeEach(() => {
650
+ chatMocks.history = undefined;
651
+ chatMocks.session = {
652
+ authUserId: "user-1",
653
+ email: "first@example.test",
654
+ orgId: "workspace-1",
655
+ };
656
+ vi.mocked(readClientAppState)
657
+ .mockReset()
658
+ .mockImplementation(async (key) => chatMocks.appState.get(key) ?? null);
659
+ vi.mocked(deleteClientAppState)
660
+ .mockReset()
661
+ .mockImplementation(async (key) => {
662
+ chatMocks.appState.delete(key);
663
+ });
664
+ chatMocks.appState.clear();
665
+ chatMocks.composerDrafts.clear();
666
+ chatMocks.threadId = "thread-1";
667
+ chatMocks.renderEmptyState = false;
668
+ chatMocks.pendingFiles = [];
669
+ chatMocks.pendingReferences = [];
670
+ chatMocks.thread = {
671
+ thread: null,
672
+ messages: [],
673
+ events: [],
674
+ activeRunIds: [],
675
+ runs: {},
676
+ approvals: {},
677
+ suggestions: [],
678
+ tools: {},
679
+ activities: {},
680
+ queuedMessages: [],
681
+ };
682
+ chatMocks.history = null;
683
+ chatMocks.readThread = () => chatMocks.thread;
684
+ chatMocks.rootProps = null;
685
+ chatMocks.chatProps = null;
686
+ chatMocks.composerProps = null;
687
+ chatMocks.resumeProps = null;
688
+ chatMocks.failureProps = null;
689
+ chatMocks.failureError = { code: "test-error", message: "Run failed" };
690
+ chatMocks.setupCardProps = null;
691
+ chatMocks.suggestionBarProps = null;
692
+ chatMocks.dynamicSuggestionOptions = null;
693
+ chatMocks.approvalRequest = null;
694
+ chatMocks.approvalCardProps = null;
695
+ chatMocks.reasoningProps = null;
696
+ chatMocks.thinkingDisplay = null;
697
+ chatMocks.requestComposerFocus.mockReset();
698
+ chatMocks.readiness = {
699
+ canChat: true,
700
+ missing: false,
701
+ state: "configured",
702
+ };
703
+ chatMocks.fileUploadStatus = {
704
+ data: { configured: true },
705
+ isError: false,
706
+ isLoading: false,
707
+ refetch: vi.fn(),
708
+ };
709
+ chatMocks.fileStoragePopoverProps = null;
710
+ chatMocks.guidedFlowProps = null;
711
+ chatMocks.guidedOptions = null;
712
+ chatMocks.guidedQuestions = [];
713
+ chatMocks.runtimeOptions = null;
714
+ chatMocks.transportOptions = null;
715
+ chatMocks.inBuilder = false;
716
+ chatMocks.useRealRoot = false;
717
+ chatMocks.realComposerController = null;
718
+ chatMocks.useRealChat = false;
719
+ chatMocks.omitSuggestionsSlot = false;
720
+ chatMocks.voiceTranscriptRegistration = null;
721
+ chatMocks.control.sendMessage.mockReset().mockResolvedValue(undefined);
722
+ chatMocks.control.queueMessage.mockReset().mockResolvedValue(undefined);
723
+ chatMocks.control.resolveConnectionRequest
724
+ .mockReset()
725
+ .mockResolvedValue(undefined);
726
+ chatMocks.control.resolveApproval.mockReset().mockResolvedValue(undefined);
727
+ chatMocks.control.fork.mockReset().mockResolvedValue({ id: "thread-forked" });
728
+ chatMocks.control.uploadFiles.mockReset().mockResolvedValue([]);
729
+ chatMocks.createRuntime.mockClear();
730
+ chatMocks.createTransport
731
+ .mockReset()
732
+ .mockImplementation((options: unknown) => {
733
+ chatMocks.transportOptions = options;
734
+ return chatMocks.transport;
735
+ });
736
+ chatMocks.renderMarkdownToClipboardHtml
737
+ .mockReset()
738
+ .mockReturnValue("<p><strong>Ready</strong></p>");
739
+ chatMocks.writeClipboardText.mockReset().mockResolvedValue(true);
740
+ chatMocks.callAction.mockReset().mockResolvedValue(null);
741
+ });
742
+
743
+ afterEach(async () => {
744
+ await unmount();
745
+ chatMocks.realComposerController?.dispose();
746
+ window.sessionStorage.clear();
747
+ });
748
+
749
+ describe("AgentKitAssistantChat host behavior", () => {
750
+ it("shows Thinking in the transcript while a submitted user message is pending", async () => {
751
+ chatMocks.history = { isSubmissionInFlight: true };
752
+ chatMocks.thread.messages = [
753
+ {
754
+ id: "user-pending",
755
+ role: "user",
756
+ parts: [{ type: "text", text: "Summarize my inbox" }],
757
+ metadata: {},
758
+ },
759
+ ];
760
+ await mount(baseProps());
761
+
762
+ expect(container.querySelector('[role="status"]')?.textContent).toBe(
763
+ "agentChat.status.thinking",
764
+ );
765
+ });
766
+
767
+ it("gives JS callers a migration error for the removed createAdapter prop", async () => {
768
+ const errors: Error[] = [];
769
+ container = document.createElement("div");
770
+ document.body.appendChild(container);
771
+ root = createRoot(container);
772
+ const props = {
773
+ ...baseProps(),
774
+ createAdapter: vi.fn(),
775
+ } as unknown as AgentKitAssistantChatProps;
776
+
777
+ await act(async () => {
778
+ root.render(
779
+ <TestErrorBoundary onError={(error) => errors.push(error)}>
780
+ <AgentKitAssistantChat {...props} />
781
+ </TestErrorBoundary>,
782
+ );
783
+ });
784
+
785
+ expect(errors).toHaveLength(1);
786
+ expect(errors[0]?.message).toContain("createAdapter prop was removed");
787
+ expect(errors[0]?.message).toContain("agentkit-chat.md");
788
+ });
789
+
790
+ function seedFollowup() {
791
+ const suggestion = {
792
+ id: "refine",
793
+ runId: "run-1",
794
+ label: "Refine layout",
795
+ prompt: "Refine the selected design using the agreed responsive layout.",
796
+ metadata: { context: "Use the selected design's spacing decisions." },
797
+ };
798
+ Object.assign(chatMocks.thread, {
799
+ messages: [
800
+ {
801
+ id: "user-1",
802
+ role: "user",
803
+ parts: [{ type: "text", text: "Create a design" }],
804
+ },
805
+ {
806
+ id: "assistant-1",
807
+ role: "assistant",
808
+ status: "complete",
809
+ parts: [{ type: "text", text: "Created." }],
810
+ },
811
+ ],
812
+ runs: { "run-1": { id: "run-1", status: "completed", lastSequence: 3 } },
813
+ suggestions: [suggestion],
814
+ suggestionsUserMessageId: "user-1",
815
+ });
816
+ return suggestion;
817
+ }
818
+
819
+ async function useRealComposer(
820
+ startRun: AgentTransport["startRun"] = vi.fn(),
821
+ ) {
822
+ const at = "2026-09-28T00:00:00.000Z";
823
+ const client = new AgentKitClient({
824
+ transport: {
825
+ capabilities: { suggestions: true },
826
+ getThreadSnapshot: async ({ threadId }) => ({
827
+ id: threadId,
828
+ createdAt: at,
829
+ updatedAt: at,
830
+ messages: chatMocks.thread.messages,
831
+ runs: Object.values(chatMocks.thread.runs).map((run) => ({
832
+ ...run,
833
+ threadId,
834
+ startedAt: at,
835
+ completedAt: at,
836
+ })),
837
+ suggestions: chatMocks.thread.suggestions,
838
+ }),
839
+ startRun,
840
+ async *subscribeToRun() {},
841
+ async cancelRun() {},
842
+ },
843
+ });
844
+ await client.loadThread(chatMocks.threadId);
845
+ chatMocks.realComposerController = client;
846
+ chatMocks.readThread = () => client.getThread(chatMocks.threadId);
847
+ return client;
848
+ }
849
+
850
+ it.each(["default", "compact"] as const)(
851
+ "clears the real %s composer before startRun resolves and preserves the next draft",
852
+ async (composerLayoutVariant) => {
853
+ const started = Promise.withResolvers<{ runId: string }>();
854
+ const startRun = vi.fn(() => started.promise);
855
+ chatMocks.useRealChat = true;
856
+ const client = await useRealComposer(startRun);
857
+ try {
858
+ await mount(
859
+ baseProps({
860
+ composerLayoutVariant,
861
+ showModelSelector: false,
862
+ }),
863
+ );
864
+ container.style.width =
865
+ composerLayoutVariant === "compact" ? "320px" : "960px";
866
+ const composer = chatMocks.composerProps.composerRef.current;
867
+ const editor = container.querySelector<HTMLElement>(
868
+ '[contenteditable="true"]',
869
+ )!;
870
+ expect(editor).not.toBeNull();
871
+ await act(async () => composer.setText("First prompt"));
872
+ const send = container.querySelector<HTMLButtonElement>(
873
+ '[data-agent-composer-slot="send-button"]',
874
+ )!;
875
+ expect(send.disabled).toBe(false);
876
+ await act(async () => send.click());
877
+ await flush();
878
+
879
+ expect(startRun).toHaveBeenCalledOnce();
880
+ expect(
881
+ container.querySelector('.agentkit-message[data-role="user"]')
882
+ ?.textContent,
883
+ ).toContain("First prompt");
884
+ expect(client.getThread(chatMocks.threadId).activeRunIds).toEqual([]);
885
+ expect(editor.textContent).toBe("");
886
+
887
+ await act(async () => composer.setText("Next draft"));
888
+ await act(async () => started.resolve({ runId: "run-latency" }));
889
+
890
+ expect(editor.textContent).toBe("Next draft");
891
+ expect(chatMocks.composerProps.initialText).toBe("Next draft");
892
+ expect(startRun).toHaveBeenCalledOnce();
893
+ expect(client.getThread(chatMocks.threadId).messages).toHaveLength(1);
894
+ } finally {
895
+ await act(async () => started.resolve({ runId: "run-latency" }));
896
+ }
897
+ },
898
+ );
899
+
900
+ it.each([undefined, "hidden"] as const)(
901
+ "owns follow-up rendering with the real composer (placement: %s)",
902
+ async (suggestionPlacement) => {
903
+ const suggestion = seedFollowup();
904
+ await useRealComposer();
905
+ const props = baseProps({
906
+ suggestionPlacement,
907
+ showModelSelector: false,
908
+ });
909
+ chatMocks.omitSuggestionsSlot = true;
910
+ await mount(props);
911
+ const rows = () =>
912
+ container.querySelectorAll(
913
+ ".agentkit-host-suggestions, .agentkit-suggestions",
914
+ );
915
+ const chips = () =>
916
+ [...container.querySelectorAll("button")].filter(
917
+ (button) => button.textContent === suggestion.label,
918
+ );
919
+ const expected = suggestionPlacement === "hidden" ? 0 : 1;
920
+ expect(rows()).toHaveLength(expected + 1);
921
+ expect(chips()).toHaveLength(expected + 1);
922
+
923
+ chatMocks.omitSuggestionsSlot = false;
924
+ await act(async () => root.render(<AgentKitAssistantChat {...props} />));
925
+
926
+ expect(rows()).toHaveLength(expected);
927
+ expect(chips()).toHaveLength(expected);
928
+ expect(container.querySelector(".agentkit-suggestions")).toBeNull();
929
+ expect(
930
+ chatMocks.realComposerController!.getThread(chatMocks.threadId)
931
+ .suggestions,
932
+ ).toEqual([suggestion]);
933
+ },
934
+ );
935
+
936
+ it.each([undefined, "context-chips", "after-composer", "hidden"] as const)(
937
+ "preserves initial starters with the real composer (placement: %s)",
938
+ async (suggestionPlacement) => {
939
+ chatMocks.renderEmptyState = true;
940
+ await useRealComposer();
941
+ await mount(
942
+ baseProps({
943
+ centerComposerWhenEmpty: true,
944
+ suggestionPlacement,
945
+ suggestions: ["Static starter"],
946
+ showModelSelector: false,
947
+ }),
948
+ );
949
+ const chips = [...container.querySelectorAll("button")].filter(
950
+ (button) => button.textContent === "Static starter",
951
+ );
952
+ expect(chips).toHaveLength(suggestionPlacement === "hidden" ? 0 : 1);
953
+ expect(container.querySelector(".agentkit-suggestions")).toBeNull();
954
+ },
955
+ );
956
+
957
+ it.each([false, { getSuggestions: () => ["Heuristic fallback"] }])(
958
+ "uses runtime follow-ups independently of initial dynamicSuggestions=%j",
959
+ async (dynamicSuggestions) => {
960
+ const suggestion = seedFollowup();
961
+ await mount(
962
+ baseProps({ suggestions: ["Static starter"], dynamicSuggestions }),
963
+ );
964
+ expect(chatMocks.suggestionBarProps.suggestions).toEqual([
965
+ expect.objectContaining(suggestion),
966
+ ]);
967
+ expect(chatMocks.dynamicSuggestionOptions.enabled).toBe(false);
968
+ expect(container.textContent).not.toContain("Static starter");
969
+ expect(container.textContent).not.toContain("Heuristic fallback");
970
+ },
971
+ );
972
+
973
+ it.each(["running", "awaiting_approval", "failed", "cancelled", "empty"])(
974
+ "never falls back to static chips after a %s turn",
975
+ async (status) => {
976
+ seedFollowup();
977
+ if (status === "empty") chatMocks.thread.suggestions = [];
978
+ else chatMocks.thread.runs["run-1"].status = status;
979
+ await mount(
980
+ baseProps({
981
+ suggestionPlacement: "context-chips",
982
+ suggestions: ["Static starter"],
983
+ }),
984
+ );
985
+ expect(
986
+ container.querySelector('[data-testid="agentkit-suggestion-bar"]'),
987
+ ).toBeNull();
988
+ expect(chatMocks.dynamicSuggestionOptions.enabled).toBe(false);
989
+ },
990
+ );
991
+
992
+ it("submits a chip's full prompt, local files, and fresh provider/integration context through the normal composer", async () => {
993
+ const suggestion = seedFollowup();
994
+ const items = [
995
+ {
996
+ key: "design-reference",
997
+ title: "Reference",
998
+ context: "Old design snapshot",
999
+ },
1000
+ { key: "figma", title: "Figma", context: "Old invocation grant" },
1001
+ ];
1002
+ const prepared = [
1003
+ { ...items[0], context: "Fresh authorized design snapshot" },
1004
+ { ...items[1], context: "Fresh authorized Figma invocation" },
1005
+ ];
1006
+ const context: AssistantChatComposerContext = {
1007
+ menuItems: [],
1008
+ contextItems: items,
1009
+ onRemoveContextItem: vi.fn(),
1010
+ prepareSubmission: vi.fn(async () => prepared),
1011
+ submissionAccepted: vi.fn(),
1012
+ };
1013
+ const Provider = ({
1014
+ children,
1015
+ }: AssistantChatComposerContextProviderProps) => children(context);
1016
+ const file = new File(["image"], "reference.png", { type: "image/png" });
1017
+ chatMocks.pendingFiles = [file];
1018
+ chatMocks.pendingReferences = [{ type: "file", path: "/reference.md" }];
1019
+ await mount(baseProps({ composerContextProvider: Provider }));
1020
+ const button = [...container.querySelectorAll("button")].find(
1021
+ (item) => item.textContent === suggestion.label,
1022
+ )!;
1023
+ await act(async () => button.click());
1024
+ await flush();
1025
+ expect(context.prepareSubmission).toHaveBeenCalledExactlyOnceWith(items);
1026
+ expect(chatMocks.control.uploadFiles).toHaveBeenCalledOnce();
1027
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledExactlyOnceWith(
1028
+ expect.objectContaining({
1029
+ text: expect.stringContaining(suggestion.prompt),
1030
+ metadata: expect.objectContaining({
1031
+ suggestion: expect.objectContaining(suggestion),
1032
+ references: [{ type: "file", path: "/reference.md" }],
1033
+ }),
1034
+ }),
1035
+ );
1036
+ const sent = chatMocks.control.sendMessage.mock.calls[0][0] as any;
1037
+ expect(sent.text).toContain("Fresh authorized design snapshot");
1038
+ expect(sent.text).toContain("Fresh authorized Figma invocation");
1039
+ expect(sent.text).not.toContain("Old design snapshot");
1040
+ expect(context.submissionAccepted).toHaveBeenCalledExactlyOnceWith(
1041
+ prepared,
1042
+ );
1043
+ expect(chatMocks.pendingFiles).toEqual([]);
1044
+ expect(chatMocks.threadId).toBe("thread-1");
1045
+ });
1046
+
1047
+ it.each(["permission", "send", "thread", "disabled"])(
1048
+ "preserves chip draft context after %s blocks submission",
1049
+ async (failure) => {
1050
+ const suggestion = seedFollowup();
1051
+ const items = [
1052
+ {
1053
+ key: "figma",
1054
+ title: "Figma",
1055
+ context: "Selected provider reference",
1056
+ },
1057
+ ];
1058
+ const pending = Promise.withResolvers<typeof items>();
1059
+ const context: AssistantChatComposerContext = {
1060
+ menuItems: [],
1061
+ contextItems: items,
1062
+ onRemoveContextItem: vi.fn(),
1063
+ prepareSubmission: vi.fn(() => pending.promise),
1064
+ submissionAccepted: vi.fn(),
1065
+ };
1066
+ const Provider = ({
1067
+ children,
1068
+ }: AssistantChatComposerContextProviderProps) => children(context);
1069
+ const props = baseProps({ composerContextProvider: Provider });
1070
+ const file = new File(["image"], "keep.png", { type: "image/png" });
1071
+ chatMocks.pendingFiles = [file];
1072
+ if (failure === "send")
1073
+ chatMocks.control.sendMessage.mockRejectedValueOnce(
1074
+ new Error("Send failed"),
1075
+ );
1076
+ await mount(props);
1077
+ await act(async () =>
1078
+ chatMocks.composerProps.onTextChange("Keep this draft"),
1079
+ );
1080
+ const button = [...container.querySelectorAll("button")].find(
1081
+ (item) => item.textContent === suggestion.label,
1082
+ )!;
1083
+ await act(async () => button.click());
1084
+ expect(context.prepareSubmission).toHaveBeenCalledOnce();
1085
+ if (failure === "thread") {
1086
+ chatMocks.threadId = "thread-2";
1087
+ await act(async () =>
1088
+ root.render(<AgentKitAssistantChat {...props} threadId="thread-2" />),
1089
+ );
1090
+ }
1091
+ if (failure === "disabled")
1092
+ await act(async () =>
1093
+ root.render(<AgentKitAssistantChat {...props} composerDisabled />),
1094
+ );
1095
+ await act(async () => {
1096
+ if (failure === "permission")
1097
+ pending.reject(new Error("Grant revoked"));
1098
+ else pending.resolve(items);
1099
+ });
1100
+ await flush();
1101
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1102
+ expect(chatMocks.pendingFiles).toEqual([file]);
1103
+ expect(context.contextItems).toEqual(items);
1104
+ if (failure !== "send")
1105
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1106
+ if (failure !== "thread")
1107
+ expect(chatMocks.composerProps.initialText).toBe("Keep this draft");
1108
+ },
1109
+ );
1110
+
1111
+ it("retains selected context and local files when the chip's thread changes during upload", async () => {
1112
+ const suggestion = seedFollowup();
1113
+ const items = [
1114
+ { key: "figma", title: "Figma", context: "Authorized reference" },
1115
+ ];
1116
+ const context: AssistantChatComposerContext = {
1117
+ menuItems: [],
1118
+ contextItems: items,
1119
+ onRemoveContextItem: vi.fn(),
1120
+ prepareSubmission: vi.fn(async () => items),
1121
+ submissionAccepted: vi.fn(),
1122
+ };
1123
+ const Provider = ({
1124
+ children,
1125
+ }: AssistantChatComposerContextProviderProps) => children(context);
1126
+ const props = baseProps({ composerContextProvider: Provider });
1127
+ const file = new File(["image"], "keep.png", { type: "image/png" });
1128
+ chatMocks.pendingFiles = [file];
1129
+ const uploading = Promise.withResolvers<[]>();
1130
+ chatMocks.control.uploadFiles.mockReturnValueOnce(uploading.promise);
1131
+ await mount(props);
1132
+ await act(async () =>
1133
+ [...container.querySelectorAll("button")]
1134
+ .find((item) => item.textContent === suggestion.label)!
1135
+ .click(),
1136
+ );
1137
+ expect(context.prepareSubmission).toHaveBeenCalledOnce();
1138
+ expect(chatMocks.control.uploadFiles).toHaveBeenCalledOnce();
1139
+ chatMocks.threadId = "thread-2";
1140
+ await act(async () =>
1141
+ root.render(<AgentKitAssistantChat {...props} threadId="thread-2" />),
1142
+ );
1143
+ await act(async () => uploading.resolve([]));
1144
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1145
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1146
+ expect(chatMocks.pendingFiles).toEqual([file]);
1147
+ });
1148
+
1149
+ it("keeps preflight from disabling its own submission before onSubmit", async () => {
1150
+ const release = vi.fn();
1151
+ chatMocks.history = {
1152
+ isSubmissionInFlight: false,
1153
+ beginSubmission: vi.fn(async () => {
1154
+ chatMocks.history.isSubmissionInFlight = true;
1155
+ return release;
1156
+ }),
1157
+ };
1158
+ const props = baseProps();
1159
+ await mount(props);
1160
+ await act(async () => {
1161
+ expect(await chatMocks.composerProps.onBeforeSubmit()).toBe(true);
1162
+ });
1163
+ await act(async () => root.render(<AgentKitAssistantChat {...props} />));
1164
+ expect(chatMocks.composerProps.disabled).toBe(false);
1165
+ expect(chatMocks.history.beginSubmission).not.toHaveBeenCalled();
1166
+ await act(async () =>
1167
+ chatMocks.composerProps.onSubmit("Send", [], [], { intent: "immediate" }),
1168
+ );
1169
+ expect(chatMocks.history.beginSubmission).toHaveBeenCalledOnce();
1170
+ expect(release).toHaveBeenCalledOnce();
1171
+ });
1172
+
1173
+ it("revalidates captured app context separately from ambient context and acknowledges only accepted sends", async () => {
1174
+ const item = {
1175
+ key: "app-reference",
1176
+ title: "Reference",
1177
+ context: "Captured source",
1178
+ };
1179
+ const prepared = [{ ...item, context: "Fresh source" }];
1180
+ const context: AssistantChatComposerContext = {
1181
+ menuItems: [{ id: "reference", label: "Reference", onSelect: vi.fn() }],
1182
+ contextItems: [item],
1183
+ onRemoveContextItem: vi.fn(),
1184
+ onRetryContextItem: vi.fn(),
1185
+ onInspectContextItem: vi.fn(),
1186
+ dialogs: <div data-app-dialog="true" />,
1187
+ prepareSubmission: vi.fn(async () => prepared),
1188
+ submissionAccepted: vi.fn(),
1189
+ };
1190
+ const Provider = ({
1191
+ children,
1192
+ }: AssistantChatComposerContextProviderProps) => children(context);
1193
+ const ref = createRef<AssistantChatHandle>();
1194
+ const props = baseProps({
1195
+ composerContextProvider: Provider,
1196
+ plusMenuMode: "full",
1197
+ });
1198
+ await mount(props, ref);
1199
+ const ambient = {
1200
+ key: "ambient",
1201
+ title: "Selection",
1202
+ context: "Core selection",
1203
+ };
1204
+ await act(async () => ref.current!.setComposerContextItem(ambient));
1205
+ expect(chatMocks.composerProps.contextItems).toEqual([ambient, item]);
1206
+ expect(chatMocks.composerProps.contextMenuItems).toBe(context.menuItems);
1207
+ expect(chatMocks.composerProps.plusMenuMode).toBe("full");
1208
+ expect(container.querySelector("[data-app-dialog]")).not.toBeNull();
1209
+ await act(async () => {
1210
+ chatMocks.composerProps.onRetryContextItem(item.key);
1211
+ chatMocks.composerProps.onInspectContextItem(item.key);
1212
+ });
1213
+ expect(context.onRetryContextItem).toHaveBeenCalledWith(item.key);
1214
+ expect(context.onInspectContextItem).toHaveBeenCalledWith(item.key);
1215
+ const accepted = Promise.withResolvers<void>();
1216
+ chatMocks.control.sendMessage.mockImplementationOnce(
1217
+ () => accepted.promise,
1218
+ );
1219
+ let submit!: Promise<void>;
1220
+ await act(async () => {
1221
+ submit = chatMocks.composerProps.onSubmit("Use the source", [], [], {
1222
+ intent: "immediate",
1223
+ contextItems: chatMocks.composerProps.contextItems,
1224
+ });
1225
+ await Promise.resolve();
1226
+ });
1227
+ expect(context.prepareSubmission).toHaveBeenCalledWith([item]);
1228
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1229
+ const laterItem = {
1230
+ key: "later-reference",
1231
+ title: "Later",
1232
+ context: "Not submitted",
1233
+ };
1234
+ context.contextItems = [item, laterItem];
1235
+ await act(async () =>
1236
+ root.render(<AgentKitAssistantChat {...props} ref={ref} />),
1237
+ );
1238
+ await act(async () => {
1239
+ accepted.resolve();
1240
+ await submit;
1241
+ });
1242
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0].text).toContain(
1243
+ "Core selection",
1244
+ );
1245
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0].text).toContain(
1246
+ "Fresh source",
1247
+ );
1248
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0].text).not.toContain(
1249
+ "Captured source",
1250
+ );
1251
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0].text).not.toContain(
1252
+ "Not submitted",
1253
+ );
1254
+ expect(context.submissionAccepted).toHaveBeenCalledExactlyOnceWith(
1255
+ prepared,
1256
+ );
1257
+ expect(vi.mocked(context.submissionAccepted).mock.calls[0]?.[0]).toBe(
1258
+ prepared,
1259
+ );
1260
+ expect(chatMocks.composerProps.contextItems).toContain(laterItem);
1261
+ await act(async () =>
1262
+ chatMocks.composerProps.onRemoveContextItem(item.key),
1263
+ );
1264
+ expect(context.onRemoveContextItem).toHaveBeenCalledWith(item.key);
1265
+ });
1266
+
1267
+ it.each(["schedule", "automation", "skill"])(
1268
+ "preserves internal %s mode instructions while refreshing only provider context",
1269
+ async (mode) => {
1270
+ const item = {
1271
+ key: "app-reference",
1272
+ title: "Reference",
1273
+ context: "Stale source",
1274
+ };
1275
+ const prepared = [{ ...item, context: "Fresh source" }];
1276
+ const composerModeContext = `Internal ${mode} instructions`;
1277
+ const context: AssistantChatComposerContext = {
1278
+ menuItems: [],
1279
+ contextItems: [item],
1280
+ onRemoveContextItem: vi.fn(),
1281
+ prepareSubmission: vi.fn(async () => prepared),
1282
+ submissionAccepted: vi.fn(),
1283
+ };
1284
+ const Provider = ({
1285
+ children,
1286
+ }: AssistantChatComposerContextProviderProps) => children(context);
1287
+ await mount(baseProps({ composerContextProvider: Provider }));
1288
+ await act(async () => {
1289
+ await chatMocks.composerProps.onSubmit(`Create ${mode}`, [], [], {
1290
+ intent: "immediate",
1291
+ contextItems: [item],
1292
+ composerModeContext,
1293
+ });
1294
+ });
1295
+ expect(context.prepareSubmission).toHaveBeenCalledExactlyOnceWith([item]);
1296
+ const message = chatMocks.control.sendMessage.mock.calls[0]?.[0]?.text;
1297
+ expect(message).toContain(`Create ${mode}`);
1298
+ expect(message).toContain(composerModeContext);
1299
+ expect(message?.split(composerModeContext)).toHaveLength(2);
1300
+ expect(message).toContain("Fresh source");
1301
+ expect(message).not.toContain("Stale source");
1302
+ expect(context.submissionAccepted).toHaveBeenCalledExactlyOnceWith(
1303
+ prepared,
1304
+ );
1305
+ },
1306
+ );
1307
+
1308
+ it.each(["prepare", "dispatch"])(
1309
+ "preserves provider context when %s rejects",
1310
+ async (failure) => {
1311
+ const release = vi.fn();
1312
+ chatMocks.history = { beginSubmission: vi.fn(async () => release) };
1313
+ const items = [
1314
+ { key: "app-reference", title: "Reference", context: "Source" },
1315
+ ];
1316
+ const context: AssistantChatComposerContext = {
1317
+ menuItems: [],
1318
+ contextItems: items,
1319
+ onRemoveContextItem: vi.fn(),
1320
+ prepareSubmission: vi.fn(async () => items),
1321
+ submissionAccepted: vi.fn(),
1322
+ };
1323
+ if (failure === "prepare")
1324
+ vi.mocked(context.prepareSubmission).mockRejectedValueOnce(
1325
+ new Error("Source unavailable"),
1326
+ );
1327
+ else
1328
+ chatMocks.control.sendMessage.mockRejectedValueOnce(
1329
+ new Error("Source unavailable"),
1330
+ );
1331
+ const Provider = ({
1332
+ children,
1333
+ }: AssistantChatComposerContextProviderProps) => children(context);
1334
+ await mount(baseProps({ composerContextProvider: Provider }));
1335
+ await act(async () => {
1336
+ chatMocks.composerProps.onTextChange("Use source");
1337
+ });
1338
+ await act(async () => {
1339
+ expect(await chatMocks.composerProps.onBeforeSubmit()).toBe(true);
1340
+ await expect(
1341
+ chatMocks.composerProps.onSubmit("Use source", [], [], {
1342
+ intent: "immediate",
1343
+ contextItems: items,
1344
+ composerModeContext: "Internal scheduling instructions",
1345
+ }),
1346
+ ).rejects.toThrow("Source unavailable");
1347
+ });
1348
+ expect(release).toHaveBeenCalledExactlyOnceWith();
1349
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1350
+ expect(chatMocks.composerProps.contextItems).toEqual(items);
1351
+ expect(chatMocks.composerProps.initialText).toBe("Use source");
1352
+ if (failure === "prepare")
1353
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1354
+ },
1355
+ );
1356
+
1357
+ it("does not acknowledge provider context when the submission lock refuses a send", async () => {
1358
+ chatMocks.history = { beginSubmission: vi.fn(async () => null) };
1359
+ const items = [
1360
+ { key: "app-reference", title: "Reference", context: "Source" },
1361
+ ];
1362
+ const context: AssistantChatComposerContext = {
1363
+ menuItems: [],
1364
+ contextItems: items,
1365
+ onRemoveContextItem: vi.fn(),
1366
+ prepareSubmission: vi.fn(async () => items),
1367
+ submissionAccepted: vi.fn(),
1368
+ };
1369
+ const Provider = ({
1370
+ children,
1371
+ }: AssistantChatComposerContextProviderProps) => children(context);
1372
+ await mount(baseProps({ composerContextProvider: Provider }));
1373
+ await act(async () => {
1374
+ await expect(
1375
+ chatMocks.composerProps.onSubmit("Use source", [], [], {
1376
+ intent: "immediate",
1377
+ composerModeContext: "Internal scheduling instructions",
1378
+ }),
1379
+ ).rejects.toThrow();
1380
+ });
1381
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1382
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1383
+ });
1384
+
1385
+ it.each(["dropped", "additional", "duplicate"])(
1386
+ "rejects %s prepared context with a typed error",
1387
+ async (kind) => {
1388
+ const item = {
1389
+ key: "app-reference",
1390
+ title: "Reference",
1391
+ context: "Source",
1392
+ };
1393
+ const prepared =
1394
+ kind === "dropped"
1395
+ ? []
1396
+ : kind === "duplicate"
1397
+ ? [item, item]
1398
+ : [item, { ...item, key: "other" }];
1399
+ const context: AssistantChatComposerContext = {
1400
+ menuItems: [],
1401
+ contextItems: [item],
1402
+ onRemoveContextItem: vi.fn(),
1403
+ prepareSubmission: vi.fn(async () => prepared),
1404
+ submissionAccepted: vi.fn(),
1405
+ };
1406
+ const Provider = ({
1407
+ children,
1408
+ }: AssistantChatComposerContextProviderProps) => children(context);
1409
+ await mount(baseProps({ composerContextProvider: Provider }));
1410
+ await act(async () => {
1411
+ await expect(
1412
+ chatMocks.composerProps.onSubmit("Use source", [], [], {
1413
+ intent: "immediate",
1414
+ }),
1415
+ ).rejects.toMatchObject({ code: "composer_context_mismatch" });
1416
+ });
1417
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1418
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1419
+ },
1420
+ );
1421
+
1422
+ it.each([
1423
+ "disabled",
1424
+ "inactive",
1425
+ "readiness",
1426
+ "account",
1427
+ "identity",
1428
+ "thread",
1429
+ ])("rejects stale provider preparation after a %s change", async (change) => {
1430
+ const release = vi.fn();
1431
+ chatMocks.history = { beginSubmission: vi.fn(async () => release) };
1432
+ const items = [
1433
+ { key: "app-reference", title: "Reference", context: "Source" },
1434
+ ];
1435
+ const prepared = Promise.withResolvers<typeof items>();
1436
+ const context: AssistantChatComposerContext = {
1437
+ menuItems: [],
1438
+ contextItems: items,
1439
+ onRemoveContextItem: vi.fn(),
1440
+ prepareSubmission: vi.fn(() => prepared.promise),
1441
+ submissionAccepted: vi.fn(),
1442
+ };
1443
+ const mounts = vi.fn();
1444
+ const providerProps = vi.fn();
1445
+ function Provider(props: AssistantChatComposerContextProviderProps) {
1446
+ React.useEffect(() => {
1447
+ mounts();
1448
+ }, []);
1449
+ providerProps(props);
1450
+ return props.children(context);
1451
+ }
1452
+ const props = baseProps({
1453
+ composerContextProvider: Provider,
1454
+ providerStatusChecksEnabled: true,
1455
+ });
1456
+ await mount(props);
1457
+ let rejected!: Promise<unknown>;
1458
+ await act(async () => {
1459
+ chatMocks.composerProps.onTextChange("Use source");
1460
+ });
1461
+ await act(async () => {
1462
+ expect(await chatMocks.composerProps.onBeforeSubmit()).toBe(true);
1463
+ rejected = expect(
1464
+ chatMocks.composerProps.onSubmit("Use source", [], [], {
1465
+ intent: "immediate",
1466
+ composerModeContext: "Internal scheduling instructions",
1467
+ }),
1468
+ ).rejects.toThrow();
1469
+ });
1470
+ const next = { ...props };
1471
+ if (change === "disabled") next.composerDisabled = true;
1472
+ if (change === "inactive") next.isActiveComposer = false;
1473
+ if (change === "readiness")
1474
+ chatMocks.readiness = { canChat: false, missing: true, state: "missing" };
1475
+ if (change === "account")
1476
+ chatMocks.session = {
1477
+ authUserId: "user-2",
1478
+ email: "second@example.test",
1479
+ orgId: "workspace-2",
1480
+ };
1481
+ if (change === "identity")
1482
+ chatMocks.session = { ...chatMocks.session, authUserId: "user-2" };
1483
+ if (change === "thread") {
1484
+ next.threadId = "thread-2";
1485
+ chatMocks.threadId = "thread-2";
1486
+ }
1487
+ await act(async () => root.render(<AgentKitAssistantChat {...next} />));
1488
+ await act(async () => {
1489
+ prepared.resolve(items);
1490
+ await rejected;
1491
+ });
1492
+ expect(release).toHaveBeenCalledExactlyOnceWith();
1493
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1494
+ expect(context.submissionAccepted).not.toHaveBeenCalled();
1495
+ if (
1496
+ change === "disabled" ||
1497
+ change === "inactive" ||
1498
+ change === "readiness"
1499
+ ) {
1500
+ expect(chatMocks.composerProps.initialText).toBe("Use source");
1501
+ expect(chatMocks.composerProps.contextItems).toEqual(items);
1502
+ }
1503
+ if (change === "account" || change === "identity" || change === "thread")
1504
+ expect(mounts).toHaveBeenCalledTimes(2);
1505
+ if (change === "inactive")
1506
+ expect(providerProps.mock.lastCall?.[0].isActive).toBe(false);
1507
+ });
1508
+
1509
+ it("loads the model catalog only when the visible picker has no host catalog", async () => {
1510
+ await mount(baseProps());
1511
+ expect(chatMocks.composerProps.modelStatusChecksEnabled).toBe(true);
1512
+
1513
+ await unmount();
1514
+ await mount(baseProps({ availableModels: [], modelListLoading: true }));
1515
+ expect(chatMocks.composerProps.modelStatusChecksEnabled).toBe(false);
1516
+
1517
+ await unmount();
1518
+ await mount(baseProps({ showModelSelector: false }));
1519
+ expect(chatMocks.composerProps.modelStatusChecksEnabled).toBe(false);
1520
+ });
1521
+
1522
+ it("keeps the composer editable while provider readiness is checked", async () => {
1523
+ chatMocks.readiness = {
1524
+ canChat: false,
1525
+ missing: false,
1526
+ state: "unknown",
1527
+ };
1528
+ await mount(baseProps({ providerStatusChecksEnabled: true }));
1529
+
1530
+ expect(chatMocks.composerProps.disabled).toBe(false);
1531
+ expect(chatMocks.composerProps.submissionDisabled).toBe(false);
1532
+ expect(chatMocks.composerProps.requireAgentEngine).toBe(false);
1533
+ await expect(chatMocks.composerProps.onBeforeSubmit()).resolves.toBe(true);
1534
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1535
+ });
1536
+
1537
+ it("queues composer sends until provider readiness resolves", async () => {
1538
+ chatMocks.readiness = {
1539
+ canChat: false,
1540
+ missing: false,
1541
+ state: "unknown",
1542
+ };
1543
+ await mount(baseProps({ providerStatusChecksEnabled: true }));
1544
+ await flush();
1545
+
1546
+ await act(async () => {
1547
+ await expect(chatMocks.composerProps.onBeforeSubmit()).resolves.toBe(
1548
+ true,
1549
+ );
1550
+ await chatMocks.composerProps.onSubmit(
1551
+ "Send after provider discovery",
1552
+ [],
1553
+ [],
1554
+ {},
1555
+ );
1556
+ });
1557
+
1558
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1559
+ const stateKey = [...chatMocks.appState.keys()].find((key) =>
1560
+ key.startsWith("agentkit-deferred-provider-submissions:"),
1561
+ );
1562
+ expect(stateKey).toBeDefined();
1563
+ expect(chatMocks.appState.get(stateKey!)).toMatchObject({
1564
+ submissions: [{ text: "Send after provider discovery" }],
1565
+ });
1566
+
1567
+ await act(async () => {
1568
+ chatMocks.readiness = {
1569
+ canChat: true,
1570
+ missing: false,
1571
+ state: "configured",
1572
+ };
1573
+ root.render(
1574
+ <AgentKitAssistantChat
1575
+ {...baseProps({ providerStatusChecksEnabled: true })}
1576
+ />,
1577
+ );
1578
+ });
1579
+ await flush();
1580
+
1581
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
1582
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]?.text).toBe(
1583
+ "Send after provider discovery",
1584
+ );
1585
+ expect(chatMocks.appState.has(stateKey!)).toBe(false);
1586
+ });
1587
+
1588
+ it("keeps the draft rejected if provider status becomes missing before submit", async () => {
1589
+ chatMocks.readiness = {
1590
+ canChat: false,
1591
+ missing: false,
1592
+ state: "unknown",
1593
+ };
1594
+ await mount(baseProps({ providerStatusChecksEnabled: true }));
1595
+ await expect(chatMocks.composerProps.onBeforeSubmit()).resolves.toBe(true);
1596
+
1597
+ await act(async () => {
1598
+ chatMocks.readiness = {
1599
+ canChat: false,
1600
+ missing: true,
1601
+ state: "missing",
1602
+ };
1603
+ root.render(
1604
+ <AgentKitAssistantChat
1605
+ {...baseProps({ providerStatusChecksEnabled: true })}
1606
+ />,
1607
+ );
1608
+ });
1609
+
1610
+ await expect(
1611
+ chatMocks.composerProps.onSubmit("Keep until connected", [], [], {}),
1612
+ ).rejects.toThrow("agentChat.recovery.deferredSubmissionFailed");
1613
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1614
+ expect(
1615
+ [...chatMocks.appState.keys()].some((key) =>
1616
+ key.startsWith("agentkit-deferred-provider-submissions:"),
1617
+ ),
1618
+ ).toBe(false);
1619
+ });
1620
+
1621
+ it("sends a draft once provider readiness resolves", async () => {
1622
+ chatMocks.readiness = {
1623
+ canChat: false,
1624
+ missing: false,
1625
+ state: "unknown",
1626
+ };
1627
+ await mount(
1628
+ baseProps({
1629
+ providerStatusChecksEnabled: true,
1630
+ composerSubmissionDisabled: true,
1631
+ }),
1632
+ );
1633
+
1634
+ expect(chatMocks.composerProps.submissionDisabled).toBe(true);
1635
+ await expect(chatMocks.composerProps.onBeforeSubmit()).resolves.toBe(false);
1636
+
1637
+ await act(async () => {
1638
+ chatMocks.readiness = {
1639
+ canChat: true,
1640
+ missing: false,
1641
+ state: "configured",
1642
+ };
1643
+ root.render(
1644
+ <AgentKitAssistantChat
1645
+ {...baseProps({
1646
+ providerStatusChecksEnabled: true,
1647
+ composerSubmissionDisabled: false,
1648
+ })}
1649
+ />,
1650
+ );
1651
+ });
1652
+
1653
+ expect(chatMocks.composerProps.submissionDisabled).toBe(false);
1654
+ await act(async () => {
1655
+ await chatMocks.composerProps.onSubmit(
1656
+ "Send after discovery",
1657
+ [],
1658
+ [],
1659
+ {},
1660
+ );
1661
+ });
1662
+
1663
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
1664
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]?.text).toBe(
1665
+ "Send after discovery",
1666
+ );
1667
+ });
1668
+
1669
+ it("keeps the composer editable when the host blocks submission", async () => {
1670
+ await mount(
1671
+ baseProps({
1672
+ providerStatusChecksEnabled: false,
1673
+ composerSubmissionDisabled: true,
1674
+ }),
1675
+ );
1676
+
1677
+ expect(chatMocks.composerProps.disabled).toBe(false);
1678
+ expect(chatMocks.composerProps.submissionDisabled).toBe(true);
1679
+ await expect(chatMocks.composerProps.onBeforeSubmit()).resolves.toBe(false);
1680
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1681
+ });
1682
+
1683
+ it.each([
1684
+ {
1685
+ centerComposerWhenEmpty: false,
1686
+ suggestionPlacement: "context-chips" as const,
1687
+ },
1688
+ {
1689
+ centerComposerWhenEmpty: true,
1690
+ suggestionPlacement: "context-chips" as const,
1691
+ },
1692
+ {
1693
+ centerComposerWhenEmpty: true,
1694
+ suggestionPlacement: "after-composer" as const,
1695
+ },
1696
+ ])(
1697
+ "hides suggestions without AI for $suggestionPlacement (centered=$centerComposerWhenEmpty)",
1698
+ async (placement) => {
1699
+ const props = baseProps({
1700
+ ...placement,
1701
+ providerStatusChecksEnabled: true,
1702
+ suggestions: ["Explore my apps"],
1703
+ });
1704
+ await mount(props);
1705
+ for (const state of [
1706
+ "configured",
1707
+ "missing",
1708
+ "unknown",
1709
+ "unavailable",
1710
+ "configured",
1711
+ ]) {
1712
+ const ready = state === "configured";
1713
+ chatMocks.readiness = {
1714
+ canChat: ready,
1715
+ missing: state === "missing",
1716
+ state,
1717
+ };
1718
+ await act(async () =>
1719
+ root.render(<AgentKitAssistantChat {...props} />),
1720
+ );
1721
+ expect(
1722
+ Boolean(
1723
+ container.querySelector('[data-testid="agentkit-suggestion-bar"]'),
1724
+ ),
1725
+ ).toBe(ready);
1726
+ expect(chatMocks.dynamicSuggestionOptions.enabled).toBe(ready);
1727
+ expect(chatMocks.composerProps.disabled).toBe(
1728
+ !ready && state !== "unknown" && state !== "unavailable",
1729
+ );
1730
+ }
1731
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
1732
+ },
1733
+ );
1734
+
1735
+ it("places starter prompts between the composer and after-composer content", async () => {
1736
+ chatMocks.renderEmptyState = true;
1737
+ await mount(
1738
+ baseProps({
1739
+ centerComposerWhenEmpty: true,
1740
+ suggestionPlacement: "after-composer",
1741
+ emptyStateDisplay: "default",
1742
+ homeIntroSlot: <h1>What should we do?</h1>,
1743
+ afterComposerSlot: <div data-testid="home-app-grid" />,
1744
+ suggestions: ["Explore my apps"],
1745
+ }),
1746
+ );
1747
+
1748
+ const composer = container.querySelector(".agentkit-host-composer");
1749
+ expect(
1750
+ composer?.querySelector(".agentkit-home-intro h1")?.textContent,
1751
+ ).toBe("What should we do?");
1752
+ expect(chatMocks.dynamicSuggestionOptions.staticSuggestions).toEqual([
1753
+ "Explore my apps",
1754
+ ]);
1755
+ expect(chatMocks.suggestionBarProps.className).toBe(
1756
+ "agentkit-home-suggestions",
1757
+ );
1758
+ expect(chatMocks.chatProps.emptyComposerPlacement).toBe("center");
1759
+ const composerElement = container.querySelector(
1760
+ '[data-testid="agentkit-composer"]',
1761
+ );
1762
+ const suggestionElement = container.querySelector(
1763
+ ".agentkit-home-suggestions",
1764
+ );
1765
+ const afterComposerElement = container.querySelector(
1766
+ ".agentkit-after-composer-slot",
1767
+ );
1768
+ expect(composerElement).not.toBeNull();
1769
+ expect(suggestionElement).not.toBeNull();
1770
+ expect(afterComposerElement).not.toBeNull();
1771
+ expect(
1772
+ composerElement!.compareDocumentPosition(suggestionElement!) &
1773
+ Node.DOCUMENT_POSITION_FOLLOWING,
1774
+ ).toBeTruthy();
1775
+ expect(
1776
+ suggestionElement!.compareDocumentPosition(afterComposerElement!) &
1777
+ Node.DOCUMENT_POSITION_FOLLOWING,
1778
+ ).toBeTruthy();
1779
+ expect(
1780
+ container.querySelectorAll('[data-testid="agentkit-suggestion-bar"]'),
1781
+ ).toHaveLength(1);
1782
+ expect(
1783
+ container
1784
+ .querySelector("button")
1785
+ ?.closest('[data-testid="agentkit-suggestion-bar"]'),
1786
+ ).toBe(suggestionElement);
1787
+ expect(container.querySelector(".agentkit-host-suggestions")).toBeNull();
1788
+ expect(
1789
+ composer?.querySelector(".agentkit-after-composer-slot"),
1790
+ ).not.toBeNull();
1791
+ });
1792
+
1793
+ it("keeps transient voice messages scoped to the active thread", async () => {
1794
+ const base = baseProps({
1795
+ centerComposerWhenEmpty: true,
1796
+ suggestionPlacement: "context-chips",
1797
+ homeIntroSlot: <h1>What should we do?</h1>,
1798
+ suggestions: ["Explore my apps"],
1799
+ });
1800
+ await mount(base);
1801
+
1802
+ const firstThreadRegistration = chatMocks.voiceTranscriptRegistration;
1803
+ await act(async () => {
1804
+ expect(
1805
+ firstThreadRegistration.append({
1806
+ id: "voice-message-1",
1807
+ threadId: "thread-1",
1808
+ role: "user",
1809
+ text: "Summarize this call",
1810
+ createdAt: "2026-09-27T12:00:00.000Z",
1811
+ }),
1812
+ ).toBe(true);
1813
+ });
1814
+ expect(chatMocks.chatProps.hasRenderedMessages).toBe(true);
1815
+
1816
+ chatMocks.threadId = "thread-2";
1817
+ await act(async () => {
1818
+ root.render(
1819
+ <AgentKitAssistantChat
1820
+ {...baseProps({
1821
+ ...base,
1822
+ threadId: "thread-2",
1823
+ })}
1824
+ />,
1825
+ );
1826
+ });
1827
+
1828
+ expect(chatMocks.chatProps.hasRenderedMessages).toBe(false);
1829
+ expect(chatMocks.chatProps.emptyComposerPlacement).toBe("center");
1830
+ expect(container.querySelector(".agentkit-home-intro")).not.toBeNull();
1831
+ expect(
1832
+ firstThreadRegistration.append({
1833
+ id: "voice-message-2",
1834
+ threadId: "thread-1",
1835
+ role: "user",
1836
+ text: "Ignore the stale sink",
1837
+ createdAt: "2026-09-27T12:01:00.000Z",
1838
+ }),
1839
+ ).toBe(false);
1840
+ });
1841
+
1842
+ it("uses custom conversation content in the empty-state layout", async () => {
1843
+ await mount(
1844
+ baseProps({
1845
+ centerComposerWhenEmpty: true,
1846
+ homeIntroSlot: <h1>What should we do?</h1>,
1847
+ threadContentSlot: <div>Existing conversation content</div>,
1848
+ }),
1849
+ );
1850
+
1851
+ expect(chatMocks.chatProps.hasRenderedMessages).toBe(true);
1852
+ expect(container.textContent).toContain("Existing conversation content");
1853
+ expect(container.querySelector(".agentkit-home-intro")).toBeNull();
1854
+ });
1855
+
1856
+ it("puts the beginning revert before messages inside the scrollable transcript", async () => {
1857
+ chatMocks.thread.messages = [
1858
+ { id: "first-message", role: "user", parts: [] },
1859
+ ];
1860
+ await mount(baseProps());
1861
+
1862
+ const revert = container.querySelector(
1863
+ '[data-testid="history-beginning-revert"]',
1864
+ );
1865
+ const firstMessage = container.querySelector(
1866
+ '[data-testid="first-transcript-message"]',
1867
+ );
1868
+ expect(chatMocks.chatProps.toolbar).toBeUndefined();
1869
+ expect(revert?.closest(".agentkit-transcript-content")).not.toBeNull();
1870
+ expect(
1871
+ revert!.compareDocumentPosition(firstMessage!) &
1872
+ Node.DOCUMENT_POSITION_FOLLOWING,
1873
+ ).toBeTruthy();
1874
+ });
1875
+
1876
+ it("provides the host-pinned thinking display to the direct AgentKit surface", async () => {
1877
+ await mount(baseProps({ thinkingDisplay: "hidden" }));
1878
+
1879
+ expect(chatMocks.thinkingDisplay).toBe("hidden");
1880
+ });
1881
+
1882
+ it("keeps its transport stable while runtime selector refs update", async () => {
1883
+ const initialScope = { type: "document", id: "doc-1" };
1884
+ await mount(
1885
+ baseProps({
1886
+ selectedModel: "model-1",
1887
+ selectedEngine: "engine-1",
1888
+ selectedEffort: "low",
1889
+ execMode: "build",
1890
+ contextScope: initialScope,
1891
+ streamingUrl: "https://stream.example.test/agent-chat",
1892
+ }),
1893
+ );
1894
+ const transport = chatMocks.rootProps.transport;
1895
+ const runtimeOptions = chatMocks.runtimeOptions;
1896
+
1897
+ await act(async () => {
1898
+ root.render(
1899
+ <AgentKitAssistantChat
1900
+ {...baseProps({
1901
+ selectedModel: "model-2",
1902
+ selectedEngine: "engine-2",
1903
+ selectedEffort: "high",
1904
+ execMode: "plan",
1905
+ contextScope: { type: "document", id: "doc-2" },
1906
+ streamingUrl: "https://stream.example.test/agent-chat",
1907
+ })}
1908
+ />,
1909
+ );
1910
+ });
1911
+
1912
+ expect(chatMocks.rootProps.transport).toBe(transport);
1913
+ expect(chatMocks.createRuntime).toHaveBeenCalledOnce();
1914
+ expect(runtimeOptions.model).toBe("model-2");
1915
+ expect(runtimeOptions.engine).toBe("engine-2");
1916
+ expect(runtimeOptions.effort).toBe("high");
1917
+ expect(runtimeOptions.mode).toBe("plan");
1918
+ expect(runtimeOptions.scope).toEqual({ type: "document", id: "doc-2" });
1919
+ expect(runtimeOptions.streamingUrl).toBe(
1920
+ "https://stream.example.test/agent-chat",
1921
+ );
1922
+ });
1923
+
1924
+ it("keeps the managed AgentKit transport alive across restore retries and thread changes", async () => {
1925
+ await mount(baseProps({ isNewThread: false }));
1926
+ const transport = chatMocks.rootProps.transport;
1927
+ expect(chatMocks.transportOptions.threadId).toBe("thread-1");
1928
+ expect(chatMocks.runtimeOptions.threadId).toBe("thread-1");
1929
+ expect(chatMocks.rootProps.clientOptions).toMatchObject({
1930
+ retainActiveRunsOnThreadRelease: true,
1931
+ });
1932
+
1933
+ await act(async () => {
1934
+ chatMocks.rootProps.onLoadError(
1935
+ Object.assign(new Error("offline"), { status: 503 }),
1936
+ );
1937
+ });
1938
+ const retryButton = container.querySelector("button");
1939
+ expect(retryButton).not.toBeNull();
1940
+ vi.useFakeTimers();
1941
+ try {
1942
+ await act(async () => retryButton!.click());
1943
+ expect(chatMocks.rootProps.load).toBe("manual");
1944
+ await act(async () => vi.runOnlyPendingTimersAsync());
1945
+ expect(chatMocks.rootProps.load).toBe("auto");
1946
+ } finally {
1947
+ vi.useRealTimers();
1948
+ }
1949
+ expect(chatMocks.rootProps.transport).toBe(transport);
1950
+
1951
+ await act(async () => {
1952
+ root.render(
1953
+ <AgentKitAssistantChat
1954
+ {...baseProps({ isNewThread: false, threadId: "thread-2" })}
1955
+ />,
1956
+ );
1957
+ });
1958
+ expect(chatMocks.rootProps.transport).toBe(transport);
1959
+ expect(chatMocks.transportOptions.threadId).toBe("thread-2");
1960
+ expect(chatMocks.runtimeOptions.threadId).toBe("thread-2");
1961
+ });
1962
+
1963
+ it("keeps the composer text callback stable across host rerenders", async () => {
1964
+ await mount(baseProps({ selectedModel: "model-1" }));
1965
+ const onTextChange = chatMocks.composerProps.onTextChange;
1966
+
1967
+ await act(async () => {
1968
+ root.render(
1969
+ <AgentKitAssistantChat {...baseProps({ selectedModel: "model-2" })} />,
1970
+ );
1971
+ });
1972
+
1973
+ expect(chatMocks.composerProps.onTextChange).toBe(onTextChange);
1974
+ });
1975
+
1976
+ it("blocks attachments until file storage is configured", async () => {
1977
+ chatMocks.fileUploadStatus = {
1978
+ data: { configured: false },
1979
+ isError: false,
1980
+ isLoading: false,
1981
+ refetch: vi.fn(),
1982
+ };
1983
+
1984
+ await mount(baseProps());
1985
+
1986
+ expect(chatMocks.fileStoragePopoverProps).toMatchObject({
1987
+ open: false,
1988
+ status: "missing",
1989
+ });
1990
+ expect(chatMocks.composerProps.attachmentsEnabled).toBe(false);
1991
+ expect(chatMocks.composerProps.onAttachmentRequest).toEqual(
1992
+ expect.any(Function),
1993
+ );
1994
+ expect(chatMocks.chatProps.composerProps.attachmentsEnabled).toBe(false);
1995
+
1996
+ await act(async () => chatMocks.composerProps.onAttachmentRequest());
1997
+ expect(chatMocks.fileStoragePopoverProps.open).toBe(true);
1998
+ expect(
1999
+ chatMocks.fileStoragePopoverProps.anchorRef.current.classList.contains(
2000
+ "agentkit-host-composer",
2001
+ ),
2002
+ ).toBe(true);
2003
+
2004
+ chatMocks.fileUploadStatus = {
2005
+ data: { configured: true },
2006
+ isError: false,
2007
+ isLoading: false,
2008
+ refetch: vi.fn(),
2009
+ };
2010
+ chatMocks.fileStoragePopoverProps = null;
2011
+ await act(async () => {
2012
+ root.render(<AgentKitAssistantChat {...baseProps()} />);
2013
+ });
2014
+
2015
+ expect(chatMocks.fileStoragePopoverProps.open).toBe(false);
2016
+ expect(chatMocks.composerProps.attachmentsEnabled).toBe(true);
2017
+ expect(chatMocks.chatProps.composerProps.attachmentsEnabled).toBe(true);
2018
+ });
2019
+
2020
+ it("does not show a storage setup prompt while its status is loading", async () => {
2021
+ chatMocks.fileUploadStatus = {
2022
+ data: undefined,
2023
+ isError: false,
2024
+ isLoading: true,
2025
+ refetch: vi.fn(),
2026
+ };
2027
+
2028
+ await mount(baseProps());
2029
+
2030
+ expect(chatMocks.fileStoragePopoverProps).toMatchObject({
2031
+ open: false,
2032
+ status: "unavailable",
2033
+ });
2034
+ expect(chatMocks.composerProps.attachmentsEnabled).toBe(false);
2035
+ });
2036
+
2037
+ it("keeps upload-status retry inside the explicit storage dialog", async () => {
2038
+ const refetch = vi.fn();
2039
+ chatMocks.fileUploadStatus = {
2040
+ data: undefined,
2041
+ isError: true,
2042
+ isLoading: false,
2043
+ refetch,
2044
+ };
2045
+
2046
+ await mount(baseProps());
2047
+
2048
+ expect(chatMocks.fileStoragePopoverProps).toMatchObject({
2049
+ open: false,
2050
+ status: "unavailable",
2051
+ onRetry: expect.any(Function),
2052
+ });
2053
+ await act(async () => chatMocks.composerProps.onAttachmentRequest());
2054
+ expect(chatMocks.fileStoragePopoverProps.open).toBe(true);
2055
+ await act(async () => chatMocks.fileStoragePopoverProps.onRetry());
2056
+ expect(refetch).toHaveBeenCalledOnce();
2057
+ });
2058
+
2059
+ it("rejects imperative uploads while file storage is unavailable", async () => {
2060
+ chatMocks.fileUploadStatus = {
2061
+ data: { configured: false },
2062
+ isError: false,
2063
+ isLoading: false,
2064
+ refetch: vi.fn(),
2065
+ };
2066
+ const ref = createRef<AssistantChatHandle>();
2067
+ container = document.createElement("div");
2068
+ document.body.appendChild(container);
2069
+ root = createRoot(container);
2070
+ await act(async () => {
2071
+ root.render(<AgentKitAssistantChat ref={ref} {...baseProps()} />);
2072
+ });
2073
+
2074
+ await expect(
2075
+ ref.current?.sendMessage("Analyze this file", undefined, {
2076
+ attachments: [
2077
+ { type: "text/plain", name: "notes.txt", text: "private notes" },
2078
+ ],
2079
+ }),
2080
+ ).rejects.toThrow("onboarding.fileStorage.title");
2081
+
2082
+ expect(chatMocks.control.uploadFiles).not.toHaveBeenCalled();
2083
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
2084
+ });
2085
+
2086
+ it("uploads composer files once and keeps pasted text in the prompt", async () => {
2087
+ await mount(baseProps());
2088
+ const image = new File(["image bytes"], "slide-image.png", {
2089
+ type: "image/png",
2090
+ });
2091
+ chatMocks.control.uploadFiles.mockResolvedValueOnce([
2092
+ {
2093
+ type: "file",
2094
+ name: image.name,
2095
+ mediaType: image.type,
2096
+ url: "https://files.example.test/slide-image.png",
2097
+ },
2098
+ ]);
2099
+
2100
+ await act(async () => {
2101
+ await chatMocks.composerProps.onSubmit(
2102
+ "Describe this slide",
2103
+ [image],
2104
+ [],
2105
+ {
2106
+ attachments: [
2107
+ { id: "image-1", type: "image", name: image.name, file: image },
2108
+ ],
2109
+ },
2110
+ );
2111
+ });
2112
+
2113
+ expect(chatMocks.control.uploadFiles).toHaveBeenCalledOnce();
2114
+ expect(chatMocks.control.uploadFiles.mock.calls[0]?.[0]).toMatchObject([
2115
+ { name: image.name, mediaType: "image/png", size: image.size },
2116
+ ]);
2117
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]).toMatchObject({
2118
+ text: "Describe this slide",
2119
+ attachments: [
2120
+ {
2121
+ name: image.name,
2122
+ url: "https://files.example.test/slide-image.png",
2123
+ },
2124
+ ],
2125
+ });
2126
+
2127
+ await act(async () => {
2128
+ await chatMocks.composerProps.onSubmit(
2129
+ "Summarize this pasted text:\n\nFull pasted document text",
2130
+ [],
2131
+ [],
2132
+ {
2133
+ attachments: [
2134
+ {
2135
+ id: "pasted-text-1",
2136
+ type: "file",
2137
+ name: "pasted-text-1.txt",
2138
+ file: new File(
2139
+ ["Full pasted document text"],
2140
+ "pasted-text-1.txt",
2141
+ {
2142
+ type: "text/plain",
2143
+ },
2144
+ ),
2145
+ },
2146
+ ],
2147
+ },
2148
+ );
2149
+ });
2150
+
2151
+ expect(chatMocks.control.uploadFiles).toHaveBeenCalledOnce();
2152
+ expect(chatMocks.control.sendMessage.mock.calls[1]?.[0]).toMatchObject({
2153
+ text: "Summarize this pasted text:\n\nFull pasted document text",
2154
+ attachments: [],
2155
+ });
2156
+ });
2157
+
2158
+ it("sends without waiting for pending-selection cleanup", async () => {
2159
+ chatMocks.appState.set("pending-selection-context", {
2160
+ text: "Selected text",
2161
+ capturedAt: Date.now(),
2162
+ });
2163
+ let resolveDelete!: () => void;
2164
+ vi.mocked(deleteClientAppState).mockImplementationOnce((key) => {
2165
+ return new Promise<void>((resolve) => {
2166
+ resolveDelete = () => {
2167
+ chatMocks.appState.delete(key);
2168
+ resolve();
2169
+ };
2170
+ });
2171
+ });
2172
+ await mount(baseProps());
2173
+ await flush();
2174
+
2175
+ let submitPromise!: Promise<void>;
2176
+ await act(async () => {
2177
+ submitPromise = chatMocks.composerProps.onSubmit(
2178
+ "Send promptly",
2179
+ [],
2180
+ [],
2181
+ {},
2182
+ );
2183
+ await new Promise((resolve) => setTimeout(resolve, 0));
2184
+ });
2185
+
2186
+ expect(resolveDelete).toBeDefined();
2187
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
2188
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]).toMatchObject({
2189
+ options: {
2190
+ metadata: { agentNativeSkipPendingSelectionContext: true },
2191
+ },
2192
+ });
2193
+
2194
+ await act(async () => {
2195
+ resolveDelete();
2196
+ await submitPromise;
2197
+ });
2198
+ await flush();
2199
+
2200
+ expect(chatMocks.appState.has("pending-selection-context")).toBe(false);
2201
+ });
2202
+
2203
+ it.each(["immediate", "queued"])(
2204
+ "preserves pending selection when an %s send is rejected",
2205
+ async (intent) => {
2206
+ chatMocks.appState.set("pending-selection-context", {
2207
+ text: "Keep this selection",
2208
+ capturedAt: Date.now(),
2209
+ });
2210
+ const send =
2211
+ intent === "queued"
2212
+ ? chatMocks.control.queueMessage
2213
+ : chatMocks.control.sendMessage;
2214
+ send.mockRejectedValueOnce(new Error("Send refused"));
2215
+ await mount(baseProps());
2216
+ await flush();
2217
+ await act(async () => {
2218
+ await expect(
2219
+ chatMocks.composerProps.onSubmit("Use selection", [], [], { intent }),
2220
+ ).rejects.toThrow("Send refused");
2221
+ });
2222
+ expect(deleteClientAppState).not.toHaveBeenCalledWith(
2223
+ "pending-selection-context",
2224
+ expect.anything(),
2225
+ );
2226
+ expect(chatMocks.appState.has("pending-selection-context")).toBe(true);
2227
+ await act(async () => {
2228
+ await chatMocks.composerProps.onSubmit("Retry", [], [], { intent });
2229
+ });
2230
+ expect(send.mock.calls[1]?.[0]?.text).toContain("Keep this selection");
2231
+ expect(chatMocks.appState.has("pending-selection-context")).toBe(false);
2232
+ },
2233
+ );
2234
+
2235
+ it("keeps pending selection available when persisted cleanup fails", async () => {
2236
+ chatMocks.appState.set("pending-selection-context", {
2237
+ text: "retry selection",
2238
+ capturedAt: Date.now(),
2239
+ });
2240
+ vi.mocked(deleteClientAppState).mockRejectedValueOnce(
2241
+ new Error("network unavailable"),
2242
+ );
2243
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => {});
2244
+ try {
2245
+ await mount(baseProps());
2246
+ await flush();
2247
+
2248
+ await act(async () => {
2249
+ await chatMocks.composerProps.onSubmit("First attempt", [], [], {});
2250
+ });
2251
+ await flush();
2252
+
2253
+ expect(chatMocks.appState.has("pending-selection-context")).toBe(true);
2254
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]?.text).toContain(
2255
+ "retry selection",
2256
+ );
2257
+
2258
+ await act(async () => {
2259
+ await chatMocks.composerProps.onSubmit("Retry", [], [], {});
2260
+ });
2261
+ await flush();
2262
+
2263
+ expect(chatMocks.control.sendMessage.mock.calls[1]?.[0]?.text).toContain(
2264
+ "retry selection",
2265
+ );
2266
+ expect(chatMocks.appState.has("pending-selection-context")).toBe(false);
2267
+ } finally {
2268
+ warn.mockRestore();
2269
+ }
2270
+ });
2271
+
2272
+ it("does not clear persisted selection when hydration fails", async () => {
2273
+ chatMocks.appState.set("pending-selection-context", {
2274
+ text: "selection to preserve",
2275
+ capturedAt: Date.now(),
2276
+ });
2277
+ vi.mocked(readClientAppState).mockImplementation(async (key) => {
2278
+ if (key === "pending-selection-context") {
2279
+ throw new Error("network unavailable");
2280
+ }
2281
+ return chatMocks.appState.get(key) ?? null;
2282
+ });
2283
+
2284
+ await mount(baseProps());
2285
+ await flush();
2286
+
2287
+ await act(async () => {
2288
+ await chatMocks.composerProps.onSubmit(
2289
+ "Send without selection",
2290
+ [],
2291
+ [],
2292
+ {},
2293
+ );
2294
+ });
2295
+
2296
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
2297
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]).toMatchObject({
2298
+ text: "Send without selection",
2299
+ });
2300
+ expect(
2301
+ chatMocks.control.sendMessage.mock.calls[0]?.[0]?.options?.metadata,
2302
+ ).not.toHaveProperty("agentNativeSkipPendingSelectionContext");
2303
+ expect(deleteClientAppState).not.toHaveBeenCalled();
2304
+ expect(chatMocks.appState.has("pending-selection-context")).toBe(true);
2305
+ });
2306
+
2307
+ it("preserves a selection attached while composer files upload", async () => {
2308
+ let resolveUpload!: (
2309
+ parts: Awaited<ReturnType<typeof chatMocks.control.uploadFiles>>,
2310
+ ) => void;
2311
+ chatMocks.control.uploadFiles.mockImplementationOnce(
2312
+ () => new Promise((resolve) => (resolveUpload = resolve)),
2313
+ );
2314
+ await mount(baseProps());
2315
+ await flush();
2316
+
2317
+ const image = new File(["image bytes"], "slide-image.png", {
2318
+ type: "image/png",
2319
+ });
2320
+ let submitPromise!: Promise<void>;
2321
+ await act(async () => {
2322
+ submitPromise = chatMocks.composerProps.onSubmit(
2323
+ "Describe this slide",
2324
+ [image],
2325
+ [],
2326
+ {
2327
+ attachments: [
2328
+ { id: "image-1", type: "image", name: image.name, file: image },
2329
+ ],
2330
+ },
2331
+ );
2332
+ await new Promise((resolve) => setTimeout(resolve, 0));
2333
+ });
2334
+
2335
+ const capturedAt = Date.now();
2336
+ await act(async () => {
2337
+ window.dispatchEvent(
2338
+ new CustomEvent("agent-panel:selection-attached", {
2339
+ detail: { text: "New selection" },
2340
+ }),
2341
+ );
2342
+ chatMocks.appState.set("pending-selection-context", {
2343
+ text: "New selection",
2344
+ capturedAt,
2345
+ });
2346
+ resolveUpload([
2347
+ {
2348
+ type: "file",
2349
+ name: image.name,
2350
+ mediaType: image.type,
2351
+ url: "https://files.example.test/slide-image.png",
2352
+ },
2353
+ ]);
2354
+ await submitPromise;
2355
+ });
2356
+
2357
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
2358
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]).toMatchObject({
2359
+ text: "Describe this slide",
2360
+ options: {
2361
+ metadata: { agentNativeSkipPendingSelectionContext: true },
2362
+ },
2363
+ });
2364
+ expect(deleteClientAppState).not.toHaveBeenCalled();
2365
+ expect(chatMocks.appState.get("pending-selection-context")).toEqual({
2366
+ text: "New selection",
2367
+ capturedAt,
2368
+ });
2369
+ });
2370
+
2371
+ it("hydrates pending selection before constructing the send", async () => {
2372
+ let resolveSelectionRead!: (value: unknown) => void;
2373
+ vi.mocked(readClientAppState).mockImplementation(async (key) => {
2374
+ if (key === "pending-selection-context") {
2375
+ return await new Promise((resolve) => {
2376
+ resolveSelectionRead = resolve;
2377
+ });
2378
+ }
2379
+ return chatMocks.appState.get(key) ?? null;
2380
+ });
2381
+ await mount(baseProps());
2382
+
2383
+ let submitPromise!: Promise<void>;
2384
+ await act(async () => {
2385
+ submitPromise = chatMocks.composerProps.onSubmit(
2386
+ "Use the selected text",
2387
+ [],
2388
+ [],
2389
+ {},
2390
+ );
2391
+ await new Promise((resolve) => setTimeout(resolve, 0));
2392
+ });
2393
+
2394
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
2395
+ expect(deleteClientAppState).not.toHaveBeenCalled();
2396
+
2397
+ await act(async () => {
2398
+ resolveSelectionRead({
2399
+ value: { text: "Hydrated selection", capturedAt: Date.now() },
2400
+ });
2401
+ await submitPromise;
2402
+ });
2403
+
2404
+ expect(chatMocks.control.sendMessage.mock.calls[0]?.[0]).toMatchObject({
2405
+ text: expect.stringContaining("Hydrated selection"),
2406
+ options: {
2407
+ metadata: { agentNativeSkipPendingSelectionContext: true },
2408
+ },
2409
+ });
2410
+ });
2411
+
2412
+ it("durably queues unresolved sends with files and references across remounts", async () => {
2413
+ chatMocks.readiness = {
2414
+ canChat: false,
2415
+ missing: false,
2416
+ state: "unknown",
2417
+ };
2418
+ const initialCapturedAt = Date.now();
2419
+ chatMocks.appState.set("pending-selection-context", {
2420
+ text: "Initial selection",
2421
+ capturedAt: initialCapturedAt,
2422
+ });
2423
+ let resolveUpload!: (
2424
+ parts: Awaited<ReturnType<typeof chatMocks.control.uploadFiles>>,
2425
+ ) => void;
2426
+ chatMocks.control.uploadFiles.mockImplementationOnce(
2427
+ () => new Promise((resolve) => (resolveUpload = resolve)),
2428
+ );
2429
+ chatMocks.guidedQuestions = [{ id: "question-1" }];
2430
+ const ref = createRef<AssistantChatHandle>();
2431
+ container = document.createElement("div");
2432
+ document.body.appendChild(container);
2433
+ root = createRoot(container);
2434
+ const props = baseProps({
2435
+ providerStatusChecksEnabled: true,
2436
+ tabId: "tab-1",
2437
+ });
2438
+ await act(async () => {
2439
+ root.render(<AgentKitAssistantChat ref={ref} {...props} />);
2440
+ });
2441
+ const results: CustomEvent[] = [];
2442
+ const listener = (event: Event) => results.push(event as CustomEvent);
2443
+ window.addEventListener(AGENT_CHAT_SUBMIT_RESULT_EVENT, listener);
2444
+ const reference = {
2445
+ type: "file",
2446
+ path: "notes.txt",
2447
+ name: "notes.txt",
2448
+ source: "composer",
2449
+ } as const;
2450
+
2451
+ let deferredSend!: Promise<AssistantChatSubmitResult>;
2452
+ await act(async () => {
2453
+ ref.current?.prefillMessage("Visible composer draft");
2454
+ deferredSend = ref.current!.sendMessage(
2455
+ "Wait for the provider",
2456
+ undefined,
2457
+ {
2458
+ submitMessageId: "pending-provider-submit",
2459
+ attachments: [
2460
+ {
2461
+ type: "text/plain",
2462
+ name: "notes.txt",
2463
+ text: "private attachment body",
2464
+ },
2465
+ ],
2466
+ recoveryReferences: [reference],
2467
+ } as AssistantChatSendOptions,
2468
+ );
2469
+ await new Promise((resolve) => setTimeout(resolve, 0));
2470
+ });
2471
+ const nextCapturedAt = initialCapturedAt + 1;
2472
+ await act(async () => {
2473
+ window.dispatchEvent(
2474
+ new CustomEvent("agent-panel:selection-attached", {
2475
+ detail: { text: "Selection for the next prompt" },
2476
+ }),
2477
+ );
2478
+ chatMocks.appState.set("pending-selection-context", {
2479
+ text: "Selection for the next prompt",
2480
+ capturedAt: nextCapturedAt,
2481
+ });
2482
+ resolveUpload([
2483
+ {
2484
+ type: "file",
2485
+ name: "notes.txt",
2486
+ mediaType: "text/plain",
2487
+ url: "https://files.example.test/notes.txt",
2488
+ },
2489
+ ]);
2490
+ await deferredSend;
2491
+ });
2492
+
2493
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
2494
+ expect(results.map((event) => event.detail)).toEqual([
2495
+ { submitMessageId: "pending-provider-submit", delivered: true },
2496
+ ]);
2497
+ expect(chatMocks.composerProps.initialText).toBe("Visible composer draft");
2498
+ expect(chatMocks.guidedFlowProps).toMatchObject({
2499
+ isSubmissionBlocked: true,
2500
+ providerStatus: "unknown",
2501
+ });
2502
+ const stateKey = [...chatMocks.appState.keys()].find((key) =>
2503
+ key.startsWith("agentkit-deferred-provider-submissions:"),
2504
+ );
2505
+ expect(stateKey).toBeDefined();
2506
+ const persisted = chatMocks.appState.get(stateKey!) as {
2507
+ submissions: Array<{
2508
+ fileParts: unknown[];
2509
+ options: {
2510
+ pendingSelectionCapturedAt: number | null;
2511
+ recoveryReferences: unknown[];
2512
+ skipAmbientSelectionContext: boolean;
2513
+ };
2514
+ }>;
2515
+ };
2516
+ expect(persisted.submissions[0]).toMatchObject({
2517
+ fileParts: [
2518
+ {
2519
+ type: "file",
2520
+ name: "notes.txt",
2521
+ url: "https://files.example.test/notes.txt",
2522
+ },
2523
+ ],
2524
+ options: {
2525
+ pendingSelectionCapturedAt: initialCapturedAt,
2526
+ recoveryReferences: [reference],
2527
+ skipAmbientSelectionContext: true,
2528
+ },
2529
+ });
2530
+ expect(JSON.stringify(persisted)).not.toContain("private attachment body");
2531
+
2532
+ await unmount();
2533
+ root = undefined as unknown as Root;
2534
+
2535
+ chatMocks.readiness = {
2536
+ canChat: true,
2537
+ missing: false,
2538
+ state: "configured",
2539
+ };
2540
+ container = document.createElement("div");
2541
+ document.body.appendChild(container);
2542
+ root = createRoot(container);
2543
+ await act(async () => {
2544
+ root.render(<AgentKitAssistantChat ref={ref} {...props} />);
2545
+ });
2546
+ await flush();
2547
+
2548
+ expect(chatMocks.composerProps.initialText).toBe("Visible composer draft");
2549
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
2550
+ const request = chatMocks.control.sendMessage.mock.calls[0]?.[0];
2551
+ expect(request).toMatchObject({
2552
+ attachments: [
2553
+ {
2554
+ type: "file",
2555
+ name: "notes.txt",
2556
+ url: "https://files.example.test/notes.txt",
2557
+ },
2558
+ ],
2559
+ metadata: {
2560
+ references: [reference],
2561
+ custom: {
2562
+ agentNativeDeferredSubmissionId: "pending-provider-submit",
2563
+ },
2564
+ agentNativeSkipPendingSelectionContext: true,
2565
+ },
2566
+ });
2567
+ expect(request?.text).toContain("Initial selection");
2568
+ expect(request?.text).not.toContain("Selection for the next prompt");
2569
+ expect(results).toHaveLength(1);
2570
+ expect(chatMocks.appState.has(stateKey!)).toBe(false);
2571
+ expect(chatMocks.appState.get("pending-selection-context")).toEqual({
2572
+ text: "Selection for the next prompt",
2573
+ capturedAt: nextCapturedAt,
2574
+ });
2575
+ window.removeEventListener(AGENT_CHAT_SUBMIT_RESULT_EVENT, listener);
2576
+ });
2577
+
2578
+ it("keeps a failed deferred send visible until the user retries or dismisses it", async () => {
2579
+ const threadId = chatMocks.threadId;
2580
+ const encodedThreadId = Array.from(threadId, (character) =>
2581
+ character.codePointAt(0)!.toString(16),
2582
+ ).join("-");
2583
+ const stateKey = `agentkit-deferred-provider-submissions:${encodedThreadId}`;
2584
+ chatMocks.appState.set(stateKey, {
2585
+ version: 1,
2586
+ threadId,
2587
+ submissions: [
2588
+ {
2589
+ id: "deferred-failed-send",
2590
+ threadId,
2591
+ text: "Send this after reconnecting",
2592
+ fileParts: [],
2593
+ references: [],
2594
+ composerOptions: {},
2595
+ options: {},
2596
+ },
2597
+ ],
2598
+ });
2599
+ chatMocks.control.sendMessage.mockRejectedValueOnce(
2600
+ Object.assign(new Error("Bad request"), { status: 400 }),
2601
+ );
2602
+
2603
+ await mount(baseProps());
2604
+ await flush();
2605
+
2606
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
2607
+ expect(container.querySelector('[role="alert"]')?.textContent).toContain(
2608
+ "agentChat.recovery.deferredSubmissionFailed",
2609
+ );
2610
+
2611
+ chatMocks.control.sendMessage.mockResolvedValue(undefined);
2612
+ const retryButton = [...container.querySelectorAll("button")].find(
2613
+ (button) => button.textContent === "agentChat.common.retry",
2614
+ );
2615
+ expect(retryButton).toBeDefined();
2616
+ await act(async () => retryButton!.click());
2617
+ await flush();
2618
+
2619
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledTimes(2);
2620
+ expect(chatMocks.appState.has(stateKey)).toBe(false);
2621
+ expect(container.querySelector('[role="alert"]')).toBeNull();
2622
+ });
2623
+
2624
+ it("releases a deferred-send claim after an unmounted dispatch fails", async () => {
2625
+ const threadId = chatMocks.threadId;
2626
+ const encodedThreadId = Array.from(threadId, (character) =>
2627
+ character.codePointAt(0)!.toString(16),
2628
+ ).join("-");
2629
+ const stateKey = `agentkit-deferred-provider-submissions:${encodedThreadId}`;
2630
+ chatMocks.appState.set(stateKey, {
2631
+ version: 1,
2632
+ threadId,
2633
+ submissions: [
2634
+ {
2635
+ id: "deferred-unmount-send",
2636
+ threadId,
2637
+ text: "Send this after reconnecting",
2638
+ fileParts: [],
2639
+ references: [],
2640
+ composerOptions: {},
2641
+ options: {},
2642
+ },
2643
+ ],
2644
+ });
2645
+ let rejectDispatch!: (error: unknown) => void;
2646
+ chatMocks.control.sendMessage.mockImplementationOnce(
2647
+ () =>
2648
+ new Promise<void>((_resolve, reject) => {
2649
+ rejectDispatch = reject;
2650
+ }),
2651
+ );
2652
+
2653
+ await mount(baseProps());
2654
+ await flush();
2655
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
2656
+ expect(
2657
+ (chatMocks.appState.get(stateKey) as any).submissions[0].claim.token,
2658
+ ).toBeTruthy();
2659
+
2660
+ await unmount();
2661
+ root = undefined as unknown as Root;
2662
+ await act(async () => {
2663
+ rejectDispatch(
2664
+ Object.assign(new Error("Gateway unavailable"), { status: 503 }),
2665
+ );
2666
+ });
2667
+ await flush();
2668
+
2669
+ expect(
2670
+ (chatMocks.appState.get(stateKey) as any).submissions[0],
2671
+ ).toMatchObject({
2672
+ attempts: 1,
2673
+ });
2674
+ expect(
2675
+ (chatMocks.appState.get(stateKey) as any).submissions[0].claim,
2676
+ ).toBeUndefined();
2677
+
2678
+ await mount(baseProps());
2679
+ await flush();
2680
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledTimes(2);
2681
+ expect(chatMocks.appState.has(stateKey)).toBe(false);
2682
+ });
2683
+
2684
+ it("preserves another tab's live claim when retrying a stale deferred failure", async () => {
2685
+ const threadId = chatMocks.threadId;
2686
+ const encodedThreadId = Array.from(threadId, (character) =>
2687
+ character.codePointAt(0)!.toString(16),
2688
+ ).join("-");
2689
+ const stateKey = `agentkit-deferred-provider-submissions:${encodedThreadId}`;
2690
+ chatMocks.appState.set(stateKey, {
2691
+ version: 1,
2692
+ threadId,
2693
+ submissions: [
2694
+ {
2695
+ id: "deferred-other-tab-claim",
2696
+ threadId,
2697
+ text: "Send this after reconnecting",
2698
+ fileParts: [],
2699
+ references: [],
2700
+ composerOptions: {},
2701
+ options: {},
2702
+ failed: true,
2703
+ },
2704
+ ],
2705
+ });
2706
+
2707
+ await mount(baseProps());
2708
+ await flush();
2709
+ expect(container.querySelector('[role="alert"]')?.textContent).toContain(
2710
+ "agentChat.recovery.deferredSubmissionFailed",
2711
+ );
2712
+
2713
+ const persisted = chatMocks.appState.get(stateKey) as any;
2714
+ const { failed: _failed, ...retryable } = persisted.submissions[0];
2715
+ chatMocks.appState.set(stateKey, {
2716
+ ...persisted,
2717
+ submissions: [
2718
+ {
2719
+ ...retryable,
2720
+ claim: { token: "other-tab", expiresAt: Date.now() + 60_000 },
2721
+ },
2722
+ ],
2723
+ });
2724
+ const retryButton = [...container.querySelectorAll("button")].find(
2725
+ (button) => button.textContent === "agentChat.common.retry",
2726
+ );
2727
+ expect(retryButton).toBeDefined();
2728
+ await act(async () => retryButton!.click());
2729
+ await flush();
2730
+
2731
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
2732
+ expect(
2733
+ (chatMocks.appState.get(stateKey) as any).submissions[0].claim,
2734
+ ).toEqual({ token: "other-tab", expiresAt: expect.any(Number) });
2735
+ expect(container.querySelector('[role="alert"]')).toBeNull();
2736
+ });
2737
+
2738
+ it("does not loop when the dev checkpoint sees an empty thread", async () => {
2739
+ chatMocks.readThread = () => ({
2740
+ ...chatMocks.thread,
2741
+ messages: [...chatMocks.thread.messages],
2742
+ activeRunIds: [...chatMocks.thread.activeRunIds],
2743
+ });
2744
+ const consoleError = vi
2745
+ .spyOn(console, "error")
2746
+ .mockImplementation(() => undefined);
2747
+
2748
+ await mount(baseProps());
2749
+
2750
+ expect(
2751
+ consoleError.mock.calls.some(([message]) =>
2752
+ String(message).includes("Maximum update depth exceeded"),
2753
+ ),
2754
+ ).toBe(false);
2755
+ consoleError.mockRestore();
2756
+ });
2757
+
2758
+ it("keeps an injected runtime stable until the host reload key changes", async () => {
2759
+ const customRuntime = { kind: "external-agent" } as never;
2760
+ const updatedRuntime = { kind: "external-agent", version: 2 } as never;
2761
+ await mount(
2762
+ baseProps({
2763
+ runtime: customRuntime,
2764
+ adapterReloadKey: "runtime-1",
2765
+ selectedModel: "model-1",
2766
+ }),
2767
+ );
2768
+ const transport = chatMocks.rootProps.transport;
2769
+
2770
+ await act(async () => {
2771
+ root.render(
2772
+ <AgentKitAssistantChat
2773
+ {...baseProps({
2774
+ runtime: updatedRuntime,
2775
+ adapterReloadKey: "runtime-1",
2776
+ selectedModel: "model-2",
2777
+ })}
2778
+ />,
2779
+ );
2780
+ });
2781
+
2782
+ expect(chatMocks.createTransport).toHaveBeenCalledOnce();
2783
+ expect(chatMocks.transportOptions.runtime).toBe(customRuntime);
2784
+ expect(chatMocks.createRuntime).not.toHaveBeenCalled();
2785
+ expect(chatMocks.rootProps.transport).toBe(transport);
2786
+
2787
+ await act(async () => {
2788
+ root.render(
2789
+ <AgentKitAssistantChat
2790
+ {...baseProps({
2791
+ runtime: updatedRuntime,
2792
+ adapterReloadKey: "runtime-2",
2793
+ selectedModel: "model-2",
2794
+ })}
2795
+ />,
2796
+ );
2797
+ });
2798
+
2799
+ expect(chatMocks.createTransport).toHaveBeenCalledTimes(2);
2800
+ expect(chatMocks.transportOptions.runtime).toBe(updatedRuntime);
2801
+ });
2802
+
2803
+ it("keeps scoped history isolation current on the stable built-in transport", async () => {
2804
+ await mount(
2805
+ baseProps({
2806
+ contextScope: { type: "workspace-app", id: "app-one" },
2807
+ isolateHistoryByScope: true,
2808
+ }),
2809
+ );
2810
+ const transport = chatMocks.rootProps.transport;
2811
+
2812
+ expect(chatMocks.createTransport).toHaveBeenCalledOnce();
2813
+ expect(chatMocks.transportOptions).toMatchObject({
2814
+ isolateHistoryByScope: true,
2815
+ scope: { type: "workspace-app", id: "app-one" },
2816
+ });
2817
+
2818
+ await act(async () => {
2819
+ root.render(
2820
+ <AgentKitAssistantChat
2821
+ {...baseProps({
2822
+ contextScope: { type: "workspace-app", id: "app-two" },
2823
+ isolateHistoryByScope: false,
2824
+ })}
2825
+ />,
2826
+ );
2827
+ });
2828
+
2829
+ expect(chatMocks.rootProps.transport).toBe(transport);
2830
+ expect(chatMocks.createTransport).toHaveBeenCalledOnce();
2831
+ expect(chatMocks.transportOptions.isolateHistoryByScope).toBe(false);
2832
+ expect(chatMocks.transportOptions.scope).toEqual({
2833
+ type: "workspace-app",
2834
+ id: "app-two",
2835
+ });
2836
+ });
2837
+
2838
+ it("acknowledges accepted sends after transport acceptance", async () => {
2839
+ const ref = createRef<AssistantChatHandle>();
2840
+ let resolveSend!: () => void;
2841
+ chatMocks.control.sendMessage.mockImplementationOnce(
2842
+ () => new Promise<void>((resolve) => (resolveSend = resolve)),
2843
+ );
2844
+ container = document.createElement("div");
2845
+ document.body.appendChild(container);
2846
+ root = createRoot(container);
2847
+ await act(async () => {
2848
+ root.render(<AgentKitAssistantChat ref={ref} {...baseProps()} />);
2849
+ });
2850
+ const results: CustomEvent[] = [];
2851
+ const listener = (event: Event) => results.push(event as CustomEvent);
2852
+ window.addEventListener(AGENT_CHAT_SUBMIT_RESULT_EVENT, listener);
2853
+ let sendResult:
2854
+ | Awaited<ReturnType<AssistantChatHandle["sendMessage"]>>
2855
+ | undefined;
2856
+ let sendPromise: ReturnType<AssistantChatHandle["sendMessage"]> | undefined;
2857
+
2858
+ await act(async () => {
2859
+ sendPromise = ref.current!.sendMessage("Create the draft", undefined, {
2860
+ submitMessageId: "submit-1",
2861
+ });
2862
+ await new Promise((resolve) => setTimeout(resolve, 0));
2863
+ });
2864
+ expect(results).toHaveLength(0);
2865
+
2866
+ await act(async () => {
2867
+ resolveSend();
2868
+ sendResult = await sendPromise!;
2869
+ });
2870
+
2871
+ expect(sendResult).toEqual({ status: "submitted" });
2872
+ expect(results.map((event) => event.detail)).toEqual([
2873
+ { submitMessageId: "submit-1", delivered: true },
2874
+ ]);
2875
+ window.removeEventListener(AGENT_CHAT_SUBMIT_RESULT_EVENT, listener);
2876
+ });
2877
+
2878
+ it("returns typed rejection results for imperative sends while the engine is unavailable", async () => {
2879
+ chatMocks.readiness = {
2880
+ canChat: false,
2881
+ missing: true,
2882
+ state: "missing",
2883
+ };
2884
+ const ref = createRef<AssistantChatHandle>();
2885
+ container = document.createElement("div");
2886
+ document.body.appendChild(container);
2887
+ root = createRoot(container);
2888
+ await act(async () => {
2889
+ root.render(
2890
+ <AgentKitAssistantChat
2891
+ ref={ref}
2892
+ {...baseProps({ providerStatusChecksEnabled: true })}
2893
+ />,
2894
+ );
2895
+ });
2896
+ const results: CustomEvent[] = [];
2897
+ const listener = (event: Event) => results.push(event as CustomEvent);
2898
+ window.addEventListener(AGENT_CHAT_SUBMIT_RESULT_EVENT, listener);
2899
+
2900
+ let sendResult:
2901
+ | Awaited<ReturnType<AssistantChatHandle["sendMessage"]>>
2902
+ | undefined;
2903
+ await act(async () => {
2904
+ sendResult = await ref.current?.sendMessage("Save the draft", undefined, {
2905
+ submitMessageId: "blocked-submit",
2906
+ });
2907
+ });
2908
+ let recoveryResult:
2909
+ | Awaited<ReturnType<AssistantChatHandle["sendRecoveryMessage"]>>
2910
+ | undefined;
2911
+ await act(async () => {
2912
+ recoveryResult = await ref.current?.sendRecoveryMessage(
2913
+ "Continue the task.",
2914
+ "continue",
2915
+ );
2916
+ });
2917
+ let queueResult:
2918
+ | Awaited<ReturnType<AssistantChatHandle["queueMessage"]>>
2919
+ | undefined;
2920
+ await act(async () => {
2921
+ queueResult = await ref.current?.queueMessage("Send this next");
2922
+ });
2923
+
2924
+ expect(sendResult).toEqual({
2925
+ status: "rejected",
2926
+ reason: "engine-not-configured",
2927
+ });
2928
+ expect(recoveryResult).toEqual(sendResult);
2929
+ expect(queueResult).toEqual(sendResult);
2930
+ expect(results.map((event) => event.detail)).toEqual([
2931
+ {
2932
+ submitMessageId: "blocked-submit",
2933
+ delivered: false,
2934
+ reason: "engine-not-configured",
2935
+ },
2936
+ ]);
2937
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
2938
+
2939
+ chatMocks.readiness = {
2940
+ canChat: false,
2941
+ missing: false,
2942
+ state: "unavailable",
2943
+ };
2944
+ await act(async () => {
2945
+ root.render(
2946
+ <AgentKitAssistantChat
2947
+ ref={ref}
2948
+ {...baseProps({ providerStatusChecksEnabled: true })}
2949
+ />,
2950
+ );
2951
+ });
2952
+ await expect(
2953
+ ref.current!.sendMessage("Try again", undefined, {
2954
+ submitMessageId: "unavailable-submit",
2955
+ }),
2956
+ ).resolves.toEqual({ status: "submitted" });
2957
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
2958
+ expect(results.at(-1)?.detail).toEqual({
2959
+ submitMessageId: "unavailable-submit",
2960
+ delivered: true,
2961
+ });
2962
+
2963
+ chatMocks.readiness = {
2964
+ canChat: true,
2965
+ missing: false,
2966
+ state: "configured",
2967
+ };
2968
+ await act(async () => {
2969
+ root.render(
2970
+ <AgentKitAssistantChat
2971
+ ref={ref}
2972
+ {...baseProps({ providerStatusChecksEnabled: true })}
2973
+ />,
2974
+ );
2975
+ await new Promise((resolve) => setTimeout(resolve, 0));
2976
+ });
2977
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledWith(
2978
+ expect.objectContaining({ text: "Try again" }),
2979
+ );
2980
+ window.removeEventListener(AGENT_CHAT_SUBMIT_RESULT_EVENT, listener);
2981
+ });
2982
+
2983
+ it("queues imperative and guided sends while a run is active", async () => {
2984
+ chatMocks.thread.activeRunIds = ["run-1"];
2985
+ const ref = createRef<AssistantChatHandle>();
2986
+ container = document.createElement("div");
2987
+ document.body.appendChild(container);
2988
+ root = createRoot(container);
2989
+ await act(async () => {
2990
+ root.render(<AgentKitAssistantChat ref={ref} {...baseProps()} />);
2991
+ });
2992
+
2993
+ await act(async () => {
2994
+ await ref.current?.sendMessage("Next imperative turn");
2995
+ });
2996
+ const guided = chatMocks.guidedOptions as {
2997
+ onSubmitMessage: (input: {
2998
+ message: string;
2999
+ context: string;
3000
+ }) => Promise<unknown>;
3001
+ };
3002
+ await act(async () => {
3003
+ await guided.onSubmitMessage({
3004
+ message: "Next guided turn",
3005
+ context: "",
3006
+ });
3007
+ });
3008
+
3009
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledTimes(2);
3010
+ expect(chatMocks.control.queueMessage).toHaveBeenNthCalledWith(
3011
+ 1,
3012
+ expect.objectContaining({ text: "Next imperative turn" }),
3013
+ );
3014
+ expect(chatMocks.control.queueMessage).toHaveBeenNthCalledWith(
3015
+ 2,
3016
+ expect.objectContaining({ text: "Next guided turn" }),
3017
+ );
3018
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
3019
+ });
3020
+
3021
+ it("sends directly when a stale composer render outlives the queued run", async () => {
3022
+ chatMocks.thread.activeRunIds = ["run-queued-follow-up"];
3023
+ chatMocks.thread.runs = {
3024
+ "run-queued-follow-up": {
3025
+ id: "run-queued-follow-up",
3026
+ status: "running",
3027
+ lastSequence: 1,
3028
+ },
3029
+ };
3030
+ const ref = createRef<AssistantChatHandle>();
3031
+ container = document.createElement("div");
3032
+ document.body.appendChild(container);
3033
+ root = createRoot(container);
3034
+ await act(async () => {
3035
+ root.render(<AgentKitAssistantChat ref={ref} {...baseProps()} />);
3036
+ });
3037
+
3038
+ await act(async () => {
3039
+ await ref.current?.sendMessage("Queue while the follow-up is active");
3040
+ });
3041
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledOnce();
3042
+
3043
+ chatMocks.thread.runs["run-queued-follow-up"].status = "completed";
3044
+ await act(async () => {
3045
+ await ref.current?.sendMessage("Send directly after completion");
3046
+ });
3047
+
3048
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledWith(
3049
+ expect.objectContaining({ text: "Send directly after completion" }),
3050
+ );
3051
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledOnce();
3052
+ });
3053
+
3054
+ it("queues an unresolved approval and sends directly after its resolution event", async () => {
3055
+ chatMocks.thread.activeRunIds = ["approval-run"];
3056
+ chatMocks.thread.runs = {
3057
+ "approval-run": {
3058
+ id: "approval-run",
3059
+ status: "awaiting_approval",
3060
+ lastSequence: 2,
3061
+ },
3062
+ };
3063
+ chatMocks.thread.events = [
3064
+ {
3065
+ id: "approval-requested",
3066
+ threadId: "thread-1",
3067
+ runId: "approval-run",
3068
+ sequence: 1,
3069
+ occurredAt: "2026-08-29T00:00:00.000Z",
3070
+ type: "approval.requested",
3071
+ request: { id: "approval-1", title: "Continue?" },
3072
+ },
3073
+ ];
3074
+ chatMocks.thread.approvalRunIds = {};
3075
+ const ref = createRef<AssistantChatHandle>();
3076
+ container = document.createElement("div");
3077
+ document.body.appendChild(container);
3078
+ root = createRoot(container);
3079
+ await act(async () => {
3080
+ root.render(<AgentKitAssistantChat ref={ref} {...baseProps()} />);
3081
+ });
3082
+
3083
+ await act(async () => {
3084
+ await ref.current?.sendMessage("Queue during approval");
3085
+ });
3086
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledWith(
3087
+ expect.objectContaining({ text: "Queue during approval" }),
3088
+ );
3089
+
3090
+ chatMocks.thread.events.push({
3091
+ id: "approval-resolved",
3092
+ threadId: "thread-1",
3093
+ runId: "continuation-run",
3094
+ sequence: 1,
3095
+ occurredAt: "2026-08-29T00:00:01.000Z",
3096
+ type: "approval.resolved",
3097
+ approvalId: "approval-1",
3098
+ response: { decision: "approve" },
3099
+ });
3100
+ await act(async () => {
3101
+ await ref.current?.sendMessage("Send after approval");
3102
+ const guided = chatMocks.guidedOptions as {
3103
+ onSubmitMessage: (input: {
3104
+ message: string;
3105
+ context: string;
3106
+ }) => Promise<unknown>;
3107
+ };
3108
+ await guided.onSubmitMessage({
3109
+ message: "Guided send after approval",
3110
+ context: "",
3111
+ });
3112
+ });
3113
+
3114
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledWith(
3115
+ expect.objectContaining({ text: "Send after approval" }),
3116
+ );
3117
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledWith(
3118
+ expect.objectContaining({ text: "Guided send after approval" }),
3119
+ );
3120
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledOnce();
3121
+ });
3122
+
3123
+ it("forwards slash commands, skills, and localized labels to AgentKit", async () => {
3124
+ const onSlashCommand = vi.fn();
3125
+ chatMocks.inBuilder = true;
3126
+ await mount(baseProps({ onSlashCommand }));
3127
+
3128
+ expect(chatMocks.composerProps.includeDefaultSlashCommands).toBe(true);
3129
+ expect(chatMocks.composerProps.includeDefaultSlashSkills).toBe(true);
3130
+ expect(
3131
+ chatMocks.rootProps.registry.toolSource({
3132
+ id: "tool-1",
3133
+ name: "provider-api-request",
3134
+ input: { provider: "figma" },
3135
+ status: "running",
3136
+ })?.id,
3137
+ ).toBe("figma");
3138
+ expect(chatMocks.rootProps.registry.tools).toMatchObject({
3139
+ "connect-builder": chatMocks.rootProps.slots.tool,
3140
+ "connect-file-storage": chatMocks.rootProps.slots.tool,
3141
+ });
3142
+ expect(chatMocks.composerProps.onSlashCommand).toBe(onSlashCommand);
3143
+ expect(chatMocks.composerProps.interceptBuildRequestsForBuilder).toBe(true);
3144
+ expect(chatMocks.rootProps.labels).toMatchObject({
3145
+ editMessage: "agentChat.message.edit",
3146
+ cancelEditing: "agentChat.common.cancel",
3147
+ regenerateResponse: "agentChat.message.regenerate",
3148
+ expandMessage: "agentChat.common.expand",
3149
+ collapseMessage: "agentChat.common.collapse",
3150
+ messageUnavailable: "agentChat.message.unavailable",
3151
+ navigationUnavailable: "agentChat.message.navigationUnavailable",
3152
+ queueMoveToTop: "agentChat.queue.moveToTop",
3153
+ previewAttachment: "Preview {{name}}",
3154
+ imagePreview: "agentChat.composer.imagePreview",
3155
+ closePreview: "agentChat.composer.closePreview",
3156
+ dropFilesToAttach: "agentChat.composer.dropToAttach",
3157
+ scrollToBottom: "agentChat.composer.scrollToBottom",
3158
+ approvalSubmit: "agentChat.approval.submit",
3159
+ approvalOther: "agentChat.approval.other",
3160
+ approvalOtherPlaceholder: "agentChat.approval.otherPlaceholder",
3161
+ connectionConnecting: "agentChat.connection.connecting",
3162
+ connectionNotNow: "agentChat.connection.notNow",
3163
+ connectionFailed: "agentChat.connection.failed",
3164
+ connectionAdminRequired: "agentChat.connection.adminRequired",
3165
+ agents: "agentChat.activity.agents",
3166
+ tasks: "agentChat.activity.tasks",
3167
+ renderError: "agentChat.error.render",
3168
+ agentStarted: "agentChat.agent.started",
3169
+ agentResumed: "agentChat.agent.resumed",
3170
+ agentMessaged: "agentChat.agent.messaged",
3171
+ agentDelegated: "agentChat.agent.delegated",
3172
+ agentPaused: "agentChat.agent.paused",
3173
+ agentCompleted: "agentChat.agent.completed",
3174
+ agentFailed: "agentChat.agent.failed",
3175
+ agentClosed: "agentChat.agent.closed",
3176
+ });
3177
+ });
3178
+
3179
+ it("copies markdown replies to the clipboard as rich HTML", async () => {
3180
+ await mount(baseProps());
3181
+
3182
+ await expect(
3183
+ chatMocks.rootProps.onCopyMessage({ text: "**Ready**", message: {} }),
3184
+ ).resolves.toBe(true);
3185
+ expect(chatMocks.renderMarkdownToClipboardHtml).toHaveBeenCalledWith(
3186
+ "**Ready**",
3187
+ );
3188
+ expect(chatMocks.writeClipboardText).toHaveBeenCalledWith("**Ready**", {
3189
+ html: "<p><strong>Ready</strong></p>",
3190
+ });
3191
+ });
3192
+
3193
+ it("keeps disabled Plan mode and its reason on the composer", async () => {
3194
+ await mount(
3195
+ baseProps({
3196
+ planModeDisabled: true,
3197
+ planModeDisabledReason: "Plan mode is unavailable here.",
3198
+ }),
3199
+ );
3200
+
3201
+ expect(chatMocks.composerProps).toMatchObject({
3202
+ planModeDisabled: true,
3203
+ planModeDisabledReason: "Plan mode is unavailable here.",
3204
+ });
3205
+ });
3206
+
3207
+ it("forwards inline actions through the shared action surface", async () => {
3208
+ await mount(baseProps());
3209
+ const invokeAction = chatMocks.transportOptions.operations.invokeAction;
3210
+ const invocation = {
3211
+ id: "action-1",
3212
+ action: "slides.update",
3213
+ payload: { slideId: "slide-1", title: "Updated" },
3214
+ };
3215
+
3216
+ await expect(invokeAction({ invocation })).resolves.toMatchObject({
3217
+ invocationId: "action-1",
3218
+ status: "completed",
3219
+ data: null,
3220
+ });
3221
+ expect(chatMocks.callAction).toHaveBeenCalledWith("slides.update", {
3222
+ slideId: "slide-1",
3223
+ title: "Updated",
3224
+ });
3225
+ });
3226
+
3227
+ it("shows attachment errors beside the composer", async () => {
3228
+ await mount(baseProps());
3229
+
3230
+ await act(async () => {
3231
+ chatMocks.composerProps.onAttachmentError("Upload was rejected.");
3232
+ });
3233
+
3234
+ expect(container.querySelector('[role="alert"]')?.textContent).toContain(
3235
+ "Upload was rejected.",
3236
+ );
3237
+ });
3238
+
3239
+ it("keeps hidden messages and internal context out of the transcript", async () => {
3240
+ await mount(baseProps());
3241
+ const Message = chatMocks.rootProps.slots.message;
3242
+
3243
+ await act(async () => {
3244
+ root.render(
3245
+ <Message
3246
+ threadId={chatMocks.threadId}
3247
+ value={{
3248
+ id: "hidden",
3249
+ role: "user",
3250
+ createdAt: new Date().toISOString(),
3251
+ parts: [{ type: "text", text: "Internal recovery prompt" }],
3252
+ metadata: { hideUserMessage: true },
3253
+ }}
3254
+ />,
3255
+ );
3256
+ });
3257
+ expect(container.textContent).toBe("");
3258
+
3259
+ const message = appendAgentChatContextToMessage(
3260
+ "Visible request",
3261
+ "Selected rows: a, b",
3262
+ );
3263
+ await act(async () => {
3264
+ root.render(
3265
+ <Message
3266
+ threadId={chatMocks.threadId}
3267
+ value={{
3268
+ id: "visible",
3269
+ role: "user",
3270
+ createdAt: new Date().toISOString(),
3271
+ parts: [{ type: "text", text: message }],
3272
+ }}
3273
+ />,
3274
+ );
3275
+ });
3276
+ expect(container.textContent).toContain("Visible request");
3277
+ expect(container.textContent).not.toContain("Selected rows: a, b");
3278
+ });
3279
+
3280
+ it("restores saved integration prompts through the same queue path", async () => {
3281
+ chatMocks.thread.activeRunIds = ["run-1"];
3282
+ await mount(baseProps());
3283
+
3284
+ await act(async () => {
3285
+ await chatMocks.resumeProps.onMessageResume({
3286
+ message: "Continue after connecting the integration.",
3287
+ });
3288
+ });
3289
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledWith(
3290
+ expect.objectContaining({
3291
+ text: "Continue after connecting the integration.",
3292
+ }),
3293
+ );
3294
+
3295
+ await act(async () => {
3296
+ await chatMocks.resumeProps.onResume(
3297
+ { threadId: chatMocks.threadId, runId: "run-1", requestId: "req-1" },
3298
+ { message: "Restore the saved tool request." },
3299
+ );
3300
+ });
3301
+ expect(chatMocks.control.resolveConnectionRequest).toHaveBeenCalledWith(
3302
+ "run-1",
3303
+ "req-1",
3304
+ {
3305
+ status: "connected",
3306
+ message: "Restore the saved tool request.",
3307
+ },
3308
+ );
3309
+ });
3310
+
3311
+ it("resumes a generic saved prompt once through the active submission queue", async () => {
3312
+ chatMocks.thread.activeRunIds = ["run-1"];
3313
+ await mount(baseProps());
3314
+
3315
+ await act(async () => {
3316
+ await chatMocks.resumeProps.onMessageResume({
3317
+ message: "Continue after OAuth.",
3318
+ });
3319
+ });
3320
+
3321
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledOnce();
3322
+ expect(chatMocks.control.queueMessage).toHaveBeenCalledWith(
3323
+ expect.objectContaining({ text: "Continue after OAuth." }),
3324
+ );
3325
+ expect(chatMocks.control.sendMessage).not.toHaveBeenCalled();
3326
+ });
3327
+
3328
+ it("shows the missing-final-response warning from recovered run metadata", async () => {
3329
+ chatMocks.thread.messages = [
3330
+ {
3331
+ id: "assistant-warning",
3332
+ role: "assistant",
3333
+ status: "complete",
3334
+ createdAt: new Date().toISOString(),
3335
+ parts: [{ type: "text", text: "The tool completed." }],
3336
+ metadata: {
3337
+ custom: {
3338
+ runWarning: {
3339
+ errorCode: "final_response_missing_after_tool",
3340
+ },
3341
+ },
3342
+ },
3343
+ },
3344
+ ];
3345
+ await mount(baseProps());
3346
+
3347
+ expect(container.querySelector('[role="status"]')?.textContent).toContain(
3348
+ "agentChat.message.missingFinal",
3349
+ );
3350
+ });
3351
+
3352
+ it("shows the localized stopped state for a completed tool-loop stop", async () => {
3353
+ chatMocks.thread.messages = [
3354
+ {
3355
+ id: "assistant-loop-stop",
3356
+ role: "assistant",
3357
+ status: "complete",
3358
+ createdAt: new Date().toISOString(),
3359
+ parts: [{ type: "text", text: "The deck is complete." }],
3360
+ metadata: {
3361
+ custom: {
3362
+ runWarning: {
3363
+ errorCode: "tool_loop_stopped",
3364
+ message: "Stopped after repeated layout checks.",
3365
+ },
3366
+ },
3367
+ },
3368
+ },
3369
+ ];
3370
+ await mount(baseProps());
3371
+
3372
+ expect(container.querySelector('[role="status"]')?.textContent).toContain(
3373
+ "agentChat.error.stopped",
3374
+ );
3375
+ expect(
3376
+ container.querySelector('[role="status"]')?.textContent,
3377
+ ).not.toContain("Stopped after repeated layout checks.");
3378
+ });
3379
+
3380
+ it("restores a thread with a loading state, a 404 state, and retry", async () => {
3381
+ const onThreadRestoreNotFound = vi.fn();
3382
+ await mount(baseProps({ isNewThread: false, onThreadRestoreNotFound }));
3383
+ expect(container.querySelector('[aria-busy="true"]')).not.toBeNull();
3384
+
3385
+ await act(async () => {
3386
+ chatMocks.rootProps.onLoadError({ status: 404 });
3387
+ await Promise.resolve();
3388
+ });
3389
+ expect(onThreadRestoreNotFound).toHaveBeenCalledOnce();
3390
+ expect(container.textContent).toContain("agentChat.message.threadNotFound");
3391
+
3392
+ await act(async () => {
3393
+ chatMocks.rootProps.onLoadError({ status: 404 });
3394
+ await Promise.resolve();
3395
+ });
3396
+ expect(onThreadRestoreNotFound).toHaveBeenCalledOnce();
3397
+
3398
+ const retryButton = [...container.querySelectorAll("button")].find(
3399
+ (button) => button.textContent === "agentChat.common.retry",
3400
+ );
3401
+ expect(retryButton).toBeDefined();
3402
+ await act(async () => retryButton?.click());
3403
+ expect(container.querySelector('[aria-busy="true"]')).not.toBeNull();
3404
+ });
3405
+
3406
+ it("routes the built-in transport 404 through AgentKitRoot to the not-found fallback", async () => {
3407
+ const { createAgentNativeAgentKitTransport } =
3408
+ await import("@agent-native/core/client/agent-chat");
3409
+ let resolveNotFound!: (response: Response) => void;
3410
+ const notFoundResponse = new Promise<Response>((resolve) => {
3411
+ resolveNotFound = resolve;
3412
+ });
3413
+ const fetch = vi.fn(async () => notFoundResponse);
3414
+ const onThreadRestoreNotFound = vi.fn();
3415
+ const runtime = {
3416
+ id: "restore-test",
3417
+ kind: "agent-native",
3418
+ label: "Restore test",
3419
+ capabilities: { messages: { streaming: false } },
3420
+ createSession: vi.fn(),
3421
+ } as any;
3422
+ chatMocks.createTransport.mockImplementation((options: any) =>
3423
+ createAgentNativeAgentKitTransport({ ...options, runtime, fetch }),
3424
+ );
3425
+ chatMocks.useRealRoot = true;
3426
+
3427
+ await mount(
3428
+ baseProps({
3429
+ threadId: "missing-thread",
3430
+ isNewThread: false,
3431
+ onThreadRestoreNotFound,
3432
+ }),
3433
+ );
3434
+ await flush();
3435
+ expect(fetch).toHaveBeenCalledOnce();
3436
+ expect(container.querySelector('[aria-busy="true"]')).not.toBeNull();
3437
+
3438
+ await act(async () => {
3439
+ resolveNotFound(new Response(null, { status: 404 }));
3440
+ });
3441
+ await flush();
3442
+
3443
+ expect(onThreadRestoreNotFound).toHaveBeenCalledOnce();
3444
+ expect(container.textContent).toContain("agentChat.message.threadNotFound");
3445
+ });
3446
+
3447
+ it("hands a recent snapshot across surfaces while thread persistence lags", async () => {
3448
+ const { createAgentNativeAgentKitTransport } =
3449
+ await import("@agent-native/core/client/agent-chat");
3450
+ const threadId = "surface-handoff-thread";
3451
+ const browserTabId = "surface-handoff-tab";
3452
+ const savedSnapshots = vi.fn();
3453
+ const message = {
3454
+ id: "handoff-user-message",
3455
+ role: "user",
3456
+ status: "complete",
3457
+ createdAt: "2026-09-26T12:00:00.000Z",
3458
+ parts: [{ type: "text", text: "Keep this transcript visible" }],
3459
+ };
3460
+ const assistantMessage = {
3461
+ id: "handoff-assistant-message",
3462
+ role: "assistant",
3463
+ status: "complete",
3464
+ createdAt: "2026-09-26T12:00:01.000Z",
3465
+ parts: [{ type: "text", text: "Assistant answer survives handoff" }],
3466
+ };
3467
+ chatMocks.threadId = threadId;
3468
+ chatMocks.thread = {
3469
+ thread: {
3470
+ id: threadId,
3471
+ title: "Handoff thread",
3472
+ createdAt: message.createdAt,
3473
+ updatedAt: message.createdAt,
3474
+ },
3475
+ messages: [message, assistantMessage],
3476
+ events: [],
3477
+ activeRunIds: [],
3478
+ runs: {},
3479
+ tools: {},
3480
+ activities: {},
3481
+ queuedMessages: [],
3482
+ tasks: {},
3483
+ taskGroups: {},
3484
+ approvals: {},
3485
+ approvalRunIds: {},
3486
+ connectionRequests: {},
3487
+ connectionRequestRunIds: {},
3488
+ widgets: {},
3489
+ widgetMessageIds: {},
3490
+ annotations: {},
3491
+ annotationMessageIds: {},
3492
+ agents: {},
3493
+ agentInteractions: [],
3494
+ artifacts: [],
3495
+ suggestions: [],
3496
+ };
3497
+ await mount(
3498
+ baseProps({
3499
+ threadId,
3500
+ browserTabId,
3501
+ isNewThread: false,
3502
+ onSaveThread: savedSnapshots,
3503
+ }),
3504
+ );
3505
+
3506
+ await act(async () => root.render(null));
3507
+ expect(savedSnapshots).toHaveBeenCalledOnce();
3508
+
3509
+ const fetch = vi.fn(async () => new Response(null, { status: 404 }));
3510
+ const runtime = {
3511
+ id: "handoff-test",
3512
+ kind: "agent-native",
3513
+ label: "Handoff test",
3514
+ capabilities: { messages: { streaming: false } },
3515
+ createSession: vi.fn(),
3516
+ } as any;
3517
+ chatMocks.thread = {
3518
+ thread: null,
3519
+ messages: [],
3520
+ events: [],
3521
+ activeRunIds: [],
3522
+ runs: {},
3523
+ tools: {},
3524
+ activities: {},
3525
+ queuedMessages: [],
3526
+ tasks: {},
3527
+ taskGroups: {},
3528
+ approvals: {},
3529
+ approvalRunIds: {},
3530
+ connectionRequests: {},
3531
+ connectionRequestRunIds: {},
3532
+ widgets: {},
3533
+ widgetMessageIds: {},
3534
+ annotations: {},
3535
+ annotationMessageIds: {},
3536
+ agents: {},
3537
+ agentInteractions: [],
3538
+ artifacts: [],
3539
+ suggestions: [],
3540
+ };
3541
+ chatMocks.createTransport.mockImplementation((options: any) =>
3542
+ createAgentNativeAgentKitTransport({ ...options, runtime, fetch }),
3543
+ );
3544
+ await act(async () => {
3545
+ root.render(
3546
+ <AgentKitAssistantChat
3547
+ {...baseProps({
3548
+ threadId,
3549
+ browserTabId,
3550
+ isNewThread: false,
3551
+ onSaveThread: savedSnapshots,
3552
+ centerComposerWhenEmpty: true,
3553
+ suggestionPlacement: "context-chips",
3554
+ homeIntroSlot: <h1>What should we do?</h1>,
3555
+ afterComposerSlot: <div data-testid="home-app-grid" />,
3556
+ suggestions: ["Explore my apps"],
3557
+ })}
3558
+ />,
3559
+ );
3560
+ });
3561
+
3562
+ expect(container.textContent).toContain("Keep this transcript visible");
3563
+ expect(container.textContent).toContain(
3564
+ "Assistant answer survives handoff",
3565
+ );
3566
+ expect(container.querySelector(".agentkit-home-intro")).toBeNull();
3567
+ expect(container.querySelector(".agentkit-home-suggestions")).toBeNull();
3568
+ expect(container.querySelector(".agentkit-after-composer-slot")).toBeNull();
3569
+ expect(chatMocks.chatProps.hasRenderedMessages).toBe(true);
3570
+ expect(container.querySelector('[aria-busy="true"]')).toBeNull();
3571
+ const handoff = await chatMocks.rootProps.transport.getThreadSnapshot({
3572
+ threadId,
3573
+ });
3574
+ expect(handoff.messages[0].parts).toContainEqual({
3575
+ type: "text",
3576
+ text: "Keep this transcript visible",
3577
+ });
3578
+ expect(handoff.messages[1].parts).toContainEqual({
3579
+ type: "text",
3580
+ text: "Assistant answer survives handoff",
3581
+ });
3582
+ expect(fetch).not.toHaveBeenCalled();
3583
+ });
3584
+
3585
+ it("keeps transient thread-restore errors retryable without clearing the tab", async () => {
3586
+ const onThreadRestoreNotFound = vi.fn();
3587
+ await mount(baseProps({ isNewThread: false, onThreadRestoreNotFound }));
3588
+
3589
+ await act(async () => {
3590
+ chatMocks.rootProps.onLoadError({ status: 503 });
3591
+ await Promise.resolve();
3592
+ });
3593
+
3594
+ expect(onThreadRestoreNotFound).not.toHaveBeenCalled();
3595
+ expect(container.textContent).toContain(
3596
+ "agentChat.message.restoreRequestFailed",
3597
+ );
3598
+ expect(
3599
+ [...container.querySelectorAll("button")].some(
3600
+ (button) => button.textContent === "agentChat.common.retry",
3601
+ ),
3602
+ ).toBe(true);
3603
+ });
3604
+
3605
+ it("focuses the composer only after an explicit prefill revision", async () => {
3606
+ const ref = createRef<AssistantChatHandle>();
3607
+ container = document.createElement("div");
3608
+ document.body.appendChild(container);
3609
+ root = createRoot(container);
3610
+ await act(async () => {
3611
+ root.render(<AgentKitAssistantChat ref={ref} {...baseProps()} />);
3612
+ });
3613
+ expect(chatMocks.requestComposerFocus).not.toHaveBeenCalled();
3614
+
3615
+ await act(async () => ref.current?.prefillMessage("Draft this"));
3616
+
3617
+ expect(chatMocks.requestComposerFocus).toHaveBeenCalledOnce();
3618
+ expect(chatMocks.requestComposerFocus).toHaveBeenCalledWith("thread-1");
3619
+ });
3620
+
3621
+ it("keeps Continue hidden as a protocol continuation", async () => {
3622
+ await mount(baseProps());
3623
+
3624
+ await act(async () => {
3625
+ chatMocks.failureProps.onContinue();
3626
+ await new Promise((resolve) => setTimeout(resolve, 0));
3627
+ });
3628
+
3629
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
3630
+ const request = chatMocks.control.sendMessage.mock.calls[0]?.[0];
3631
+ expect(request.text).toBe(
3632
+ "Continue from where you left off and finish my last request. Do not repeat completed work.",
3633
+ );
3634
+ expect(request.metadata).toMatchObject({
3635
+ hideUserMessage: true,
3636
+ agentNativeInternalContinuation: true,
3637
+ custom: { agentNativeRecoveryAction: "continue" },
3638
+ });
3639
+ });
3640
+
3641
+ it("strips appended context from Retry and preserves request metadata", async () => {
3642
+ const requestText = appendAgentChatContextToMessage(
3643
+ "Retry the export",
3644
+ "Private selected rows",
3645
+ );
3646
+ const reference = { id: "reference-1", type: "document" };
3647
+ chatMocks.thread.messages = [
3648
+ {
3649
+ id: "user-retry",
3650
+ role: "user",
3651
+ createdAt: new Date().toISOString(),
3652
+ parts: [
3653
+ { type: "text", text: requestText },
3654
+ {
3655
+ type: "file",
3656
+ name: "source.csv",
3657
+ mediaType: "text/csv",
3658
+ url: "https://files.example.test/source.csv",
3659
+ },
3660
+ ],
3661
+ metadata: {
3662
+ model: "model-original",
3663
+ engine: "engine-original",
3664
+ effort: "high",
3665
+ requestMode: "plan",
3666
+ references: [reference],
3667
+ },
3668
+ },
3669
+ ];
3670
+ await mount(baseProps({ execMode: "build" }));
3671
+
3672
+ await act(async () => {
3673
+ chatMocks.failureProps.onRetry();
3674
+ await new Promise((resolve) => setTimeout(resolve, 0));
3675
+ });
3676
+
3677
+ expect(chatMocks.control.sendMessage).toHaveBeenCalledOnce();
3678
+ const request = chatMocks.control.sendMessage.mock.calls[0]?.[0];
3679
+ expect(request.text).toBe("Retry the export");
3680
+ expect(request.text).not.toContain("Private selected rows");
3681
+ expect(request.attachments).toEqual([
3682
+ {
3683
+ type: "file",
3684
+ name: "source.csv",
3685
+ mediaType: "text/csv",
3686
+ url: "https://files.example.test/source.csv",
3687
+ },
3688
+ ]);
3689
+ expect(request.metadata).toMatchObject({
3690
+ hideUserMessage: true,
3691
+ model: "model-original",
3692
+ engine: "engine-original",
3693
+ effort: "high",
3694
+ requestMode: "plan",
3695
+ references: [reference],
3696
+ custom: { agentNativeRecoveryAction: "retry" },
3697
+ });
3698
+ expect(request.options).toMatchObject({
3699
+ model: "model-original",
3700
+ mode: "plan",
3701
+ reasoningEffort: "high",
3702
+ });
3703
+ });
3704
+
3705
+ it("shows a localized Stop tooltip and bounces the blocked setup card", async () => {
3706
+ chatMocks.readiness = {
3707
+ canChat: false,
3708
+ missing: true,
3709
+ state: "missing",
3710
+ };
3711
+ chatMocks.thread.activeRunIds = ["run-1"];
3712
+ const blockedEvents: CustomEvent[] = [];
3713
+ const onBlocked = (event: Event) =>
3714
+ blockedEvents.push(event as CustomEvent);
3715
+ window.addEventListener("agent-chat:missing-api-key", onBlocked);
3716
+ await mount(baseProps({ providerStatusChecksEnabled: true }));
3717
+
3718
+ expect(
3719
+ container
3720
+ .querySelector(".agentkit-host-composer")
3721
+ ?.classList.contains("agent-composer-area--attached-above"),
3722
+ ).toBe(true);
3723
+ expect(chatMocks.setupCardProps.onRetry).toBeUndefined();
3724
+ const stopButton = chatMocks.composerProps.stopButton as React.ReactElement;
3725
+ expect(stopButton.props).toMatchObject({
3726
+ "aria-label": "agentChat.composer.stopResponse",
3727
+ title: "agentChat.composer.stopResponse",
3728
+ });
3729
+ expect(chatMocks.setupCardProps.bouncePulse).toBe(0);
3730
+
3731
+ await act(async () => chatMocks.composerProps.onDisabledClick());
3732
+
3733
+ expect(chatMocks.setupCardProps.bouncePulse).toBeGreaterThan(0);
3734
+ expect(blockedEvents).toHaveLength(1);
3735
+ window.removeEventListener("agent-chat:missing-api-key", onBlocked);
3736
+ });
3737
+
3738
+ it("does not repeat the composer setup card in a missing-key run failure", async () => {
3739
+ chatMocks.readiness = {
3740
+ canChat: false,
3741
+ missing: true,
3742
+ state: "missing",
3743
+ };
3744
+ chatMocks.failureError = {
3745
+ code: "AGENT_CHAT_AI_SETUP_REQUIRED",
3746
+ message: "An AI provider needs to be connected.",
3747
+ };
3748
+
3749
+ await mount(baseProps({ providerStatusChecksEnabled: true }));
3750
+
3751
+ expect(
3752
+ container.querySelectorAll('[data-testid="builder-setup-card"]'),
3753
+ ).toHaveLength(1);
3754
+ });
3755
+
3756
+ it("lets a host suppress its duplicate missing-provider setup card", async () => {
3757
+ chatMocks.readiness = {
3758
+ canChat: false,
3759
+ missing: true,
3760
+ state: "missing",
3761
+ };
3762
+
3763
+ await mount(
3764
+ baseProps({
3765
+ providerStatusChecksEnabled: true,
3766
+ showMissingApiKeySetup: false,
3767
+ }),
3768
+ );
3769
+
3770
+ expect(
3771
+ container.querySelectorAll('[data-testid="builder-setup-card"]'),
3772
+ ).toHaveLength(0);
3773
+ });
3774
+
3775
+ it("dispatches custom-transport running changes to the chat host", async () => {
3776
+ const runningEvents: CustomEvent[] = [];
3777
+ const onRunning = (event: Event) =>
3778
+ runningEvents.push(event as CustomEvent);
3779
+ const createTransport = () => chatMocks.transport;
3780
+ window.addEventListener("agentNative.chatRunning", onRunning);
3781
+ await mount(baseProps({ createTransport, tabId: "custom-tab" }));
3782
+ chatMocks.thread.activeRunIds = ["custom-run"];
3783
+
3784
+ await act(async () => {
3785
+ root.render(
3786
+ <AgentKitAssistantChat
3787
+ {...baseProps({ createTransport, tabId: "custom-tab" })}
3788
+ />,
3789
+ );
3790
+ });
3791
+
3792
+ expect(
3793
+ runningEvents.some(
3794
+ (event) =>
3795
+ event.detail.isRunning === true &&
3796
+ event.detail.threadId === "thread-1" &&
3797
+ event.detail.tabId === "custom-tab" &&
3798
+ event.detail.runId === "custom-run",
3799
+ ),
3800
+ ).toBe(true);
3801
+ window.removeEventListener("agentNative.chatRunning", onRunning);
3802
+ });
3803
+
3804
+ it("shows an expired-session card and emits the session-expired event", async () => {
3805
+ chatMocks.failureError = { code: "unauthorized", message: "HTTP 401" };
3806
+ vi.stubGlobal(
3807
+ "fetch",
3808
+ vi.fn(async () =>
3809
+ Response.json({ error: "unauthorized" }, { status: 401 }),
3810
+ ),
3811
+ );
3812
+ const authEvents: CustomEvent[] = [];
3813
+ const onAuthError = (event: Event) => authEvents.push(event as CustomEvent);
3814
+ window.addEventListener("agent-chat:auth-error", onAuthError);
3815
+ await mount(baseProps());
3816
+
3817
+ await act(async () => {
3818
+ window.dispatchEvent(
3819
+ new CustomEvent("agent-chat:auth-error", {
3820
+ detail: { reason: "session-expired", threadId: "thread-1" },
3821
+ }),
3822
+ );
3823
+ await Promise.resolve();
3824
+ await Promise.resolve();
3825
+ });
3826
+
3827
+ expect(
3828
+ authEvents.some((event) => event.detail.reason === "session-expired"),
3829
+ ).toBe(true);
3830
+ expect(container.textContent).toContain("agentChat.auth.expiredTitle");
3831
+ expect(container.textContent).toContain("agentChat.auth.logOut");
3832
+ window.removeEventListener("agent-chat:auth-error", onAuthError);
3833
+ });
3834
+
3835
+ it.each(["host", "controller"])(
3836
+ "shows cancellation errors from the %s and permits retry",
3837
+ async (source) => {
3838
+ chatMocks.thread.activeRunIds = ["run-stop"];
3839
+ chatMocks.thread.runs = {
3840
+ "run-stop": { id: "run-stop", status: "running" },
3841
+ };
3842
+ const onStop = vi.fn(async () => true);
3843
+ if (source === "host")
3844
+ onStop.mockRejectedValueOnce(new Error("Stop unavailable"));
3845
+ else
3846
+ chatMocks.control.cancel.mockRejectedValueOnce(
3847
+ new Error("Stop unavailable"),
3848
+ );
3849
+ await mount(baseProps({ onStop }));
3850
+ await act(async () => {
3851
+ chatMocks.composerProps.stopButton.props.onClick();
3852
+ await Promise.resolve();
3853
+ });
3854
+ expect(container.querySelector('[role="alert"]')?.textContent).toContain(
3855
+ "Stop unavailable",
3856
+ );
3857
+ await act(async () => {
3858
+ chatMocks.composerProps.stopButton.props.onClick();
3859
+ await Promise.resolve();
3860
+ });
3861
+ expect(container.querySelector('[role="alert"]')).toBeNull();
3862
+ expect(chatMocks.control.cancel).toHaveBeenLastCalledWith("run-stop");
3863
+ },
3864
+ );
3865
+
3866
+ it("routes first-class approval decisions through host policy hooks", async () => {
3867
+ chatMocks.approvalRequest = {
3868
+ id: "approval-1",
3869
+ title: "Allow publishing?",
3870
+ description: "publish-release",
3871
+ kind: "approval",
3872
+ metadata: { toolName: "publish-release" },
3873
+ };
3874
+ const onDeny = vi.fn();
3875
+ const onAlwaysAllow = vi.fn(async () => undefined);
3876
+ await mount(baseProps({ approvalActions: { onDeny, onAlwaysAllow } }));
3877
+
3878
+ const denyButton = [...container.querySelectorAll("button")].find(
3879
+ (button) => button.textContent === "agentChat.approval.deny",
3880
+ );
3881
+ const alwaysAllowButton = [...container.querySelectorAll("button")].find(
3882
+ (button) => button.textContent === "agentChat.approval.alwaysAllowAction",
3883
+ );
3884
+ expect(denyButton).toBeDefined();
3885
+ expect(alwaysAllowButton).toBeDefined();
3886
+
3887
+ await act(async () => {
3888
+ denyButton?.click();
3889
+ await Promise.resolve();
3890
+ });
3891
+ expect(chatMocks.control.resolveApproval).toHaveBeenCalledWith(
3892
+ "run-1",
3893
+ "approval-1",
3894
+ { decision: "deny", optionIds: ["deny"] },
3895
+ );
3896
+ expect(onDeny).toHaveBeenCalledWith("approval-1");
3897
+
3898
+ await act(async () => {
3899
+ alwaysAllowButton?.click();
3900
+ await Promise.resolve();
3901
+ });
3902
+ expect(onAlwaysAllow).toHaveBeenCalledWith("approval-1", "publish-release");
3903
+ expect(chatMocks.control.resolveApproval).toHaveBeenLastCalledWith(
3904
+ "run-1",
3905
+ "approval-1",
3906
+ { decision: "approve", optionIds: ["approve"] },
3907
+ );
3908
+ });
3909
+
3910
+ it.each(["approve", "deny"])(
3911
+ "shows a failed %s decision and clears it on retry",
3912
+ async (decision) => {
3913
+ chatMocks.approvalRequest = {
3914
+ id: "approval-failed",
3915
+ title: "Allow publishing?",
3916
+ metadata: { toolName: "publish-release" },
3917
+ };
3918
+ chatMocks.control.resolveApproval.mockRejectedValueOnce(
3919
+ new Error("Approval unavailable"),
3920
+ );
3921
+ await mount(baseProps());
3922
+ const action = decision === "approve" ? "onApprove" : "onDeny";
3923
+ await act(async () => {
3924
+ chatMocks.approvalCardProps[action]();
3925
+ await Promise.resolve();
3926
+ });
3927
+ expect(chatMocks.approvalCardProps.saveFailedLabel).toBe(
3928
+ "agentChat.common.saveFailed",
3929
+ );
3930
+ expect(chatMocks.approvalCardProps.isAlwaysAllowing).toBe(false);
3931
+ await act(async () => {
3932
+ chatMocks.approvalCardProps[action]();
3933
+ await Promise.resolve();
3934
+ });
3935
+ expect(chatMocks.approvalCardProps.saveFailedLabel).toBeUndefined();
3936
+ },
3937
+ );
3938
+
3939
+ it("labels host always-allow approval actions with their declared scope", async () => {
3940
+ chatMocks.approvalRequest = {
3941
+ id: "approval-exact-command",
3942
+ title: "Allow this command?",
3943
+ description: "run-command",
3944
+ kind: "approval",
3945
+ metadata: { toolName: "run-command" },
3946
+ };
3947
+ const onAlwaysAllow = vi.fn(async () => undefined);
3948
+ await mount(
3949
+ baseProps({
3950
+ approvalActions: {
3951
+ onAlwaysAllow,
3952
+ alwaysAllowScope: "exact-command",
3953
+ },
3954
+ }),
3955
+ );
3956
+
3957
+ expect(chatMocks.approvalCardProps).toMatchObject({
3958
+ alwaysAllowLabel: "agentChat.approval.alwaysAllow",
3959
+ alwaysAllowHint: "agentChat.approval.alwaysAllowHint",
3960
+ });
3961
+ });
3962
+
3963
+ it("persists the shared approval policy before approving by default", async () => {
3964
+ chatMocks.approvalRequest = {
3965
+ id: "approval-default-policy",
3966
+ title: "Allow publishing?",
3967
+ description: "publish-release",
3968
+ kind: "approval",
3969
+ metadata: { toolName: "publish-release" },
3970
+ };
3971
+ await mount(baseProps());
3972
+
3973
+ const alwaysAllowButton = [...container.querySelectorAll("button")].find(
3974
+ (button) => button.textContent === "agentChat.approval.alwaysAllowAction",
3975
+ );
3976
+ expect(alwaysAllowButton).toBeDefined();
3977
+
3978
+ await act(async () => {
3979
+ alwaysAllowButton?.click();
3980
+ await Promise.resolve();
3981
+ });
3982
+
3983
+ expect(chatMocks.callAction).toHaveBeenCalledWith(
3984
+ "set-tool-approval-policy",
3985
+ { toolName: "publish-release", enabled: true },
3986
+ );
3987
+ expect(chatMocks.control.resolveApproval).toHaveBeenCalledWith(
3988
+ "run-1",
3989
+ "approval-default-policy",
3990
+ { decision: "approve", optionIds: ["approve"] },
3991
+ );
3992
+ });
3993
+
3994
+ it("opens active reasoning and omits explicitly hidden reasoning", async () => {
3995
+ chatMocks.thread.events = [
3996
+ {
3997
+ id: "reasoning-event",
3998
+ type: "reasoning.delta",
3999
+ messageId: "assistant-reasoning",
4000
+ runId: "run-reasoning",
4001
+ },
4002
+ ];
4003
+ chatMocks.thread.runs = {
4004
+ "run-reasoning": {
4005
+ startedAt: "2026-01-01T00:00:00.000Z",
4006
+ completedAt: "2026-01-01T00:00:02.000Z",
4007
+ },
4008
+ };
4009
+ await mount(baseProps());
4010
+ const Reasoning = chatMocks.rootProps.slots.reasoning;
4011
+
4012
+ await act(async () => {
4013
+ root.render(
4014
+ <Reasoning
4015
+ threadId="thread-1"
4016
+ resetKey="thread-1:assistant-reasoning:0"
4017
+ active
4018
+ value={{ type: "reasoning", text: "Checking the result." }}
4019
+ />,
4020
+ );
4021
+ });
4022
+ expect(chatMocks.reasoningProps).toMatchObject({
4023
+ defaultOpen: true,
4024
+ isStreaming: true,
4025
+ resetKey: "thread-1:assistant-reasoning:0",
4026
+ });
4027
+ expect(chatMocks.reasoningProps).not.toHaveProperty("durationMs");
4028
+
4029
+ await act(async () => {
4030
+ root.render(
4031
+ <Reasoning
4032
+ threadId="thread-1"
4033
+ resetKey="thread-1:assistant-reasoning:0"
4034
+ active={false}
4035
+ value={{
4036
+ type: "reasoning",
4037
+ visibility: "hidden",
4038
+ text: "Private chain of thought.",
4039
+ }}
4040
+ />,
4041
+ );
4042
+ });
4043
+ expect(container.textContent).toBe("");
4044
+ });
4045
+
4046
+ it("uses Core's friendly formatter for recognized run errors", async () => {
4047
+ chatMocks.failureError = {
4048
+ code: "context_length_exceeded",
4049
+ message: "The request exceeded the model context window.",
4050
+ };
4051
+ await mount(baseProps());
4052
+
4053
+ expect(chatMocks.failureProps.info.message).toContain(
4054
+ "[agentChat.errorMessages.startNewChat](agent-native:new-chat)",
4055
+ );
4056
+ });
4057
+
4058
+ it("activates the thread returned by run recovery fork", async () => {
4059
+ const onForkedThread = vi.fn();
4060
+ chatMocks.thread.messages = [
4061
+ {
4062
+ id: "user-1",
4063
+ role: "user",
4064
+ createdAt: new Date().toISOString(),
4065
+ parts: [{ type: "text", text: "Original request" }],
4066
+ },
4067
+ ];
4068
+ await mount(baseProps({ onForkedThread }));
4069
+
4070
+ await act(async () => {
4071
+ await chatMocks.failureProps.onFork();
4072
+ });
4073
+
4074
+ expect(chatMocks.control.fork).toHaveBeenCalledWith("user-1");
4075
+ expect(onForkedThread).toHaveBeenCalledWith("thread-forked");
4076
+ });
4077
+ });