@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,632 @@
1
+ // Composition test for the reconciled single-panel layout (T06 shape): the
2
+ // thread-primary center with the passive graph behind the toggle, the
3
+ // workspace-only side panel (Artifacts/Changes/Usage — no Inspect facet
4
+ // anywhere), the header's Diagnose button to the diagnosis editor document,
5
+ // and the Usage facet's absorbed budget gauge. Data hooks and heavy leaves
6
+ // (React Flow graph, streaming repair card) are mocked — each has its own
7
+ // suite; this file proves the seams between them.
8
+
9
+ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
10
+ import { render, screen, fireEvent, cleanup } from "@testing-library/react";
11
+ import { create } from "@bufbuild/protobuf";
12
+ import { WorkflowExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
13
+ import { ApprovalRequestedPayloadSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
14
+ import {
15
+ ExecutionPhase,
16
+ WorkflowTaskStatus,
17
+ } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
18
+ import type {
19
+ DerivedCostSummary,
20
+ DerivedTaskState,
21
+ } from "../../internal/store/workflow-execution-event-store";
22
+ import { useWorkflowExecution } from "../useWorkflowExecution";
23
+ import { useWorkflowExecutionEventStream } from "../useWorkflowExecutionEventStream";
24
+ import { useWorkflowExecutionArtifacts } from "../useWorkflowExecutionArtifacts";
25
+ import { useWorkflowExecutionFileChanges } from "../useWorkflowExecutionFileChanges";
26
+ import { useWorkflowExecutionActions } from "../useWorkflowExecutionActions";
27
+ import { WorkflowExecutionViewer } from "../WorkflowExecutionViewer";
28
+
29
+ vi.mock("../useWorkflowExecution", () => ({
30
+ useWorkflowExecution: vi.fn(),
31
+ }));
32
+ vi.mock("../useWorkflowExecutionEventStream", () => ({
33
+ useWorkflowExecutionEventStream: vi.fn(),
34
+ }));
35
+ vi.mock("../useWorkflowExecutionArtifacts", () => ({
36
+ useWorkflowExecutionArtifacts: vi.fn(),
37
+ }));
38
+ vi.mock("../useWorkflowExecutionFileChanges", () => ({
39
+ useWorkflowExecutionFileChanges: vi.fn(),
40
+ }));
41
+ vi.mock("../useWorkflowExecutionActions", () => ({
42
+ useWorkflowExecutionActions: vi.fn(),
43
+ }));
44
+
45
+ // The graph is React Flow — replaced with a memoized stub whose render
46
+ // counter is the DD-009 probe: if the viewer hands the graph a fresh prop
47
+ // identity on panel interactions (e.g. an inline handler), the memo stops
48
+ // bailing and the counter catches it. Since T06 the graph is a passive
49
+ // visualization — the stub records its props so the suite can assert no
50
+ // selection callback is ever wired.
51
+ const graphRenders = { count: 0 };
52
+ const graphProps = { last: {} as Record<string, unknown> };
53
+ vi.mock("../WorkflowExecutionGraph", async () => {
54
+ const { memo } = await import("react");
55
+ return {
56
+ WorkflowExecutionGraph: memo(function WorkflowExecutionGraphStub(
57
+ props: Record<string, unknown>,
58
+ ) {
59
+ graphRenders.count += 1;
60
+ graphProps.last = props;
61
+ return <div data-testid="graph-stub" />;
62
+ }),
63
+ };
64
+ });
65
+
66
+ // The diagnosis conversation streams; the seam under test is only that the
67
+ // viewer mounts it as the diagnosis document and routes its onClose.
68
+ vi.mock("../WorkflowRepairCard", () => ({
69
+ WorkflowRepairCard: ({ onClose }: { onClose?: () => void }) => (
70
+ <div data-testid="repair-card-stub">
71
+ <button type="button" onClick={onClose}>
72
+ close-diagnosis
73
+ </button>
74
+ </div>
75
+ ),
76
+ }));
77
+
78
+ vi.mock("../execution-comparison/ExecutionComparisonPicker", () => ({
79
+ ExecutionComparisonPicker: () => null,
80
+ }));
81
+
82
+ // The child transcript document fetches and streams (its own suite covers
83
+ // that); here it only proves the thread's "Open transcript" reaches the
84
+ // panel's editor area with the right identity.
85
+ vi.mock("../WorkflowAgentExecutionDocument", () => ({
86
+ WorkflowAgentExecutionDocument: ({
87
+ childExecutionId,
88
+ taskName,
89
+ }: {
90
+ childExecutionId: string;
91
+ taskName: string;
92
+ }) => (
93
+ <div data-testid="agent-doc-stub">
94
+ {childExecutionId}:{taskName}
95
+ </div>
96
+ ),
97
+ }));
98
+
99
+ const mockedUseWorkflowExecution = vi.mocked(useWorkflowExecution);
100
+ const mockedUseEventStream = vi.mocked(useWorkflowExecutionEventStream);
101
+ const mockedUseArtifacts = vi.mocked(useWorkflowExecutionArtifacts);
102
+ const mockedUseFileChanges = vi.mocked(useWorkflowExecutionFileChanges);
103
+ const mockedUseActions = vi.mocked(useWorkflowExecutionActions);
104
+
105
+ function makeExecution(phase: ExecutionPhase) {
106
+ return create(WorkflowExecutionSchema, {
107
+ metadata: { id: "wex_1", name: "nightly-report" },
108
+ spec: { workflowId: "wf_1" },
109
+ status: {
110
+ phase,
111
+ startedAt: "2026-07-15T00:00:00Z",
112
+ completedAt: "2026-07-15T00:01:00Z",
113
+ tasks: [
114
+ {
115
+ taskName: "build-report",
116
+ status: WorkflowTaskStatus.WORKFLOW_TASK_COMPLETED,
117
+ startedAt: "2026-07-15T00:00:00Z",
118
+ completedAt: "2026-07-15T00:00:30Z",
119
+ },
120
+ ],
121
+ },
122
+ });
123
+ }
124
+
125
+ const COST_SUMMARY: DerivedCostSummary = {
126
+ costConsumedMicros: 500_000n,
127
+ costRemainingMicros: 500_000n, // limit known → the absorbed gauge renders
128
+ tokensConsumed: 1_000n,
129
+ tokensRemaining: -1n, // no token limit → no token gauge
130
+ thresholdBreached: false,
131
+ };
132
+
133
+ function taskState(name: string): DerivedTaskState {
134
+ return {
135
+ taskName: name,
136
+ taskKind: 0,
137
+ status: "completed",
138
+ durationMs: 30_000,
139
+ costMicros: 500_000n,
140
+ tokensUsed: 1_000n,
141
+ attemptNumber: 1,
142
+ error: "",
143
+ childExecutionId: "",
144
+ agentSlug: "",
145
+ currentToolName: "",
146
+ messagesCount: 0,
147
+ toolCallsCount: 0,
148
+ inputSummary: null,
149
+ outputSummary: null,
150
+ approvalRequest: null,
151
+ approvalResolution: null,
152
+ } as DerivedTaskState;
153
+ }
154
+
155
+ function mockActions() {
156
+ return {
157
+ cancel: vi.fn(),
158
+ terminate: vi.fn(),
159
+ pause: vi.fn(),
160
+ resume: vi.fn(),
161
+ recover: vi.fn(),
162
+ submitApproval: vi.fn(),
163
+ submitTaskApproval: vi.fn(),
164
+ submitFileDecision: vi.fn(),
165
+ isSubmitting: false,
166
+ error: null,
167
+ clearError: vi.fn(),
168
+ approvalSubmittingToolCallIds: new Set<string>(),
169
+ approvalErrorsByToolCallId: new Map<string, Error>(),
170
+ taskApprovalSubmittingTaskNames: new Set<string>(),
171
+ taskApprovalErrorsByTaskName: new Map<string, Error>(),
172
+ fileDecisionSubmittingKeys: new Set<string>(),
173
+ fileDecisionErrorsByKey: new Map<string, Error>(),
174
+ } as unknown as ReturnType<typeof useWorkflowExecutionActions>;
175
+ }
176
+
177
+ function arrange(phase: ExecutionPhase = ExecutionPhase.EXECUTION_COMPLETED) {
178
+ const refetch = vi.fn();
179
+ mockedUseWorkflowExecution.mockReturnValue({
180
+ execution: makeExecution(phase),
181
+ isLoading: false,
182
+ error: null,
183
+ refetch,
184
+ } as unknown as ReturnType<typeof useWorkflowExecution>);
185
+ mockedUseEventStream.mockReturnValue({
186
+ events: [],
187
+ taskStates: new Map([["build-report", taskState("build-report")]]),
188
+ costSummary: COST_SUMMARY,
189
+ streamState: { stage: "complete" },
190
+ totalTasks: 1,
191
+ error: null,
192
+ reconnect: vi.fn(),
193
+ } as unknown as ReturnType<typeof useWorkflowExecutionEventStream>);
194
+ mockedUseArtifacts.mockReturnValue({
195
+ artifacts: [],
196
+ } as unknown as ReturnType<typeof useWorkflowExecutionArtifacts>);
197
+ mockedUseFileChanges.mockReturnValue({
198
+ fileChanges: [],
199
+ fileChangeCount: 0,
200
+ isLoading: false,
201
+ isRefetching: false,
202
+ error: null,
203
+ refetch: vi.fn(),
204
+ });
205
+ mockedUseActions.mockReturnValue(mockActions());
206
+ return { refetch };
207
+ }
208
+
209
+ function renderViewer(props?: { org?: string }) {
210
+ return render(
211
+ <WorkflowExecutionViewer executionId="wex_1" org={props?.org} />,
212
+ );
213
+ }
214
+
215
+ describe("WorkflowExecutionViewer (reconciled single-panel layout)", () => {
216
+ beforeEach(() => {
217
+ // The center view persists to localStorage — isolate tests from each
218
+ // other (and from ResizableSplit's persisted widths).
219
+ localStorage.clear();
220
+ arrange();
221
+ });
222
+ afterEach(cleanup);
223
+
224
+ it("starts two-column: center column with the panel collapsed to the chip, no inspector aside", () => {
225
+ renderViewer();
226
+ // Both center views are mounted (the inactive one CSS-hidden).
227
+ expect(screen.getByTestId("graph-stub")).toBeTruthy();
228
+ // The retired aside's empty-state hint must be gone.
229
+ expect(
230
+ screen.queryByText("Click a node to view execution details"),
231
+ ).toBeNull();
232
+ });
233
+
234
+ it("carries no bottom drawer — Waterfall, Events, and Approvals tabs are retired (S9)", () => {
235
+ renderViewer();
236
+ expect(screen.queryByRole("button", { name: "Waterfall" })).toBeNull();
237
+ expect(screen.queryByRole("button", { name: /^Events/ })).toBeNull();
238
+ expect(screen.queryByRole("button", { name: /^Approvals/ })).toBeNull();
239
+ });
240
+
241
+ it("wires no selection callbacks into the graph — a passive visualization (T06)", () => {
242
+ renderViewer();
243
+ expect("onTaskSelect" in graphProps.last).toBe(false);
244
+ expect("onAutoSelectTask" in graphProps.last).toBe(false);
245
+ });
246
+
247
+ it("the open panel offers exactly Artifacts, Changes, and Usage — no Inspect facet exists (T06)", () => {
248
+ renderViewer();
249
+
250
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
251
+
252
+ expect(screen.getByRole("radio", { name: "Artifacts" })).toBeTruthy();
253
+ expect(screen.getByRole("radio", { name: "Changes" })).toBeTruthy();
254
+ expect(screen.getByRole("radio", { name: "Usage" })).toBeTruthy();
255
+ expect(screen.queryByRole("radio", { name: "Inspect" })).toBeNull();
256
+ });
257
+
258
+ it("Diagnose opens the diagnosis document in the panel's editor area; its close button closes the tab", () => {
259
+ arrange(ExecutionPhase.EXECUTION_FAILED);
260
+ renderViewer({ org: "acme" });
261
+
262
+ fireEvent.click(screen.getByRole("button", { name: "Diagnose" }));
263
+
264
+ expect(screen.getByTestId("repair-card-stub")).toBeTruthy();
265
+ expect(screen.getByRole("tab", { name: /AI Diagnosis/ })).toBeTruthy();
266
+
267
+ fireEvent.click(screen.getByRole("button", { name: "close-diagnosis" }));
268
+ expect(screen.queryByTestId("repair-card-stub")).toBeNull();
269
+ expect(screen.queryByRole("tab", { name: /AI Diagnosis/ })).toBeNull();
270
+ });
271
+
272
+ it("Diagnose is idempotent — a re-click focuses the one diagnosis tab", () => {
273
+ arrange(ExecutionPhase.EXECUTION_FAILED);
274
+ renderViewer({ org: "acme" });
275
+
276
+ fireEvent.click(screen.getByRole("button", { name: "Diagnose" }));
277
+ fireEvent.click(screen.getByRole("button", { name: "Diagnose" }));
278
+
279
+ expect(screen.getAllByRole("tab", { name: /AI Diagnosis/ })).toHaveLength(
280
+ 1,
281
+ );
282
+ });
283
+
284
+ it("the Usage facet carries the absorbed budget gauge (the retired cost panel's bars)", () => {
285
+ renderViewer();
286
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
287
+ fireEvent.click(screen.getByRole("radio", { name: "Usage" }));
288
+
289
+ // Cost limit known (remaining >= 0) → one gauge at 50%.
290
+ const gauge = screen.getByRole("progressbar");
291
+ expect(gauge.getAttribute("aria-valuenow")).toBe("50");
292
+ expect(screen.getByText("50%")).toBeTruthy();
293
+ });
294
+
295
+ it("panel interactions never re-render the graph (DD-009/DD-010)", () => {
296
+ renderViewer();
297
+ const rendersAfterMount = graphRenders.count;
298
+
299
+ // Panel open → facet switch → collapse.
300
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
301
+ fireEvent.click(screen.getByRole("radio", { name: "Usage" }));
302
+ fireEvent.click(screen.getByRole("button", { name: "Hide panel" }));
303
+
304
+ expect(graphRenders.count).toBe(rendersAfterMount);
305
+ });
306
+ });
307
+
308
+ // ---------------------------------------------------------------------------
309
+ // S9: center-column Thread | Graph toggle (thread is primary)
310
+ // ---------------------------------------------------------------------------
311
+
312
+ describe("WorkflowExecutionViewer (center-column Thread|Graph toggle, S9)", () => {
313
+ beforeEach(() => {
314
+ localStorage.clear();
315
+ arrange();
316
+ });
317
+ afterEach(cleanup);
318
+
319
+ function centerWrappers(container: HTMLElement) {
320
+ const graph = container.querySelector('[data-center-view="graph"]');
321
+ const thread = container.querySelector('[data-center-view="thread"]');
322
+ if (!graph || !thread) throw new Error("center view wrappers missing");
323
+ return { graph, thread };
324
+ }
325
+
326
+ it("defaults to Thread with the graph mounted but CSS-hidden", () => {
327
+ const { container } = renderViewer();
328
+ const { graph, thread } = centerWrappers(container);
329
+
330
+ expect(thread.classList.contains("hidden")).toBe(false);
331
+ expect(graph.classList.contains("hidden")).toBe(true);
332
+ // Mounted, never conditionally rendered (DD-009).
333
+ expect(screen.getByTestId("graph-stub")).toBeTruthy();
334
+ expect(
335
+ screen
336
+ .getByRole("radio", { name: "Thread" })
337
+ .getAttribute("aria-checked"),
338
+ ).toBe("true");
339
+ });
340
+
341
+ it("a stored S8 (unversioned) preference is abandoned — the pivot's one-time reset", () => {
342
+ localStorage.setItem("stgm-wf-exec-center-view", "graph");
343
+ const { container } = renderViewer();
344
+
345
+ const { thread } = centerWrappers(container);
346
+ expect(thread.classList.contains("hidden")).toBe(false);
347
+ // The legacy key is cleaned up on mount.
348
+ expect(localStorage.getItem("stgm-wf-exec-center-view")).toBeNull();
349
+ });
350
+
351
+ it("toggling to Graph reveals the graph, hides (never unmounts) the thread, and persists the v2 key", () => {
352
+ const { container } = renderViewer();
353
+
354
+ fireEvent.click(screen.getByRole("radio", { name: "Graph" }));
355
+
356
+ const { graph, thread } = centerWrappers(container);
357
+ expect(graph.classList.contains("hidden")).toBe(false);
358
+ expect(thread.classList.contains("hidden")).toBe(true);
359
+ expect(localStorage.getItem("stgm-wf-exec-center-view.v2")).toBe("graph");
360
+ });
361
+
362
+ it("a persisted v2 Graph choice is respected on the next mount", () => {
363
+ localStorage.setItem("stgm-wf-exec-center-view.v2", "graph");
364
+ const { container } = renderViewer();
365
+
366
+ const { graph } = centerWrappers(container);
367
+ expect(graph.classList.contains("hidden")).toBe(false);
368
+ expect(
369
+ screen.getByRole("radio", { name: "Graph" }).getAttribute("aria-checked"),
370
+ ).toBe("true");
371
+ });
372
+
373
+ it("toggling views never re-renders the settled graph (DD-009)", () => {
374
+ renderViewer();
375
+ const rendersAfterMount = graphRenders.count;
376
+
377
+ fireEvent.click(screen.getByRole("radio", { name: "Graph" }));
378
+ fireEvent.click(screen.getByRole("radio", { name: "Thread" }));
379
+
380
+ expect(graphRenders.count).toBe(rendersAfterMount);
381
+ });
382
+
383
+ it("a thread card offers no selection or drill-down gesture — the card IS the surface (T06)", () => {
384
+ renderViewer();
385
+
386
+ // build-report has kind 0 (unspecified → summary disclosure): its header
387
+ // is the expand gesture, never a selection.
388
+ const header = screen.getByRole("button", { name: /^build-report/ });
389
+ expect(header.getAttribute("aria-expanded")).toBe("false");
390
+ expect(header.getAttribute("aria-pressed")).toBeNull();
391
+ expect(
392
+ screen.queryByRole("button", { name: "Inspect build-report" }),
393
+ ).toBeNull();
394
+
395
+ fireEvent.click(header);
396
+
397
+ // Expansion is card-local; the panel never opens on a card gesture.
398
+ expect(header.getAttribute("aria-expanded")).toBe("true");
399
+ expect(screen.queryByRole("radio", { name: "Inspect" })).toBeNull();
400
+ });
401
+
402
+ it("a gating human_input renders its review form ON the card — the viewer threads the task-approval wiring (T06)", () => {
403
+ arrange(ExecutionPhase.EXECUTION_IN_PROGRESS);
404
+ mockedUseEventStream.mockReturnValue({
405
+ events: [],
406
+ taskStates: new Map([
407
+ [
408
+ "review-gate",
409
+ {
410
+ ...taskState("review-gate"),
411
+ taskKind: 16, // WorkflowTaskKind.human_input
412
+ status: "waiting_approval",
413
+ approvalRequest: create(ApprovalRequestedPayloadSchema, {
414
+ prompt: "Ship it?",
415
+ outcomes: [{ name: "ship", label: "Ship It" }],
416
+ }),
417
+ },
418
+ ],
419
+ ]),
420
+ costSummary: COST_SUMMARY,
421
+ streamState: { stage: "streaming" },
422
+ totalTasks: 1,
423
+ error: null,
424
+ reconnect: vi.fn(),
425
+ } as unknown as ReturnType<typeof useWorkflowExecutionEventStream>);
426
+ renderViewer();
427
+
428
+ const form = screen.getByRole("form", {
429
+ name: "Approval decision for review-gate",
430
+ });
431
+ expect(form).toBeTruthy();
432
+
433
+ fireEvent.click(screen.getByRole("button", { name: "Ship It" }));
434
+ expect(
435
+ vi.mocked(useWorkflowExecutionActions).mock.results.at(-1)?.value
436
+ .submitTaskApproval,
437
+ ).toHaveBeenCalledWith("review-gate", "ship", undefined, undefined);
438
+ });
439
+
440
+ it("an AGENT_CALL card's Open transcript opens the S4 document in the panel", () => {
441
+ // Add a settled agent-call task carrying its child execution id. The
442
+ // stream stage must not be "complete" with zero events, or the viewer's
443
+ // snapshot fallback would replace these derived states (its documented
444
+ // event-persistence-failure path).
445
+ mockedUseEventStream.mockReturnValue({
446
+ events: [],
447
+ taskStates: new Map([
448
+ ["build-report", taskState("build-report")],
449
+ [
450
+ "call-writer",
451
+ {
452
+ ...taskState("call-writer"),
453
+ taskKind: 13, // WorkflowTaskKind.agent_call
454
+ agentSlug: "blog-writer",
455
+ childExecutionId: "aex_child_1",
456
+ },
457
+ ],
458
+ ]),
459
+ costSummary: COST_SUMMARY,
460
+ streamState: { stage: "idle" },
461
+ totalTasks: 2,
462
+ error: null,
463
+ reconnect: vi.fn(),
464
+ } as unknown as ReturnType<typeof useWorkflowExecutionEventStream>);
465
+ renderViewer();
466
+
467
+ // Preview-kind cards (agent_call) keep the transcript affordance in
468
+ // their always-visible body — no expand gesture required (T04).
469
+ fireEvent.click(screen.getByRole("button", { name: "Open transcript" }));
470
+
471
+ expect(screen.getByTestId("agent-doc-stub").textContent).toBe(
472
+ "aex_child_1:call-writer",
473
+ );
474
+ });
475
+
476
+ it("keeps exactly one aria-live announcer across both center views", () => {
477
+ const { container } = renderViewer();
478
+
479
+ expect(container.querySelectorAll("[aria-live]")).toHaveLength(1);
480
+ fireEvent.click(screen.getByRole("radio", { name: "Graph" }));
481
+ expect(container.querySelectorAll("[aria-live]")).toHaveLength(1);
482
+ });
483
+ });
484
+
485
+ // ---------------------------------------------------------------------------
486
+ // S9: approval-boundary wiring (snapshot refresh + gate attention)
487
+ // ---------------------------------------------------------------------------
488
+
489
+ describe("WorkflowExecutionViewer (approval boundary, S9)", () => {
490
+ beforeEach(() => {
491
+ localStorage.clear();
492
+ });
493
+ afterEach(cleanup);
494
+
495
+ // Re-mocks ONLY the stream (the execution mock — and its refetch spy —
496
+ // must stay stable across the flip, since the assertions count its calls).
497
+ function mockStream(status: DerivedTaskState["status"]) {
498
+ mockedUseEventStream.mockReturnValue({
499
+ events: [],
500
+ taskStates: new Map([
501
+ ["build-report", { ...taskState("build-report"), status }],
502
+ ]),
503
+ costSummary: COST_SUMMARY,
504
+ streamState: { stage: "streaming" },
505
+ totalTasks: 1,
506
+ error: null,
507
+ reconnect: vi.fn(),
508
+ } as unknown as ReturnType<typeof useWorkflowExecutionEventStream>);
509
+ }
510
+
511
+ it("a gate opening mid-run refetches the snapshot WITHOUT opening the panel or selecting anything (T06)", () => {
512
+ const { refetch } = arrange(ExecutionPhase.EXECUTION_IN_PROGRESS);
513
+ mockStream("running");
514
+ const { rerender } = render(<WorkflowExecutionViewer executionId="wex_1" />);
515
+ expect(refetch).not.toHaveBeenCalled();
516
+
517
+ // The stream flips the task across the waiting_approval boundary. The
518
+ // viewer is memoized, so a rerender with identical props would bail
519
+ // before re-reading the mocked stream — vary a benign prop to deliver
520
+ // the new stream value (in production the store subscription re-renders
521
+ // the viewer without any prop change).
522
+ mockStream("waiting_approval");
523
+ rerender(
524
+ <WorkflowExecutionViewer executionId="wex_1" className="pass-2" />,
525
+ );
526
+
527
+ // The refetch materializes the snapshot's gate lists for the in-card
528
+ // decision surfaces…
529
+ expect(refetch).toHaveBeenCalledTimes(1);
530
+ // …with no auto-select and no panel yank: the gating card is amber and
531
+ // carries its own decision surface (selection died with Inspect, T06).
532
+ expect(document.querySelector("[aria-pressed]")).toBeNull();
533
+ expect(screen.queryByRole("radio", { name: "Inspect" })).toBeNull();
534
+ });
535
+
536
+ it("a gate resolving also refetches — decided gates never linger", () => {
537
+ const { refetch } = arrange(ExecutionPhase.EXECUTION_IN_PROGRESS);
538
+ mockStream("waiting_approval");
539
+ const { rerender } = render(<WorkflowExecutionViewer executionId="wex_1" />);
540
+ // Mount observed the gate already open → one entering crossing.
541
+ expect(refetch).toHaveBeenCalledTimes(1);
542
+
543
+ mockStream("running");
544
+ // Benign prop change to get past the viewer's memo (see above).
545
+ rerender(
546
+ <WorkflowExecutionViewer executionId="wex_1" className="pass-2" />,
547
+ );
548
+
549
+ expect(refetch).toHaveBeenCalledTimes(2);
550
+ });
551
+
552
+ it("terminal-execution replay never refetches", () => {
553
+ const { refetch } = arrange(ExecutionPhase.EXECUTION_COMPLETED);
554
+ mockStream("waiting_approval");
555
+ render(<WorkflowExecutionViewer executionId="wex_1" />);
556
+
557
+ expect(refetch).not.toHaveBeenCalled();
558
+ });
559
+ });
560
+
561
+ // ---------------------------------------------------------------------------
562
+ // T04: terminal-phase snapshot refetch (DD-T04-4)
563
+ // ---------------------------------------------------------------------------
564
+
565
+ describe("WorkflowExecutionViewer (terminal-phase refetch, T04)", () => {
566
+ beforeEach(() => {
567
+ localStorage.clear();
568
+ });
569
+ afterEach(cleanup);
570
+
571
+ // Re-mocks ONLY the stream stage (the execution mock — and its refetch
572
+ // spy — must stay stable across the flip; the assertions count its calls).
573
+ function mockStreamStage(stage: "streaming" | "reconnecting" | "complete") {
574
+ mockedUseEventStream.mockReturnValue({
575
+ events: [],
576
+ taskStates: new Map([
577
+ ["build-report", { ...taskState("build-report"), status: "running" }],
578
+ ]),
579
+ costSummary: COST_SUMMARY,
580
+ streamState:
581
+ stage === "reconnecting"
582
+ ? { stage, executionId: "wex_1", attempt: 1, error: new Error("drop") }
583
+ : { stage, executionId: "wex_1" },
584
+ totalTasks: 1,
585
+ error: null,
586
+ reconnect: vi.fn(),
587
+ } as unknown as ReturnType<typeof useWorkflowExecutionEventStream>);
588
+ }
589
+
590
+ it("the live stream reaching its terminal event refetches the snapshot once — the cards' full I/O and the header phase land without a reload", () => {
591
+ const { refetch } = arrange(ExecutionPhase.EXECUTION_IN_PROGRESS);
592
+ mockStreamStage("streaming");
593
+ const { rerender } = render(<WorkflowExecutionViewer executionId="wex_1" />);
594
+ expect(refetch).not.toHaveBeenCalled();
595
+
596
+ // The stream delivers the terminal event → stage flips to complete.
597
+ // (Benign prop change to get past the viewer's memo — in production the
598
+ // store subscription re-renders the viewer without any prop change.)
599
+ mockStreamStage("complete");
600
+ rerender(
601
+ <WorkflowExecutionViewer executionId="wex_1" className="pass-2" />,
602
+ );
603
+ expect(refetch).toHaveBeenCalledTimes(1);
604
+
605
+ // Idempotent: staying complete never re-triggers.
606
+ rerender(
607
+ <WorkflowExecutionViewer executionId="wex_1" className="pass-3" />,
608
+ );
609
+ expect(refetch).toHaveBeenCalledTimes(1);
610
+ });
611
+
612
+ it("a reconnecting stream that resolves straight to complete also refetches", () => {
613
+ const { refetch } = arrange(ExecutionPhase.EXECUTION_IN_PROGRESS);
614
+ mockStreamStage("reconnecting");
615
+ const { rerender } = render(<WorkflowExecutionViewer executionId="wex_1" />);
616
+
617
+ mockStreamStage("complete");
618
+ rerender(
619
+ <WorkflowExecutionViewer executionId="wex_1" className="pass-2" />,
620
+ );
621
+
622
+ expect(refetch).toHaveBeenCalledTimes(1);
623
+ });
624
+
625
+ it("a terminal-replay mount (already complete, never streamed) does not refetch", () => {
626
+ const { refetch } = arrange(ExecutionPhase.EXECUTION_COMPLETED);
627
+ mockStreamStage("complete");
628
+ render(<WorkflowExecutionViewer executionId="wex_1" />);
629
+
630
+ expect(refetch).not.toHaveBeenCalled();
631
+ });
632
+ });
@@ -2,7 +2,7 @@ import { describe, it, expect, afterEach } from "vitest";
2
2
  import { render, screen, cleanup } from "@testing-library/react";
3
3
  import { WorkflowTaskApprovalSummary } from "../WorkflowTaskApprovalSummary";
4
4
  import type { TaskOutcome } from "../WorkflowTaskApprovalCard";
5
- import type { TaskDetailApprovalDecision } from "../execution-inspector";
5
+ import type { TaskDetailApprovalDecision } from "../task-detail/task-approval";
6
6
 
7
7
  function makeDecision(
8
8
  overrides: Partial<TaskDetailApprovalDecision> = {},