@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,479 @@
1
+ // Unit tests for the headless task-presentation layer (T04): the built-in
2
+ // per-kind preview lines across all 20 task kinds, the status-line
3
+ // precedence, the disclosure taxonomy, defensive Struct parsing (summaries
4
+ // are runner-dependent — malformed shapes must degrade, never break), and
5
+ // the `registerTaskPresenter` override seam.
6
+
7
+ import { describe, it, expect } from "vitest";
8
+ import { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
9
+ import type { JsonObject } from "@bufbuild/protobuf";
10
+ import type { DerivedTaskState } from "../../internal/store/workflow-execution-event-store";
11
+ import {
12
+ resolveTaskPreview,
13
+ registerTaskPresenter,
14
+ defaultDisclosureForKind,
15
+ valueSnippet,
16
+ } from "../thread/task-presentation";
17
+
18
+ function state(
19
+ overrides: Partial<DerivedTaskState> = {},
20
+ ): DerivedTaskState {
21
+ return {
22
+ taskName: "task",
23
+ taskKind: WorkflowTaskKind.set_vars,
24
+ status: "completed",
25
+ durationMs: 100,
26
+ costMicros: 0n,
27
+ tokensUsed: 0n,
28
+ attemptNumber: 1,
29
+ error: "",
30
+ childExecutionId: "",
31
+ agentSlug: "",
32
+ currentToolName: "",
33
+ messagesCount: 0,
34
+ toolCallsCount: 0,
35
+ inputSummary: null,
36
+ outputSummary: null,
37
+ approvalRequest: null,
38
+ approvalResolution: null,
39
+ ...overrides,
40
+ };
41
+ }
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // Status-line precedence (universal, kind-independent)
45
+ // ---------------------------------------------------------------------------
46
+
47
+ describe("status-line precedence", () => {
48
+ it("waiting_approval outranks any kind line", () => {
49
+ const { previewLine } = resolveTaskPreview(
50
+ state({
51
+ taskKind: WorkflowTaskKind.validate,
52
+ status: "waiting_approval",
53
+ outputSummary: { valid: false, errors: [{}] },
54
+ }),
55
+ );
56
+ expect(previewLine).toBe("Awaiting approval");
57
+ });
58
+
59
+ it("a failure shows the error's first line", () => {
60
+ const { previewLine } = resolveTaskPreview(
61
+ state({
62
+ taskKind: WorkflowTaskKind.validate,
63
+ status: "failed",
64
+ error: "[TypeError] expr.includes is not a function\nstack trace…",
65
+ }),
66
+ );
67
+ expect(previewLine).toBe("[TypeError] expr.includes is not a function");
68
+ });
69
+
70
+ it("skipped shows Skipped", () => {
71
+ const { previewLine } = resolveTaskPreview(state({ status: "skipped" }));
72
+ expect(previewLine).toBe("Skipped");
73
+ });
74
+
75
+ it("caps the line length (bounded header, not a body)", () => {
76
+ const { previewLine } = resolveTaskPreview(
77
+ state({ status: "failed", error: "x".repeat(500) }),
78
+ );
79
+ expect(previewLine.length).toBeLessThanOrEqual(80);
80
+ expect(previewLine.endsWith("…")).toBe(true);
81
+ });
82
+ });
83
+
84
+ // ---------------------------------------------------------------------------
85
+ // Built-in per-kind lines — the full 20-kind table
86
+ // ---------------------------------------------------------------------------
87
+
88
+ describe("per-kind preview lines", () => {
89
+ it.each<{
90
+ label: string;
91
+ kind: WorkflowTaskKind;
92
+ overrides: Partial<DerivedTaskState>;
93
+ expected: string;
94
+ }>([
95
+ {
96
+ label: "set_vars from nested variables map",
97
+ kind: WorkflowTaskKind.set_vars,
98
+ overrides: {
99
+ inputSummary: { variables: { order_id: "o-1", total: "120" } },
100
+ },
101
+ expected: "set order_id, total",
102
+ },
103
+ {
104
+ label: "set_vars from top-level resolved variables",
105
+ kind: WorkflowTaskKind.set_vars,
106
+ overrides: { inputSummary: { a: "1", b: "2", c: "3", d: "4", e: "5" } },
107
+ expected: "set a, b, c +2 more",
108
+ },
109
+ {
110
+ label: "transform with engine and scalar output",
111
+ kind: WorkflowTaskKind.transform,
112
+ overrides: {
113
+ inputSummary: { engine: "JQ", expression: ".total" },
114
+ outputSummary: { result: 42 },
115
+ },
116
+ expected: "jq → 42",
117
+ },
118
+ {
119
+ label: "transform running (engine only, no output yet)",
120
+ kind: WorkflowTaskKind.transform,
121
+ overrides: { status: "running", inputSummary: { engine: "JSONATA" } },
122
+ expected: "jsonata",
123
+ },
124
+ {
125
+ label: "validate passing",
126
+ kind: WorkflowTaskKind.validate,
127
+ overrides: { outputSummary: { valid: true, errors: [] } },
128
+ expected: "valid",
129
+ },
130
+ {
131
+ label: "validate failing with error rows",
132
+ kind: WorkflowTaskKind.validate,
133
+ overrides: {
134
+ outputSummary: { valid: false, errors: [{ rule: "r1" }, { rule: "r2" }, { rule: "r3" }] },
135
+ },
136
+ expected: "3 errors",
137
+ },
138
+ {
139
+ label: "validate failing with one error (singular)",
140
+ kind: WorkflowTaskKind.validate,
141
+ overrides: { outputSummary: { valid: false, errors: [{ rule: "r1" }] } },
142
+ expected: "1 error",
143
+ },
144
+ {
145
+ label: "validate invalid without errors array",
146
+ kind: WorkflowTaskKind.validate,
147
+ overrides: { outputSummary: { valid: false } },
148
+ expected: "invalid",
149
+ },
150
+ {
151
+ label: "llm_call with model and text output",
152
+ kind: WorkflowTaskKind.llm_call,
153
+ overrides: {
154
+ inputSummary: { model: "claude-sonnet" },
155
+ outputSummary: { text: "The answer is 42." },
156
+ },
157
+ expected: 'claude-sonnet · "The answer is 42."',
158
+ },
159
+ {
160
+ label: "eval passing with score",
161
+ kind: WorkflowTaskKind.eval,
162
+ overrides: { outputSummary: { pass: true, score: 0.82 } },
163
+ expected: "pass · score 0.82",
164
+ },
165
+ {
166
+ label: "eval failing without score",
167
+ kind: WorkflowTaskKind.eval,
168
+ overrides: { outputSummary: { pass: false } },
169
+ expected: "fail",
170
+ },
171
+ {
172
+ label: "emit_event settled (CloudEvents type from output)",
173
+ kind: WorkflowTaskKind.emit_event,
174
+ overrides: { outputSummary: { type: "stigmer.ticket.classified" } },
175
+ expected: "emitted stigmer.ticket.classified",
176
+ },
177
+ {
178
+ label: "emit_event running (configured type from input)",
179
+ kind: WorkflowTaskKind.emit_event,
180
+ overrides: {
181
+ status: "running",
182
+ inputSummary: { event: { type: "stigmer.ticket.classified" } },
183
+ },
184
+ expected: "emitting stigmer.ticket.classified",
185
+ },
186
+ {
187
+ label: "notification delivered",
188
+ kind: WorkflowTaskKind.notification,
189
+ overrides: { outputSummary: { channel: "slack", delivered: true } },
190
+ expected: "sent via slack",
191
+ },
192
+ {
193
+ label: "notification delivery failed",
194
+ kind: WorkflowTaskKind.notification,
195
+ overrides: { outputSummary: { channel: "slack", delivered: false } },
196
+ expected: "delivery failed",
197
+ },
198
+ {
199
+ label: "human_input settled decision",
200
+ kind: WorkflowTaskKind.human_input,
201
+ overrides: { outputSummary: { outcome: "approve", reviewer: "suresh" } },
202
+ expected: "approve · by suresh",
203
+ },
204
+ {
205
+ label: "wait completed with structured duration",
206
+ kind: WorkflowTaskKind.wait,
207
+ overrides: { inputSummary: { duration: { seconds: 10 } } },
208
+ expected: "waited 10.0s",
209
+ },
210
+ {
211
+ label: "wait running",
212
+ kind: WorkflowTaskKind.wait,
213
+ overrides: {
214
+ status: "running",
215
+ inputSummary: { duration: { minutes: 1, seconds: 30 } },
216
+ },
217
+ expected: "waiting 1m 30s",
218
+ },
219
+ {
220
+ label: "wait until an absolute timestamp",
221
+ kind: WorkflowTaskKind.wait,
222
+ overrides: { inputSummary: { until: "2026-07-17T00:00:00Z" } },
223
+ expected: "waited until 2026-07-17T00:00:00Z",
224
+ },
225
+ {
226
+ label: "listen running",
227
+ kind: WorkflowTaskKind.listen,
228
+ overrides: { status: "running" },
229
+ expected: "waiting for signal",
230
+ },
231
+ {
232
+ label: "listen settled",
233
+ kind: WorkflowTaskKind.listen,
234
+ overrides: { status: "completed" },
235
+ expected: "signal received",
236
+ },
237
+ {
238
+ label: "agent_call running with live activity",
239
+ kind: WorkflowTaskKind.agent_call,
240
+ overrides: {
241
+ status: "running",
242
+ agentSlug: "blog-writer",
243
+ currentToolName: "web_search",
244
+ messagesCount: 7,
245
+ toolCallsCount: 3,
246
+ },
247
+ expected: "blog-writer · running web_search · 7 msgs · 3 tools",
248
+ },
249
+ {
250
+ label: "agent_call settled",
251
+ kind: WorkflowTaskKind.agent_call,
252
+ overrides: { agentSlug: "blog-writer", messagesCount: 12, toolCallsCount: 5 },
253
+ expected: "blog-writer · 12 msgs · 5 tools",
254
+ },
255
+ ])("$label", ({ kind, overrides, expected }) => {
256
+ const { previewLine } = resolveTaskPreview(state({ taskKind: kind, ...overrides }));
257
+ expect(previewLine).toBe(expected);
258
+ });
259
+
260
+ // Kinds that deliberately stay status-only: control flow (branch/fork
261
+ // detail needs graph topology the thread lacks — deferred), raise_error
262
+ // (the failure precedence carries the message), the invocation kinds
263
+ // (no verified output envelope — backend follow-up), and unspecified
264
+ // (the snapshot fallback).
265
+ it.each([
266
+ WorkflowTaskKind.switch_case,
267
+ WorkflowTaskKind.for_each,
268
+ WorkflowTaskKind.fork,
269
+ WorkflowTaskKind.try_catch,
270
+ WorkflowTaskKind.raise_error,
271
+ WorkflowTaskKind.http_call,
272
+ WorkflowTaskKind.grpc_call,
273
+ WorkflowTaskKind.activity_call,
274
+ WorkflowTaskKind.run_workflow,
275
+ WorkflowTaskKind.workflow_task_kind_unspecified,
276
+ ])("kind %d yields an empty line when completed cleanly", (kind) => {
277
+ const { previewLine } = resolveTaskPreview(
278
+ state({ taskKind: kind, outputSummary: { some: "data" } }),
279
+ );
280
+ expect(previewLine).toBe("");
281
+ });
282
+ });
283
+
284
+ // ---------------------------------------------------------------------------
285
+ // Defensive parsing — summaries are runner-dependent; never break
286
+ // ---------------------------------------------------------------------------
287
+
288
+ describe("defensive Struct parsing", () => {
289
+ it.each<{ label: string; kind: WorkflowTaskKind; input: JsonObject | null; output: JsonObject | null }>([
290
+ { label: "absent summaries", kind: WorkflowTaskKind.validate, input: null, output: null },
291
+ { label: "empty objects", kind: WorkflowTaskKind.set_vars, input: {}, output: {} },
292
+ {
293
+ label: "wrong-typed fields",
294
+ kind: WorkflowTaskKind.validate,
295
+ input: { variables: "not-an-object" },
296
+ output: { valid: "yes", errors: "none" },
297
+ },
298
+ {
299
+ label: "eval with non-boolean pass",
300
+ kind: WorkflowTaskKind.eval,
301
+ input: null,
302
+ output: { pass: "true", score: "high" },
303
+ },
304
+ {
305
+ label: "wait with unknown duration shape",
306
+ kind: WorkflowTaskKind.wait,
307
+ input: { duration: { fortnights: 2 } },
308
+ output: null,
309
+ },
310
+ {
311
+ label: "wait with non-numeric duration values",
312
+ kind: WorkflowTaskKind.wait,
313
+ input: { duration: { seconds: "ten" } },
314
+ output: null,
315
+ },
316
+ ])("degrades to empty on $label", ({ kind, input, output }) => {
317
+ const { previewLine } = resolveTaskPreview(
318
+ state({ taskKind: kind, inputSummary: input, outputSummary: output }),
319
+ );
320
+ expect(previewLine).toBe("");
321
+ });
322
+
323
+ it("handles an oversized variables map without an oversized line", () => {
324
+ const vars: Record<string, string> = {};
325
+ for (let i = 0; i < 100; i++) vars[`variable_number_${i}`] = "v";
326
+ const { previewLine } = resolveTaskPreview(
327
+ state({ taskKind: WorkflowTaskKind.set_vars, inputSummary: { variables: vars } }),
328
+ );
329
+ expect(previewLine.length).toBeLessThanOrEqual(80);
330
+ expect(previewLine.startsWith("set ")).toBe(true);
331
+ });
332
+ });
333
+
334
+ // ---------------------------------------------------------------------------
335
+ // valueSnippet
336
+ // ---------------------------------------------------------------------------
337
+
338
+ describe("valueSnippet", () => {
339
+ it.each<[JsonValueLike, string]>([
340
+ [null, "null"],
341
+ [42, "42"],
342
+ [true, "true"],
343
+ ["hello", '"hello"'],
344
+ ["line1\nline2", '"line1"'],
345
+ [[1, 2, 3], "[3 items]"],
346
+ [[1], "[1 item]"],
347
+ [{ a: 1, b: 2 }, "{2 fields}"],
348
+ // A single-field envelope unwraps to its scalar payload.
349
+ [{ result: 42 }, "42"],
350
+ [{ result: { nested: true } }, "{1 field}"],
351
+ ])("snippets %j as %s", (value, expected) => {
352
+ expect(valueSnippet(value)).toBe(expected);
353
+ });
354
+ });
355
+
356
+ type JsonValueLike = Parameters<typeof valueSnippet>[0];
357
+
358
+ // ---------------------------------------------------------------------------
359
+ // Disclosure taxonomy
360
+ // ---------------------------------------------------------------------------
361
+
362
+ describe("defaultDisclosureForKind", () => {
363
+ // T05 (DD-T05-5): every kind whose output CAN matter is a preview kind —
364
+ // the showBody gate keeps output-less cards as one-line rows, so preview
365
+ // disclosure costs nothing until the runner writes real output. Only
366
+ // genuinely body-less kinds (control flow, wait/listen, unspecified)
367
+ // remain summary.
368
+ it.each([
369
+ [WorkflowTaskKind.transform, "preview"],
370
+ [WorkflowTaskKind.validate, "preview"],
371
+ [WorkflowTaskKind.llm_call, "preview"],
372
+ [WorkflowTaskKind.eval, "preview"],
373
+ [WorkflowTaskKind.emit_event, "preview"],
374
+ [WorkflowTaskKind.notification, "preview"],
375
+ [WorkflowTaskKind.agent_call, "preview"],
376
+ [WorkflowTaskKind.set_vars, "preview"],
377
+ [WorkflowTaskKind.human_input, "preview"],
378
+ [WorkflowTaskKind.http_call, "preview"],
379
+ [WorkflowTaskKind.grpc_call, "preview"],
380
+ [WorkflowTaskKind.activity_call, "preview"],
381
+ [WorkflowTaskKind.run_workflow, "preview"],
382
+ [WorkflowTaskKind.wait, "summary"],
383
+ [WorkflowTaskKind.switch_case, "summary"],
384
+ [WorkflowTaskKind.fork, "summary"],
385
+ [WorkflowTaskKind.try_catch, "summary"],
386
+ [WorkflowTaskKind.for_each, "summary"],
387
+ [WorkflowTaskKind.listen, "summary"],
388
+ [WorkflowTaskKind.raise_error, "summary"],
389
+ [WorkflowTaskKind.workflow_task_kind_unspecified, "summary"],
390
+ ] as const)("kind %d defaults to %s", (kind, expected) => {
391
+ expect(defaultDisclosureForKind(kind)).toBe(expected);
392
+ });
393
+ });
394
+
395
+ // ---------------------------------------------------------------------------
396
+ // Presenter registry (the platform-builder seam)
397
+ // ---------------------------------------------------------------------------
398
+
399
+ describe("registerTaskPresenter", () => {
400
+ it("overrides the kind line and restores the previous presenter on dispose", () => {
401
+ const dispose = registerTaskPresenter(WorkflowTaskKind.validate, {
402
+ previewLine: () => "custom check line",
403
+ });
404
+ try {
405
+ const withOverride = resolveTaskPreview(
406
+ state({ taskKind: WorkflowTaskKind.validate, outputSummary: { valid: true } }),
407
+ );
408
+ expect(withOverride.previewLine).toBe("custom check line");
409
+ } finally {
410
+ dispose();
411
+ }
412
+ const restored = resolveTaskPreview(
413
+ state({ taskKind: WorkflowTaskKind.validate, outputSummary: { valid: true } }),
414
+ );
415
+ expect(restored.previewLine).toBe("valid");
416
+ });
417
+
418
+ it("falls back to the built-in line when the override returns null", () => {
419
+ const dispose = registerTaskPresenter(WorkflowTaskKind.validate, {
420
+ previewLine: () => null,
421
+ });
422
+ try {
423
+ const { previewLine } = resolveTaskPreview(
424
+ state({ taskKind: WorkflowTaskKind.validate, outputSummary: { valid: true } }),
425
+ );
426
+ expect(previewLine).toBe("valid");
427
+ } finally {
428
+ dispose();
429
+ }
430
+ });
431
+
432
+ it("never lets an override outrank status lines (correctness surface)", () => {
433
+ const dispose = registerTaskPresenter(WorkflowTaskKind.validate, {
434
+ previewLine: () => "should not appear",
435
+ });
436
+ try {
437
+ const { previewLine } = resolveTaskPreview(
438
+ state({ taskKind: WorkflowTaskKind.validate, status: "waiting_approval" }),
439
+ );
440
+ expect(previewLine).toBe("Awaiting approval");
441
+ } finally {
442
+ dispose();
443
+ }
444
+ });
445
+
446
+ it("can override disclosure per kind", () => {
447
+ const dispose = registerTaskPresenter(WorkflowTaskKind.http_call, {
448
+ disclosure: () => "preview",
449
+ });
450
+ try {
451
+ const { disclosure } = resolveTaskPreview(
452
+ state({ taskKind: WorkflowTaskKind.http_call }),
453
+ );
454
+ expect(disclosure).toBe("preview");
455
+ } finally {
456
+ dispose();
457
+ }
458
+ });
459
+
460
+ it("restores a PREVIOUS override (not just the default) on dispose", () => {
461
+ const disposeA = registerTaskPresenter(WorkflowTaskKind.validate, {
462
+ previewLine: () => "A",
463
+ });
464
+ const disposeB = registerTaskPresenter(WorkflowTaskKind.validate, {
465
+ previewLine: () => "B",
466
+ });
467
+ try {
468
+ expect(
469
+ resolveTaskPreview(state({ taskKind: WorkflowTaskKind.validate })).previewLine,
470
+ ).toBe("B");
471
+ disposeB();
472
+ expect(
473
+ resolveTaskPreview(state({ taskKind: WorkflowTaskKind.validate })).previewLine,
474
+ ).toBe("A");
475
+ } finally {
476
+ disposeA();
477
+ }
478
+ });
479
+ });
@@ -19,6 +19,10 @@ function makeState(overrides: Partial<DerivedTaskState> = {}): DerivedTaskState
19
19
  currentToolName: "",
20
20
  messagesCount: 0,
21
21
  toolCallsCount: 0,
22
+ inputSummary: null,
23
+ outputSummary: null,
24
+ approvalRequest: null,
25
+ approvalResolution: null,
22
26
  ...overrides,
23
27
  };
24
28
  }
@@ -0,0 +1,158 @@
1
+ // Unit tests for the approval-boundary watcher (S9): entering/exiting
2
+ // crossings, the enabled gate (tracking continues while disabled — no
3
+ // replayed crossings on enable), first-observation semantics, and callback
4
+ // identity churn safety.
5
+
6
+ import { describe, expect, it, vi } from "vitest";
7
+ import { renderHook } from "@testing-library/react";
8
+ import { useApprovalBoundary } from "../useApprovalBoundary";
9
+ import type { DerivedTaskState } from "../../internal/store/workflow-execution-event-store";
10
+ import { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
11
+
12
+ function makeState(overrides: Partial<DerivedTaskState> = {}): DerivedTaskState {
13
+ return {
14
+ taskName: "test_task",
15
+ taskKind: WorkflowTaskKind.workflow_task_kind_unspecified,
16
+ status: "pending",
17
+ durationMs: 0,
18
+ costMicros: BigInt(0),
19
+ tokensUsed: BigInt(0),
20
+ attemptNumber: 1,
21
+ error: "",
22
+ childExecutionId: "",
23
+ agentSlug: "",
24
+ currentToolName: "",
25
+ messagesCount: 0,
26
+ toolCallsCount: 0,
27
+ inputSummary: null,
28
+ outputSummary: null,
29
+ approvalRequest: null,
30
+ approvalResolution: null,
31
+ ...overrides,
32
+ };
33
+ }
34
+
35
+ function statesOf(
36
+ ...entries: Array<[string, DerivedTaskState["status"]]>
37
+ ): ReadonlyMap<string, DerivedTaskState> {
38
+ return new Map(
39
+ entries.map(([taskName, status]) => [
40
+ taskName,
41
+ makeState({ taskName, status }),
42
+ ]),
43
+ );
44
+ }
45
+
46
+ describe("useApprovalBoundary", () => {
47
+ it("reports a task entering waiting_approval", () => {
48
+ const onCrossing = vi.fn();
49
+ const { rerender } = renderHook(
50
+ ({ states }) => useApprovalBoundary(states, true, onCrossing),
51
+ { initialProps: { states: statesOf(["gate", "running"]) } },
52
+ );
53
+ expect(onCrossing).not.toHaveBeenCalled();
54
+
55
+ rerender({ states: statesOf(["gate", "waiting_approval"]) });
56
+ expect(onCrossing).toHaveBeenCalledTimes(1);
57
+ expect(onCrossing).toHaveBeenCalledWith({ entered: ["gate"], exited: [] });
58
+ });
59
+
60
+ it("reports a task exiting waiting_approval", () => {
61
+ const onCrossing = vi.fn();
62
+ const { rerender } = renderHook(
63
+ ({ states }) => useApprovalBoundary(states, true, onCrossing),
64
+ { initialProps: { states: statesOf(["gate", "waiting_approval"]) } },
65
+ );
66
+ onCrossing.mockClear();
67
+
68
+ rerender({ states: statesOf(["gate", "running"]) });
69
+ expect(onCrossing).toHaveBeenCalledWith({ entered: [], exited: ["gate"] });
70
+ });
71
+
72
+ it("counts a first observation already waiting as entered (coalesced commits)", () => {
73
+ const onCrossing = vi.fn();
74
+ renderHook(() =>
75
+ useApprovalBoundary(statesOf(["gate", "waiting_approval"]), true, onCrossing),
76
+ );
77
+ expect(onCrossing).toHaveBeenCalledWith({ entered: ["gate"], exited: [] });
78
+ });
79
+
80
+ it("stays silent for non-boundary transitions", () => {
81
+ const onCrossing = vi.fn();
82
+ const { rerender } = renderHook(
83
+ ({ states }) => useApprovalBoundary(states, true, onCrossing),
84
+ { initialProps: { states: statesOf(["a", "running"]) } },
85
+ );
86
+
87
+ rerender({ states: statesOf(["a", "completed"], ["b", "running"]) });
88
+ expect(onCrossing).not.toHaveBeenCalled();
89
+ });
90
+
91
+ it("reports concurrent crossings in map (first-started) order", () => {
92
+ const onCrossing = vi.fn();
93
+ const { rerender } = renderHook(
94
+ ({ states }) => useApprovalBoundary(states, true, onCrossing),
95
+ {
96
+ initialProps: {
97
+ states: statesOf(
98
+ ["a", "waiting_approval"],
99
+ ["b", "running"],
100
+ ["c", "running"],
101
+ ),
102
+ },
103
+ },
104
+ );
105
+ onCrossing.mockClear();
106
+
107
+ rerender({
108
+ states: statesOf(
109
+ ["a", "running"],
110
+ ["b", "waiting_approval"],
111
+ ["c", "waiting_approval"],
112
+ ),
113
+ });
114
+ expect(onCrossing).toHaveBeenCalledWith({
115
+ entered: ["b", "c"],
116
+ exited: ["a"],
117
+ });
118
+ });
119
+
120
+ it("never fires while disabled, but keeps tracking — enabling later replays nothing", () => {
121
+ const onCrossing = vi.fn();
122
+ const { rerender } = renderHook(
123
+ ({ states, enabled }) => useApprovalBoundary(states, enabled, onCrossing),
124
+ {
125
+ initialProps: {
126
+ states: statesOf(["gate", "running"]),
127
+ enabled: false,
128
+ },
129
+ },
130
+ );
131
+
132
+ // The crossing happens while disabled (e.g. terminal-history replay).
133
+ rerender({ states: statesOf(["gate", "waiting_approval"]), enabled: false });
134
+ expect(onCrossing).not.toHaveBeenCalled();
135
+
136
+ // Enabling afterwards must not replay the stale crossing…
137
+ rerender({ states: statesOf(["gate", "waiting_approval"]), enabled: true });
138
+ expect(onCrossing).not.toHaveBeenCalled();
139
+
140
+ // …while a NEW crossing after enablement fires normally.
141
+ rerender({ states: statesOf(["gate", "running"]), enabled: true });
142
+ expect(onCrossing).toHaveBeenCalledWith({ entered: [], exited: ["gate"] });
143
+ });
144
+
145
+ it("a fresh callback identity alone never re-fires the last crossing", () => {
146
+ const first = vi.fn();
147
+ const second = vi.fn();
148
+ const states = statesOf(["gate", "waiting_approval"]);
149
+ const { rerender } = renderHook(
150
+ ({ cb }) => useApprovalBoundary(states, true, cb),
151
+ { initialProps: { cb: first } },
152
+ );
153
+ expect(first).toHaveBeenCalledTimes(1);
154
+
155
+ rerender({ cb: second });
156
+ expect(second).not.toHaveBeenCalled();
157
+ });
158
+ });
@@ -19,6 +19,10 @@ function makeState(overrides: Partial<DerivedTaskState> = {}): DerivedTaskState
19
19
  currentToolName: "",
20
20
  messagesCount: 0,
21
21
  toolCallsCount: 0,
22
+ inputSummary: null,
23
+ outputSummary: null,
24
+ approvalRequest: null,
25
+ approvalResolution: null,
22
26
  ...overrides,
23
27
  };
24
28
  }