@stigmer/react 3.1.17 → 3.2.0

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 (815) hide show
  1. package/agent-instance/AgentInstanceList.d.ts.map +1 -1
  2. package/agent-instance/AgentInstanceList.js +11 -3
  3. package/agent-instance/AgentInstanceList.js.map +1 -1
  4. package/channel/AgentChannelsPanel.d.ts +60 -0
  5. package/channel/AgentChannelsPanel.d.ts.map +1 -0
  6. package/channel/AgentChannelsPanel.js +255 -0
  7. package/channel/AgentChannelsPanel.js.map +1 -0
  8. package/channel/ChannelConversationsDialog.d.ts +41 -0
  9. package/channel/ChannelConversationsDialog.d.ts.map +1 -0
  10. package/channel/ChannelConversationsDialog.js +94 -0
  11. package/channel/ChannelConversationsDialog.js.map +1 -0
  12. package/channel/ChannelCredentialsDialog.d.ts +37 -0
  13. package/channel/ChannelCredentialsDialog.d.ts.map +1 -0
  14. package/channel/ChannelCredentialsDialog.js +75 -0
  15. package/channel/ChannelCredentialsDialog.js.map +1 -0
  16. package/channel/ChannelToolCredentials.d.ts +31 -0
  17. package/channel/ChannelToolCredentials.d.ts.map +1 -0
  18. package/channel/ChannelToolCredentials.js +41 -0
  19. package/channel/ChannelToolCredentials.js.map +1 -0
  20. package/channel/ConnectSlackDialog.d.ts +61 -0
  21. package/channel/ConnectSlackDialog.d.ts.map +1 -0
  22. package/channel/ConnectSlackDialog.js +238 -0
  23. package/channel/ConnectSlackDialog.js.map +1 -0
  24. package/channel/ConnectWhatsAppDialog.d.ts +70 -0
  25. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -0
  26. package/channel/ConnectWhatsAppDialog.js +256 -0
  27. package/channel/ConnectWhatsAppDialog.js.map +1 -0
  28. package/channel/SlackMarkIcon.d.ts +11 -0
  29. package/channel/SlackMarkIcon.d.ts.map +1 -0
  30. package/channel/SlackMarkIcon.js +13 -0
  31. package/channel/SlackMarkIcon.js.map +1 -0
  32. package/channel/WhatsAppMarkIcon.d.ts +12 -0
  33. package/channel/WhatsAppMarkIcon.d.ts.map +1 -0
  34. package/channel/WhatsAppMarkIcon.js +14 -0
  35. package/channel/WhatsAppMarkIcon.js.map +1 -0
  36. package/channel/connect/ServingAppSection.d.ts +57 -0
  37. package/channel/connect/ServingAppSection.d.ts.map +1 -0
  38. package/channel/connect/ServingAppSection.js +49 -0
  39. package/channel/connect/ServingAppSection.js.map +1 -0
  40. package/channel/connect/ToolCredentialsSection.d.ts +20 -0
  41. package/channel/connect/ToolCredentialsSection.d.ts.map +1 -0
  42. package/channel/connect/ToolCredentialsSection.js +22 -0
  43. package/channel/connect/ToolCredentialsSection.js.map +1 -0
  44. package/channel/connect/VerbatimRefusal.d.ts +16 -0
  45. package/channel/connect/VerbatimRefusal.d.ts.map +1 -0
  46. package/channel/connect/VerbatimRefusal.js +18 -0
  47. package/channel/connect/VerbatimRefusal.js.map +1 -0
  48. package/channel/connect/icons.d.ts +16 -0
  49. package/channel/connect/icons.d.ts.map +1 -0
  50. package/channel/connect/icons.js +21 -0
  51. package/channel/connect/icons.js.map +1 -0
  52. package/channel/index.d.ts +36 -0
  53. package/channel/index.d.ts.map +1 -0
  54. package/channel/index.js +19 -0
  55. package/channel/index.js.map +1 -0
  56. package/channel/providerPresentation.d.ts +44 -0
  57. package/channel/providerPresentation.d.ts.map +1 -0
  58. package/channel/providerPresentation.js +106 -0
  59. package/channel/providerPresentation.js.map +1 -0
  60. package/channel/providers.d.ts +62 -0
  61. package/channel/providers.d.ts.map +1 -0
  62. package/channel/providers.js +26 -0
  63. package/channel/providers.js.map +1 -0
  64. package/channel/useAgentChannel.d.ts +31 -0
  65. package/channel/useAgentChannel.d.ts.map +1 -0
  66. package/channel/useAgentChannel.js +34 -0
  67. package/channel/useAgentChannel.js.map +1 -0
  68. package/channel/useAgentChannelList.d.ts +43 -0
  69. package/channel/useAgentChannelList.d.ts.map +1 -0
  70. package/channel/useAgentChannelList.js +39 -0
  71. package/channel/useAgentChannelList.js.map +1 -0
  72. package/channel/useChannelSessions.d.ts +47 -0
  73. package/channel/useChannelSessions.d.ts.map +1 -0
  74. package/channel/useChannelSessions.js +38 -0
  75. package/channel/useChannelSessions.js.map +1 -0
  76. package/channel/useChannelToolReadiness.d.ts +23 -0
  77. package/channel/useChannelToolReadiness.d.ts.map +1 -0
  78. package/channel/useChannelToolReadiness.js +28 -0
  79. package/channel/useChannelToolReadiness.js.map +1 -0
  80. package/channel/useConnectSlackChannel.d.ts +75 -0
  81. package/channel/useConnectSlackChannel.d.ts.map +1 -0
  82. package/channel/useConnectSlackChannel.js +115 -0
  83. package/channel/useConnectSlackChannel.js.map +1 -0
  84. package/channel/useCreateAgentChannel.d.ts +42 -0
  85. package/channel/useCreateAgentChannel.d.ts.map +1 -0
  86. package/channel/useCreateAgentChannel.js +48 -0
  87. package/channel/useCreateAgentChannel.js.map +1 -0
  88. package/channel/useDeleteAgentChannel.d.ts +40 -0
  89. package/channel/useDeleteAgentChannel.d.ts.map +1 -0
  90. package/channel/useDeleteAgentChannel.js +44 -0
  91. package/channel/useDeleteAgentChannel.js.map +1 -0
  92. package/channel/useInstallChannel.d.ts +60 -0
  93. package/channel/useInstallChannel.d.ts.map +1 -0
  94. package/channel/useInstallChannel.js +63 -0
  95. package/channel/useInstallChannel.js.map +1 -0
  96. package/channel/useOrgAgentChannelList.d.ts +32 -0
  97. package/channel/useOrgAgentChannelList.d.ts.map +1 -0
  98. package/channel/useOrgAgentChannelList.js +29 -0
  99. package/channel/useOrgAgentChannelList.js.map +1 -0
  100. package/channel/useSaveAgentChannel.d.ts +63 -0
  101. package/channel/useSaveAgentChannel.d.ts.map +1 -0
  102. package/channel/useSaveAgentChannel.js +104 -0
  103. package/channel/useSaveAgentChannel.js.map +1 -0
  104. package/channel-app/ChannelAppDetailPanel.d.ts +46 -0
  105. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -0
  106. package/channel-app/ChannelAppDetailPanel.js +142 -0
  107. package/channel-app/ChannelAppDetailPanel.js.map +1 -0
  108. package/channel-app/ChannelAppListPanel.d.ts +36 -0
  109. package/channel-app/ChannelAppListPanel.d.ts.map +1 -0
  110. package/channel-app/ChannelAppListPanel.js +63 -0
  111. package/channel-app/ChannelAppListPanel.js.map +1 -0
  112. package/channel-app/CreateChannelAppForm.d.ts +54 -0
  113. package/channel-app/CreateChannelAppForm.d.ts.map +1 -0
  114. package/channel-app/CreateChannelAppForm.js +140 -0
  115. package/channel-app/CreateChannelAppForm.js.map +1 -0
  116. package/channel-app/index.d.ts +18 -0
  117. package/channel-app/index.d.ts.map +1 -0
  118. package/channel-app/index.js +10 -0
  119. package/channel-app/index.js.map +1 -0
  120. package/channel-app/internal.d.ts +33 -0
  121. package/channel-app/internal.d.ts.map +1 -0
  122. package/channel-app/internal.js +44 -0
  123. package/channel-app/internal.js.map +1 -0
  124. package/channel-app/slackAppSetup.d.ts +80 -0
  125. package/channel-app/slackAppSetup.d.ts.map +1 -0
  126. package/channel-app/slackAppSetup.js +123 -0
  127. package/channel-app/slackAppSetup.js.map +1 -0
  128. package/channel-app/useChannelAppList.d.ts +35 -0
  129. package/channel-app/useChannelAppList.d.ts.map +1 -0
  130. package/channel-app/useChannelAppList.js +34 -0
  131. package/channel-app/useChannelAppList.js.map +1 -0
  132. package/channel-app/useCreateChannelApp.d.ts +39 -0
  133. package/channel-app/useCreateChannelApp.d.ts.map +1 -0
  134. package/channel-app/useCreateChannelApp.js +50 -0
  135. package/channel-app/useCreateChannelApp.js.map +1 -0
  136. package/channel-app/useDeleteChannelApp.d.ts +31 -0
  137. package/channel-app/useDeleteChannelApp.d.ts.map +1 -0
  138. package/channel-app/useDeleteChannelApp.js +43 -0
  139. package/channel-app/useDeleteChannelApp.js.map +1 -0
  140. package/channel-app/useUpdateChannelApp.d.ts +39 -0
  141. package/channel-app/useUpdateChannelApp.d.ts.map +1 -0
  142. package/channel-app/useUpdateChannelApp.js +50 -0
  143. package/channel-app/useUpdateChannelApp.js.map +1 -0
  144. package/channel-app/whatsappAppSetup.d.ts +51 -0
  145. package/channel-app/whatsappAppSetup.d.ts.map +1 -0
  146. package/channel-app/whatsappAppSetup.js +57 -0
  147. package/channel-app/whatsappAppSetup.js.map +1 -0
  148. package/environment/index.d.ts +2 -0
  149. package/environment/index.d.ts.map +1 -1
  150. package/environment/index.js +1 -0
  151. package/environment/index.js.map +1 -1
  152. package/environment/useToolCredentialsReadiness.d.ts +52 -0
  153. package/environment/useToolCredentialsReadiness.d.ts.map +1 -0
  154. package/environment/useToolCredentialsReadiness.js +84 -0
  155. package/environment/useToolCredentialsReadiness.js.map +1 -0
  156. package/execution/ArtifactContentBody.d.ts.map +1 -1
  157. package/execution/ArtifactContentBody.js +5 -21
  158. package/execution/ArtifactContentBody.js.map +1 -1
  159. package/execution/ArtifactFileContent.d.ts +28 -0
  160. package/execution/ArtifactFileContent.d.ts.map +1 -0
  161. package/execution/ArtifactFileContent.js +36 -0
  162. package/execution/ArtifactFileContent.js.map +1 -0
  163. package/execution/ArtifactRow.d.ts +8 -20
  164. package/execution/ArtifactRow.d.ts.map +1 -1
  165. package/execution/ArtifactRow.js +12 -45
  166. package/execution/ArtifactRow.js.map +1 -1
  167. package/execution/ArtifactRowView.d.ts +43 -0
  168. package/execution/ArtifactRowView.d.ts.map +1 -0
  169. package/execution/ArtifactRowView.js +35 -0
  170. package/execution/ArtifactRowView.js.map +1 -0
  171. package/execution/FileChangesView.d.ts.map +1 -1
  172. package/execution/FileChangesView.js +1 -61
  173. package/execution/FileChangesView.js.map +1 -1
  174. package/execution/SubAgentSection.d.ts.map +1 -1
  175. package/execution/SubAgentSection.js +4 -15
  176. package/execution/SubAgentSection.js.map +1 -1
  177. package/execution/ToolCallItem.d.ts.map +1 -1
  178. package/execution/ToolCallItem.js +16 -61
  179. package/execution/ToolCallItem.js.map +1 -1
  180. package/execution/agent-execution-document.d.ts +31 -0
  181. package/execution/agent-execution-document.d.ts.map +1 -0
  182. package/execution/agent-execution-document.js +48 -0
  183. package/execution/agent-execution-document.js.map +1 -0
  184. package/{session → execution}/artifact-document.d.ts +2 -3
  185. package/execution/artifact-document.d.ts.map +1 -0
  186. package/execution/artifact-document.js +23 -0
  187. package/execution/artifact-document.js.map +1 -0
  188. package/execution/artifact-row-item.d.ts +56 -0
  189. package/execution/artifact-row-item.d.ts.map +1 -0
  190. package/execution/artifact-row-item.js +57 -0
  191. package/execution/artifact-row-item.js.map +1 -0
  192. package/execution/deriveExecutionFileChanges.d.ts +55 -0
  193. package/execution/deriveExecutionFileChanges.d.ts.map +1 -0
  194. package/execution/deriveExecutionFileChanges.js +216 -0
  195. package/execution/deriveExecutionFileChanges.js.map +1 -0
  196. package/execution/file-change-document.d.ts +22 -0
  197. package/execution/file-change-document.d.ts.map +1 -0
  198. package/execution/file-change-document.js +34 -0
  199. package/execution/file-change-document.js.map +1 -0
  200. package/execution/index.d.ts +14 -0
  201. package/execution/index.d.ts.map +1 -1
  202. package/execution/index.js +9 -0
  203. package/execution/index.js.map +1 -1
  204. package/execution/useArtifactContentById.d.ts +61 -0
  205. package/execution/useArtifactContentById.d.ts.map +1 -0
  206. package/execution/useArtifactContentById.js +63 -0
  207. package/execution/useArtifactContentById.js.map +1 -0
  208. package/execution/useArtifactDownload.d.ts +4 -3
  209. package/execution/useArtifactDownload.d.ts.map +1 -1
  210. package/execution/useArtifactDownload.js +4 -3
  211. package/execution/useArtifactDownload.js.map +1 -1
  212. package/execution/useCreateAgentExecution.d.ts +1 -1
  213. package/execution/useLiveAgentExecution.d.ts +59 -0
  214. package/execution/useLiveAgentExecution.d.ts.map +1 -0
  215. package/execution/useLiveAgentExecution.js +73 -0
  216. package/execution/useLiveAgentExecution.js.map +1 -0
  217. package/index.d.ts +15 -10
  218. package/index.d.ts.map +1 -1
  219. package/index.js +21 -6
  220. package/index.js.map +1 -1
  221. package/internal/DecisionButton.d.ts +4 -3
  222. package/internal/DecisionButton.d.ts.map +1 -1
  223. package/internal/DecisionButton.js +4 -3
  224. package/internal/DecisionButton.js.map +1 -1
  225. package/internal/oauthPopup.d.ts +101 -0
  226. package/internal/oauthPopup.d.ts.map +1 -0
  227. package/internal/oauthPopup.js +208 -0
  228. package/internal/oauthPopup.js.map +1 -0
  229. package/internal/store/index.d.ts +0 -2
  230. package/internal/store/index.d.ts.map +1 -1
  231. package/internal/store/index.js +0 -1
  232. package/internal/store/index.js.map +1 -1
  233. package/internal/store/workflow-execution-event-store.d.ts +34 -1
  234. package/internal/store/workflow-execution-event-store.d.ts.map +1 -1
  235. package/internal/store/workflow-execution-event-store.js +81 -3
  236. package/internal/store/workflow-execution-event-store.js.map +1 -1
  237. package/internal/store/workspace-file-selection-store.d.ts +1 -2
  238. package/internal/store/workspace-file-selection-store.d.ts.map +1 -1
  239. package/internal/store/workspace-file-selection-store.js +2 -5
  240. package/internal/store/workspace-file-selection-store.js.map +1 -1
  241. package/internal/thread-card/ThreadCardShell.d.ts +91 -0
  242. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -0
  243. package/internal/thread-card/ThreadCardShell.js +41 -0
  244. package/internal/thread-card/ThreadCardShell.js.map +1 -0
  245. package/internal/thread-card/glyphs.d.ts +34 -0
  246. package/internal/thread-card/glyphs.d.ts.map +1 -0
  247. package/internal/thread-card/glyphs.js +50 -0
  248. package/internal/thread-card/glyphs.js.map +1 -0
  249. package/internal/thread-card/index.d.ts +3 -0
  250. package/internal/thread-card/index.d.ts.map +1 -0
  251. package/internal/thread-card/index.js +3 -0
  252. package/internal/thread-card/index.js.map +1 -0
  253. package/internal/useRevealLine.d.ts +2 -2
  254. package/internal/useRevealLine.js +2 -2
  255. package/mcp-server/OAuthCallbackHandler.js +1 -1
  256. package/mcp-server/OAuthCallbackHandler.js.map +1 -1
  257. package/mcp-server/useMcpServerOAuthConnect.d.ts +4 -23
  258. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  259. package/mcp-server/useMcpServerOAuthConnect.js +12 -145
  260. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  261. package/package.json +4 -4
  262. package/session/NewSessionViewer.d.ts.map +1 -1
  263. package/session/NewSessionViewer.js +0 -1
  264. package/session/NewSessionViewer.js.map +1 -1
  265. package/session/SessionPanelChip.d.ts +7 -22
  266. package/session/SessionPanelChip.d.ts.map +1 -1
  267. package/session/SessionPanelChip.js +8 -36
  268. package/session/SessionPanelChip.js.map +1 -1
  269. package/session/SessionViewer.d.ts +7 -4
  270. package/session/SessionViewer.d.ts.map +1 -1
  271. package/session/SessionViewer.js +32 -30
  272. package/session/SessionViewer.js.map +1 -1
  273. package/session/audience.d.ts +15 -1
  274. package/session/audience.d.ts.map +1 -1
  275. package/session/channelOrigin.d.ts +33 -0
  276. package/session/channelOrigin.d.ts.map +1 -0
  277. package/session/channelOrigin.js +36 -0
  278. package/session/channelOrigin.js.map +1 -0
  279. package/session/facets/index.d.ts +0 -2
  280. package/session/facets/index.d.ts.map +1 -1
  281. package/session/facets/index.js +0 -1
  282. package/session/facets/index.js.map +1 -1
  283. package/session/index.d.ts +2 -2
  284. package/session/index.d.ts.map +1 -1
  285. package/session/index.js +5 -3
  286. package/session/index.js.map +1 -1
  287. package/session/useSessionFileChanges.d.ts +10 -34
  288. package/session/useSessionFileChanges.d.ts.map +1 -1
  289. package/session/useSessionFileChanges.js +9 -141
  290. package/session/useSessionFileChanges.js.map +1 -1
  291. package/session/useSessionPanel.d.ts +5 -15
  292. package/session/useSessionPanel.d.ts.map +1 -1
  293. package/session/useSessionPanel.js +3 -35
  294. package/session/useSessionPanel.js.map +1 -1
  295. package/session/useSessionRailViews.d.ts +3 -6
  296. package/session/useSessionRailViews.d.ts.map +1 -1
  297. package/session/useSessionRailViews.js +3 -17
  298. package/session/useSessionRailViews.js.map +1 -1
  299. package/settings/ChannelAppsSection.d.ts +13 -0
  300. package/settings/ChannelAppsSection.d.ts.map +1 -0
  301. package/settings/ChannelAppsSection.js +48 -0
  302. package/settings/ChannelAppsSection.js.map +1 -0
  303. package/settings/index.d.ts +1 -0
  304. package/settings/index.d.ts.map +1 -1
  305. package/settings/index.js +1 -0
  306. package/settings/index.js.map +1 -1
  307. package/settings/settings-nav.d.ts.map +1 -1
  308. package/settings/settings-nav.js +6 -1
  309. package/settings/settings-nav.js.map +1 -1
  310. package/sharing/AgentShareList.d.ts.map +1 -1
  311. package/sharing/AgentShareList.js +11 -3
  312. package/sharing/AgentShareList.js.map +1 -1
  313. package/sharing/ShareAgentDialog.js +1 -1
  314. package/sharing/useShareToolReadiness.d.ts +9 -38
  315. package/sharing/useShareToolReadiness.d.ts.map +1 -1
  316. package/sharing/useShareToolReadiness.js +7 -72
  317. package/sharing/useShareToolReadiness.js.map +1 -1
  318. package/src/agent-instance/AgentInstanceList.tsx +60 -42
  319. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +161 -0
  320. package/src/channel/AgentChannelsPanel.tsx +688 -0
  321. package/src/channel/ChannelConversationsDialog.tsx +267 -0
  322. package/src/channel/ChannelCredentialsDialog.tsx +219 -0
  323. package/src/channel/ChannelToolCredentials.tsx +124 -0
  324. package/src/channel/ConnectSlackDialog.tsx +611 -0
  325. package/src/channel/ConnectWhatsAppDialog.tsx +624 -0
  326. package/src/channel/SlackMarkIcon.tsx +21 -0
  327. package/src/channel/WhatsAppMarkIcon.tsx +22 -0
  328. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +638 -0
  329. package/src/channel/__tests__/ChannelConversationsDialog.test.tsx +114 -0
  330. package/src/channel/__tests__/ChannelCredentialsDialog.test.tsx +240 -0
  331. package/src/channel/__tests__/ConnectSlackDialog.test.tsx +659 -0
  332. package/src/channel/__tests__/ConnectWhatsAppDialog.test.tsx +564 -0
  333. package/src/channel/__tests__/providers.test.ts +118 -0
  334. package/src/channel/__tests__/useAgentChannel.test.tsx +116 -0
  335. package/src/channel/__tests__/useAgentChannelList.test.tsx +166 -0
  336. package/src/channel/__tests__/useChannelSessions.test.tsx +95 -0
  337. package/src/channel/__tests__/useChannelToolReadiness.test.tsx +158 -0
  338. package/src/channel/__tests__/useConnectSlackChannel.test.tsx +276 -0
  339. package/src/channel/__tests__/useDeleteAgentChannel.test.tsx +97 -0
  340. package/src/channel/__tests__/useInstallChannel.test.tsx +177 -0
  341. package/src/channel/__tests__/useSaveAgentChannel.test.tsx +294 -0
  342. package/src/channel/connect/ServingAppSection.tsx +185 -0
  343. package/src/channel/connect/ToolCredentialsSection.tsx +67 -0
  344. package/src/channel/connect/VerbatimRefusal.tsx +27 -0
  345. package/src/channel/connect/icons.tsx +42 -0
  346. package/src/channel/index.ts +65 -0
  347. package/src/channel/providerPresentation.ts +154 -0
  348. package/src/channel/providers.ts +73 -0
  349. package/src/channel/useAgentChannel.ts +58 -0
  350. package/src/channel/useAgentChannelList.ts +69 -0
  351. package/src/channel/useChannelSessions.ts +73 -0
  352. package/src/channel/useChannelToolReadiness.ts +39 -0
  353. package/src/channel/useConnectSlackChannel.ts +195 -0
  354. package/src/channel/useCreateAgentChannel.ts +73 -0
  355. package/src/channel/useDeleteAgentChannel.ts +71 -0
  356. package/src/channel/useInstallChannel.ts +117 -0
  357. package/src/channel/useOrgAgentChannelList.ts +60 -0
  358. package/src/channel/useSaveAgentChannel.ts +133 -0
  359. package/src/channel-app/ChannelAppDetailPanel.tsx +510 -0
  360. package/src/channel-app/ChannelAppListPanel.tsx +201 -0
  361. package/src/channel-app/CreateChannelAppForm.tsx +529 -0
  362. package/src/channel-app/__tests__/channelAppWhatsApp.test.tsx +270 -0
  363. package/src/channel-app/__tests__/slackAppSetup.test.ts +75 -0
  364. package/src/channel-app/__tests__/useChannelAppHooks.test.tsx +157 -0
  365. package/src/channel-app/__tests__/whatsappAppSetup.test.ts +39 -0
  366. package/src/channel-app/index.ts +30 -0
  367. package/src/channel-app/internal.tsx +180 -0
  368. package/src/channel-app/slackAppSetup.ts +153 -0
  369. package/src/channel-app/useChannelAppList.ts +59 -0
  370. package/src/channel-app/useCreateChannelApp.ts +70 -0
  371. package/src/channel-app/useDeleteChannelApp.ts +62 -0
  372. package/src/channel-app/useUpdateChannelApp.ts +70 -0
  373. package/src/channel-app/whatsappAppSetup.ts +62 -0
  374. package/src/environment/index.ts +2 -0
  375. package/src/environment/useToolCredentialsReadiness.ts +122 -0
  376. package/src/execution/ArtifactContentBody.tsx +6 -88
  377. package/src/execution/ArtifactFileContent.tsx +110 -0
  378. package/src/execution/ArtifactRow.tsx +28 -118
  379. package/src/execution/ArtifactRowView.tsx +137 -0
  380. package/src/execution/FileChangesView.tsx +4 -69
  381. package/src/execution/SubAgentSection.tsx +2 -36
  382. package/src/execution/ToolCallItem.tsx +48 -175
  383. package/src/execution/__tests__/ArtifactFileContent.test.tsx +60 -0
  384. package/src/execution/__tests__/ArtifactRowView.test.tsx +78 -0
  385. package/src/execution/__tests__/agent-execution-document.test.ts +45 -0
  386. package/src/execution/__tests__/artifact-row-item.test.ts +128 -0
  387. package/src/execution/__tests__/deriveExecutionFileChanges.test.ts +270 -0
  388. package/src/execution/__tests__/useArtifactContentById.test.tsx +85 -0
  389. package/src/execution/__tests__/useLiveAgentExecution.test.tsx +202 -0
  390. package/src/execution/agent-execution-document.ts +54 -0
  391. package/src/execution/artifact-document.ts +24 -0
  392. package/src/execution/artifact-row-item.ts +97 -0
  393. package/src/execution/deriveExecutionFileChanges.ts +237 -0
  394. package/src/execution/file-change-document.ts +37 -0
  395. package/src/execution/index.ts +36 -0
  396. package/src/execution/useArtifactContentById.ts +120 -0
  397. package/src/execution/useArtifactDownload.ts +4 -3
  398. package/src/execution/useCreateAgentExecution.ts +1 -1
  399. package/src/execution/useLiveAgentExecution.ts +127 -0
  400. package/src/index.ts +155 -11
  401. package/src/internal/DecisionButton.tsx +4 -3
  402. package/src/internal/__tests__/ThreadCardShell.test.tsx +105 -0
  403. package/src/internal/__tests__/oauthPopup.test.ts +245 -0
  404. package/src/internal/oauthPopup.ts +261 -0
  405. package/src/internal/store/__tests__/workflow-execution-event-store.test.ts +375 -5
  406. package/src/internal/store/index.ts +0 -3
  407. package/src/internal/store/workflow-execution-event-store.ts +123 -4
  408. package/src/internal/store/workspace-file-selection-store.ts +2 -5
  409. package/src/internal/thread-card/ThreadCardShell.tsx +189 -0
  410. package/src/internal/thread-card/glyphs.tsx +108 -0
  411. package/src/internal/thread-card/index.ts +19 -0
  412. package/src/internal/useRevealLine.ts +2 -2
  413. package/src/mcp-server/OAuthCallbackHandler.tsx +2 -2
  414. package/src/mcp-server/useMcpServerOAuthConnect.ts +22 -184
  415. package/src/session/NewSessionViewer.tsx +0 -1
  416. package/src/session/SessionPanelChip.tsx +10 -96
  417. package/src/session/SessionViewer.tsx +170 -144
  418. package/src/session/__tests__/SessionViewer-artifactTabs.test.tsx +1 -1
  419. package/src/session/__tests__/observerAudience.test.tsx +241 -0
  420. package/src/session/__tests__/useSessionPanel.test.ts +6 -61
  421. package/src/session/__tests__/useSessionRailViews.test.tsx +5 -27
  422. package/src/session/audience.ts +15 -1
  423. package/src/session/channelOrigin.ts +45 -0
  424. package/src/session/facets/index.ts +0 -3
  425. package/src/session/index.ts +9 -6
  426. package/src/session/useSessionFileChanges.ts +12 -153
  427. package/src/session/useSessionPanel.ts +8 -51
  428. package/src/session/useSessionRailViews.tsx +2 -27
  429. package/src/settings/ChannelAppsSection.tsx +133 -0
  430. package/src/settings/index.ts +1 -0
  431. package/src/settings/settings-nav.ts +6 -0
  432. package/src/sharing/AgentShareList.tsx +85 -64
  433. package/src/sharing/ShareAgentDialog.tsx +1 -1
  434. package/src/sharing/__tests__/AgentShareList.test.tsx +92 -12
  435. package/src/sharing/useShareToolReadiness.ts +13 -101
  436. package/src/workflow/WorkflowAgentExecutionDocument.tsx +283 -0
  437. package/src/workflow/WorkflowApprovalList.tsx +158 -0
  438. package/src/workflow/WorkflowArtifactDocument.tsx +257 -0
  439. package/src/workflow/WorkflowExecutionGraph.tsx +40 -78
  440. package/src/workflow/WorkflowExecutionViewer.tsx +610 -287
  441. package/src/workflow/WorkflowFileReviewList.tsx +1 -1
  442. package/src/workflow/WorkflowTaskApprovalCard.tsx +5 -4
  443. package/src/workflow/WorkflowTaskApprovalSummary.tsx +6 -6
  444. package/src/workflow/__tests__/WorkflowAgentExecutionDocument.test.tsx +651 -0
  445. package/src/workflow/__tests__/WorkflowApprovalList.test.tsx +229 -0
  446. package/src/workflow/__tests__/WorkflowArtifactDocument.test.tsx +90 -0
  447. package/src/workflow/__tests__/WorkflowArtifactsTab.test.tsx +85 -0
  448. package/src/workflow/__tests__/WorkflowChangesTab.test.tsx +113 -0
  449. package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +473 -0
  450. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +632 -0
  451. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
  452. package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +947 -0
  453. package/src/workflow/__tests__/WorkflowUsageTab.test.tsx +163 -0
  454. package/src/workflow/__tests__/agent-call-live-experience.test.ts +6 -53
  455. package/src/workflow/__tests__/derive-execution-overlays.test.ts +4 -0
  456. package/src/workflow/__tests__/deriveWorkflowArtifactItems.test.ts +71 -0
  457. package/src/workflow/__tests__/deriveWorkflowUsageItems.test.ts +132 -0
  458. package/src/workflow/__tests__/execution-graph.test.ts +8 -0
  459. package/src/workflow/__tests__/project-thread-items.test.ts +428 -0
  460. package/src/workflow/__tests__/structured-data-viewer.test.tsx +1 -1
  461. package/src/workflow/__tests__/task-approval.test.ts +149 -0
  462. package/src/workflow/__tests__/task-detail-io.test.ts +40 -0
  463. package/src/workflow/__tests__/task-presentation.test.ts +479 -0
  464. package/src/workflow/__tests__/useActiveTaskName.test.ts +4 -0
  465. package/src/workflow/__tests__/useApprovalBoundary.test.ts +158 -0
  466. package/src/workflow/__tests__/useExecutionAnnouncements.test.ts +4 -0
  467. package/src/workflow/__tests__/useFollowExecution.test.ts +2 -89
  468. package/src/workflow/__tests__/useWorkflowExecutionFileChanges.test.tsx +412 -0
  469. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +297 -0
  470. package/src/workflow/__tests__/useWorkflowExecutionRailViews.test.tsx +115 -0
  471. package/src/workflow/deriveWorkflowArtifactItems.ts +59 -0
  472. package/src/workflow/deriveWorkflowUsageItems.ts +73 -0
  473. package/src/workflow/diagnosis-document.ts +31 -0
  474. package/src/workflow/execution/index.ts +0 -15
  475. package/src/workflow/facets/WorkflowArtifactsTab.tsx +99 -0
  476. package/src/workflow/facets/WorkflowChangesTab.tsx +129 -0
  477. package/src/workflow/facets/WorkflowUsageTab.tsx +258 -0
  478. package/src/workflow/format-utils.ts +2 -3
  479. package/src/workflow/index.ts +106 -62
  480. package/src/workflow/inspector/index.ts +0 -4
  481. package/src/workflow/instance/WorkflowInstanceList.tsx +59 -41
  482. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +156 -0
  483. package/src/workflow/task-detail/index.ts +11 -0
  484. package/src/workflow/task-detail/task-approval.ts +158 -0
  485. package/src/workflow/task-detail/task-detail-io.ts +65 -0
  486. package/src/workflow/thread/WorkflowTaskThread.tsx +845 -0
  487. package/src/workflow/thread/project-thread-items.ts +235 -0
  488. package/src/workflow/thread/task-presentation.ts +427 -0
  489. package/src/workflow/thread/thread-presentation.ts +59 -0
  490. package/src/workflow/thread/useWorkflowThreadItems.ts +34 -0
  491. package/src/workflow/useApprovalBoundary.ts +72 -0
  492. package/src/workflow/useFollowExecution.ts +0 -26
  493. package/src/workflow/useWorkflowArtifactDownload.ts +68 -0
  494. package/src/workflow/useWorkflowExecutionActions.ts +3 -2
  495. package/src/workflow/useWorkflowExecutionFileChanges.ts +341 -0
  496. package/src/workflow/useWorkflowExecutionGraph.ts +3 -43
  497. package/src/workflow/useWorkflowExecutionPanel.ts +292 -0
  498. package/src/workflow/useWorkflowExecutionRailViews.tsx +173 -0
  499. package/src/workspace/FileViewer.tsx +3 -3
  500. package/src/workspace/PanelChip.tsx +103 -0
  501. package/src/workspace/WorkspaceSurface.tsx +50 -6
  502. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +110 -0
  503. package/src/workspace/index.ts +3 -0
  504. package/styles.css +1 -1
  505. package/workflow/WorkflowAgentExecutionDocument.d.ts +79 -0
  506. package/workflow/WorkflowAgentExecutionDocument.d.ts.map +1 -0
  507. package/workflow/WorkflowAgentExecutionDocument.js +87 -0
  508. package/workflow/WorkflowAgentExecutionDocument.js.map +1 -0
  509. package/workflow/WorkflowApprovalList.d.ts +62 -0
  510. package/workflow/WorkflowApprovalList.d.ts.map +1 -0
  511. package/workflow/WorkflowApprovalList.js +52 -0
  512. package/workflow/WorkflowApprovalList.js.map +1 -0
  513. package/workflow/WorkflowArtifactDocument.d.ts +29 -0
  514. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -0
  515. package/workflow/WorkflowArtifactDocument.js +89 -0
  516. package/workflow/WorkflowArtifactDocument.js.map +1 -0
  517. package/workflow/WorkflowExecutionGraph.d.ts +15 -13
  518. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  519. package/workflow/WorkflowExecutionGraph.js +18 -53
  520. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  521. package/workflow/WorkflowExecutionViewer.d.ts +8 -5
  522. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  523. package/workflow/WorkflowExecutionViewer.js +329 -54
  524. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  525. package/workflow/WorkflowFileReviewList.d.ts +1 -1
  526. package/workflow/WorkflowFileReviewList.js +1 -1
  527. package/workflow/WorkflowTaskApprovalCard.d.ts +4 -3
  528. package/workflow/WorkflowTaskApprovalCard.d.ts.map +1 -1
  529. package/workflow/WorkflowTaskApprovalCard.js +5 -4
  530. package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
  531. package/workflow/WorkflowTaskApprovalSummary.d.ts +6 -6
  532. package/workflow/WorkflowTaskApprovalSummary.js +5 -5
  533. package/workflow/deriveWorkflowArtifactItems.d.ts +30 -0
  534. package/workflow/deriveWorkflowArtifactItems.d.ts.map +1 -0
  535. package/workflow/deriveWorkflowArtifactItems.js +38 -0
  536. package/workflow/deriveWorkflowArtifactItems.js.map +1 -0
  537. package/workflow/deriveWorkflowUsageItems.d.ts +36 -0
  538. package/workflow/deriveWorkflowUsageItems.d.ts.map +1 -0
  539. package/workflow/deriveWorkflowUsageItems.js +50 -0
  540. package/workflow/deriveWorkflowUsageItems.js.map +1 -0
  541. package/workflow/diagnosis-document.d.ts +17 -0
  542. package/workflow/diagnosis-document.d.ts.map +1 -0
  543. package/workflow/diagnosis-document.js +29 -0
  544. package/workflow/diagnosis-document.js.map +1 -0
  545. package/workflow/execution/index.d.ts +0 -2
  546. package/workflow/execution/index.d.ts.map +1 -1
  547. package/workflow/execution/index.js +0 -2
  548. package/workflow/execution/index.js.map +1 -1
  549. package/workflow/facets/WorkflowArtifactsTab.d.ts +26 -0
  550. package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -0
  551. package/workflow/facets/WorkflowArtifactsTab.js +34 -0
  552. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -0
  553. package/workflow/facets/WorkflowChangesTab.d.ts +37 -0
  554. package/workflow/facets/WorkflowChangesTab.d.ts.map +1 -0
  555. package/workflow/facets/WorkflowChangesTab.js +50 -0
  556. package/workflow/facets/WorkflowChangesTab.js.map +1 -0
  557. package/workflow/facets/WorkflowUsageTab.d.ts +27 -0
  558. package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -0
  559. package/workflow/facets/WorkflowUsageTab.js +87 -0
  560. package/workflow/facets/WorkflowUsageTab.js.map +1 -0
  561. package/workflow/format-utils.d.ts +2 -3
  562. package/workflow/format-utils.d.ts.map +1 -1
  563. package/workflow/format-utils.js +2 -3
  564. package/workflow/format-utils.js.map +1 -1
  565. package/workflow/index.d.ts +21 -10
  566. package/workflow/index.d.ts.map +1 -1
  567. package/workflow/index.js +29 -14
  568. package/workflow/index.js.map +1 -1
  569. package/workflow/inspector/index.d.ts +0 -2
  570. package/workflow/inspector/index.d.ts.map +1 -1
  571. package/workflow/inspector/index.js +0 -2
  572. package/workflow/inspector/index.js.map +1 -1
  573. package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
  574. package/workflow/instance/WorkflowInstanceList.js +11 -3
  575. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  576. package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -0
  577. package/workflow/task-detail/StructuredDataViewer.js.map +1 -0
  578. package/workflow/task-detail/index.d.ts +4 -0
  579. package/workflow/task-detail/index.d.ts.map +1 -0
  580. package/workflow/task-detail/index.js +4 -0
  581. package/workflow/task-detail/index.js.map +1 -0
  582. package/workflow/task-detail/task-approval.d.ts +89 -0
  583. package/workflow/task-detail/task-approval.d.ts.map +1 -0
  584. package/workflow/task-detail/task-approval.js +84 -0
  585. package/workflow/task-detail/task-approval.js.map +1 -0
  586. package/workflow/task-detail/task-detail-io.d.ts +39 -0
  587. package/workflow/task-detail/task-detail-io.d.ts.map +1 -0
  588. package/workflow/task-detail/task-detail-io.js +42 -0
  589. package/workflow/task-detail/task-detail-io.js.map +1 -0
  590. package/workflow/thread/WorkflowTaskThread.d.ts +91 -0
  591. package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -0
  592. package/workflow/thread/WorkflowTaskThread.js +318 -0
  593. package/workflow/thread/WorkflowTaskThread.js.map +1 -0
  594. package/workflow/thread/project-thread-items.d.ts +108 -0
  595. package/workflow/thread/project-thread-items.d.ts.map +1 -0
  596. package/workflow/thread/project-thread-items.js +126 -0
  597. package/workflow/thread/project-thread-items.js.map +1 -0
  598. package/workflow/thread/task-presentation.d.ts +73 -0
  599. package/workflow/thread/task-presentation.d.ts.map +1 -0
  600. package/workflow/thread/task-presentation.js +331 -0
  601. package/workflow/thread/task-presentation.js.map +1 -0
  602. package/workflow/thread/thread-presentation.d.ts +28 -0
  603. package/workflow/thread/thread-presentation.d.ts.map +1 -0
  604. package/workflow/thread/thread-presentation.js +28 -0
  605. package/workflow/thread/thread-presentation.js.map +1 -0
  606. package/workflow/thread/useWorkflowThreadItems.d.ts +16 -0
  607. package/workflow/thread/useWorkflowThreadItems.d.ts.map +1 -0
  608. package/workflow/thread/useWorkflowThreadItems.js +22 -0
  609. package/workflow/thread/useWorkflowThreadItems.js.map +1 -0
  610. package/workflow/useApprovalBoundary.d.ts +38 -0
  611. package/workflow/useApprovalBoundary.d.ts.map +1 -0
  612. package/workflow/useApprovalBoundary.js +55 -0
  613. package/workflow/useApprovalBoundary.js.map +1 -0
  614. package/workflow/useFollowExecution.d.ts +0 -20
  615. package/workflow/useFollowExecution.d.ts.map +1 -1
  616. package/workflow/useFollowExecution.js +0 -17
  617. package/workflow/useFollowExecution.js.map +1 -1
  618. package/workflow/useWorkflowArtifactDownload.d.ts +28 -0
  619. package/workflow/useWorkflowArtifactDownload.d.ts.map +1 -0
  620. package/workflow/useWorkflowArtifactDownload.js +45 -0
  621. package/workflow/useWorkflowArtifactDownload.js.map +1 -0
  622. package/workflow/useWorkflowExecutionActions.d.ts +3 -2
  623. package/workflow/useWorkflowExecutionActions.d.ts.map +1 -1
  624. package/workflow/useWorkflowExecutionActions.js.map +1 -1
  625. package/workflow/useWorkflowExecutionFileChanges.d.ts +107 -0
  626. package/workflow/useWorkflowExecutionFileChanges.d.ts.map +1 -0
  627. package/workflow/useWorkflowExecutionFileChanges.js +244 -0
  628. package/workflow/useWorkflowExecutionFileChanges.js.map +1 -0
  629. package/workflow/useWorkflowExecutionGraph.d.ts +1 -14
  630. package/workflow/useWorkflowExecutionGraph.d.ts.map +1 -1
  631. package/workflow/useWorkflowExecutionGraph.js +2 -25
  632. package/workflow/useWorkflowExecutionGraph.js.map +1 -1
  633. package/workflow/useWorkflowExecutionPanel.d.ts +108 -0
  634. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -0
  635. package/workflow/useWorkflowExecutionPanel.js +103 -0
  636. package/workflow/useWorkflowExecutionPanel.js.map +1 -0
  637. package/workflow/useWorkflowExecutionRailViews.d.ts +46 -0
  638. package/workflow/useWorkflowExecutionRailViews.d.ts.map +1 -0
  639. package/workflow/useWorkflowExecutionRailViews.js +81 -0
  640. package/workflow/useWorkflowExecutionRailViews.js.map +1 -0
  641. package/workspace/FileViewer.d.ts +1 -1
  642. package/workspace/FileViewer.js +3 -3
  643. package/workspace/FileViewer.js.map +1 -1
  644. package/workspace/PanelChip.d.ts +27 -0
  645. package/workspace/PanelChip.d.ts.map +1 -0
  646. package/workspace/PanelChip.js +42 -0
  647. package/workspace/PanelChip.js.map +1 -0
  648. package/workspace/WorkspaceSurface.d.ts +25 -1
  649. package/workspace/WorkspaceSurface.d.ts.map +1 -1
  650. package/workspace/WorkspaceSurface.js +21 -9
  651. package/workspace/WorkspaceSurface.js.map +1 -1
  652. package/workspace/index.d.ts +3 -1
  653. package/workspace/index.d.ts.map +1 -1
  654. package/workspace/index.js +1 -0
  655. package/workspace/index.js.map +1 -1
  656. package/execution/ThreadSelectionContext.d.ts +0 -17
  657. package/execution/ThreadSelectionContext.d.ts.map +0 -1
  658. package/execution/ThreadSelectionContext.js +0 -18
  659. package/execution/ThreadSelectionContext.js.map +0 -1
  660. package/execution/useThreadSelection.d.ts +0 -35
  661. package/execution/useThreadSelection.d.ts.map +0 -1
  662. package/execution/useThreadSelection.js +0 -65
  663. package/execution/useThreadSelection.js.map +0 -1
  664. package/internal/store/selection-store.d.ts +0 -53
  665. package/internal/store/selection-store.d.ts.map +0 -1
  666. package/internal/store/selection-store.js +0 -88
  667. package/internal/store/selection-store.js.map +0 -1
  668. package/session/artifact-document.d.ts.map +0 -1
  669. package/session/artifact-document.js +0 -22
  670. package/session/artifact-document.js.map +0 -1
  671. package/session/facets/InspectTab.d.ts +0 -13
  672. package/session/facets/InspectTab.d.ts.map +0 -1
  673. package/session/facets/InspectTab.js +0 -19
  674. package/session/facets/InspectTab.js.map +0 -1
  675. package/src/execution/ThreadSelectionContext.tsx +0 -20
  676. package/src/execution/useThreadSelection.ts +0 -95
  677. package/src/internal/store/__tests__/selection-store.test.ts +0 -115
  678. package/src/internal/store/selection-store.ts +0 -112
  679. package/src/session/artifact-document.ts +0 -23
  680. package/src/session/facets/InspectTab.tsx +0 -57
  681. package/src/workflow/WorkflowExecutionApprovalCard.tsx +0 -154
  682. package/src/workflow/WorkflowExecutionArtifactPanel.tsx +0 -107
  683. package/src/workflow/WorkflowExecutionCostPanel.tsx +0 -120
  684. package/src/workflow/WorkflowExecutionTaskPanel.tsx +0 -129
  685. package/src/workflow/WorkflowExecutionTimeline.tsx +0 -151
  686. package/src/workflow/WorkflowExecutionTimelineEvent.tsx +0 -497
  687. package/src/workflow/__tests__/ExecutionInspector.test.tsx +0 -155
  688. package/src/workflow/__tests__/WorkflowExecutionApprovalCard.test.tsx +0 -129
  689. package/src/workflow/__tests__/derive-task-detail.test.ts +0 -1265
  690. package/src/workflow/__tests__/derive-waterfall-entries.test.ts +0 -521
  691. package/src/workflow/__tests__/execution-inspector.test.tsx +0 -332
  692. package/src/workflow/execution/derive-waterfall-entries.ts +0 -377
  693. package/src/workflow/execution/useWaterfallEntries.ts +0 -125
  694. package/src/workflow/execution-inspector/AgentCallTab.tsx +0 -169
  695. package/src/workflow/execution-inspector/ErrorTab.tsx +0 -110
  696. package/src/workflow/execution-inspector/EventLogTab.tsx +0 -79
  697. package/src/workflow/execution-inspector/ExecutionInspector.tsx +0 -341
  698. package/src/workflow/execution-inspector/InputOutputTab.tsx +0 -325
  699. package/src/workflow/execution-inspector/RetriesTab.tsx +0 -68
  700. package/src/workflow/execution-inspector/SummaryTab.tsx +0 -62
  701. package/src/workflow/execution-inspector/derive-task-detail.ts +0 -584
  702. package/src/workflow/execution-inspector/index.ts +0 -14
  703. package/src/workflow/execution-inspector/useExecutionTaskDetail.ts +0 -55
  704. package/src/workflow/inspector/ExecutionInspectorAdapter.tsx +0 -40
  705. package/src/workflow/waterfall/WaterfallBar.tsx +0 -167
  706. package/src/workflow/waterfall/WaterfallRow.tsx +0 -112
  707. package/src/workflow/waterfall/WaterfallScale.tsx +0 -52
  708. package/src/workflow/waterfall/WaterfallTimeline.tsx +0 -138
  709. package/src/workflow/waterfall/WaterfallTooltip.tsx +0 -74
  710. package/src/workflow/waterfall/index.ts +0 -5
  711. package/workflow/WorkflowExecutionApprovalCard.d.ts +0 -34
  712. package/workflow/WorkflowExecutionApprovalCard.d.ts.map +0 -1
  713. package/workflow/WorkflowExecutionApprovalCard.js +0 -46
  714. package/workflow/WorkflowExecutionApprovalCard.js.map +0 -1
  715. package/workflow/WorkflowExecutionArtifactPanel.d.ts +0 -15
  716. package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +0 -1
  717. package/workflow/WorkflowExecutionArtifactPanel.js +0 -46
  718. package/workflow/WorkflowExecutionArtifactPanel.js.map +0 -1
  719. package/workflow/WorkflowExecutionCostPanel.d.ts +0 -18
  720. package/workflow/WorkflowExecutionCostPanel.d.ts.map +0 -1
  721. package/workflow/WorkflowExecutionCostPanel.js +0 -31
  722. package/workflow/WorkflowExecutionCostPanel.js.map +0 -1
  723. package/workflow/WorkflowExecutionTaskPanel.d.ts +0 -24
  724. package/workflow/WorkflowExecutionTaskPanel.d.ts.map +0 -1
  725. package/workflow/WorkflowExecutionTaskPanel.js +0 -51
  726. package/workflow/WorkflowExecutionTaskPanel.js.map +0 -1
  727. package/workflow/WorkflowExecutionTimeline.d.ts +0 -42
  728. package/workflow/WorkflowExecutionTimeline.d.ts.map +0 -1
  729. package/workflow/WorkflowExecutionTimeline.js +0 -52
  730. package/workflow/WorkflowExecutionTimeline.js.map +0 -1
  731. package/workflow/WorkflowExecutionTimelineEvent.d.ts +0 -25
  732. package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +0 -1
  733. package/workflow/WorkflowExecutionTimelineEvent.js +0 -179
  734. package/workflow/WorkflowExecutionTimelineEvent.js.map +0 -1
  735. package/workflow/execution/derive-waterfall-entries.d.ts +0 -85
  736. package/workflow/execution/derive-waterfall-entries.d.ts.map +0 -1
  737. package/workflow/execution/derive-waterfall-entries.js +0 -268
  738. package/workflow/execution/derive-waterfall-entries.js.map +0 -1
  739. package/workflow/execution/useWaterfallEntries.d.ts +0 -25
  740. package/workflow/execution/useWaterfallEntries.d.ts.map +0 -1
  741. package/workflow/execution/useWaterfallEntries.js +0 -67
  742. package/workflow/execution/useWaterfallEntries.js.map +0 -1
  743. package/workflow/execution-inspector/AgentCallTab.d.ts +0 -21
  744. package/workflow/execution-inspector/AgentCallTab.d.ts.map +0 -1
  745. package/workflow/execution-inspector/AgentCallTab.js +0 -36
  746. package/workflow/execution-inspector/AgentCallTab.js.map +0 -1
  747. package/workflow/execution-inspector/ErrorTab.d.ts +0 -9
  748. package/workflow/execution-inspector/ErrorTab.d.ts.map +0 -1
  749. package/workflow/execution-inspector/ErrorTab.js +0 -29
  750. package/workflow/execution-inspector/ErrorTab.js.map +0 -1
  751. package/workflow/execution-inspector/EventLogTab.d.ts +0 -11
  752. package/workflow/execution-inspector/EventLogTab.d.ts.map +0 -1
  753. package/workflow/execution-inspector/EventLogTab.js +0 -47
  754. package/workflow/execution-inspector/EventLogTab.js.map +0 -1
  755. package/workflow/execution-inspector/ExecutionInspector.d.ts +0 -69
  756. package/workflow/execution-inspector/ExecutionInspector.d.ts.map +0 -1
  757. package/workflow/execution-inspector/ExecutionInspector.js +0 -145
  758. package/workflow/execution-inspector/ExecutionInspector.js.map +0 -1
  759. package/workflow/execution-inspector/InputOutputTab.d.ts +0 -20
  760. package/workflow/execution-inspector/InputOutputTab.d.ts.map +0 -1
  761. package/workflow/execution-inspector/InputOutputTab.js +0 -124
  762. package/workflow/execution-inspector/InputOutputTab.js.map +0 -1
  763. package/workflow/execution-inspector/RetriesTab.d.ts +0 -7
  764. package/workflow/execution-inspector/RetriesTab.d.ts.map +0 -1
  765. package/workflow/execution-inspector/RetriesTab.js +0 -11
  766. package/workflow/execution-inspector/RetriesTab.js.map +0 -1
  767. package/workflow/execution-inspector/StructuredDataViewer.d.ts.map +0 -1
  768. package/workflow/execution-inspector/StructuredDataViewer.js.map +0 -1
  769. package/workflow/execution-inspector/SummaryTab.d.ts +0 -7
  770. package/workflow/execution-inspector/SummaryTab.d.ts.map +0 -1
  771. package/workflow/execution-inspector/SummaryTab.js +0 -10
  772. package/workflow/execution-inspector/SummaryTab.js.map +0 -1
  773. package/workflow/execution-inspector/derive-task-detail.d.ts +0 -140
  774. package/workflow/execution-inspector/derive-task-detail.d.ts.map +0 -1
  775. package/workflow/execution-inspector/derive-task-detail.js +0 -366
  776. package/workflow/execution-inspector/derive-task-detail.js.map +0 -1
  777. package/workflow/execution-inspector/index.d.ts +0 -4
  778. package/workflow/execution-inspector/index.d.ts.map +0 -1
  779. package/workflow/execution-inspector/index.js +0 -4
  780. package/workflow/execution-inspector/index.js.map +0 -1
  781. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts +0 -38
  782. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts.map +0 -1
  783. package/workflow/execution-inspector/useExecutionTaskDetail.js +0 -37
  784. package/workflow/execution-inspector/useExecutionTaskDetail.js.map +0 -1
  785. package/workflow/inspector/ExecutionInspectorAdapter.d.ts +0 -26
  786. package/workflow/inspector/ExecutionInspectorAdapter.d.ts.map +0 -1
  787. package/workflow/inspector/ExecutionInspectorAdapter.js +0 -23
  788. package/workflow/inspector/ExecutionInspectorAdapter.js.map +0 -1
  789. package/workflow/waterfall/WaterfallBar.d.ts +0 -19
  790. package/workflow/waterfall/WaterfallBar.d.ts.map +0 -1
  791. package/workflow/waterfall/WaterfallBar.js +0 -70
  792. package/workflow/waterfall/WaterfallBar.js.map +0 -1
  793. package/workflow/waterfall/WaterfallRow.d.ts +0 -18
  794. package/workflow/waterfall/WaterfallRow.d.ts.map +0 -1
  795. package/workflow/waterfall/WaterfallRow.js +0 -45
  796. package/workflow/waterfall/WaterfallRow.js.map +0 -1
  797. package/workflow/waterfall/WaterfallScale.d.ts +0 -14
  798. package/workflow/waterfall/WaterfallScale.d.ts.map +0 -1
  799. package/workflow/waterfall/WaterfallScale.js +0 -22
  800. package/workflow/waterfall/WaterfallScale.js.map +0 -1
  801. package/workflow/waterfall/WaterfallTimeline.d.ts +0 -46
  802. package/workflow/waterfall/WaterfallTimeline.d.ts.map +0 -1
  803. package/workflow/waterfall/WaterfallTimeline.js +0 -60
  804. package/workflow/waterfall/WaterfallTimeline.js.map +0 -1
  805. package/workflow/waterfall/WaterfallTooltip.d.ts +0 -15
  806. package/workflow/waterfall/WaterfallTooltip.d.ts.map +0 -1
  807. package/workflow/waterfall/WaterfallTooltip.js +0 -20
  808. package/workflow/waterfall/WaterfallTooltip.js.map +0 -1
  809. package/workflow/waterfall/index.d.ts +0 -6
  810. package/workflow/waterfall/index.d.ts.map +0 -1
  811. package/workflow/waterfall/index.js +0 -6
  812. package/workflow/waterfall/index.js.map +0 -1
  813. /package/src/workflow/{execution-inspector → task-detail}/StructuredDataViewer.tsx +0 -0
  814. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.d.ts +0 -0
  815. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.js +0 -0
@@ -0,0 +1,624 @@
1
+ "use client";
2
+
3
+ import { useCallback, useMemo, useRef, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getErrorReason, type ResourceRef } from "@stigmer/sdk";
6
+ import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
7
+ import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
8
+ import { AgentChannelInstallState } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/status_pb";
9
+ import { Button } from "../button/Button.js";
10
+ import { useChannelAppList } from "../channel-app/useChannelAppList.js";
11
+ import { useDeploymentMode } from "../deployment-mode.js";
12
+ import { useStigmer } from "../hooks.js";
13
+ import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
14
+ import {
15
+ RegisterChannelAppAffordance,
16
+ ServingAppSection,
17
+ } from "./connect/ServingAppSection.js";
18
+ import { ToolCredentialsSection } from "./connect/ToolCredentialsSection.js";
19
+ import { RefusalBox, VerbatimRefusal } from "./connect/VerbatimRefusal.js";
20
+ import { CheckIcon, CloseIcon, Spinner } from "./connect/icons.js";
21
+ import { useCreateAgentChannel } from "./useCreateAgentChannel.js";
22
+ import { useInstallChannel } from "./useInstallChannel.js";
23
+ import { useOrgAgentChannelList } from "./useOrgAgentChannelList.js";
24
+ import { agentChannelToInput, useSaveAgentChannel } from "./useSaveAgentChannel.js";
25
+ import { WhatsAppMarkIcon } from "./WhatsAppMarkIcon.js";
26
+
27
+ /** Props for {@link ConnectWhatsAppDialog}. */
28
+ export interface ConnectWhatsAppDialogProps {
29
+ /** Whether the dialog is open. */
30
+ readonly open: boolean;
31
+ /** Called when the dialog requests an open-state change. */
32
+ readonly onOpenChange: (open: boolean) => void;
33
+ /** The agent the channel connects. */
34
+ readonly agent: Agent;
35
+ /**
36
+ * An existing channel to (re)connect — a `pending_install` channel
37
+ * whose install never completed. Unlike Slack's frozen reconnect, the
38
+ * number and serving app stay editable here: a failed direct install
39
+ * usually means one of them is wrong, and both are server-mutable
40
+ * while the channel isn't installed. When omitted, the dialog opens in
41
+ * **create mode**.
42
+ */
43
+ readonly channel?: AgentChannel | null;
44
+ /**
45
+ * Called after the channel set changes (created, or install completed).
46
+ * Hosts typically pass the channel list's `refetch`.
47
+ */
48
+ readonly onChannelsChanged?: () => void;
49
+ /**
50
+ * When `false`, renders as an in-flow open dialog instead of a
51
+ * top-layer modal — no `showModal()`, no backdrop, no focus trap.
52
+ * For embedding the dialog in a constrained surface (documentation
53
+ * demos, visual tests). Interactive hosts keep the default.
54
+ * @default true
55
+ */
56
+ readonly modal?: boolean;
57
+ /**
58
+ * Where the host manages Channel Apps (the console passes
59
+ * `/settings/channel-apps`). When provided, the serving-app section
60
+ * and install refusals render a "Register a channel app" link there.
61
+ * SDK components never hardcode host routes — hosts inject the
62
+ * destination. Absent, the affordance degrades to plain guidance text.
63
+ */
64
+ readonly channelAppsHref?: string;
65
+ }
66
+
67
+ /**
68
+ * The connect flow for a WhatsApp channel: create the
69
+ * {@link AgentChannel} (create mode), then run the direct install — one
70
+ * server call that verifies the declared phone number against Meta's
71
+ * Graph API through the selected channel app's credentials (DD-WA-1).
72
+ * No consent popup, no callback route.
73
+ *
74
+ * WhatsApp is BYO-only (DD-WA-2): there is no platform Meta app, so a
75
+ * serving channel app is required — with none registered, the flow
76
+ * blocks on registering one first. The declared phone number ID is
77
+ * likewise required: the install proves it, and an empty value can only
78
+ * fail there.
79
+ *
80
+ * Requires Stigmer Cloud — on a `local` (OSS) backend the flow is
81
+ * preempted with a cloud-feature notice, matching the server's
82
+ * FAILED_PRECONDITION refusal. Install refusals render the server's
83
+ * copy verbatim except the duplicate-number refusal, which gets a
84
+ * guided treatment.
85
+ *
86
+ * Built on the native `<dialog>` element for focus trapping and escape
87
+ * handling, matching the SDK's modal convention
88
+ * ({@link ConnectSlackDialog}). All visual properties flow through
89
+ * `--stgm-*` design tokens.
90
+ *
91
+ * Most hosts mount it via {@link AgentChannelsPanel} (the Channels tab).
92
+ * Render it directly only when you own the open-state.
93
+ */
94
+ export function ConnectWhatsAppDialog({
95
+ open,
96
+ onOpenChange,
97
+ agent,
98
+ channel,
99
+ onChannelsChanged,
100
+ modal = true,
101
+ channelAppsHref,
102
+ }: ConnectWhatsAppDialogProps) {
103
+ const dialogRef = useRef<HTMLDialogElement>(null);
104
+
105
+ const handleClose = useCallback(() => {
106
+ dialogRef.current?.close();
107
+ onOpenChange(false);
108
+ }, [onOpenChange]);
109
+
110
+ // Sync native dialog open state (matches the SDK dialog convention).
111
+ // Non-modal hosts pass `open` as a plain attribute instead — the dialog
112
+ // renders in-flow with no top layer to manage.
113
+ const prevOpenRef = useRef(false);
114
+ if (modal && open !== prevOpenRef.current) {
115
+ prevOpenRef.current = open;
116
+ if (open) {
117
+ requestAnimationFrame(() => {
118
+ if (dialogRef.current && !dialogRef.current.open) {
119
+ dialogRef.current.showModal();
120
+ }
121
+ });
122
+ } else if (dialogRef.current?.open) {
123
+ dialogRef.current.close();
124
+ }
125
+ }
126
+
127
+ return (
128
+ <dialog
129
+ ref={dialogRef}
130
+ open={modal ? undefined : open}
131
+ onClose={handleClose}
132
+ className={cn(
133
+ "w-full max-w-md rounded-xl border border-border bg-popover p-0 shadow-xl",
134
+ modal ? "fixed inset-0 m-auto backdrop:bg-black/50" : "relative",
135
+ )}
136
+ aria-labelledby="connect-whatsapp-title"
137
+ >
138
+ {/* Body mounts only while open so its flow state resets per
139
+ session — reopening the dialog never resumes a stale flow. */}
140
+ {open && (
141
+ <ConnectWhatsAppDialogBody
142
+ agent={agent}
143
+ channel={channel ?? null}
144
+ onChannelsChanged={onChannelsChanged}
145
+ onClose={handleClose}
146
+ channelAppsHref={channelAppsHref}
147
+ />
148
+ )}
149
+ </dialog>
150
+ );
151
+ }
152
+
153
+ // ---------------------------------------------------------------------------
154
+ // Dialog body — create step (optional) + direct install
155
+ // ---------------------------------------------------------------------------
156
+
157
+ interface ConnectWhatsAppDialogBodyProps {
158
+ readonly agent: Agent;
159
+ readonly channel: AgentChannel | null;
160
+ readonly onChannelsChanged?: () => void;
161
+ readonly onClose: () => void;
162
+ readonly channelAppsHref?: string;
163
+ }
164
+
165
+ function ConnectWhatsAppDialogBody({
166
+ agent,
167
+ channel,
168
+ onChannelsChanged,
169
+ onClose,
170
+ channelAppsHref,
171
+ }: ConnectWhatsAppDialogBodyProps) {
172
+ const stigmer = useStigmer();
173
+ const deploymentMode = useDeploymentMode();
174
+ const agentName = agent.metadata?.name || agent.metadata?.slug || "this agent";
175
+ const org = agent.metadata?.org ?? "";
176
+
177
+ const { createChannel, isPending: isCreating } = useCreateAgentChannel();
178
+ const { save, isPending: isSaving } = useSaveAgentChannel();
179
+ const installer = useInstallChannel();
180
+
181
+ const [name, setName] = useState(() =>
182
+ channel ? (channel.metadata?.name ?? "") : `${agentName} WhatsApp`,
183
+ );
184
+ // The declared number (spec.whatsapp.phone_number_id). Genuinely
185
+ // user-declared — a WABA holds many numbers; the owner picks which one
186
+ // the agent serves. Required client-side: the write path defers it to
187
+ // the install probe, where an empty value can only fail.
188
+ const [phoneNumberId, setPhoneNumberId] = useState(() =>
189
+ channel?.spec?.providerConfig?.case === "whatsapp"
190
+ ? channel.spec.providerConfig.value.phoneNumberId
191
+ : "",
192
+ );
193
+ // Tool credentials bound at connect time (create mode only — a retry
194
+ // keeps the channel's existing bindings untouched; edits go through
195
+ // the channel card's credentials dialog).
196
+ const [environmentRefs, setEnvironmentRefs] = useState<ResourceRef[]>([]);
197
+ // The serving app — required (DD-WA-2: no platform Meta app exists).
198
+ // Editable in retry mode too: app_ref is server-mutable while the
199
+ // channel isn't installed, and a wrong app is a likely failure cause.
200
+ const [appRef, setAppRef] = useState<ResourceRef | null>(() =>
201
+ channel?.spec?.appRef?.slug
202
+ ? { org: channel.spec.appRef.org || org, slug: channel.spec.appRef.slug }
203
+ : null,
204
+ );
205
+ const [installed, setInstalled] = useState<AgentChannel | null>(null);
206
+ const [error, setError] = useState<Error | null>(null);
207
+
208
+ // The org's channel apps, fetched once here so the serving-app picker
209
+ // and the advisory read one consistent list.
210
+ const { channelApps } = useChannelAppList(org || null);
211
+ const whatsappApps = useMemo(
212
+ () => channelApps.filter((app) => app.spec?.providerConfig?.case === "whatsapp"),
213
+ [channelApps],
214
+ );
215
+
216
+ // A sole registered app is the only possible choice — preselect it so
217
+ // the required picker never blocks on a decision with one answer
218
+ // (Hick's law). Derived, not effect-synced: apps load async.
219
+ const effectiveAppRef =
220
+ appRef ??
221
+ (whatsappApps.length === 1
222
+ ? { org, slug: whatsappApps[0].metadata?.slug ?? "" }
223
+ : null);
224
+ const selectedApp = effectiveAppRef
225
+ ? whatsappApps.find((app) => app.metadata?.slug === effectiveAppRef.slug) ?? null
226
+ : null;
227
+
228
+ // Numbers the selected serving app already serves, matched on the same
229
+ // key the database enforces uniqueness on: (phone number, channel app).
230
+ // Advisory only — the list is permission-bounded; the install stays
231
+ // the arbiter.
232
+ const advisoryActive = deploymentMode === "cloud" && !installed;
233
+ const { channels: orgChannels } = useOrgAgentChannelList(
234
+ advisoryActive && org ? org : null,
235
+ );
236
+ const trimmedNumber = phoneNumberId.trim();
237
+ const alreadyServed = useMemo(() => {
238
+ const selectedAppId = selectedApp?.metadata?.id;
239
+ if (!selectedAppId || !trimmedNumber) return [];
240
+ return orgChannels.filter(
241
+ (c) =>
242
+ c.metadata?.id !== channel?.metadata?.id &&
243
+ c.status?.installState === AgentChannelInstallState.installed &&
244
+ c.status?.providerStatus?.case === "whatsapp" &&
245
+ c.status.providerStatus.value.phoneNumberId === trimmedNumber &&
246
+ c.status.providerStatus.value.channelAppId === selectedAppId,
247
+ );
248
+ }, [orgChannels, selectedApp, trimmedNumber, channel]);
249
+
250
+ // One click drives the whole journey: (create/update →) direct
251
+ // install → fetch the installed facts. No popup, so nothing here needs
252
+ // the synchronous-gesture treatment the Slack flow does.
253
+ const handleConnect = useCallback(async () => {
254
+ setError(null);
255
+ try {
256
+ let target = channel;
257
+ if (!target) {
258
+ target = await createChannel({
259
+ name: name.trim() || `${agentName} WhatsApp`,
260
+ org,
261
+ agentRef: {
262
+ org,
263
+ slug: agent.metadata?.slug ?? "",
264
+ },
265
+ enabled: true,
266
+ whatsapp: { phoneNumberId: trimmedNumber },
267
+ ...(effectiveAppRef ? { appRef: effectiveAppRef } : {}),
268
+ ...(environmentRefs.length > 0 ? { environmentRefs } : {}),
269
+ });
270
+ // The channel now exists even if the install below fails —
271
+ // surface it in the list either way.
272
+ onChannelsChanged?.();
273
+ } else {
274
+ // Retry mode: persist edits to the number or app before
275
+ // re-installing. Skipped when nothing changed so a plain retry
276
+ // is one call, not two.
277
+ const existingNumber =
278
+ target.spec?.providerConfig?.case === "whatsapp"
279
+ ? target.spec.providerConfig.value.phoneNumberId
280
+ : "";
281
+ const existingAppSlug = target.spec?.appRef?.slug ?? "";
282
+ if (
283
+ existingNumber !== trimmedNumber ||
284
+ existingAppSlug !== (effectiveAppRef?.slug ?? "")
285
+ ) {
286
+ target = await save({
287
+ ...agentChannelToInput(target),
288
+ whatsapp: { phoneNumberId: trimmedNumber },
289
+ ...(effectiveAppRef ? { appRef: effectiveAppRef } : {}),
290
+ });
291
+ onChannelsChanged?.();
292
+ }
293
+ }
294
+
295
+ await installer.install(target.metadata?.id ?? "");
296
+ // The install answer carries no channel — read the recorded facts
297
+ // (display number, verified name) for the success summary.
298
+ const result = await stigmer.agentChannel.get(target.metadata?.id ?? "");
299
+ setInstalled(result);
300
+ onChannelsChanged?.();
301
+ } catch (err) {
302
+ setError(
303
+ installer.error ?? (err instanceof Error ? err : new Error(String(err))),
304
+ );
305
+ }
306
+ }, [agent, agentName, channel, createChannel, effectiveAppRef, environmentRefs, installer, name, org, onChannelsChanged, save, stigmer, trimmedNumber]);
307
+
308
+ const busy = isCreating || isSaving || installer.isInProgress;
309
+ const canConnect = trimmedNumber !== "" && effectiveAppRef !== null && !busy;
310
+
311
+ return (
312
+ <div className="flex flex-col">
313
+ {/* Header */}
314
+ <div className="flex items-start justify-between gap-3 border-b border-border px-5 py-4">
315
+ <div className="flex items-center gap-2.5">
316
+ <WhatsAppMarkIcon className="size-5 text-foreground" />
317
+ <h2 id="connect-whatsapp-title" className="text-sm font-semibold text-foreground">
318
+ {channel ? "Reconnect to WhatsApp" : "Connect to WhatsApp"}
319
+ </h2>
320
+ </div>
321
+ <button
322
+ type="button"
323
+ onClick={onClose}
324
+ aria-label="Close dialog"
325
+ className={cn(
326
+ "rounded p-1 text-muted-foreground",
327
+ "hover:bg-accent-hover hover:text-foreground",
328
+ "focus:outline-none focus:ring-1 focus:ring-ring",
329
+ )}
330
+ >
331
+ <CloseIcon />
332
+ </button>
333
+ </div>
334
+
335
+ <div className="space-y-4 px-5 py-4">
336
+ {deploymentMode === "local" ? (
337
+ // Preempt the doomed flow: the OSS backend answers every
338
+ // install with FAILED_PRECONDITION.
339
+ <CloudFeatureNotice>
340
+ Channel installs require Stigmer Cloud. The local backend
341
+ manages channel configuration, but connecting to WhatsApp
342
+ verifies your number through Stigmer&apos;s hosted webhook
343
+ infrastructure.
344
+ </CloudFeatureNotice>
345
+ ) : installed ? (
346
+ <InstalledSummary channel={installed} agentName={agentName} />
347
+ ) : busy ? (
348
+ <InstallingIndicator />
349
+ ) : (
350
+ <>
351
+ {!channel && (
352
+ <label className="block">
353
+ <span className="mb-1.5 block text-xs font-medium text-foreground">
354
+ Channel name
355
+ </span>
356
+ <input
357
+ type="text"
358
+ value={name}
359
+ onChange={(e) => setName(e.target.value)}
360
+ disabled={busy}
361
+ className={cn(
362
+ "w-full rounded-md border border-input bg-background px-3 py-1.5",
363
+ "text-sm text-foreground placeholder:text-muted-foreground",
364
+ "focus:outline-none focus:ring-1 focus:ring-ring",
365
+ )}
366
+ />
367
+ <span className="mt-1 block text-xs text-muted-foreground">
368
+ Names the connection in Stigmer — pick something that
369
+ identifies the number if you connect more than one.
370
+ </span>
371
+ </label>
372
+ )}
373
+
374
+ <label className="block">
375
+ <span className="mb-1.5 block text-xs font-medium text-foreground">
376
+ Phone number ID
377
+ </span>
378
+ <input
379
+ type="text"
380
+ value={phoneNumberId}
381
+ onChange={(e) => setPhoneNumberId(e.target.value)}
382
+ disabled={busy}
383
+ required
384
+ placeholder="106540352242922"
385
+ data-cursor-target="dialog-whatsapp-number"
386
+ className={cn(
387
+ "w-full rounded-md border border-input bg-background px-3 py-1.5",
388
+ "font-mono text-sm text-foreground placeholder:text-muted-foreground",
389
+ "focus:outline-none focus:ring-1 focus:ring-ring",
390
+ )}
391
+ />
392
+ <span className="mt-1 block text-xs text-muted-foreground">
393
+ From Meta&apos;s WhatsApp Manager (API Setup) — the numeric
394
+ ID of the number this agent should answer, not the phone
395
+ number itself.
396
+ </span>
397
+ </label>
398
+
399
+ <ServingAppSection
400
+ org={org}
401
+ apps={whatsappApps}
402
+ value={effectiveAppRef}
403
+ onChange={setAppRef}
404
+ disabled={busy}
405
+ channelAppsHref={channelAppsHref}
406
+ idPrefix="stgm-whatsapp-app"
407
+ appHint="Your Meta app — its credentials verify and serve the number"
408
+ emptyBody={
409
+ <p className="text-xs text-muted-foreground">
410
+ WhatsApp channels connect through your own Meta app — there
411
+ is no shared platform app.{" "}
412
+ <RegisterChannelAppAffordance channelAppsHref={channelAppsHref}>
413
+ Register a channel app
414
+ </RegisterChannelAppAffordance>{" "}
415
+ with your Meta app&apos;s credentials first, then connect
416
+ here.
417
+ </p>
418
+ }
419
+ />
420
+
421
+ {alreadyServed.length > 0 && (
422
+ <AlreadyServedNote channels={alreadyServed} />
423
+ )}
424
+
425
+ {!channel && (
426
+ <ToolCredentialsSection
427
+ agent={agent}
428
+ org={org}
429
+ value={environmentRefs}
430
+ onChange={setEnvironmentRefs}
431
+ disabled={busy}
432
+ />
433
+ )}
434
+
435
+ <p className="text-sm text-muted-foreground">
436
+ When you continue, Stigmer verifies the number with WhatsApp
437
+ through the selected app&apos;s credentials — the connection
438
+ completes right here, with no browser hand-off.
439
+ </p>
440
+ <p className="text-sm text-muted-foreground">
441
+ People reach the agent by sending a WhatsApp message to the
442
+ connected number — it answers as{" "}
443
+ <span className="font-medium text-foreground">{agentName}</span>.
444
+ </p>
445
+ <p className="text-xs text-muted-foreground">
446
+ Conversations from WhatsApp are billed to{" "}
447
+ <span className="font-medium">{org}</span>. Each number serves
448
+ one agent per channel app.
449
+ </p>
450
+
451
+ {error && (
452
+ <InstallRefusal error={error} channelAppsHref={channelAppsHref} />
453
+ )}
454
+ </>
455
+ )}
456
+ </div>
457
+
458
+ {/* Footer */}
459
+ <div className="flex justify-end gap-2 border-t border-border px-5 py-3">
460
+ {installed || deploymentMode === "local" ? (
461
+ <Button variant="outline" size="sm" onClick={onClose}>
462
+ {installed ? "Done" : "Close"}
463
+ </Button>
464
+ ) : (
465
+ <>
466
+ <Button variant="ghost" size="sm" onClick={onClose} disabled={busy}>
467
+ Cancel
468
+ </Button>
469
+ <Button
470
+ variant="primary"
471
+ size="sm"
472
+ onClick={() => void handleConnect()}
473
+ disabled={!canConnect}
474
+ icon={<WhatsAppMarkIcon className="size-3.5" />}
475
+ data-cursor-target="dialog-connect-whatsapp"
476
+ >
477
+ {error ? "Try again" : channel ? "Reconnect to WhatsApp" : "Connect to WhatsApp"}
478
+ </Button>
479
+ </>
480
+ )}
481
+ </div>
482
+ </div>
483
+ );
484
+ }
485
+
486
+ // ---------------------------------------------------------------------------
487
+ // Install refusal — guided for the duplicate-number reason
488
+ // ---------------------------------------------------------------------------
489
+
490
+ /**
491
+ * The reason code the server attaches (google.rpc.ErrorInfo, domain
492
+ * stigmer.ai) to a duplicate-number initiateInstall refusal — see the
493
+ * initiateInstall rpc comment for the vocabulary.
494
+ */
495
+ const REASON_NUMBER_ALREADY_CONNECTED = "WHATSAPP_NUMBER_ALREADY_CONNECTED";
496
+
497
+ /**
498
+ * Install-refusal rendering. The duplicate-number refusal is the one a
499
+ * user can act on from here, so it gets a guided treatment — names the
500
+ * occupied number (from the ErrorInfo metadata) and the ways out. Every
501
+ * other refusal (bad token, unknown number, dangling app — and any error
502
+ * from a server not attaching reasons) renders the server's copy
503
+ * verbatim — the server owns that vocabulary.
504
+ */
505
+ function InstallRefusal({
506
+ error,
507
+ channelAppsHref,
508
+ }: {
509
+ readonly error: Error;
510
+ readonly channelAppsHref?: string;
511
+ }) {
512
+ const reason = getErrorReason(error);
513
+ if (reason?.reason !== REASON_NUMBER_ALREADY_CONNECTED) {
514
+ return <VerbatimRefusal error={error} />;
515
+ }
516
+
517
+ const number = reason.metadata.display_phone_number || "This number";
518
+ return (
519
+ <RefusalBox>
520
+ <p>
521
+ <span className="font-medium">{number}</span> is already connected
522
+ to an agent through this channel app — each number serves one
523
+ agent.
524
+ </p>
525
+ <p>
526
+ To reach it with this agent, disconnect the existing channel, use a
527
+ different number, or{" "}
528
+ <RegisterChannelAppAffordance channelAppsHref={channelAppsHref}>
529
+ register a channel app
530
+ </RegisterChannelAppAffordance>{" "}
531
+ and connect through that instead.
532
+ </p>
533
+ </RefusalBox>
534
+ );
535
+ }
536
+
537
+ /**
538
+ * Pre-install advisory: the selected serving app already serves this
539
+ * number, matched on the exact key the database enforces — (phone
540
+ * number, serving app). Shown before the user spends the install
541
+ * round-trip discovering it. Best-effort by design: the list is bounded
542
+ * by the caller's visibility, so the copy warns rather than forbids.
543
+ */
544
+ function AlreadyServedNote({
545
+ channels,
546
+ }: {
547
+ readonly channels: readonly AgentChannel[];
548
+ }) {
549
+ return (
550
+ <div role="status" className="space-y-0.5 text-xs text-warning">
551
+ {channels.map((c) => {
552
+ const whatsapp =
553
+ c.status?.providerStatus?.case === "whatsapp"
554
+ ? c.status.providerStatus.value
555
+ : null;
556
+ const number =
557
+ whatsapp?.displayPhoneNumber || whatsapp?.phoneNumberId || "this number";
558
+ const agent = c.spec?.agentRef?.slug || "another agent";
559
+ return (
560
+ <p key={c.metadata?.id ?? number}>
561
+ <span className="font-medium">{number}</span> is already served
562
+ via {agent} — each number serves one agent per channel app, so
563
+ disconnect that channel or pick a different number.
564
+ </p>
565
+ );
566
+ })}
567
+ </div>
568
+ );
569
+ }
570
+
571
+ // ---------------------------------------------------------------------------
572
+ // Installing indicator — a single live step, deliberately not a ladder
573
+ // ---------------------------------------------------------------------------
574
+
575
+ /**
576
+ * The busy state of a direct install: one server call, so one live line —
577
+ * not the Slack dialog's three-step OAuth ladder, which would render two
578
+ * permanently-empty rungs here. No cancel affordance either: there is no
579
+ * popup to abandon, and the call settles in seconds.
580
+ */
581
+ function InstallingIndicator() {
582
+ return (
583
+ <div className="flex items-center gap-2 text-sm text-foreground" aria-live="polite">
584
+ <Spinner className="size-3.5 shrink-0" />
585
+ Verifying the number with WhatsApp…
586
+ </div>
587
+ );
588
+ }
589
+
590
+ // ---------------------------------------------------------------------------
591
+ // Installed summary — the success state with the observed WhatsApp facts
592
+ // ---------------------------------------------------------------------------
593
+
594
+ function InstalledSummary({
595
+ channel,
596
+ agentName,
597
+ }: {
598
+ readonly channel: AgentChannel;
599
+ readonly agentName: string;
600
+ }) {
601
+ const whatsapp =
602
+ channel.status?.providerStatus?.case === "whatsapp"
603
+ ? channel.status.providerStatus.value
604
+ : null;
605
+ const number = whatsapp?.displayPhoneNumber || whatsapp?.phoneNumberId || null;
606
+
607
+ return (
608
+ <div className="space-y-2" role="status">
609
+ <div className="flex items-center gap-2 text-sm font-medium text-foreground">
610
+ <CheckIcon className="size-4 text-success" />
611
+ Connected{number ? ` to ${number}` : ""}
612
+ {whatsapp?.verifiedName ? ` (${whatsapp.verifiedName})` : ""}
613
+ </div>
614
+ <p className="text-sm text-muted-foreground">
615
+ Send a WhatsApp message to{" "}
616
+ <span className="font-medium text-foreground">
617
+ {number ?? "the connected number"}
618
+ </span>{" "}
619
+ and ask your question — answers come from{" "}
620
+ <span className="font-medium text-foreground">{agentName}</span>.
621
+ </p>
622
+ </div>
623
+ );
624
+ }
@@ -0,0 +1,21 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Monochrome Slack mark (the four-lobe glyph) as an inline SVG.
5
+ *
6
+ * Renders in `currentColor` so it follows the surrounding text token —
7
+ * the SDK never hardcodes brand colors (theme-token compliance). Shared
8
+ * by the channel components; not exported from the public barrel.
9
+ */
10
+ export function SlackMarkIcon({ className }: { readonly className?: string }) {
11
+ return (
12
+ <svg
13
+ className={className}
14
+ viewBox="0 0 24 24"
15
+ fill="currentColor"
16
+ aria-hidden="true"
17
+ >
18
+ <path d="M5.04 15.17a2.52 2.52 0 1 1-2.52-2.52h2.52v2.52zM6.31 15.17a2.52 2.52 0 0 1 5.04 0v6.31a2.52 2.52 0 1 1-5.04 0v-6.31zM8.83 5.04a2.52 2.52 0 1 1 2.52-2.52v2.52H8.83zM8.83 6.31a2.52 2.52 0 0 1 0 5.04H2.52a2.52 2.52 0 1 1 0-5.04h6.31zM18.96 8.83a2.52 2.52 0 1 1 2.52 2.52h-2.52V8.83zM17.69 8.83a2.52 2.52 0 0 1-5.04 0V2.52a2.52 2.52 0 1 1 5.04 0v6.31zM15.17 18.96a2.52 2.52 0 1 1-2.52 2.52v-2.52h2.52zM15.17 17.69a2.52 2.52 0 0 1 0-5.04h6.31a2.52 2.52 0 1 1 0 5.04h-6.31z" />
19
+ </svg>
20
+ );
21
+ }
@@ -0,0 +1,22 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Monochrome WhatsApp mark (the speech-bubble-with-handset glyph) as an
5
+ * inline SVG.
6
+ *
7
+ * Renders in `currentColor` so it follows the surrounding text token —
8
+ * the SDK never hardcodes brand colors (theme-token compliance). Shared
9
+ * by the channel components; not exported from the public barrel.
10
+ */
11
+ export function WhatsAppMarkIcon({ className }: { readonly className?: string }) {
12
+ return (
13
+ <svg
14
+ className={className}
15
+ viewBox="0 0 24 24"
16
+ fill="currentColor"
17
+ aria-hidden="true"
18
+ >
19
+ <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" />
20
+ </svg>
21
+ );
22
+ }