@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,845 @@
1
+ "use client";
2
+
3
+ import { memo, useMemo, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type {
6
+ WorkflowPendingApproval,
7
+ WorkflowPendingFileReview,
8
+ WorkflowTask,
9
+ } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
10
+ import type { DerivedTaskState } from "../../internal/store/workflow-execution-event-store.js";
11
+ import { useAutoScroll } from "../../internal/useAutoScroll.js";
12
+ import { JumpToLatestButton } from "../../internal/JumpToLatestButton.js";
13
+ import { BoundedContent } from "../../internal/BoundedContent.js";
14
+ import {
15
+ ThreadCardShell,
16
+ ThreadCardHeader,
17
+ ThreadCardBody,
18
+ SpinnerIcon,
19
+ ClockIcon,
20
+ CheckCircleIcon,
21
+ XCircleIcon,
22
+ DotIcon,
23
+ SlashCircleIcon,
24
+ } from "../../internal/thread-card/index.js";
25
+ import { formatMetaChips } from "../format-utils.js";
26
+ import type { UseWorkflowExecutionActionsReturn } from "../useWorkflowExecutionActions.js";
27
+ import { WorkflowApprovalList } from "../WorkflowApprovalList.js";
28
+ import { WorkflowFileReviewList } from "../WorkflowFileReviewList.js";
29
+ import { WorkflowTaskReviewGate } from "../WorkflowTaskReviewGate.js";
30
+ import { WorkflowTaskApprovalSummary } from "../WorkflowTaskApprovalSummary.js";
31
+ import { buildIO, type TaskDetailIO } from "../task-detail/task-detail-io.js";
32
+ import {
33
+ deriveTaskApprovalRequest,
34
+ deriveTaskApprovalDecision,
35
+ type TaskApprovalRequestView,
36
+ type TaskDetailApprovalDecision,
37
+ } from "../task-detail/task-approval.js";
38
+ import { StructuredDataViewer } from "../task-detail/StructuredDataViewer.js";
39
+ import { useWorkflowThreadItems } from "./useWorkflowThreadItems.js";
40
+ import type {
41
+ WorkflowThreadItem,
42
+ WorkflowThreadProgress,
43
+ } from "./project-thread-items.js";
44
+
45
+ /**
46
+ * The workflow-level HITL wiring a decision-capable thread needs — a `Pick`
47
+ * of the single `useWorkflowExecutionActions` instance's return (cannot
48
+ * drift; same convention as `WorkflowAgentExecutionHitl`). Covers all three
49
+ * gate kinds: child tool approvals, child file reviews, and task-level
50
+ * (human_input) approvals — since T06 the gating card is the ONLY decision
51
+ * surface, so the thread carries the full set. Decisions route through the
52
+ * WORKFLOW-level RPCs only — never the child's own `agentExecution.*` path,
53
+ * whose authorization checks the runner-spawned child rather than the
54
+ * workflow execution the operator owns (S5 rationale).
55
+ */
56
+ export type WorkflowThreadHitl = Pick<
57
+ UseWorkflowExecutionActionsReturn,
58
+ | "submitApproval"
59
+ | "approvalSubmittingToolCallIds"
60
+ | "approvalErrorsByToolCallId"
61
+ | "submitTaskApproval"
62
+ | "taskApprovalSubmittingTaskNames"
63
+ | "taskApprovalErrorsByTaskName"
64
+ | "submitFileDecision"
65
+ | "fileDecisionSubmittingKeys"
66
+ | "fileDecisionErrorsByKey"
67
+ >;
68
+
69
+ /**
70
+ * The pending gates surfaced for one task card's child agent execution —
71
+ * grouped once per thread render (memoized against the snapshot lists) so
72
+ * non-gating cards receive `undefined` and their `React.memo` bails hold.
73
+ */
74
+ interface ThreadTaskGates {
75
+ readonly approvals: readonly WorkflowPendingApproval[];
76
+ readonly fileReviews: readonly WorkflowPendingFileReview[];
77
+ }
78
+
79
+ /** Props for {@link WorkflowTaskThread}. */
80
+ export interface WorkflowTaskThreadProps {
81
+ /** Live derived task states from the execution event stream. */
82
+ readonly taskStates: ReadonlyMap<string, DerivedTaskState>;
83
+ /** Total planned tasks (from `execution_started`); `0` when unknown. */
84
+ readonly totalTasks: number;
85
+ /** Whether the execution is still running (drives streaming affordances). */
86
+ readonly isRunning: boolean;
87
+ /**
88
+ * Callback to open an AGENT_CALL task's child transcript in the panel's
89
+ * editor area (the S4 in-place expansion). Omitted → the affordance is
90
+ * not rendered.
91
+ */
92
+ readonly onOpenAgentExecution?: (
93
+ childExecutionId: string,
94
+ taskName: string,
95
+ ) => void;
96
+ /**
97
+ * Workflow-level HITL wiring (see {@link WorkflowThreadHitl}). When
98
+ * provided, a gating task's card renders its decision surface directly in
99
+ * the thread — always visible while the gate is pending, never behind the
100
+ * expand chevron (the run is blocked). Omitted → the thread is read-only
101
+ * and behaves exactly as before (DD-011; the S5 omitted-`hitl` precedent).
102
+ */
103
+ readonly hitl?: WorkflowThreadHitl;
104
+ /**
105
+ * The parent workflow's surfaced child tool-approval gates
106
+ * (`status.pending_approvals`). Only read when {@link hitl} is provided.
107
+ */
108
+ readonly pendingApprovals?: readonly WorkflowPendingApproval[];
109
+ /**
110
+ * The parent workflow's surfaced child file-review references
111
+ * (`status.pending_file_reviews`). Only read when {@link hitl} is provided.
112
+ */
113
+ readonly pendingFileReviews?: readonly WorkflowPendingFileReview[];
114
+ /**
115
+ * Per-task status snapshots (`status.tasks[]`) keyed by task name — the
116
+ * FULL I/O source for card bodies (T04), never an event-log scan
117
+ * (DD-T04-5). The map's identity changes only on a snapshot refetch
118
+ * (rare), never on stream event appends, so memoized cards keep bailing
119
+ * during streaming. Omitted → bodies degrade to the truncated event
120
+ * summaries already on the items.
121
+ */
122
+ readonly taskSnapshotsByName?: ReadonlyMap<string, WorkflowTask>;
123
+ /** Additional CSS class names for the root container. */
124
+ readonly className?: string;
125
+ }
126
+
127
+ /**
128
+ * Session-style task thread for a workflow execution: one card per task in
129
+ * execution order (first-started first — D-T02-1), streaming live as the
130
+ * run progresses, with a collapsed preview and an expandable detail body
131
+ * per card — the workflow analog of the session viewer's tool-call cards.
132
+ *
133
+ * Pending tasks render no cards (D-T02-5); the progress header keeps
134
+ * overall status visible. Retries collapse into one card with an attempt
135
+ * indicator (D-T02-6). AGENT_CALL cards carry an always-visible body with
136
+ * an "Open transcript" affordance (D-T02-2) — the full transcript opens as
137
+ * a panel document, never inline. Since T04 the card is the PRIMARY surface
138
+ * for a task's data (kind-aware preview line + bounded I/O body); since T06
139
+ * it is the ONLY one — the Inspect drill-down is gone, and cards compose
140
+ * the session card language exactly (expand-or-none headers, no selection).
141
+ *
142
+ * Auto-follow uses the session thread's mechanism: an IntersectionObserver
143
+ * sentinel keeps the list pinned to the latest card until the user scrolls
144
+ * up, with a jump-to-latest affordance to re-engage.
145
+ *
146
+ * With `hitl` wired, a gating task's card carries its decision surface
147
+ * in-thread (S10/T06): the canonical `ApprovalCard`s for child tool gates,
148
+ * the child-streaming `FileReviewCard`s for file gates, and the full
149
+ * `WorkflowTaskReviewGate` (custom review renderers included) for
150
+ * task-level human_input gates — with a read-only
151
+ * `WorkflowTaskApprovalSummary` once the gate resolves.
152
+ *
153
+ * This component is designed to work identically whether rendered in the
154
+ * Stigmer Console or embedded in a third-party dashboard. No dependencies
155
+ * on Console routing, auth, or layout context.
156
+ */
157
+ export const WorkflowTaskThread = memo(function WorkflowTaskThread({
158
+ taskStates,
159
+ totalTasks,
160
+ isRunning,
161
+ onOpenAgentExecution,
162
+ hitl,
163
+ pendingApprovals,
164
+ pendingFileReviews,
165
+ taskSnapshotsByName,
166
+ className,
167
+ }: WorkflowTaskThreadProps) {
168
+ const { items, progress } = useWorkflowThreadItems(taskStates, totalTasks);
169
+ const { scrollRef, sentinelRef, contentRef, isFollowing, jumpToLatest } =
170
+ useAutoScroll();
171
+
172
+ // Group the snapshot's gates by owning child ONCE per snapshot identity —
173
+ // the lists change only on a snapshot refetch, never on stream event
174
+ // appends, so during streaming every card's `gates` prop keeps a stable
175
+ // reference (`undefined` for non-gating cards) and memoized rows bail
176
+ // (DD-009/DD-010). Grouping is unconditional (it is cheap and usually
177
+ // empty); rendering is gated on `hitl` at the card.
178
+ const gatesByChild = useMemo((): ReadonlyMap<string, ThreadTaskGates> => {
179
+ const map = new Map<
180
+ string,
181
+ { approvals: WorkflowPendingApproval[]; fileReviews: WorkflowPendingFileReview[] }
182
+ >();
183
+ const bucket = (childId: string) => {
184
+ let entry = map.get(childId);
185
+ if (!entry) {
186
+ entry = { approvals: [], fileReviews: [] };
187
+ map.set(childId, entry);
188
+ }
189
+ return entry;
190
+ };
191
+ for (const pa of pendingApprovals ?? []) {
192
+ if (pa.childAgentExecutionId) bucket(pa.childAgentExecutionId).approvals.push(pa);
193
+ }
194
+ for (const ref of pendingFileReviews ?? []) {
195
+ if (ref.childAgentExecutionId) bucket(ref.childAgentExecutionId).fileReviews.push(ref);
196
+ }
197
+ return map;
198
+ }, [pendingApprovals, pendingFileReviews]);
199
+
200
+ return (
201
+ <div className={cn("relative flex h-full min-h-0 flex-col", className)}>
202
+ <ThreadProgressHeader progress={progress} isRunning={isRunning} />
203
+
204
+ <div ref={scrollRef} className="min-h-0 flex-1 overflow-y-auto">
205
+ <div
206
+ ref={contentRef}
207
+ className="mx-auto flex w-full max-w-3xl flex-col gap-2 px-4 py-4"
208
+ >
209
+ {items.length === 0 ? (
210
+ <ThreadEmptyState isRunning={isRunning} />
211
+ ) : (
212
+ items.map((item) => (
213
+ <ThreadTaskCard
214
+ key={item.taskName}
215
+ item={item}
216
+ onOpenAgentExecution={onOpenAgentExecution}
217
+ // HITL props reach ONLY gating cards (DD-010): the bundle's
218
+ // identity moves whenever any gate's in-flight/error state
219
+ // flips (fresh Set/Map fields), so handing it to every card
220
+ // would re-render the whole column per spinner tick. Scoped
221
+ // here, non-gating cards keep `undefined === undefined` and
222
+ // their memo bails hold.
223
+ hitl={item.status === "waiting_approval" ? hitl : undefined}
224
+ gates={
225
+ item.status === "waiting_approval" && item.childExecutionId
226
+ ? gatesByChild.get(item.childExecutionId)
227
+ : undefined
228
+ }
229
+ snapshot={taskSnapshotsByName?.get(item.taskName)}
230
+ />
231
+ ))
232
+ )}
233
+ <div ref={sentinelRef} aria-hidden="true" />
234
+ </div>
235
+ </div>
236
+
237
+ <JumpToLatestButton visible={!isFollowing} onClick={jumpToLatest} />
238
+ </div>
239
+ );
240
+ });
241
+
242
+ // ---------------------------------------------------------------------------
243
+ // Progress header
244
+ // ---------------------------------------------------------------------------
245
+
246
+ function ThreadProgressHeader({
247
+ progress,
248
+ isRunning,
249
+ }: {
250
+ readonly progress: WorkflowThreadProgress;
251
+ readonly isRunning: boolean;
252
+ }) {
253
+ const { settledTasks, activeTasks, totalTasks } = progress;
254
+ const settled =
255
+ totalTasks > 0
256
+ ? `${settledTasks} of ${totalTasks} tasks`
257
+ : `${settledTasks} ${settledTasks === 1 ? "task" : "tasks"}`;
258
+
259
+ return (
260
+ <div className="flex items-center gap-2 border-b border-border px-4 py-1.5 text-xs text-muted-foreground">
261
+ <span>{settled}</span>
262
+ {activeTasks > 0 && (
263
+ <span className="flex items-center gap-1.5">
264
+ <span
265
+ aria-hidden="true"
266
+ className={cn(
267
+ "size-1.5 rounded-full bg-primary",
268
+ isRunning && "animate-pulse",
269
+ )}
270
+ />
271
+ {activeTasks} active
272
+ </span>
273
+ )}
274
+ </div>
275
+ );
276
+ }
277
+
278
+ // ---------------------------------------------------------------------------
279
+ // Empty state
280
+ // ---------------------------------------------------------------------------
281
+
282
+ function ThreadEmptyState({ isRunning }: { readonly isRunning: boolean }) {
283
+ return (
284
+ <div role="status" className="px-4 py-10 text-center text-sm text-muted-foreground">
285
+ {isRunning
286
+ ? "Waiting for the first task to start…"
287
+ : "No task activity was recorded for this execution."}
288
+ </div>
289
+ );
290
+ }
291
+
292
+ // ---------------------------------------------------------------------------
293
+ // Task card
294
+ // ---------------------------------------------------------------------------
295
+
296
+ /**
297
+ * One task card. Memoized against the structurally-shared item (DD-010):
298
+ * during streaming only the actively-changing task's item gets a fresh
299
+ * identity, so settled cards bail here. `hitl`/`gates` arrive ONLY while
300
+ * this card is gating (the thread scopes them — see the render site), so
301
+ * gate-state churn (a decision's in-flight Set flip re-materializes the
302
+ * bundle) re-renders gating cards only, never the column. `snapshot`
303
+ * changes identity only on a snapshot refetch, never on stream appends.
304
+ * Expansion is local row state — expanding one card never re-renders its
305
+ * siblings.
306
+ *
307
+ * Disclosure (T04, the session `ToolCallItem` rule — "does the body carry
308
+ * content the one-line row cannot?"):
309
+ * - `"preview"` kinds render an ALWAYS-VISIBLE bounded output body (no
310
+ * card chevron — `BoundedContent` owns its own in-place reveal, so the
311
+ * old "expand, then Show more" double control never comes back).
312
+ * - `"summary"` kinds expand from the header — the session card's own
313
+ * gesture, the chevron appended by the shell (T06).
314
+ */
315
+ const ThreadTaskCard = memo(function ThreadTaskCard({
316
+ item,
317
+ onOpenAgentExecution,
318
+ hitl,
319
+ gates,
320
+ snapshot,
321
+ }: {
322
+ readonly item: WorkflowThreadItem;
323
+ readonly onOpenAgentExecution?: (
324
+ childExecutionId: string,
325
+ taskName: string,
326
+ ) => void;
327
+ readonly hitl?: WorkflowThreadHitl;
328
+ readonly gates?: ThreadTaskGates;
329
+ readonly snapshot?: WorkflowTask;
330
+ }) {
331
+ const [expanded, setExpanded] = useState(false);
332
+
333
+ // The I/O fallback ladder (full snapshot value → truncated event summary
334
+ // → nothing) — an O(1) lookup, never an event-log scan (T04).
335
+ const outputIO = useMemo(
336
+ () => buildIO(snapshot?.output, item.outputSummary, snapshot?.artifactIds ?? []),
337
+ [snapshot, item.outputSummary],
338
+ );
339
+ const inputIO = useMemo(
340
+ () => buildIO(snapshot?.input, item.inputSummary, []),
341
+ [snapshot, item.inputSummary],
342
+ );
343
+
344
+ // The human_input gate record (T06): the review material for a pending
345
+ // gate, the decision report for a resolved one. Memoized on the captured
346
+ // payloads' identities — the store keeps them reference-stable, so these
347
+ // recompute only when a gate opens/resolves or the snapshot refetches.
348
+ const approvalRequestView = useMemo(
349
+ () =>
350
+ item.approvalRequest
351
+ ? deriveTaskApprovalRequest(item.approvalRequest)
352
+ : null,
353
+ [item.approvalRequest],
354
+ );
355
+ const approvalDecision = useMemo(
356
+ () =>
357
+ item.approvalRequest
358
+ ? deriveTaskApprovalDecision(item.approvalResolution, snapshot?.output)
359
+ : null,
360
+ [item.approvalRequest, item.approvalResolution, snapshot],
361
+ );
362
+
363
+ const isPreview = item.disclosure === "preview";
364
+ const showHitl = !!hitl && item.status === "waiting_approval";
365
+ // While gating, the in-card HITL section owns the card's affordances
366
+ // (including "Open transcript" when the child's gates aren't surfaced) —
367
+ // the preview body must not render a duplicate.
368
+ const showBodyTranscript =
369
+ item.variant === "agent-call" &&
370
+ !!item.childExecutionId &&
371
+ !!onOpenAgentExecution &&
372
+ !showHitl;
373
+ // A resolved human_input gate presents its decision report in place of
374
+ // the raw output Struct (the output IS the decision record — the report
375
+ // is the readable rendering of it).
376
+ const showApprovalSummary =
377
+ !showHitl && approvalRequestView !== null && approvalDecision !== null;
378
+ // The session's `showBody` gate: a preview body renders only when it has
379
+ // content the header cannot carry (output, an error, the agent-call
380
+ // transcript affordance, or a gate's decision report) — a content-less
381
+ // preview card collapses back to a clean one-line row.
382
+ const showPreviewBody =
383
+ isPreview &&
384
+ (outputIO !== null ||
385
+ !!item.error ||
386
+ showBodyTranscript ||
387
+ showApprovalSummary);
388
+
389
+ const meta = formatMetaChips({
390
+ durationMs: item.durationMs,
391
+ costMicros: item.costMicros,
392
+ tokens: item.tokensUsed,
393
+ });
394
+ // Kind-aware one-liner resolved by `resolveTaskPreview` in the projection
395
+ // (T04) — a primitive on the item so this memoized card bails during
396
+ // streaming. The empty string means "nothing kind-specific to say".
397
+ const preview = item.previewLine || null;
398
+
399
+ return (
400
+ <ThreadCardShell
401
+ accent={item.status === "waiting_approval" ? "warning" : null}
402
+ cursorTarget="workflow-task-row"
403
+ >
404
+ {/* The session card's gestures exactly (T06): summary rows expand
405
+ from the header (chevron appended by the shell); preview rows'
406
+ bodies are always visible, so the header is a plain layout row. */}
407
+ <ThreadCardHeader
408
+ gesture={
409
+ isPreview
410
+ ? { kind: "none" }
411
+ : {
412
+ kind: "expand",
413
+ expanded,
414
+ onToggle: () => setExpanded((v) => !v),
415
+ }
416
+ }
417
+ >
418
+ <StatusGlyph status={item.status} />
419
+ <span className="min-w-0 flex-1 flex items-baseline gap-1.5 overflow-hidden">
420
+ <span className="shrink-0 font-medium text-foreground">
421
+ {item.taskName}
422
+ </span>
423
+ {item.kindLabel && (
424
+ <span className="shrink-0 rounded border border-border px-1 py-px text-[10px] uppercase tracking-wide text-muted-foreground">
425
+ {item.kindLabel}
426
+ </span>
427
+ )}
428
+ {item.attemptNumber > 1 && (
429
+ <span className="shrink-0 text-muted-foreground">
430
+ attempt {item.attemptNumber}
431
+ </span>
432
+ )}
433
+ {preview && (
434
+ <span className="min-w-0 truncate text-muted-foreground">
435
+ {preview}
436
+ </span>
437
+ )}
438
+ </span>
439
+
440
+ {meta && (
441
+ <span className="shrink-0 tabular-nums text-muted-foreground">
442
+ {meta}
443
+ </span>
444
+ )}
445
+ </ThreadCardHeader>
446
+
447
+ {/* In-thread HITL (S10): the decision surface renders whenever the
448
+ task is gating — ALWAYS visible, never behind the expand chevron
449
+ (the run is blocked; Nielsen #1). */}
450
+ {showHitl && hitl && (
451
+ <ThreadCardBody>
452
+ <ThreadTaskCardHitl
453
+ item={item}
454
+ gates={gates}
455
+ hitl={hitl}
456
+ approvalRequestView={approvalRequestView}
457
+ onOpenAgentExecution={onOpenAgentExecution}
458
+ />
459
+ </ThreadCardBody>
460
+ )}
461
+
462
+ {/* Always-visible bounded output body for I/O-bearing kinds (T04) —
463
+ the session's preview-card model. */}
464
+ {showPreviewBody && (
465
+ <ThreadCardBody cursorTarget="task-preview">
466
+ <ThreadTaskPreviewBody
467
+ item={item}
468
+ outputIO={outputIO}
469
+ approvalSummary={
470
+ showApprovalSummary && approvalRequestView
471
+ ? {
472
+ request: approvalRequestView,
473
+ decision: approvalDecision,
474
+ }
475
+ : undefined
476
+ }
477
+ onOpenAgentExecution={
478
+ showBodyTranscript ? onOpenAgentExecution : undefined
479
+ }
480
+ />
481
+ </ThreadCardBody>
482
+ )}
483
+
484
+ {!isPreview && expanded && (
485
+ <ThreadCardBody>
486
+ <ThreadTaskDetail
487
+ item={item}
488
+ inputIO={inputIO}
489
+ outputIO={outputIO}
490
+ onOpenAgentExecution={onOpenAgentExecution}
491
+ />
492
+ </ThreadCardBody>
493
+ )}
494
+ </ThreadCardShell>
495
+ );
496
+ });
497
+
498
+ // ---------------------------------------------------------------------------
499
+ // In-thread HITL section (S10)
500
+ // ---------------------------------------------------------------------------
501
+
502
+ /**
503
+ * The decision surface on a gating card, resolved by gate kind:
504
+ *
505
+ * 1. Child gates surfaced on the parent snapshot → the shipped lists
506
+ * (`WorkflowApprovalList` for tool approvals, `WorkflowFileReviewList`
507
+ * for file reviews), filtered to this card's child. Decisions route
508
+ * through the workflow-level RPCs on the supplied {@link
509
+ * WorkflowThreadHitl} bundle.
510
+ * 2. An AGENT_CALL card with NO surfaced gates → the child is gated but the
511
+ * snapshot has no entries: on cloud a brief refetch window; on OSS the
512
+ * steady state until the T04 forwarder lands. The honest surface is the
513
+ * child's own transcript (the S5 in-place expansion renders the child's
514
+ * ApprovalCards) — offer it, never a dead-end spinner.
515
+ * 3. Any other gating card → a task-level (human_input) gate. The full
516
+ * review surface — outcomes, forms, artifact-backed payloads, custom
517
+ * review renderers — renders right here (T06): the card is the only
518
+ * decision surface, so it carries the real `WorkflowTaskReviewGate`,
519
+ * not a link to one. Degrades to an honest waiting notice when the
520
+ * request payload is unavailable (no event stream — the snapshot
521
+ * fallback path).
522
+ */
523
+ function ThreadTaskCardHitl({
524
+ item,
525
+ gates,
526
+ hitl,
527
+ approvalRequestView,
528
+ onOpenAgentExecution,
529
+ }: {
530
+ readonly item: WorkflowThreadItem;
531
+ readonly gates?: ThreadTaskGates;
532
+ readonly hitl: WorkflowThreadHitl;
533
+ readonly approvalRequestView: TaskApprovalRequestView | null;
534
+ readonly onOpenAgentExecution?: (
535
+ childExecutionId: string,
536
+ taskName: string,
537
+ ) => void;
538
+ }) {
539
+ const hasChildGates =
540
+ !!gates && (gates.approvals.length > 0 || gates.fileReviews.length > 0);
541
+
542
+ if (hasChildGates) {
543
+ return (
544
+ <div className="flex flex-col gap-3">
545
+ {gates.approvals.length > 0 && (
546
+ <WorkflowApprovalList
547
+ pendingApprovals={gates.approvals}
548
+ onSubmitApproval={hitl.submitApproval}
549
+ submittingToolCallIds={hitl.approvalSubmittingToolCallIds}
550
+ approvalErrors={hitl.approvalErrorsByToolCallId}
551
+ />
552
+ )}
553
+ {gates.fileReviews.length > 0 && (
554
+ <WorkflowFileReviewList
555
+ pendingFileReviews={gates.fileReviews}
556
+ onSubmitFileDecision={hitl.submitFileDecision}
557
+ submittingDecisionKeys={hitl.fileDecisionSubmittingKeys}
558
+ decisionErrors={hitl.fileDecisionErrorsByKey}
559
+ />
560
+ )}
561
+ </div>
562
+ );
563
+ }
564
+
565
+ if (item.variant === "agent-call") {
566
+ return (
567
+ <div className="flex flex-wrap items-center gap-2">
568
+ <p className="text-xs text-muted-foreground">
569
+ The called agent is waiting for an approval. Decide it in the
570
+ agent&apos;s transcript.
571
+ </p>
572
+ {item.childExecutionId && onOpenAgentExecution && (
573
+ <ThreadActionButton
574
+ label="Open transcript"
575
+ onClick={() =>
576
+ onOpenAgentExecution(item.childExecutionId, item.taskName)
577
+ }
578
+ />
579
+ )}
580
+ </div>
581
+ );
582
+ }
583
+
584
+ if (approvalRequestView) {
585
+ return (
586
+ <WorkflowTaskReviewGate
587
+ taskName={item.taskName}
588
+ prompt={approvalRequestView.prompt}
589
+ outcomes={approvalRequestView.outcomes}
590
+ formSchema={approvalRequestView.formSchema ?? undefined}
591
+ payload={approvalRequestView.payload}
592
+ uiHint={approvalRequestView.uiHint}
593
+ payloadArtifactId={approvalRequestView.payloadArtifactId}
594
+ onSubmit={hitl.submitTaskApproval}
595
+ isSubmitting={hitl.taskApprovalSubmittingTaskNames.has(item.taskName)}
596
+ error={hitl.taskApprovalErrorsByTaskName.get(item.taskName) ?? null}
597
+ />
598
+ );
599
+ }
600
+
601
+ // No captured request payload (event stream unavailable) — state the
602
+ // block honestly rather than rendering a gate with no material.
603
+ return (
604
+ <p className="text-xs text-muted-foreground">
605
+ Review required to continue this run.
606
+ </p>
607
+ );
608
+ }
609
+
610
+ function ThreadActionButton({
611
+ label,
612
+ onClick,
613
+ }: {
614
+ readonly label: string;
615
+ readonly onClick: () => void;
616
+ }) {
617
+ return (
618
+ <button
619
+ type="button"
620
+ onClick={onClick}
621
+ className="shrink-0 rounded border border-border px-2 py-1 text-xs font-medium text-foreground hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
622
+ >
623
+ {label}
624
+ </button>
625
+ );
626
+ }
627
+
628
+ // ---------------------------------------------------------------------------
629
+ // Card bodies (T04)
630
+ // ---------------------------------------------------------------------------
631
+
632
+ /**
633
+ * One side of a task's I/O in the card, honest about provenance: the
634
+ * event-summary rung of the fallback ladder carries the same truncation
635
+ * banner Inspect uses. Bounded — the outer `BoundedContent` caps total
636
+ * height (single-level with `StructuredDataViewer`'s per-value reveals:
637
+ * different granularity, they never govern the same block).
638
+ */
639
+ function ThreadTaskIOSection({
640
+ label,
641
+ io,
642
+ }: {
643
+ readonly label: "Input" | "Output";
644
+ readonly io: TaskDetailIO;
645
+ }) {
646
+ return (
647
+ <div className="flex flex-col gap-1">
648
+ <span className="text-[10px] font-medium uppercase tracking-wide text-muted-foreground">
649
+ {label}
650
+ </span>
651
+ {io.source === "event-summary" && (
652
+ <p className="text-[10px] text-muted-foreground">
653
+ Showing truncated summary from the event log. Full data appears when
654
+ the run's snapshot is available.
655
+ </p>
656
+ )}
657
+ <BoundedContent>
658
+ <StructuredDataViewer data={io.data} />
659
+ </BoundedContent>
660
+ </div>
661
+ );
662
+ }
663
+
664
+ /**
665
+ * The always-visible body of a `"preview"`-kind card: the task's output
666
+ * (via the I/O fallback ladder), the failure detail when the task failed,
667
+ * and the agent-call transcript affordance. Content only — the header owns
668
+ * all metadata (session `ToolCallDetail` invariant).
669
+ *
670
+ * A resolved human_input gate supplies `approvalSummary` and gets the
671
+ * read-only decision report instead of the raw output Struct — the output
672
+ * IS the decision record, and the report is its readable rendering (T06).
673
+ */
674
+ function ThreadTaskPreviewBody({
675
+ item,
676
+ outputIO,
677
+ approvalSummary,
678
+ onOpenAgentExecution,
679
+ }: {
680
+ readonly item: WorkflowThreadItem;
681
+ readonly outputIO: TaskDetailIO | null;
682
+ readonly approvalSummary?: {
683
+ readonly request: TaskApprovalRequestView;
684
+ readonly decision: TaskDetailApprovalDecision | null;
685
+ };
686
+ readonly onOpenAgentExecution?: (
687
+ childExecutionId: string,
688
+ taskName: string,
689
+ ) => void;
690
+ }) {
691
+ return (
692
+ <div className="flex flex-col gap-2">
693
+ {item.error && (
694
+ <BoundedContent>
695
+ <pre className="whitespace-pre-wrap break-words text-xs text-destructive">
696
+ {item.error}
697
+ </pre>
698
+ </BoundedContent>
699
+ )}
700
+
701
+ {approvalSummary ? (
702
+ <WorkflowTaskApprovalSummary
703
+ taskName={item.taskName}
704
+ prompt={approvalSummary.request.prompt}
705
+ outcomes={approvalSummary.request.outcomes}
706
+ decision={approvalSummary.decision}
707
+ />
708
+ ) : (
709
+ outputIO && <ThreadTaskIOSection label="Output" io={outputIO} />
710
+ )}
711
+
712
+ {item.variant === "agent-call" &&
713
+ item.childExecutionId &&
714
+ onOpenAgentExecution && (
715
+ <div>
716
+ <ThreadActionButton
717
+ label="Open transcript"
718
+ onClick={() =>
719
+ onOpenAgentExecution(item.childExecutionId, item.taskName)
720
+ }
721
+ />
722
+ </div>
723
+ )}
724
+ </div>
725
+ );
726
+ }
727
+
728
+ function ThreadTaskDetail({
729
+ item,
730
+ inputIO,
731
+ outputIO,
732
+ onOpenAgentExecution,
733
+ }: {
734
+ readonly item: WorkflowThreadItem;
735
+ readonly inputIO: TaskDetailIO | null;
736
+ readonly outputIO: TaskDetailIO | null;
737
+ readonly onOpenAgentExecution?: (
738
+ childExecutionId: string,
739
+ taskName: string,
740
+ ) => void;
741
+ }) {
742
+ const rows: Array<[string, string]> = [["Status", statusLabel(item.status)]];
743
+ if (item.durationMs > 0) {
744
+ rows.push(["Duration", formatMetaChips({ durationMs: item.durationMs }) ?? ""]);
745
+ }
746
+ if (item.attemptNumber > 1) rows.push(["Attempt", String(item.attemptNumber)]);
747
+ const costChip = formatMetaChips({
748
+ costMicros: item.costMicros,
749
+ tokens: item.tokensUsed,
750
+ });
751
+ if (costChip) rows.push(["Usage", costChip]);
752
+ if (item.variant === "agent-call" && item.agentSlug) {
753
+ rows.push(["Agent", item.agentSlug]);
754
+ }
755
+
756
+ return (
757
+ <div className="flex flex-col gap-2">
758
+ <dl className="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-xs">
759
+ {rows.map(([label, value]) => (
760
+ <div key={label} className="contents">
761
+ <dt className="text-muted-foreground">{label}</dt>
762
+ <dd className="text-foreground">{value}</dd>
763
+ </div>
764
+ ))}
765
+ </dl>
766
+
767
+ {item.error && (
768
+ <BoundedContent>
769
+ <pre className="whitespace-pre-wrap break-words text-xs text-destructive">
770
+ {item.error}
771
+ </pre>
772
+ </BoundedContent>
773
+ )}
774
+
775
+ {/* The task's I/O in the thread (T04) — all task detail belongs to
776
+ the card; Inspect is the opt-in debug drill-down. */}
777
+ {inputIO && <ThreadTaskIOSection label="Input" io={inputIO} />}
778
+ {outputIO && <ThreadTaskIOSection label="Output" io={outputIO} />}
779
+
780
+ {item.variant === "agent-call" &&
781
+ item.childExecutionId &&
782
+ onOpenAgentExecution && (
783
+ <div>
784
+ <ThreadActionButton
785
+ label="Open transcript"
786
+ onClick={() =>
787
+ onOpenAgentExecution(item.childExecutionId, item.taskName)
788
+ }
789
+ />
790
+ </div>
791
+ )}
792
+ </div>
793
+ );
794
+ }
795
+
796
+ function statusLabel(status: WorkflowThreadItem["status"]): string {
797
+ switch (status) {
798
+ case "waiting_approval":
799
+ return "Waiting for approval";
800
+ case "retrying":
801
+ return "Retrying";
802
+ case "running":
803
+ return "Running";
804
+ case "completed":
805
+ return "Completed";
806
+ case "failed":
807
+ return "Failed";
808
+ case "skipped":
809
+ return "Skipped";
810
+ case "pending":
811
+ return "Pending";
812
+ }
813
+ }
814
+
815
+ // ---------------------------------------------------------------------------
816
+ // Status glyph — the shared thread-card set, colored by status token (T05)
817
+ // ---------------------------------------------------------------------------
818
+
819
+ /**
820
+ * Maps a task's derived status onto the shared glyph vocabulary the session
821
+ * tool card uses (`internal/thread-card/glyphs`), colored strictly through
822
+ * status token classes — the old dot set's hardcoded hex fallbacks were a
823
+ * Dont-Do #3 violation and died with it.
824
+ */
825
+ const STATUS_GLYPH: Record<
826
+ WorkflowThreadItem["status"],
827
+ { readonly Icon: () => React.JSX.Element; readonly color: string }
828
+ > = {
829
+ running: { Icon: SpinnerIcon, color: "text-foreground" },
830
+ retrying: { Icon: SpinnerIcon, color: "text-warning" },
831
+ waiting_approval: { Icon: ClockIcon, color: "text-warning" },
832
+ completed: { Icon: CheckCircleIcon, color: "text-success" },
833
+ failed: { Icon: XCircleIcon, color: "text-destructive" },
834
+ skipped: { Icon: SlashCircleIcon, color: "text-muted-foreground" },
835
+ pending: { Icon: DotIcon, color: "text-muted-foreground" },
836
+ };
837
+
838
+ function StatusGlyph({ status }: { readonly status: WorkflowThreadItem["status"] }) {
839
+ const { Icon, color } = STATUS_GLYPH[status];
840
+ return (
841
+ <span className={cn("shrink-0", color)} aria-hidden="true">
842
+ <Icon />
843
+ </span>
844
+ );
845
+ }