@stigmer/react 3.1.16 → 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 (824) hide show
  1. package/README.md +16 -1
  2. package/agent-instance/AgentInstanceList.d.ts.map +1 -1
  3. package/agent-instance/AgentInstanceList.js +11 -3
  4. package/agent-instance/AgentInstanceList.js.map +1 -1
  5. package/channel/AgentChannelsPanel.d.ts +60 -0
  6. package/channel/AgentChannelsPanel.d.ts.map +1 -0
  7. package/channel/AgentChannelsPanel.js +255 -0
  8. package/channel/AgentChannelsPanel.js.map +1 -0
  9. package/channel/ChannelConversationsDialog.d.ts +41 -0
  10. package/channel/ChannelConversationsDialog.d.ts.map +1 -0
  11. package/channel/ChannelConversationsDialog.js +94 -0
  12. package/channel/ChannelConversationsDialog.js.map +1 -0
  13. package/channel/ChannelCredentialsDialog.d.ts +37 -0
  14. package/channel/ChannelCredentialsDialog.d.ts.map +1 -0
  15. package/channel/ChannelCredentialsDialog.js +75 -0
  16. package/channel/ChannelCredentialsDialog.js.map +1 -0
  17. package/channel/ChannelToolCredentials.d.ts +31 -0
  18. package/channel/ChannelToolCredentials.d.ts.map +1 -0
  19. package/channel/ChannelToolCredentials.js +41 -0
  20. package/channel/ChannelToolCredentials.js.map +1 -0
  21. package/channel/ConnectSlackDialog.d.ts +61 -0
  22. package/channel/ConnectSlackDialog.d.ts.map +1 -0
  23. package/channel/ConnectSlackDialog.js +238 -0
  24. package/channel/ConnectSlackDialog.js.map +1 -0
  25. package/channel/ConnectWhatsAppDialog.d.ts +70 -0
  26. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -0
  27. package/channel/ConnectWhatsAppDialog.js +256 -0
  28. package/channel/ConnectWhatsAppDialog.js.map +1 -0
  29. package/channel/SlackMarkIcon.d.ts +11 -0
  30. package/channel/SlackMarkIcon.d.ts.map +1 -0
  31. package/channel/SlackMarkIcon.js +13 -0
  32. package/channel/SlackMarkIcon.js.map +1 -0
  33. package/channel/WhatsAppMarkIcon.d.ts +12 -0
  34. package/channel/WhatsAppMarkIcon.d.ts.map +1 -0
  35. package/channel/WhatsAppMarkIcon.js +14 -0
  36. package/channel/WhatsAppMarkIcon.js.map +1 -0
  37. package/channel/connect/ServingAppSection.d.ts +57 -0
  38. package/channel/connect/ServingAppSection.d.ts.map +1 -0
  39. package/channel/connect/ServingAppSection.js +49 -0
  40. package/channel/connect/ServingAppSection.js.map +1 -0
  41. package/channel/connect/ToolCredentialsSection.d.ts +20 -0
  42. package/channel/connect/ToolCredentialsSection.d.ts.map +1 -0
  43. package/channel/connect/ToolCredentialsSection.js +22 -0
  44. package/channel/connect/ToolCredentialsSection.js.map +1 -0
  45. package/channel/connect/VerbatimRefusal.d.ts +16 -0
  46. package/channel/connect/VerbatimRefusal.d.ts.map +1 -0
  47. package/channel/connect/VerbatimRefusal.js +18 -0
  48. package/channel/connect/VerbatimRefusal.js.map +1 -0
  49. package/channel/connect/icons.d.ts +16 -0
  50. package/channel/connect/icons.d.ts.map +1 -0
  51. package/channel/connect/icons.js +21 -0
  52. package/channel/connect/icons.js.map +1 -0
  53. package/channel/index.d.ts +36 -0
  54. package/channel/index.d.ts.map +1 -0
  55. package/channel/index.js +19 -0
  56. package/channel/index.js.map +1 -0
  57. package/channel/providerPresentation.d.ts +44 -0
  58. package/channel/providerPresentation.d.ts.map +1 -0
  59. package/channel/providerPresentation.js +106 -0
  60. package/channel/providerPresentation.js.map +1 -0
  61. package/channel/providers.d.ts +62 -0
  62. package/channel/providers.d.ts.map +1 -0
  63. package/channel/providers.js +26 -0
  64. package/channel/providers.js.map +1 -0
  65. package/channel/useAgentChannel.d.ts +31 -0
  66. package/channel/useAgentChannel.d.ts.map +1 -0
  67. package/channel/useAgentChannel.js +34 -0
  68. package/channel/useAgentChannel.js.map +1 -0
  69. package/channel/useAgentChannelList.d.ts +43 -0
  70. package/channel/useAgentChannelList.d.ts.map +1 -0
  71. package/channel/useAgentChannelList.js +39 -0
  72. package/channel/useAgentChannelList.js.map +1 -0
  73. package/channel/useChannelSessions.d.ts +47 -0
  74. package/channel/useChannelSessions.d.ts.map +1 -0
  75. package/channel/useChannelSessions.js +38 -0
  76. package/channel/useChannelSessions.js.map +1 -0
  77. package/channel/useChannelToolReadiness.d.ts +23 -0
  78. package/channel/useChannelToolReadiness.d.ts.map +1 -0
  79. package/channel/useChannelToolReadiness.js +28 -0
  80. package/channel/useChannelToolReadiness.js.map +1 -0
  81. package/channel/useConnectSlackChannel.d.ts +75 -0
  82. package/channel/useConnectSlackChannel.d.ts.map +1 -0
  83. package/channel/useConnectSlackChannel.js +115 -0
  84. package/channel/useConnectSlackChannel.js.map +1 -0
  85. package/channel/useCreateAgentChannel.d.ts +42 -0
  86. package/channel/useCreateAgentChannel.d.ts.map +1 -0
  87. package/channel/useCreateAgentChannel.js +48 -0
  88. package/channel/useCreateAgentChannel.js.map +1 -0
  89. package/channel/useDeleteAgentChannel.d.ts +40 -0
  90. package/channel/useDeleteAgentChannel.d.ts.map +1 -0
  91. package/channel/useDeleteAgentChannel.js +44 -0
  92. package/channel/useDeleteAgentChannel.js.map +1 -0
  93. package/channel/useInstallChannel.d.ts +60 -0
  94. package/channel/useInstallChannel.d.ts.map +1 -0
  95. package/channel/useInstallChannel.js +63 -0
  96. package/channel/useInstallChannel.js.map +1 -0
  97. package/channel/useOrgAgentChannelList.d.ts +32 -0
  98. package/channel/useOrgAgentChannelList.d.ts.map +1 -0
  99. package/channel/useOrgAgentChannelList.js +29 -0
  100. package/channel/useOrgAgentChannelList.js.map +1 -0
  101. package/channel/useSaveAgentChannel.d.ts +63 -0
  102. package/channel/useSaveAgentChannel.d.ts.map +1 -0
  103. package/channel/useSaveAgentChannel.js +104 -0
  104. package/channel/useSaveAgentChannel.js.map +1 -0
  105. package/channel-app/ChannelAppDetailPanel.d.ts +46 -0
  106. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -0
  107. package/channel-app/ChannelAppDetailPanel.js +142 -0
  108. package/channel-app/ChannelAppDetailPanel.js.map +1 -0
  109. package/channel-app/ChannelAppListPanel.d.ts +36 -0
  110. package/channel-app/ChannelAppListPanel.d.ts.map +1 -0
  111. package/channel-app/ChannelAppListPanel.js +63 -0
  112. package/channel-app/ChannelAppListPanel.js.map +1 -0
  113. package/channel-app/CreateChannelAppForm.d.ts +54 -0
  114. package/channel-app/CreateChannelAppForm.d.ts.map +1 -0
  115. package/channel-app/CreateChannelAppForm.js +140 -0
  116. package/channel-app/CreateChannelAppForm.js.map +1 -0
  117. package/channel-app/index.d.ts +18 -0
  118. package/channel-app/index.d.ts.map +1 -0
  119. package/channel-app/index.js +10 -0
  120. package/channel-app/index.js.map +1 -0
  121. package/channel-app/internal.d.ts +33 -0
  122. package/channel-app/internal.d.ts.map +1 -0
  123. package/channel-app/internal.js +44 -0
  124. package/channel-app/internal.js.map +1 -0
  125. package/channel-app/slackAppSetup.d.ts +80 -0
  126. package/channel-app/slackAppSetup.d.ts.map +1 -0
  127. package/channel-app/slackAppSetup.js +123 -0
  128. package/channel-app/slackAppSetup.js.map +1 -0
  129. package/channel-app/useChannelAppList.d.ts +35 -0
  130. package/channel-app/useChannelAppList.d.ts.map +1 -0
  131. package/channel-app/useChannelAppList.js +34 -0
  132. package/channel-app/useChannelAppList.js.map +1 -0
  133. package/channel-app/useCreateChannelApp.d.ts +39 -0
  134. package/channel-app/useCreateChannelApp.d.ts.map +1 -0
  135. package/channel-app/useCreateChannelApp.js +50 -0
  136. package/channel-app/useCreateChannelApp.js.map +1 -0
  137. package/channel-app/useDeleteChannelApp.d.ts +31 -0
  138. package/channel-app/useDeleteChannelApp.d.ts.map +1 -0
  139. package/channel-app/useDeleteChannelApp.js +43 -0
  140. package/channel-app/useDeleteChannelApp.js.map +1 -0
  141. package/channel-app/useUpdateChannelApp.d.ts +39 -0
  142. package/channel-app/useUpdateChannelApp.d.ts.map +1 -0
  143. package/channel-app/useUpdateChannelApp.js +50 -0
  144. package/channel-app/useUpdateChannelApp.js.map +1 -0
  145. package/channel-app/whatsappAppSetup.d.ts +51 -0
  146. package/channel-app/whatsappAppSetup.d.ts.map +1 -0
  147. package/channel-app/whatsappAppSetup.js +57 -0
  148. package/channel-app/whatsappAppSetup.js.map +1 -0
  149. package/environment/index.d.ts +2 -0
  150. package/environment/index.d.ts.map +1 -1
  151. package/environment/index.js +1 -0
  152. package/environment/index.js.map +1 -1
  153. package/environment/useToolCredentialsReadiness.d.ts +52 -0
  154. package/environment/useToolCredentialsReadiness.d.ts.map +1 -0
  155. package/environment/useToolCredentialsReadiness.js +84 -0
  156. package/environment/useToolCredentialsReadiness.js.map +1 -0
  157. package/execution/ArtifactContentBody.d.ts.map +1 -1
  158. package/execution/ArtifactContentBody.js +5 -21
  159. package/execution/ArtifactContentBody.js.map +1 -1
  160. package/execution/ArtifactFileContent.d.ts +28 -0
  161. package/execution/ArtifactFileContent.d.ts.map +1 -0
  162. package/execution/ArtifactFileContent.js +36 -0
  163. package/execution/ArtifactFileContent.js.map +1 -0
  164. package/execution/ArtifactRow.d.ts +8 -20
  165. package/execution/ArtifactRow.d.ts.map +1 -1
  166. package/execution/ArtifactRow.js +12 -45
  167. package/execution/ArtifactRow.js.map +1 -1
  168. package/execution/ArtifactRowView.d.ts +43 -0
  169. package/execution/ArtifactRowView.d.ts.map +1 -0
  170. package/execution/ArtifactRowView.js +35 -0
  171. package/execution/ArtifactRowView.js.map +1 -0
  172. package/execution/FileChangesView.d.ts.map +1 -1
  173. package/execution/FileChangesView.js +1 -61
  174. package/execution/FileChangesView.js.map +1 -1
  175. package/execution/SubAgentSection.d.ts.map +1 -1
  176. package/execution/SubAgentSection.js +4 -15
  177. package/execution/SubAgentSection.js.map +1 -1
  178. package/execution/ToolCallItem.d.ts.map +1 -1
  179. package/execution/ToolCallItem.js +16 -61
  180. package/execution/ToolCallItem.js.map +1 -1
  181. package/execution/agent-execution-document.d.ts +31 -0
  182. package/execution/agent-execution-document.d.ts.map +1 -0
  183. package/execution/agent-execution-document.js +48 -0
  184. package/execution/agent-execution-document.js.map +1 -0
  185. package/{session → execution}/artifact-document.d.ts +2 -3
  186. package/execution/artifact-document.d.ts.map +1 -0
  187. package/execution/artifact-document.js +23 -0
  188. package/execution/artifact-document.js.map +1 -0
  189. package/execution/artifact-row-item.d.ts +56 -0
  190. package/execution/artifact-row-item.d.ts.map +1 -0
  191. package/execution/artifact-row-item.js +57 -0
  192. package/execution/artifact-row-item.js.map +1 -0
  193. package/execution/deriveExecutionFileChanges.d.ts +55 -0
  194. package/execution/deriveExecutionFileChanges.d.ts.map +1 -0
  195. package/execution/deriveExecutionFileChanges.js +216 -0
  196. package/execution/deriveExecutionFileChanges.js.map +1 -0
  197. package/execution/file-change-document.d.ts +22 -0
  198. package/execution/file-change-document.d.ts.map +1 -0
  199. package/execution/file-change-document.js +34 -0
  200. package/execution/file-change-document.js.map +1 -0
  201. package/execution/index.d.ts +14 -0
  202. package/execution/index.d.ts.map +1 -1
  203. package/execution/index.js +9 -0
  204. package/execution/index.js.map +1 -1
  205. package/execution/useArtifactContentById.d.ts +61 -0
  206. package/execution/useArtifactContentById.d.ts.map +1 -0
  207. package/execution/useArtifactContentById.js +63 -0
  208. package/execution/useArtifactContentById.js.map +1 -0
  209. package/execution/useArtifactDownload.d.ts +4 -3
  210. package/execution/useArtifactDownload.d.ts.map +1 -1
  211. package/execution/useArtifactDownload.js +4 -3
  212. package/execution/useArtifactDownload.js.map +1 -1
  213. package/execution/useCreateAgentExecution.d.ts +1 -1
  214. package/execution/useLiveAgentExecution.d.ts +59 -0
  215. package/execution/useLiveAgentExecution.d.ts.map +1 -0
  216. package/execution/useLiveAgentExecution.js +73 -0
  217. package/execution/useLiveAgentExecution.js.map +1 -0
  218. package/index.d.ts +15 -10
  219. package/index.d.ts.map +1 -1
  220. package/index.js +21 -6
  221. package/index.js.map +1 -1
  222. package/internal/DecisionButton.d.ts +4 -3
  223. package/internal/DecisionButton.d.ts.map +1 -1
  224. package/internal/DecisionButton.js +4 -3
  225. package/internal/DecisionButton.js.map +1 -1
  226. package/internal/oauthPopup.d.ts +101 -0
  227. package/internal/oauthPopup.d.ts.map +1 -0
  228. package/internal/oauthPopup.js +208 -0
  229. package/internal/oauthPopup.js.map +1 -0
  230. package/internal/store/index.d.ts +0 -2
  231. package/internal/store/index.d.ts.map +1 -1
  232. package/internal/store/index.js +0 -1
  233. package/internal/store/index.js.map +1 -1
  234. package/internal/store/workflow-execution-event-store.d.ts +34 -1
  235. package/internal/store/workflow-execution-event-store.d.ts.map +1 -1
  236. package/internal/store/workflow-execution-event-store.js +81 -3
  237. package/internal/store/workflow-execution-event-store.js.map +1 -1
  238. package/internal/store/workspace-file-selection-store.d.ts +1 -2
  239. package/internal/store/workspace-file-selection-store.d.ts.map +1 -1
  240. package/internal/store/workspace-file-selection-store.js +2 -5
  241. package/internal/store/workspace-file-selection-store.js.map +1 -1
  242. package/internal/thread-card/ThreadCardShell.d.ts +91 -0
  243. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -0
  244. package/internal/thread-card/ThreadCardShell.js +41 -0
  245. package/internal/thread-card/ThreadCardShell.js.map +1 -0
  246. package/internal/thread-card/glyphs.d.ts +34 -0
  247. package/internal/thread-card/glyphs.d.ts.map +1 -0
  248. package/internal/thread-card/glyphs.js +50 -0
  249. package/internal/thread-card/glyphs.js.map +1 -0
  250. package/internal/thread-card/index.d.ts +3 -0
  251. package/internal/thread-card/index.d.ts.map +1 -0
  252. package/internal/thread-card/index.js +3 -0
  253. package/internal/thread-card/index.js.map +1 -0
  254. package/internal/useRevealLine.d.ts +2 -2
  255. package/internal/useRevealLine.js +2 -2
  256. package/mcp-server/OAuthCallbackHandler.js +1 -1
  257. package/mcp-server/OAuthCallbackHandler.js.map +1 -1
  258. package/mcp-server/useMcpServerOAuthConnect.d.ts +4 -23
  259. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  260. package/mcp-server/useMcpServerOAuthConnect.js +12 -145
  261. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  262. package/package.json +4 -4
  263. package/provider.d.ts +32 -0
  264. package/provider.d.ts.map +1 -1
  265. package/provider.js +25 -1
  266. package/provider.js.map +1 -1
  267. package/session/NewSessionViewer.d.ts.map +1 -1
  268. package/session/NewSessionViewer.js +0 -1
  269. package/session/NewSessionViewer.js.map +1 -1
  270. package/session/SessionPanelChip.d.ts +7 -22
  271. package/session/SessionPanelChip.d.ts.map +1 -1
  272. package/session/SessionPanelChip.js +8 -36
  273. package/session/SessionPanelChip.js.map +1 -1
  274. package/session/SessionViewer.d.ts +7 -4
  275. package/session/SessionViewer.d.ts.map +1 -1
  276. package/session/SessionViewer.js +32 -30
  277. package/session/SessionViewer.js.map +1 -1
  278. package/session/audience.d.ts +15 -1
  279. package/session/audience.d.ts.map +1 -1
  280. package/session/channelOrigin.d.ts +33 -0
  281. package/session/channelOrigin.d.ts.map +1 -0
  282. package/session/channelOrigin.js +36 -0
  283. package/session/channelOrigin.js.map +1 -0
  284. package/session/facets/index.d.ts +0 -2
  285. package/session/facets/index.d.ts.map +1 -1
  286. package/session/facets/index.js +0 -1
  287. package/session/facets/index.js.map +1 -1
  288. package/session/index.d.ts +2 -2
  289. package/session/index.d.ts.map +1 -1
  290. package/session/index.js +5 -3
  291. package/session/index.js.map +1 -1
  292. package/session/useSessionFileChanges.d.ts +10 -34
  293. package/session/useSessionFileChanges.d.ts.map +1 -1
  294. package/session/useSessionFileChanges.js +9 -141
  295. package/session/useSessionFileChanges.js.map +1 -1
  296. package/session/useSessionPanel.d.ts +5 -15
  297. package/session/useSessionPanel.d.ts.map +1 -1
  298. package/session/useSessionPanel.js +3 -35
  299. package/session/useSessionPanel.js.map +1 -1
  300. package/session/useSessionRailViews.d.ts +3 -6
  301. package/session/useSessionRailViews.d.ts.map +1 -1
  302. package/session/useSessionRailViews.js +3 -17
  303. package/session/useSessionRailViews.js.map +1 -1
  304. package/settings/ChannelAppsSection.d.ts +13 -0
  305. package/settings/ChannelAppsSection.d.ts.map +1 -0
  306. package/settings/ChannelAppsSection.js +48 -0
  307. package/settings/ChannelAppsSection.js.map +1 -0
  308. package/settings/index.d.ts +1 -0
  309. package/settings/index.d.ts.map +1 -1
  310. package/settings/index.js +1 -0
  311. package/settings/index.js.map +1 -1
  312. package/settings/settings-nav.d.ts.map +1 -1
  313. package/settings/settings-nav.js +6 -1
  314. package/settings/settings-nav.js.map +1 -1
  315. package/sharing/AgentShareList.d.ts.map +1 -1
  316. package/sharing/AgentShareList.js +11 -3
  317. package/sharing/AgentShareList.js.map +1 -1
  318. package/sharing/ShareAgentDialog.js +1 -1
  319. package/sharing/useShareToolReadiness.d.ts +9 -38
  320. package/sharing/useShareToolReadiness.d.ts.map +1 -1
  321. package/sharing/useShareToolReadiness.js +7 -72
  322. package/sharing/useShareToolReadiness.js.map +1 -1
  323. package/src/__tests__/provider-container.layout.test.tsx +165 -0
  324. package/src/__tests__/provider-theme-scope.test.tsx +31 -0
  325. package/src/agent-instance/AgentInstanceList.tsx +60 -42
  326. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +161 -0
  327. package/src/channel/AgentChannelsPanel.tsx +688 -0
  328. package/src/channel/ChannelConversationsDialog.tsx +267 -0
  329. package/src/channel/ChannelCredentialsDialog.tsx +219 -0
  330. package/src/channel/ChannelToolCredentials.tsx +124 -0
  331. package/src/channel/ConnectSlackDialog.tsx +611 -0
  332. package/src/channel/ConnectWhatsAppDialog.tsx +624 -0
  333. package/src/channel/SlackMarkIcon.tsx +21 -0
  334. package/src/channel/WhatsAppMarkIcon.tsx +22 -0
  335. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +638 -0
  336. package/src/channel/__tests__/ChannelConversationsDialog.test.tsx +114 -0
  337. package/src/channel/__tests__/ChannelCredentialsDialog.test.tsx +240 -0
  338. package/src/channel/__tests__/ConnectSlackDialog.test.tsx +659 -0
  339. package/src/channel/__tests__/ConnectWhatsAppDialog.test.tsx +564 -0
  340. package/src/channel/__tests__/providers.test.ts +118 -0
  341. package/src/channel/__tests__/useAgentChannel.test.tsx +116 -0
  342. package/src/channel/__tests__/useAgentChannelList.test.tsx +166 -0
  343. package/src/channel/__tests__/useChannelSessions.test.tsx +95 -0
  344. package/src/channel/__tests__/useChannelToolReadiness.test.tsx +158 -0
  345. package/src/channel/__tests__/useConnectSlackChannel.test.tsx +276 -0
  346. package/src/channel/__tests__/useDeleteAgentChannel.test.tsx +97 -0
  347. package/src/channel/__tests__/useInstallChannel.test.tsx +177 -0
  348. package/src/channel/__tests__/useSaveAgentChannel.test.tsx +294 -0
  349. package/src/channel/connect/ServingAppSection.tsx +185 -0
  350. package/src/channel/connect/ToolCredentialsSection.tsx +67 -0
  351. package/src/channel/connect/VerbatimRefusal.tsx +27 -0
  352. package/src/channel/connect/icons.tsx +42 -0
  353. package/src/channel/index.ts +65 -0
  354. package/src/channel/providerPresentation.ts +154 -0
  355. package/src/channel/providers.ts +73 -0
  356. package/src/channel/useAgentChannel.ts +58 -0
  357. package/src/channel/useAgentChannelList.ts +69 -0
  358. package/src/channel/useChannelSessions.ts +73 -0
  359. package/src/channel/useChannelToolReadiness.ts +39 -0
  360. package/src/channel/useConnectSlackChannel.ts +195 -0
  361. package/src/channel/useCreateAgentChannel.ts +73 -0
  362. package/src/channel/useDeleteAgentChannel.ts +71 -0
  363. package/src/channel/useInstallChannel.ts +117 -0
  364. package/src/channel/useOrgAgentChannelList.ts +60 -0
  365. package/src/channel/useSaveAgentChannel.ts +133 -0
  366. package/src/channel-app/ChannelAppDetailPanel.tsx +510 -0
  367. package/src/channel-app/ChannelAppListPanel.tsx +201 -0
  368. package/src/channel-app/CreateChannelAppForm.tsx +529 -0
  369. package/src/channel-app/__tests__/channelAppWhatsApp.test.tsx +270 -0
  370. package/src/channel-app/__tests__/slackAppSetup.test.ts +75 -0
  371. package/src/channel-app/__tests__/useChannelAppHooks.test.tsx +157 -0
  372. package/src/channel-app/__tests__/whatsappAppSetup.test.ts +39 -0
  373. package/src/channel-app/index.ts +30 -0
  374. package/src/channel-app/internal.tsx +180 -0
  375. package/src/channel-app/slackAppSetup.ts +153 -0
  376. package/src/channel-app/useChannelAppList.ts +59 -0
  377. package/src/channel-app/useCreateChannelApp.ts +70 -0
  378. package/src/channel-app/useDeleteChannelApp.ts +62 -0
  379. package/src/channel-app/useUpdateChannelApp.ts +70 -0
  380. package/src/channel-app/whatsappAppSetup.ts +62 -0
  381. package/src/environment/index.ts +2 -0
  382. package/src/environment/useToolCredentialsReadiness.ts +122 -0
  383. package/src/execution/ArtifactContentBody.tsx +6 -88
  384. package/src/execution/ArtifactFileContent.tsx +110 -0
  385. package/src/execution/ArtifactRow.tsx +28 -118
  386. package/src/execution/ArtifactRowView.tsx +137 -0
  387. package/src/execution/FileChangesView.tsx +4 -69
  388. package/src/execution/SubAgentSection.tsx +2 -36
  389. package/src/execution/ToolCallItem.tsx +48 -175
  390. package/src/execution/__tests__/ArtifactFileContent.test.tsx +60 -0
  391. package/src/execution/__tests__/ArtifactRowView.test.tsx +78 -0
  392. package/src/execution/__tests__/agent-execution-document.test.ts +45 -0
  393. package/src/execution/__tests__/artifact-row-item.test.ts +128 -0
  394. package/src/execution/__tests__/deriveExecutionFileChanges.test.ts +270 -0
  395. package/src/execution/__tests__/useArtifactContentById.test.tsx +85 -0
  396. package/src/execution/__tests__/useLiveAgentExecution.test.tsx +202 -0
  397. package/src/execution/agent-execution-document.ts +54 -0
  398. package/src/execution/artifact-document.ts +24 -0
  399. package/src/execution/artifact-row-item.ts +97 -0
  400. package/src/execution/deriveExecutionFileChanges.ts +237 -0
  401. package/src/execution/file-change-document.ts +37 -0
  402. package/src/execution/index.ts +36 -0
  403. package/src/execution/useArtifactContentById.ts +120 -0
  404. package/src/execution/useArtifactDownload.ts +4 -3
  405. package/src/execution/useCreateAgentExecution.ts +1 -1
  406. package/src/execution/useLiveAgentExecution.ts +127 -0
  407. package/src/index.ts +155 -11
  408. package/src/internal/DecisionButton.tsx +4 -3
  409. package/src/internal/__tests__/ThreadCardShell.test.tsx +105 -0
  410. package/src/internal/__tests__/oauthPopup.test.ts +245 -0
  411. package/src/internal/oauthPopup.ts +261 -0
  412. package/src/internal/store/__tests__/workflow-execution-event-store.test.ts +375 -5
  413. package/src/internal/store/index.ts +0 -3
  414. package/src/internal/store/workflow-execution-event-store.ts +123 -4
  415. package/src/internal/store/workspace-file-selection-store.ts +2 -5
  416. package/src/internal/thread-card/ThreadCardShell.tsx +189 -0
  417. package/src/internal/thread-card/glyphs.tsx +108 -0
  418. package/src/internal/thread-card/index.ts +19 -0
  419. package/src/internal/useRevealLine.ts +2 -2
  420. package/src/mcp-server/OAuthCallbackHandler.tsx +2 -2
  421. package/src/mcp-server/useMcpServerOAuthConnect.ts +22 -184
  422. package/src/provider.tsx +42 -0
  423. package/src/session/NewSessionViewer.tsx +0 -1
  424. package/src/session/SessionPanelChip.tsx +10 -96
  425. package/src/session/SessionViewer.tsx +170 -144
  426. package/src/session/__tests__/SessionViewer-artifactTabs.test.tsx +1 -1
  427. package/src/session/__tests__/observerAudience.test.tsx +241 -0
  428. package/src/session/__tests__/useSessionPanel.test.ts +6 -61
  429. package/src/session/__tests__/useSessionRailViews.test.tsx +5 -27
  430. package/src/session/audience.ts +15 -1
  431. package/src/session/channelOrigin.ts +45 -0
  432. package/src/session/facets/index.ts +0 -3
  433. package/src/session/index.ts +9 -6
  434. package/src/session/useSessionFileChanges.ts +12 -153
  435. package/src/session/useSessionPanel.ts +8 -51
  436. package/src/session/useSessionRailViews.tsx +2 -27
  437. package/src/settings/ChannelAppsSection.tsx +133 -0
  438. package/src/settings/index.ts +1 -0
  439. package/src/settings/settings-nav.ts +6 -0
  440. package/src/sharing/AgentShareList.tsx +85 -64
  441. package/src/sharing/ShareAgentDialog.tsx +1 -1
  442. package/src/sharing/__tests__/AgentShareList.test.tsx +92 -12
  443. package/src/sharing/useShareToolReadiness.ts +13 -101
  444. package/src/styles.css +14 -0
  445. package/src/workflow/WorkflowAgentExecutionDocument.tsx +283 -0
  446. package/src/workflow/WorkflowApprovalList.tsx +158 -0
  447. package/src/workflow/WorkflowArtifactDocument.tsx +257 -0
  448. package/src/workflow/WorkflowExecutionGraph.tsx +40 -78
  449. package/src/workflow/WorkflowExecutionViewer.tsx +610 -287
  450. package/src/workflow/WorkflowFileReviewList.tsx +1 -1
  451. package/src/workflow/WorkflowTaskApprovalCard.tsx +5 -4
  452. package/src/workflow/WorkflowTaskApprovalSummary.tsx +6 -6
  453. package/src/workflow/__tests__/WorkflowAgentExecutionDocument.test.tsx +651 -0
  454. package/src/workflow/__tests__/WorkflowApprovalList.test.tsx +229 -0
  455. package/src/workflow/__tests__/WorkflowArtifactDocument.test.tsx +90 -0
  456. package/src/workflow/__tests__/WorkflowArtifactsTab.test.tsx +85 -0
  457. package/src/workflow/__tests__/WorkflowChangesTab.test.tsx +113 -0
  458. package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +473 -0
  459. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +632 -0
  460. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
  461. package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +947 -0
  462. package/src/workflow/__tests__/WorkflowUsageTab.test.tsx +163 -0
  463. package/src/workflow/__tests__/agent-call-live-experience.test.ts +6 -53
  464. package/src/workflow/__tests__/derive-execution-overlays.test.ts +4 -0
  465. package/src/workflow/__tests__/deriveWorkflowArtifactItems.test.ts +71 -0
  466. package/src/workflow/__tests__/deriveWorkflowUsageItems.test.ts +132 -0
  467. package/src/workflow/__tests__/execution-graph.test.ts +8 -0
  468. package/src/workflow/__tests__/project-thread-items.test.ts +428 -0
  469. package/src/workflow/__tests__/structured-data-viewer.test.tsx +1 -1
  470. package/src/workflow/__tests__/task-approval.test.ts +149 -0
  471. package/src/workflow/__tests__/task-detail-io.test.ts +40 -0
  472. package/src/workflow/__tests__/task-presentation.test.ts +479 -0
  473. package/src/workflow/__tests__/useActiveTaskName.test.ts +4 -0
  474. package/src/workflow/__tests__/useApprovalBoundary.test.ts +158 -0
  475. package/src/workflow/__tests__/useExecutionAnnouncements.test.ts +4 -0
  476. package/src/workflow/__tests__/useFollowExecution.test.ts +2 -89
  477. package/src/workflow/__tests__/useWorkflowExecutionFileChanges.test.tsx +412 -0
  478. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +297 -0
  479. package/src/workflow/__tests__/useWorkflowExecutionRailViews.test.tsx +115 -0
  480. package/src/workflow/deriveWorkflowArtifactItems.ts +59 -0
  481. package/src/workflow/deriveWorkflowUsageItems.ts +73 -0
  482. package/src/workflow/diagnosis-document.ts +31 -0
  483. package/src/workflow/execution/index.ts +0 -15
  484. package/src/workflow/facets/WorkflowArtifactsTab.tsx +99 -0
  485. package/src/workflow/facets/WorkflowChangesTab.tsx +129 -0
  486. package/src/workflow/facets/WorkflowUsageTab.tsx +258 -0
  487. package/src/workflow/format-utils.ts +2 -3
  488. package/src/workflow/index.ts +106 -62
  489. package/src/workflow/inspector/index.ts +0 -4
  490. package/src/workflow/instance/WorkflowInstanceList.tsx +59 -41
  491. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +156 -0
  492. package/src/workflow/task-detail/index.ts +11 -0
  493. package/src/workflow/task-detail/task-approval.ts +158 -0
  494. package/src/workflow/task-detail/task-detail-io.ts +65 -0
  495. package/src/workflow/thread/WorkflowTaskThread.tsx +845 -0
  496. package/src/workflow/thread/project-thread-items.ts +235 -0
  497. package/src/workflow/thread/task-presentation.ts +427 -0
  498. package/src/workflow/thread/thread-presentation.ts +59 -0
  499. package/src/workflow/thread/useWorkflowThreadItems.ts +34 -0
  500. package/src/workflow/useApprovalBoundary.ts +72 -0
  501. package/src/workflow/useFollowExecution.ts +0 -26
  502. package/src/workflow/useWorkflowArtifactDownload.ts +68 -0
  503. package/src/workflow/useWorkflowExecutionActions.ts +3 -2
  504. package/src/workflow/useWorkflowExecutionFileChanges.ts +341 -0
  505. package/src/workflow/useWorkflowExecutionGraph.ts +3 -43
  506. package/src/workflow/useWorkflowExecutionPanel.ts +292 -0
  507. package/src/workflow/useWorkflowExecutionRailViews.tsx +173 -0
  508. package/src/workspace/FileViewer.tsx +3 -3
  509. package/src/workspace/PanelChip.tsx +103 -0
  510. package/src/workspace/WorkspaceSurface.tsx +50 -6
  511. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +110 -0
  512. package/src/workspace/index.ts +3 -0
  513. package/styles.css +1 -1
  514. package/workflow/WorkflowAgentExecutionDocument.d.ts +79 -0
  515. package/workflow/WorkflowAgentExecutionDocument.d.ts.map +1 -0
  516. package/workflow/WorkflowAgentExecutionDocument.js +87 -0
  517. package/workflow/WorkflowAgentExecutionDocument.js.map +1 -0
  518. package/workflow/WorkflowApprovalList.d.ts +62 -0
  519. package/workflow/WorkflowApprovalList.d.ts.map +1 -0
  520. package/workflow/WorkflowApprovalList.js +52 -0
  521. package/workflow/WorkflowApprovalList.js.map +1 -0
  522. package/workflow/WorkflowArtifactDocument.d.ts +29 -0
  523. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -0
  524. package/workflow/WorkflowArtifactDocument.js +89 -0
  525. package/workflow/WorkflowArtifactDocument.js.map +1 -0
  526. package/workflow/WorkflowExecutionGraph.d.ts +15 -13
  527. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  528. package/workflow/WorkflowExecutionGraph.js +18 -53
  529. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  530. package/workflow/WorkflowExecutionViewer.d.ts +8 -5
  531. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  532. package/workflow/WorkflowExecutionViewer.js +329 -54
  533. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  534. package/workflow/WorkflowFileReviewList.d.ts +1 -1
  535. package/workflow/WorkflowFileReviewList.js +1 -1
  536. package/workflow/WorkflowTaskApprovalCard.d.ts +4 -3
  537. package/workflow/WorkflowTaskApprovalCard.d.ts.map +1 -1
  538. package/workflow/WorkflowTaskApprovalCard.js +5 -4
  539. package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
  540. package/workflow/WorkflowTaskApprovalSummary.d.ts +6 -6
  541. package/workflow/WorkflowTaskApprovalSummary.js +5 -5
  542. package/workflow/deriveWorkflowArtifactItems.d.ts +30 -0
  543. package/workflow/deriveWorkflowArtifactItems.d.ts.map +1 -0
  544. package/workflow/deriveWorkflowArtifactItems.js +38 -0
  545. package/workflow/deriveWorkflowArtifactItems.js.map +1 -0
  546. package/workflow/deriveWorkflowUsageItems.d.ts +36 -0
  547. package/workflow/deriveWorkflowUsageItems.d.ts.map +1 -0
  548. package/workflow/deriveWorkflowUsageItems.js +50 -0
  549. package/workflow/deriveWorkflowUsageItems.js.map +1 -0
  550. package/workflow/diagnosis-document.d.ts +17 -0
  551. package/workflow/diagnosis-document.d.ts.map +1 -0
  552. package/workflow/diagnosis-document.js +29 -0
  553. package/workflow/diagnosis-document.js.map +1 -0
  554. package/workflow/execution/index.d.ts +0 -2
  555. package/workflow/execution/index.d.ts.map +1 -1
  556. package/workflow/execution/index.js +0 -2
  557. package/workflow/execution/index.js.map +1 -1
  558. package/workflow/facets/WorkflowArtifactsTab.d.ts +26 -0
  559. package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -0
  560. package/workflow/facets/WorkflowArtifactsTab.js +34 -0
  561. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -0
  562. package/workflow/facets/WorkflowChangesTab.d.ts +37 -0
  563. package/workflow/facets/WorkflowChangesTab.d.ts.map +1 -0
  564. package/workflow/facets/WorkflowChangesTab.js +50 -0
  565. package/workflow/facets/WorkflowChangesTab.js.map +1 -0
  566. package/workflow/facets/WorkflowUsageTab.d.ts +27 -0
  567. package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -0
  568. package/workflow/facets/WorkflowUsageTab.js +87 -0
  569. package/workflow/facets/WorkflowUsageTab.js.map +1 -0
  570. package/workflow/format-utils.d.ts +2 -3
  571. package/workflow/format-utils.d.ts.map +1 -1
  572. package/workflow/format-utils.js +2 -3
  573. package/workflow/format-utils.js.map +1 -1
  574. package/workflow/index.d.ts +21 -10
  575. package/workflow/index.d.ts.map +1 -1
  576. package/workflow/index.js +29 -14
  577. package/workflow/index.js.map +1 -1
  578. package/workflow/inspector/index.d.ts +0 -2
  579. package/workflow/inspector/index.d.ts.map +1 -1
  580. package/workflow/inspector/index.js +0 -2
  581. package/workflow/inspector/index.js.map +1 -1
  582. package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
  583. package/workflow/instance/WorkflowInstanceList.js +11 -3
  584. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  585. package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -0
  586. package/workflow/task-detail/StructuredDataViewer.js.map +1 -0
  587. package/workflow/task-detail/index.d.ts +4 -0
  588. package/workflow/task-detail/index.d.ts.map +1 -0
  589. package/workflow/task-detail/index.js +4 -0
  590. package/workflow/task-detail/index.js.map +1 -0
  591. package/workflow/task-detail/task-approval.d.ts +89 -0
  592. package/workflow/task-detail/task-approval.d.ts.map +1 -0
  593. package/workflow/task-detail/task-approval.js +84 -0
  594. package/workflow/task-detail/task-approval.js.map +1 -0
  595. package/workflow/task-detail/task-detail-io.d.ts +39 -0
  596. package/workflow/task-detail/task-detail-io.d.ts.map +1 -0
  597. package/workflow/task-detail/task-detail-io.js +42 -0
  598. package/workflow/task-detail/task-detail-io.js.map +1 -0
  599. package/workflow/thread/WorkflowTaskThread.d.ts +91 -0
  600. package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -0
  601. package/workflow/thread/WorkflowTaskThread.js +318 -0
  602. package/workflow/thread/WorkflowTaskThread.js.map +1 -0
  603. package/workflow/thread/project-thread-items.d.ts +108 -0
  604. package/workflow/thread/project-thread-items.d.ts.map +1 -0
  605. package/workflow/thread/project-thread-items.js +126 -0
  606. package/workflow/thread/project-thread-items.js.map +1 -0
  607. package/workflow/thread/task-presentation.d.ts +73 -0
  608. package/workflow/thread/task-presentation.d.ts.map +1 -0
  609. package/workflow/thread/task-presentation.js +331 -0
  610. package/workflow/thread/task-presentation.js.map +1 -0
  611. package/workflow/thread/thread-presentation.d.ts +28 -0
  612. package/workflow/thread/thread-presentation.d.ts.map +1 -0
  613. package/workflow/thread/thread-presentation.js +28 -0
  614. package/workflow/thread/thread-presentation.js.map +1 -0
  615. package/workflow/thread/useWorkflowThreadItems.d.ts +16 -0
  616. package/workflow/thread/useWorkflowThreadItems.d.ts.map +1 -0
  617. package/workflow/thread/useWorkflowThreadItems.js +22 -0
  618. package/workflow/thread/useWorkflowThreadItems.js.map +1 -0
  619. package/workflow/useApprovalBoundary.d.ts +38 -0
  620. package/workflow/useApprovalBoundary.d.ts.map +1 -0
  621. package/workflow/useApprovalBoundary.js +55 -0
  622. package/workflow/useApprovalBoundary.js.map +1 -0
  623. package/workflow/useFollowExecution.d.ts +0 -20
  624. package/workflow/useFollowExecution.d.ts.map +1 -1
  625. package/workflow/useFollowExecution.js +0 -17
  626. package/workflow/useFollowExecution.js.map +1 -1
  627. package/workflow/useWorkflowArtifactDownload.d.ts +28 -0
  628. package/workflow/useWorkflowArtifactDownload.d.ts.map +1 -0
  629. package/workflow/useWorkflowArtifactDownload.js +45 -0
  630. package/workflow/useWorkflowArtifactDownload.js.map +1 -0
  631. package/workflow/useWorkflowExecutionActions.d.ts +3 -2
  632. package/workflow/useWorkflowExecutionActions.d.ts.map +1 -1
  633. package/workflow/useWorkflowExecutionActions.js.map +1 -1
  634. package/workflow/useWorkflowExecutionFileChanges.d.ts +107 -0
  635. package/workflow/useWorkflowExecutionFileChanges.d.ts.map +1 -0
  636. package/workflow/useWorkflowExecutionFileChanges.js +244 -0
  637. package/workflow/useWorkflowExecutionFileChanges.js.map +1 -0
  638. package/workflow/useWorkflowExecutionGraph.d.ts +1 -14
  639. package/workflow/useWorkflowExecutionGraph.d.ts.map +1 -1
  640. package/workflow/useWorkflowExecutionGraph.js +2 -25
  641. package/workflow/useWorkflowExecutionGraph.js.map +1 -1
  642. package/workflow/useWorkflowExecutionPanel.d.ts +108 -0
  643. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -0
  644. package/workflow/useWorkflowExecutionPanel.js +103 -0
  645. package/workflow/useWorkflowExecutionPanel.js.map +1 -0
  646. package/workflow/useWorkflowExecutionRailViews.d.ts +46 -0
  647. package/workflow/useWorkflowExecutionRailViews.d.ts.map +1 -0
  648. package/workflow/useWorkflowExecutionRailViews.js +81 -0
  649. package/workflow/useWorkflowExecutionRailViews.js.map +1 -0
  650. package/workspace/FileViewer.d.ts +1 -1
  651. package/workspace/FileViewer.js +3 -3
  652. package/workspace/FileViewer.js.map +1 -1
  653. package/workspace/PanelChip.d.ts +27 -0
  654. package/workspace/PanelChip.d.ts.map +1 -0
  655. package/workspace/PanelChip.js +42 -0
  656. package/workspace/PanelChip.js.map +1 -0
  657. package/workspace/WorkspaceSurface.d.ts +25 -1
  658. package/workspace/WorkspaceSurface.d.ts.map +1 -1
  659. package/workspace/WorkspaceSurface.js +21 -9
  660. package/workspace/WorkspaceSurface.js.map +1 -1
  661. package/workspace/index.d.ts +3 -1
  662. package/workspace/index.d.ts.map +1 -1
  663. package/workspace/index.js +1 -0
  664. package/workspace/index.js.map +1 -1
  665. package/execution/ThreadSelectionContext.d.ts +0 -17
  666. package/execution/ThreadSelectionContext.d.ts.map +0 -1
  667. package/execution/ThreadSelectionContext.js +0 -18
  668. package/execution/ThreadSelectionContext.js.map +0 -1
  669. package/execution/useThreadSelection.d.ts +0 -35
  670. package/execution/useThreadSelection.d.ts.map +0 -1
  671. package/execution/useThreadSelection.js +0 -65
  672. package/execution/useThreadSelection.js.map +0 -1
  673. package/internal/store/selection-store.d.ts +0 -53
  674. package/internal/store/selection-store.d.ts.map +0 -1
  675. package/internal/store/selection-store.js +0 -88
  676. package/internal/store/selection-store.js.map +0 -1
  677. package/session/artifact-document.d.ts.map +0 -1
  678. package/session/artifact-document.js +0 -22
  679. package/session/artifact-document.js.map +0 -1
  680. package/session/facets/InspectTab.d.ts +0 -13
  681. package/session/facets/InspectTab.d.ts.map +0 -1
  682. package/session/facets/InspectTab.js +0 -19
  683. package/session/facets/InspectTab.js.map +0 -1
  684. package/src/execution/ThreadSelectionContext.tsx +0 -20
  685. package/src/execution/useThreadSelection.ts +0 -95
  686. package/src/internal/store/__tests__/selection-store.test.ts +0 -115
  687. package/src/internal/store/selection-store.ts +0 -112
  688. package/src/session/artifact-document.ts +0 -23
  689. package/src/session/facets/InspectTab.tsx +0 -57
  690. package/src/workflow/WorkflowExecutionApprovalCard.tsx +0 -154
  691. package/src/workflow/WorkflowExecutionArtifactPanel.tsx +0 -107
  692. package/src/workflow/WorkflowExecutionCostPanel.tsx +0 -120
  693. package/src/workflow/WorkflowExecutionTaskPanel.tsx +0 -129
  694. package/src/workflow/WorkflowExecutionTimeline.tsx +0 -151
  695. package/src/workflow/WorkflowExecutionTimelineEvent.tsx +0 -497
  696. package/src/workflow/__tests__/ExecutionInspector.test.tsx +0 -155
  697. package/src/workflow/__tests__/WorkflowExecutionApprovalCard.test.tsx +0 -129
  698. package/src/workflow/__tests__/derive-task-detail.test.ts +0 -1265
  699. package/src/workflow/__tests__/derive-waterfall-entries.test.ts +0 -521
  700. package/src/workflow/__tests__/execution-inspector.test.tsx +0 -332
  701. package/src/workflow/execution/derive-waterfall-entries.ts +0 -377
  702. package/src/workflow/execution/useWaterfallEntries.ts +0 -125
  703. package/src/workflow/execution-inspector/AgentCallTab.tsx +0 -169
  704. package/src/workflow/execution-inspector/ErrorTab.tsx +0 -110
  705. package/src/workflow/execution-inspector/EventLogTab.tsx +0 -79
  706. package/src/workflow/execution-inspector/ExecutionInspector.tsx +0 -341
  707. package/src/workflow/execution-inspector/InputOutputTab.tsx +0 -325
  708. package/src/workflow/execution-inspector/RetriesTab.tsx +0 -68
  709. package/src/workflow/execution-inspector/SummaryTab.tsx +0 -62
  710. package/src/workflow/execution-inspector/derive-task-detail.ts +0 -584
  711. package/src/workflow/execution-inspector/index.ts +0 -14
  712. package/src/workflow/execution-inspector/useExecutionTaskDetail.ts +0 -55
  713. package/src/workflow/inspector/ExecutionInspectorAdapter.tsx +0 -40
  714. package/src/workflow/waterfall/WaterfallBar.tsx +0 -167
  715. package/src/workflow/waterfall/WaterfallRow.tsx +0 -112
  716. package/src/workflow/waterfall/WaterfallScale.tsx +0 -52
  717. package/src/workflow/waterfall/WaterfallTimeline.tsx +0 -138
  718. package/src/workflow/waterfall/WaterfallTooltip.tsx +0 -74
  719. package/src/workflow/waterfall/index.ts +0 -5
  720. package/workflow/WorkflowExecutionApprovalCard.d.ts +0 -34
  721. package/workflow/WorkflowExecutionApprovalCard.d.ts.map +0 -1
  722. package/workflow/WorkflowExecutionApprovalCard.js +0 -46
  723. package/workflow/WorkflowExecutionApprovalCard.js.map +0 -1
  724. package/workflow/WorkflowExecutionArtifactPanel.d.ts +0 -15
  725. package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +0 -1
  726. package/workflow/WorkflowExecutionArtifactPanel.js +0 -46
  727. package/workflow/WorkflowExecutionArtifactPanel.js.map +0 -1
  728. package/workflow/WorkflowExecutionCostPanel.d.ts +0 -18
  729. package/workflow/WorkflowExecutionCostPanel.d.ts.map +0 -1
  730. package/workflow/WorkflowExecutionCostPanel.js +0 -31
  731. package/workflow/WorkflowExecutionCostPanel.js.map +0 -1
  732. package/workflow/WorkflowExecutionTaskPanel.d.ts +0 -24
  733. package/workflow/WorkflowExecutionTaskPanel.d.ts.map +0 -1
  734. package/workflow/WorkflowExecutionTaskPanel.js +0 -51
  735. package/workflow/WorkflowExecutionTaskPanel.js.map +0 -1
  736. package/workflow/WorkflowExecutionTimeline.d.ts +0 -42
  737. package/workflow/WorkflowExecutionTimeline.d.ts.map +0 -1
  738. package/workflow/WorkflowExecutionTimeline.js +0 -52
  739. package/workflow/WorkflowExecutionTimeline.js.map +0 -1
  740. package/workflow/WorkflowExecutionTimelineEvent.d.ts +0 -25
  741. package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +0 -1
  742. package/workflow/WorkflowExecutionTimelineEvent.js +0 -179
  743. package/workflow/WorkflowExecutionTimelineEvent.js.map +0 -1
  744. package/workflow/execution/derive-waterfall-entries.d.ts +0 -85
  745. package/workflow/execution/derive-waterfall-entries.d.ts.map +0 -1
  746. package/workflow/execution/derive-waterfall-entries.js +0 -268
  747. package/workflow/execution/derive-waterfall-entries.js.map +0 -1
  748. package/workflow/execution/useWaterfallEntries.d.ts +0 -25
  749. package/workflow/execution/useWaterfallEntries.d.ts.map +0 -1
  750. package/workflow/execution/useWaterfallEntries.js +0 -67
  751. package/workflow/execution/useWaterfallEntries.js.map +0 -1
  752. package/workflow/execution-inspector/AgentCallTab.d.ts +0 -21
  753. package/workflow/execution-inspector/AgentCallTab.d.ts.map +0 -1
  754. package/workflow/execution-inspector/AgentCallTab.js +0 -36
  755. package/workflow/execution-inspector/AgentCallTab.js.map +0 -1
  756. package/workflow/execution-inspector/ErrorTab.d.ts +0 -9
  757. package/workflow/execution-inspector/ErrorTab.d.ts.map +0 -1
  758. package/workflow/execution-inspector/ErrorTab.js +0 -29
  759. package/workflow/execution-inspector/ErrorTab.js.map +0 -1
  760. package/workflow/execution-inspector/EventLogTab.d.ts +0 -11
  761. package/workflow/execution-inspector/EventLogTab.d.ts.map +0 -1
  762. package/workflow/execution-inspector/EventLogTab.js +0 -47
  763. package/workflow/execution-inspector/EventLogTab.js.map +0 -1
  764. package/workflow/execution-inspector/ExecutionInspector.d.ts +0 -69
  765. package/workflow/execution-inspector/ExecutionInspector.d.ts.map +0 -1
  766. package/workflow/execution-inspector/ExecutionInspector.js +0 -145
  767. package/workflow/execution-inspector/ExecutionInspector.js.map +0 -1
  768. package/workflow/execution-inspector/InputOutputTab.d.ts +0 -20
  769. package/workflow/execution-inspector/InputOutputTab.d.ts.map +0 -1
  770. package/workflow/execution-inspector/InputOutputTab.js +0 -124
  771. package/workflow/execution-inspector/InputOutputTab.js.map +0 -1
  772. package/workflow/execution-inspector/RetriesTab.d.ts +0 -7
  773. package/workflow/execution-inspector/RetriesTab.d.ts.map +0 -1
  774. package/workflow/execution-inspector/RetriesTab.js +0 -11
  775. package/workflow/execution-inspector/RetriesTab.js.map +0 -1
  776. package/workflow/execution-inspector/StructuredDataViewer.d.ts.map +0 -1
  777. package/workflow/execution-inspector/StructuredDataViewer.js.map +0 -1
  778. package/workflow/execution-inspector/SummaryTab.d.ts +0 -7
  779. package/workflow/execution-inspector/SummaryTab.d.ts.map +0 -1
  780. package/workflow/execution-inspector/SummaryTab.js +0 -10
  781. package/workflow/execution-inspector/SummaryTab.js.map +0 -1
  782. package/workflow/execution-inspector/derive-task-detail.d.ts +0 -140
  783. package/workflow/execution-inspector/derive-task-detail.d.ts.map +0 -1
  784. package/workflow/execution-inspector/derive-task-detail.js +0 -366
  785. package/workflow/execution-inspector/derive-task-detail.js.map +0 -1
  786. package/workflow/execution-inspector/index.d.ts +0 -4
  787. package/workflow/execution-inspector/index.d.ts.map +0 -1
  788. package/workflow/execution-inspector/index.js +0 -4
  789. package/workflow/execution-inspector/index.js.map +0 -1
  790. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts +0 -38
  791. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts.map +0 -1
  792. package/workflow/execution-inspector/useExecutionTaskDetail.js +0 -37
  793. package/workflow/execution-inspector/useExecutionTaskDetail.js.map +0 -1
  794. package/workflow/inspector/ExecutionInspectorAdapter.d.ts +0 -26
  795. package/workflow/inspector/ExecutionInspectorAdapter.d.ts.map +0 -1
  796. package/workflow/inspector/ExecutionInspectorAdapter.js +0 -23
  797. package/workflow/inspector/ExecutionInspectorAdapter.js.map +0 -1
  798. package/workflow/waterfall/WaterfallBar.d.ts +0 -19
  799. package/workflow/waterfall/WaterfallBar.d.ts.map +0 -1
  800. package/workflow/waterfall/WaterfallBar.js +0 -70
  801. package/workflow/waterfall/WaterfallBar.js.map +0 -1
  802. package/workflow/waterfall/WaterfallRow.d.ts +0 -18
  803. package/workflow/waterfall/WaterfallRow.d.ts.map +0 -1
  804. package/workflow/waterfall/WaterfallRow.js +0 -45
  805. package/workflow/waterfall/WaterfallRow.js.map +0 -1
  806. package/workflow/waterfall/WaterfallScale.d.ts +0 -14
  807. package/workflow/waterfall/WaterfallScale.d.ts.map +0 -1
  808. package/workflow/waterfall/WaterfallScale.js +0 -22
  809. package/workflow/waterfall/WaterfallScale.js.map +0 -1
  810. package/workflow/waterfall/WaterfallTimeline.d.ts +0 -46
  811. package/workflow/waterfall/WaterfallTimeline.d.ts.map +0 -1
  812. package/workflow/waterfall/WaterfallTimeline.js +0 -60
  813. package/workflow/waterfall/WaterfallTimeline.js.map +0 -1
  814. package/workflow/waterfall/WaterfallTooltip.d.ts +0 -15
  815. package/workflow/waterfall/WaterfallTooltip.d.ts.map +0 -1
  816. package/workflow/waterfall/WaterfallTooltip.js +0 -20
  817. package/workflow/waterfall/WaterfallTooltip.js.map +0 -1
  818. package/workflow/waterfall/index.d.ts +0 -6
  819. package/workflow/waterfall/index.d.ts.map +0 -1
  820. package/workflow/waterfall/index.js +0 -6
  821. package/workflow/waterfall/index.js.map +0 -1
  822. /package/src/workflow/{execution-inspector → task-detail}/StructuredDataViewer.tsx +0 -0
  823. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.d.ts +0 -0
  824. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.js +0 -0
@@ -0,0 +1,688 @@
1
+ "use client";
2
+
3
+ import { useCallback, useState } from "react";
4
+ import { KeyRound, MessageSquare, MoreHorizontal, Trash2 } from "lucide-react";
5
+ import { cn } from "@stigmer/theme";
6
+ import { getUserMessage } from "@stigmer/sdk";
7
+ import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
8
+ import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
9
+ import type { ChannelApp } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
10
+ import { AgentChannelInstallState } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/status_pb";
11
+ import { toast } from "../feedback/toast.js";
12
+ import { ActionMenu } from "../action-menu/index.js";
13
+ import { Button } from "../button/Button.js";
14
+ import { EmptyState } from "../empty-state/EmptyState.js";
15
+ import { Switch } from "../switch/Switch.js";
16
+ import { useChannelAppList } from "../channel-app/useChannelAppList.js";
17
+ import { useCheckPermission } from "../iam-policy/useCheckPermission.js";
18
+ import { ConfirmDialog } from "../resource-detail/ConfirmDialog.js";
19
+ import { useConfirmAction } from "../resource-detail/useConfirmAction.js";
20
+ import { useDeploymentMode } from "../deployment-mode.js";
21
+ import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
22
+ import { ChannelConversationsDialog } from "./ChannelConversationsDialog.js";
23
+ import { ChannelCredentialsDialog } from "./ChannelCredentialsDialog.js";
24
+ import { ConnectSlackDialog } from "./ConnectSlackDialog.js";
25
+ import { ConnectWhatsAppDialog } from "./ConnectWhatsAppDialog.js";
26
+ import {
27
+ CHANNEL_PROVIDERS,
28
+ channelProviderOf,
29
+ type ChannelProviderDescriptor,
30
+ } from "./providers.js";
31
+ import {
32
+ channelPresentationOf,
33
+ DEFAULT_CHANNEL_PRESENTATION,
34
+ } from "./providerPresentation.js";
35
+ import { useAgentChannelList } from "./useAgentChannelList.js";
36
+ import { useChannelToolReadiness } from "./useChannelToolReadiness.js";
37
+ import { useDeleteAgentChannel } from "./useDeleteAgentChannel.js";
38
+ import { agentChannelToInput, useSaveAgentChannel } from "./useSaveAgentChannel.js";
39
+
40
+ /** Props for {@link AgentChannelsPanel}. */
41
+ export interface AgentChannelsPanelProps {
42
+ /** The agent whose channels are managed. */
43
+ readonly agent: Agent;
44
+ /**
45
+ * When provided, connect actions for redirect-style providers (Slack)
46
+ * delegate to the host instead of running the in-app popup flow. For
47
+ * hosts whose webview cannot open popups (the desktop app): the
48
+ * delegate typically opens the web console in the system browser.
49
+ * Called with the channel being (re)connected, or `null` for a
50
+ * brand-new connection. Direct-install providers (WhatsApp) always
51
+ * connect in-app — their flow is a plain API call with nothing for a
52
+ * popup to do — so they never invoke the delegate.
53
+ */
54
+ readonly onConnectExternal?: (channel: AgentChannel | null) => void;
55
+ /**
56
+ * Where the host manages Channel Apps (the console passes
57
+ * `/settings/channel-apps`). Threaded to the connect dialog's
58
+ * "Register a channel app" affordance; absent, the affordance
59
+ * degrades to plain guidance text.
60
+ */
61
+ readonly channelAppsHref?: string;
62
+ /**
63
+ * Maps a session id to the host's session route (the console passes
64
+ * `` (id) => `/sessions/${id}` ``). Threaded to each card's
65
+ * Conversations dialog so rows link to the read-only transcript;
66
+ * absent, the rows render without links (DD-004 — the SDK never
67
+ * assumes a routing scheme).
68
+ */
69
+ readonly sessionHref?: (sessionId: string) => string;
70
+ /** Additional CSS class names. */
71
+ readonly className?: string;
72
+ }
73
+
74
+ /**
75
+ * Management surface for an agent's {@link AgentChannel} connections —
76
+ * rendered in the agent detail view's Channels tab.
77
+ *
78
+ * One card per channel showing the two serving axes side by side: the
79
+ * observed provider install state (`pending_install` / `installed` /
80
+ * `revoked`) and the owner's serving switch (`spec.enabled`). Traffic
81
+ * flows only when installed AND enabled. Channels always live in the
82
+ * agent's own org (no cross-org arm, unlike shares), so no org selector
83
+ * is needed.
84
+ *
85
+ * Connecting runs the provider's own dialog — {@link ConnectSlackDialog}
86
+ * (OAuth popup) or {@link ConnectWhatsAppDialog} (direct install). On a
87
+ * `local` (OSS) backend, channel CRUD works but installs are cloud-only —
88
+ * connect affordances are replaced by a cloud-feature notice, matching
89
+ * the server's FAILED_PRECONDITION posture.
90
+ *
91
+ * Self-contained: owns its dialog, its confirmation prompts, and its
92
+ * refetch-after-mutation — hosts render it with just the agent (plus the
93
+ * external-connect delegate where popups are unavailable).
94
+ *
95
+ * This is an SDK component (DD-001) — embeddable by platform builders.
96
+ */
97
+ export function AgentChannelsPanel({
98
+ agent,
99
+ onConnectExternal,
100
+ channelAppsHref,
101
+ sessionHref,
102
+ className,
103
+ }: AgentChannelsPanelProps) {
104
+ const agentId = agent.metadata?.id ?? "";
105
+ // Channels are same-org by invariant; scope the list to the agent's org.
106
+ const { channels, isLoading, error, refetch } = useAgentChannelList(
107
+ agentId,
108
+ agent.metadata?.org ?? "",
109
+ );
110
+
111
+ // One fetch for all cards: a channel's spec.app_ref carries only the
112
+ // slug, but the app's name is the bot name members @mention — the
113
+ // label worth showing.
114
+ const { channelApps } = useChannelAppList(agent.metadata?.org || null);
115
+
116
+ // Mirrors the server's create bar (agent can_edit — the permission the
117
+ // create/apply handlers enforce on the referenced agent) so the connect
118
+ // affordance never appears to a viewer whose create would be refused.
119
+ const { allowed: canCreate } = useCheckPermission(
120
+ agentId ? { kind: "agent", id: agentId } : null,
121
+ "can_edit",
122
+ );
123
+
124
+ // Installs are cloud-only; CRUD is not. In local mode the cards render
125
+ // and toggles work, but connect affordances give way to the notice.
126
+ const installsAvailable = useDeploymentMode() === "cloud";
127
+
128
+ const { deleteChannel } = useDeleteAgentChannel();
129
+ const { confirmState, confirm, handleConfirm, handleCancel } =
130
+ useConfirmAction();
131
+
132
+ // One dialog mount serves both flows per provider: connecting the
133
+ // chosen channel, or creating a new one and connecting it in the same
134
+ // session. The provider picks which dialog renders.
135
+ const [connecting, setConnecting] = useState<
136
+ | { readonly mode: "create"; readonly provider: ChannelProviderDescriptor }
137
+ | { readonly mode: "reconnect"; readonly channel: AgentChannel }
138
+ | null
139
+ >(null);
140
+
141
+ // The channel whose tool-credential bindings are being edited.
142
+ const [editingCredentials, setEditingCredentials] =
143
+ useState<AgentChannel | null>(null);
144
+
145
+ // The channel whose conversations are being viewed (DD-012: read-only
146
+ // channel-session observability for the channel's viewers).
147
+ const [viewingConversations, setViewingConversations] =
148
+ useState<AgentChannel | null>(null);
149
+
150
+ const handleConnect = useCallback(
151
+ (channel: AgentChannel | null, provider: ChannelProviderDescriptor) => {
152
+ // Only redirect-style installs need the host hand-off (they open a
153
+ // popup the desktop webview cannot); direct installs are a plain
154
+ // API call and run in-app everywhere.
155
+ if (provider.installStyle === "redirect" && onConnectExternal) {
156
+ onConnectExternal(channel);
157
+ return;
158
+ }
159
+ setConnecting(
160
+ channel ? { mode: "reconnect", channel } : { mode: "create", provider },
161
+ );
162
+ },
163
+ [onConnectExternal],
164
+ );
165
+
166
+ const handleDelete = useCallback(
167
+ async (channel: AgentChannel) => {
168
+ const name = channel.metadata?.name || channel.metadata?.slug || "this channel";
169
+ const presentation =
170
+ channelPresentationOf(channel.spec?.providerConfig?.case) ??
171
+ DEFAULT_CHANNEL_PRESENTATION;
172
+ const confirmed = await confirm({
173
+ title: "Disconnect channel?",
174
+ description: presentation.disconnectDescription(name),
175
+ confirmLabel: "Disconnect",
176
+ variant: "destructive",
177
+ });
178
+ if (!confirmed) return;
179
+ try {
180
+ await deleteChannel(channel.metadata?.id ?? "");
181
+ toast.success("Channel disconnected");
182
+ refetch();
183
+ } catch (err) {
184
+ toast.error(getUserMessage(err));
185
+ }
186
+ },
187
+ [confirm, deleteChannel, refetch],
188
+ );
189
+
190
+ if (isLoading) {
191
+ return <LoadingSkeleton />;
192
+ }
193
+
194
+ if (error) {
195
+ return (
196
+ <div className="py-8 text-center text-sm text-destructive">
197
+ Failed to load channels
198
+ </div>
199
+ );
200
+ }
201
+
202
+ const showCloudNotice =
203
+ !installsAvailable &&
204
+ (channels.length === 0 ||
205
+ channels.some(
206
+ (c) => installStateOf(c) !== AgentChannelInstallState.installed,
207
+ ));
208
+
209
+ // Whether a provider's connect affordance is actionable here: installs
210
+ // are cloud-only, but redirect-style providers can still hand off to
211
+ // the host (the desktop → system-browser path). Direct-style providers
212
+ // have no hand-off — in local mode their affordance yields to the
213
+ // cloud notice.
214
+ const canConnectVia = (p: ChannelProviderDescriptor) =>
215
+ canCreate &&
216
+ (installsAvailable || (p.installStyle === "redirect" && !!onConnectExternal));
217
+ const connectableProviders = CHANNEL_PROVIDERS.filter(canConnectVia);
218
+
219
+ // The provider of the in-flight connect flow: chosen by the user in
220
+ // create mode, the channel's own on a reconnect. Unknown cases (a
221
+ // newer server) fall back to the default provider, matching the card.
222
+ const connectingProvider =
223
+ connecting === null
224
+ ? null
225
+ : connecting.mode === "create"
226
+ ? connecting.provider
227
+ : channelProviderOf(connecting.channel.spec?.providerConfig?.case) ??
228
+ CHANNEL_PROVIDERS[0];
229
+
230
+ return (
231
+ <div className={cn("space-y-3", className)}>
232
+ {showCloudNotice && (
233
+ <CloudFeatureNotice>
234
+ Channel installs require Stigmer Cloud — connecting an agent to
235
+ Slack or WhatsApp runs through the platform&apos;s hosted webhook
236
+ infrastructure. Channel configuration still works here.
237
+ </CloudFeatureNotice>
238
+ )}
239
+
240
+ {channels.length === 0 ? (
241
+ <ChannelEmptyState
242
+ providers={connectableProviders}
243
+ onConnectClick={(p) => handleConnect(null, p)}
244
+ />
245
+ ) : (
246
+ <>
247
+ <div className="flex items-center justify-between gap-2">
248
+ <h3 className="text-sm font-medium text-foreground">
249
+ {channels.length} {channels.length === 1 ? "channel" : "channels"}
250
+ </h3>
251
+ {/* One visible button per provider — deliberately not a
252
+ dropdown: two options are clearer side by side, and each
253
+ keeps its own stable cursor target (see providers.ts). */}
254
+ {connectableProviders.length > 0 && (
255
+ <div className="flex shrink-0 items-center gap-2">
256
+ {connectableProviders.map((p) => (
257
+ <Button
258
+ key={p.id}
259
+ variant="outline"
260
+ size="xs"
261
+ icon={<p.Icon className="size-3" />}
262
+ onClick={() => handleConnect(null, p)}
263
+ data-cursor-target={`connect-${p.id}`}
264
+ >
265
+ Connect to {p.label}
266
+ </Button>
267
+ ))}
268
+ </div>
269
+ )}
270
+ </div>
271
+
272
+ <div className="space-y-2">
273
+ {channels.map((channel) => {
274
+ const cardProvider =
275
+ channelProviderOf(channel.spec?.providerConfig?.case) ??
276
+ CHANNEL_PROVIDERS[0];
277
+ return (
278
+ <ChannelCard
279
+ key={channel.metadata?.id}
280
+ agent={agent}
281
+ channel={channel}
282
+ channelApps={channelApps}
283
+ connectAvailable={
284
+ installsAvailable ||
285
+ (cardProvider.installStyle === "redirect" &&
286
+ !!onConnectExternal)
287
+ }
288
+ onConnectClick={() => handleConnect(channel, cardProvider)}
289
+ onDeleteClick={() => void handleDelete(channel)}
290
+ onEditCredentials={() => setEditingCredentials(channel)}
291
+ onViewConversations={() => setViewingConversations(channel)}
292
+ refetch={refetch}
293
+ />
294
+ );
295
+ })}
296
+ </div>
297
+ </>
298
+ )}
299
+
300
+ {connecting && connectingProvider?.id === "whatsapp" ? (
301
+ <ConnectWhatsAppDialog
302
+ open
303
+ onOpenChange={(open) => {
304
+ if (!open) setConnecting(null);
305
+ }}
306
+ agent={agent}
307
+ channel={connecting.mode === "reconnect" ? connecting.channel : undefined}
308
+ onChannelsChanged={refetch}
309
+ channelAppsHref={channelAppsHref}
310
+ />
311
+ ) : connecting ? (
312
+ <ConnectSlackDialog
313
+ open
314
+ onOpenChange={(open) => {
315
+ if (!open) setConnecting(null);
316
+ }}
317
+ agent={agent}
318
+ channel={connecting.mode === "reconnect" ? connecting.channel : undefined}
319
+ onChannelsChanged={refetch}
320
+ channelAppsHref={channelAppsHref}
321
+ />
322
+ ) : null}
323
+
324
+ {editingCredentials && (
325
+ <ChannelCredentialsDialog
326
+ open
327
+ onOpenChange={(open) => {
328
+ if (!open) setEditingCredentials(null);
329
+ }}
330
+ agent={agent}
331
+ channel={editingCredentials}
332
+ onSaved={refetch}
333
+ />
334
+ )}
335
+
336
+ {viewingConversations && (
337
+ <ChannelConversationsDialog
338
+ open
339
+ onOpenChange={(open) => {
340
+ if (!open) setViewingConversations(null);
341
+ }}
342
+ channel={viewingConversations}
343
+ sessionHref={sessionHref}
344
+ />
345
+ )}
346
+
347
+ <ConfirmDialog
348
+ state={confirmState}
349
+ onConfirm={handleConfirm}
350
+ onCancel={handleCancel}
351
+ />
352
+ </div>
353
+ );
354
+ }
355
+
356
+ // ---------------------------------------------------------------------------
357
+ // Card — one provider connection
358
+ // ---------------------------------------------------------------------------
359
+
360
+ interface ChannelCardProps {
361
+ readonly agent: Agent;
362
+ readonly channel: AgentChannel;
363
+ readonly channelApps: readonly ChannelApp[];
364
+ /** Whether the card's Connect/Reconnect affordance is actionable here. */
365
+ readonly connectAvailable: boolean;
366
+ readonly onConnectClick: () => void;
367
+ readonly onDeleteClick: () => void;
368
+ readonly onEditCredentials: () => void;
369
+ readonly onViewConversations: () => void;
370
+ readonly refetch: () => void;
371
+ }
372
+
373
+ function ChannelCard({
374
+ agent,
375
+ channel,
376
+ channelApps,
377
+ connectAvailable,
378
+ onConnectClick,
379
+ onDeleteClick,
380
+ onEditCredentials,
381
+ onViewConversations,
382
+ refetch,
383
+ }: ChannelCardProps) {
384
+ const meta = channel.metadata;
385
+ const id = meta?.id ?? "";
386
+ const enabled = channel.spec?.enabled ?? false;
387
+ const installState = installStateOf(channel);
388
+ // The serving app (T04 item 2): set means the channel installs through
389
+ // the org's own channel app; absent means the platform Stigmer app
390
+ // (Slack only — WhatsApp always has one, DD-WA-2). The app's NAME is
391
+ // the identity people address, so prefer it over the ref's slug when
392
+ // the app is in the fetched list (it may not be — e.g. the app was
393
+ // deleted after install).
394
+ const servingAppSlug = channel.spec?.appRef?.slug || null;
395
+ const servingAppName = servingAppSlug
396
+ ? channelApps.find((app) => app.metadata?.slug === servingAppSlug)
397
+ ?.metadata?.name || servingAppSlug
398
+ : null;
399
+
400
+ // The spec's provider marker is set at create; unknown cases (a newer
401
+ // server) fall back to the default provider mark rather than no icon,
402
+ // and to the default presentation rather than no copy.
403
+ const provider =
404
+ channelProviderOf(channel.spec?.providerConfig?.case) ?? CHANNEL_PROVIDERS[0];
405
+ const presentation =
406
+ channelPresentationOf(channel.spec?.providerConfig?.case) ??
407
+ DEFAULT_CHANNEL_PRESENTATION;
408
+
409
+ const { save, isPending } = useSaveAgentChannel();
410
+
411
+ // Decide the card's actions here (not via nested permission wrappers) so
412
+ // affordances are hidden entirely when the viewer can do nothing —
413
+ // permissive in OSS, so local single-user sees all.
414
+ const { allowed: canEdit } = useCheckPermission(
415
+ { kind: "agent_channel", id },
416
+ "can_edit",
417
+ );
418
+ const { allowed: canDelete } = useCheckPermission(
419
+ { kind: "agent_channel", id },
420
+ "can_delete",
421
+ );
422
+
423
+ // On/off is a full-input save with only `enabled` flipped —
424
+ // agentChannelToInput guarantees the toggle can never wipe the agent
425
+ // reference or the provider marker (the fails-closed posture shares use).
426
+ const handleToggleEnabled = useCallback(
427
+ async (next: boolean) => {
428
+ try {
429
+ await save({ ...agentChannelToInput(channel), enabled: next });
430
+ toast.success(next ? "Channel turned on" : "Channel turned off");
431
+ refetch();
432
+ } catch (err) {
433
+ toast.error(getUserMessage(err));
434
+ }
435
+ },
436
+ [save, channel, refetch],
437
+ );
438
+
439
+ return (
440
+ <div className="rounded-lg border border-border p-4">
441
+ <div className="flex items-start justify-between gap-3">
442
+ <div className="flex min-w-0 items-center gap-2.5">
443
+ <provider.Icon className="size-5 shrink-0 text-foreground" />
444
+ <div className="min-w-0">
445
+ <div className="flex items-center gap-2">
446
+ <span
447
+ className="truncate text-sm font-medium text-foreground"
448
+ title={meta?.name || meta?.slug || undefined}
449
+ >
450
+ {meta?.name || meta?.slug || "\u2014"}
451
+ </span>
452
+ <InstallStatePill state={installState} />
453
+ </div>
454
+ <p className="mt-0.5 text-xs text-muted-foreground">
455
+ {presentation.describeChannel(channel)}
456
+ </p>
457
+ <p className="mt-0.5 text-xs text-muted-foreground-faint">
458
+ {presentation.servingLine(servingAppName)}
459
+ </p>
460
+ </div>
461
+ </div>
462
+
463
+ <div className="flex shrink-0 items-center gap-2">
464
+ {canEdit && installState === AgentChannelInstallState.installed && (
465
+ <Switch
466
+ checked={enabled}
467
+ onCheckedChange={(next) => void handleToggleEnabled(next)}
468
+ disabled={isPending}
469
+ aria-label={`Turn ${meta?.name || meta?.slug || "channel"} ${enabled ? "off" : "on"}`}
470
+ />
471
+ )}
472
+ {canEdit &&
473
+ connectAvailable &&
474
+ installState !== AgentChannelInstallState.installed && (
475
+ <Button variant="outline" size="xs" onClick={onConnectClick}>
476
+ {installState === AgentChannelInstallState.revoked
477
+ ? "Reconnect"
478
+ : "Connect"}
479
+ </Button>
480
+ )}
481
+ {/* The menu always renders: everyone who can see the card holds
482
+ can_view on the channel (the FGA-filtered list), which is
483
+ exactly the bar for viewing its conversations (DD-012). */}
484
+ <ActionMenu>
485
+ <ActionMenu.Trigger
486
+ aria-label={`Actions for ${meta?.name || meta?.slug}`}
487
+ >
488
+ <MoreHorizontal className="size-4" />
489
+ </ActionMenu.Trigger>
490
+ <ActionMenu.Content>
491
+ <ActionMenu.Item
492
+ icon={<MessageSquare />}
493
+ onSelect={onViewConversations}
494
+ data-cursor-target="channel-conversations"
495
+ >
496
+ Conversations
497
+ </ActionMenu.Item>
498
+ {canEdit && (
499
+ <ActionMenu.Item
500
+ icon={<KeyRound />}
501
+ onSelect={onEditCredentials}
502
+ >
503
+ Tool credentials
504
+ </ActionMenu.Item>
505
+ )}
506
+ {canDelete && (
507
+ <ActionMenu.Item
508
+ icon={<Trash2 />}
509
+ variant="destructive"
510
+ onSelect={onDeleteClick}
511
+ >
512
+ Disconnect
513
+ </ActionMenu.Item>
514
+ )}
515
+ </ActionMenu.Content>
516
+ </ActionMenu>
517
+ </div>
518
+ </div>
519
+
520
+ <CardReadinessWarning
521
+ agent={agent}
522
+ channel={channel}
523
+ canEdit={canEdit}
524
+ onEditCredentials={onEditCredentials}
525
+ />
526
+ </div>
527
+ );
528
+ }
529
+
530
+ /**
531
+ * Serving-readiness warning for tool-using agents: channel executions
532
+ * receive credentials only from the channel's own bindings, so an
533
+ * installed, enabled channel with none (or with a private binding) will
534
+ * refuse the first workspace message that needs a tool. The card is
535
+ * where an owner — including one who connected before credential
536
+ * binding existed — discovers the gap, instead of hearing about it from
537
+ * a confused workspace member.
538
+ */
539
+ function CardReadinessWarning({
540
+ agent,
541
+ channel,
542
+ canEdit,
543
+ onEditCredentials,
544
+ }: {
545
+ readonly agent: Agent;
546
+ readonly channel: AgentChannel;
547
+ readonly canEdit: boolean;
548
+ readonly onEditCredentials: () => void;
549
+ }) {
550
+ const serving =
551
+ (channel.spec?.enabled ?? false) &&
552
+ installStateOf(channel) === AgentChannelInstallState.installed;
553
+ const readiness = useChannelToolReadiness(
554
+ agent,
555
+ serving,
556
+ channel.spec?.environmentRefs ?? [],
557
+ );
558
+
559
+ if (readiness.status !== "needs-credentials" && readiness.status !== "blocked") {
560
+ return null;
561
+ }
562
+
563
+ const message =
564
+ readiness.status === "needs-credentials"
565
+ ? "This agent uses tools, but no credentials are bound to this channel — workspace messages that need a tool will be refused."
566
+ : `Bound environment${readiness.privateEnvironments.length > 1 ? "s" : ""} ${readiness.privateEnvironments.join(", ")} ${readiness.privateEnvironments.length > 1 ? "are" : "is"} private — share ${readiness.privateEnvironments.length > 1 ? "them" : "it"} with your organization so workspace messages can use the credentials.`;
567
+
568
+ return (
569
+ <p className="mt-2 text-xs text-warning" role="status">
570
+ {message}
571
+ {canEdit && (
572
+ <>
573
+ {" "}
574
+ <button
575
+ type="button"
576
+ onClick={onEditCredentials}
577
+ className={cn(
578
+ "font-medium underline underline-offset-2",
579
+ "hover:text-foreground",
580
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded",
581
+ )}
582
+ >
583
+ Bind credentials
584
+ </button>
585
+ </>
586
+ )}
587
+ </p>
588
+ );
589
+ }
590
+
591
+ // ---------------------------------------------------------------------------
592
+ // Install-state rendering
593
+ // ---------------------------------------------------------------------------
594
+
595
+ function installStateOf(channel: AgentChannel): AgentChannelInstallState {
596
+ return (
597
+ channel.status?.installState ??
598
+ AgentChannelInstallState.agent_channel_install_state_unspecified
599
+ );
600
+ }
601
+
602
+ function InstallStatePill({ state }: { readonly state: AgentChannelInstallState }) {
603
+ const { label, tone } = (() => {
604
+ switch (state) {
605
+ case AgentChannelInstallState.installed:
606
+ return { label: "Installed", tone: "text-success" };
607
+ case AgentChannelInstallState.revoked:
608
+ return { label: "Revoked", tone: "text-destructive" };
609
+ default:
610
+ return { label: "Pending install", tone: "text-muted-foreground" };
611
+ }
612
+ })();
613
+
614
+ return (
615
+ <span
616
+ className={cn(
617
+ "inline-flex shrink-0 items-center gap-1.5 text-xs",
618
+ tone,
619
+ )}
620
+ >
621
+ <span aria-hidden="true" className="size-1.5 rounded-full bg-current" />
622
+ {label}
623
+ </span>
624
+ );
625
+ }
626
+
627
+ // ---------------------------------------------------------------------------
628
+ // Empty + loading states
629
+ // ---------------------------------------------------------------------------
630
+
631
+ function ChannelEmptyState({
632
+ providers,
633
+ onConnectClick,
634
+ }: {
635
+ /** The providers the viewer can connect through, in display order. */
636
+ readonly providers: readonly ChannelProviderDescriptor[];
637
+ readonly onConnectClick: (provider: ChannelProviderDescriptor) => void;
638
+ }) {
639
+ const providerLabels = CHANNEL_PROVIDERS.map((p) => p.label).join(" or ");
640
+ return (
641
+ <EmptyState
642
+ variant="first-use"
643
+ icon={
644
+ <span className="flex items-center gap-2">
645
+ {CHANNEL_PROVIDERS.map((p) => (
646
+ <p.Icon key={p.id} className="size-10" />
647
+ ))}
648
+ </span>
649
+ }
650
+ title="No channels yet"
651
+ description={
652
+ `Connect this agent to ${providerLabels} and people chat with it ` +
653
+ "right where they work — with policy, rate limits, and billing " +
654
+ "enforced by Stigmer."
655
+ }
656
+ >
657
+ {/* Rendered via the children slot (not `action`) so each button can
658
+ carry its docs-demo cursor target, which EmptyState's action
659
+ config does not thread through. One visible button per provider
660
+ — see providers.ts for why this is not a dropdown. */}
661
+ {providers.length > 0 && (
662
+ <span className="flex items-center gap-2">
663
+ {providers.map((p) => (
664
+ <Button
665
+ key={p.id}
666
+ variant="primary"
667
+ icon={<p.Icon className="size-3" />}
668
+ onClick={() => onConnectClick(p)}
669
+ data-cursor-target={`connect-${p.id}`}
670
+ >
671
+ Connect to {p.label}
672
+ </Button>
673
+ ))}
674
+ </span>
675
+ )}
676
+ </EmptyState>
677
+ );
678
+ }
679
+
680
+ function LoadingSkeleton() {
681
+ return (
682
+ <div className="space-y-2 py-4">
683
+ {[1, 2].map((i) => (
684
+ <div key={i} className="h-20 animate-pulse rounded-lg bg-muted-faint" />
685
+ ))}
686
+ </div>
687
+ );
688
+ }