@stigmer/react 3.1.17 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. package/agent-instance/AgentInstanceList.d.ts.map +1 -1
  2. package/agent-instance/AgentInstanceList.js +11 -3
  3. package/agent-instance/AgentInstanceList.js.map +1 -1
  4. package/channel/AgentChannelsPanel.d.ts +60 -0
  5. package/channel/AgentChannelsPanel.d.ts.map +1 -0
  6. package/channel/AgentChannelsPanel.js +255 -0
  7. package/channel/AgentChannelsPanel.js.map +1 -0
  8. package/channel/ChannelConversationsDialog.d.ts +41 -0
  9. package/channel/ChannelConversationsDialog.d.ts.map +1 -0
  10. package/channel/ChannelConversationsDialog.js +94 -0
  11. package/channel/ChannelConversationsDialog.js.map +1 -0
  12. package/channel/ChannelCredentialsDialog.d.ts +37 -0
  13. package/channel/ChannelCredentialsDialog.d.ts.map +1 -0
  14. package/channel/ChannelCredentialsDialog.js +75 -0
  15. package/channel/ChannelCredentialsDialog.js.map +1 -0
  16. package/channel/ChannelToolCredentials.d.ts +31 -0
  17. package/channel/ChannelToolCredentials.d.ts.map +1 -0
  18. package/channel/ChannelToolCredentials.js +41 -0
  19. package/channel/ChannelToolCredentials.js.map +1 -0
  20. package/channel/ConnectSlackDialog.d.ts +61 -0
  21. package/channel/ConnectSlackDialog.d.ts.map +1 -0
  22. package/channel/ConnectSlackDialog.js +238 -0
  23. package/channel/ConnectSlackDialog.js.map +1 -0
  24. package/channel/ConnectWhatsAppDialog.d.ts +70 -0
  25. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -0
  26. package/channel/ConnectWhatsAppDialog.js +256 -0
  27. package/channel/ConnectWhatsAppDialog.js.map +1 -0
  28. package/channel/SlackMarkIcon.d.ts +11 -0
  29. package/channel/SlackMarkIcon.d.ts.map +1 -0
  30. package/channel/SlackMarkIcon.js +13 -0
  31. package/channel/SlackMarkIcon.js.map +1 -0
  32. package/channel/WhatsAppMarkIcon.d.ts +12 -0
  33. package/channel/WhatsAppMarkIcon.d.ts.map +1 -0
  34. package/channel/WhatsAppMarkIcon.js +14 -0
  35. package/channel/WhatsAppMarkIcon.js.map +1 -0
  36. package/channel/connect/ServingAppSection.d.ts +57 -0
  37. package/channel/connect/ServingAppSection.d.ts.map +1 -0
  38. package/channel/connect/ServingAppSection.js +49 -0
  39. package/channel/connect/ServingAppSection.js.map +1 -0
  40. package/channel/connect/ToolCredentialsSection.d.ts +20 -0
  41. package/channel/connect/ToolCredentialsSection.d.ts.map +1 -0
  42. package/channel/connect/ToolCredentialsSection.js +22 -0
  43. package/channel/connect/ToolCredentialsSection.js.map +1 -0
  44. package/channel/connect/VerbatimRefusal.d.ts +16 -0
  45. package/channel/connect/VerbatimRefusal.d.ts.map +1 -0
  46. package/channel/connect/VerbatimRefusal.js +18 -0
  47. package/channel/connect/VerbatimRefusal.js.map +1 -0
  48. package/channel/connect/icons.d.ts +16 -0
  49. package/channel/connect/icons.d.ts.map +1 -0
  50. package/channel/connect/icons.js +21 -0
  51. package/channel/connect/icons.js.map +1 -0
  52. package/channel/index.d.ts +36 -0
  53. package/channel/index.d.ts.map +1 -0
  54. package/channel/index.js +19 -0
  55. package/channel/index.js.map +1 -0
  56. package/channel/providerPresentation.d.ts +44 -0
  57. package/channel/providerPresentation.d.ts.map +1 -0
  58. package/channel/providerPresentation.js +106 -0
  59. package/channel/providerPresentation.js.map +1 -0
  60. package/channel/providers.d.ts +62 -0
  61. package/channel/providers.d.ts.map +1 -0
  62. package/channel/providers.js +26 -0
  63. package/channel/providers.js.map +1 -0
  64. package/channel/useAgentChannel.d.ts +31 -0
  65. package/channel/useAgentChannel.d.ts.map +1 -0
  66. package/channel/useAgentChannel.js +34 -0
  67. package/channel/useAgentChannel.js.map +1 -0
  68. package/channel/useAgentChannelList.d.ts +43 -0
  69. package/channel/useAgentChannelList.d.ts.map +1 -0
  70. package/channel/useAgentChannelList.js +39 -0
  71. package/channel/useAgentChannelList.js.map +1 -0
  72. package/channel/useChannelSessions.d.ts +47 -0
  73. package/channel/useChannelSessions.d.ts.map +1 -0
  74. package/channel/useChannelSessions.js +38 -0
  75. package/channel/useChannelSessions.js.map +1 -0
  76. package/channel/useChannelToolReadiness.d.ts +23 -0
  77. package/channel/useChannelToolReadiness.d.ts.map +1 -0
  78. package/channel/useChannelToolReadiness.js +28 -0
  79. package/channel/useChannelToolReadiness.js.map +1 -0
  80. package/channel/useConnectSlackChannel.d.ts +75 -0
  81. package/channel/useConnectSlackChannel.d.ts.map +1 -0
  82. package/channel/useConnectSlackChannel.js +115 -0
  83. package/channel/useConnectSlackChannel.js.map +1 -0
  84. package/channel/useCreateAgentChannel.d.ts +42 -0
  85. package/channel/useCreateAgentChannel.d.ts.map +1 -0
  86. package/channel/useCreateAgentChannel.js +48 -0
  87. package/channel/useCreateAgentChannel.js.map +1 -0
  88. package/channel/useDeleteAgentChannel.d.ts +40 -0
  89. package/channel/useDeleteAgentChannel.d.ts.map +1 -0
  90. package/channel/useDeleteAgentChannel.js +44 -0
  91. package/channel/useDeleteAgentChannel.js.map +1 -0
  92. package/channel/useInstallChannel.d.ts +60 -0
  93. package/channel/useInstallChannel.d.ts.map +1 -0
  94. package/channel/useInstallChannel.js +63 -0
  95. package/channel/useInstallChannel.js.map +1 -0
  96. package/channel/useOrgAgentChannelList.d.ts +32 -0
  97. package/channel/useOrgAgentChannelList.d.ts.map +1 -0
  98. package/channel/useOrgAgentChannelList.js +29 -0
  99. package/channel/useOrgAgentChannelList.js.map +1 -0
  100. package/channel/useSaveAgentChannel.d.ts +63 -0
  101. package/channel/useSaveAgentChannel.d.ts.map +1 -0
  102. package/channel/useSaveAgentChannel.js +104 -0
  103. package/channel/useSaveAgentChannel.js.map +1 -0
  104. package/channel-app/ChannelAppDetailPanel.d.ts +46 -0
  105. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -0
  106. package/channel-app/ChannelAppDetailPanel.js +142 -0
  107. package/channel-app/ChannelAppDetailPanel.js.map +1 -0
  108. package/channel-app/ChannelAppListPanel.d.ts +36 -0
  109. package/channel-app/ChannelAppListPanel.d.ts.map +1 -0
  110. package/channel-app/ChannelAppListPanel.js +63 -0
  111. package/channel-app/ChannelAppListPanel.js.map +1 -0
  112. package/channel-app/CreateChannelAppForm.d.ts +54 -0
  113. package/channel-app/CreateChannelAppForm.d.ts.map +1 -0
  114. package/channel-app/CreateChannelAppForm.js +140 -0
  115. package/channel-app/CreateChannelAppForm.js.map +1 -0
  116. package/channel-app/index.d.ts +18 -0
  117. package/channel-app/index.d.ts.map +1 -0
  118. package/channel-app/index.js +10 -0
  119. package/channel-app/index.js.map +1 -0
  120. package/channel-app/internal.d.ts +33 -0
  121. package/channel-app/internal.d.ts.map +1 -0
  122. package/channel-app/internal.js +44 -0
  123. package/channel-app/internal.js.map +1 -0
  124. package/channel-app/slackAppSetup.d.ts +80 -0
  125. package/channel-app/slackAppSetup.d.ts.map +1 -0
  126. package/channel-app/slackAppSetup.js +123 -0
  127. package/channel-app/slackAppSetup.js.map +1 -0
  128. package/channel-app/useChannelAppList.d.ts +35 -0
  129. package/channel-app/useChannelAppList.d.ts.map +1 -0
  130. package/channel-app/useChannelAppList.js +34 -0
  131. package/channel-app/useChannelAppList.js.map +1 -0
  132. package/channel-app/useCreateChannelApp.d.ts +39 -0
  133. package/channel-app/useCreateChannelApp.d.ts.map +1 -0
  134. package/channel-app/useCreateChannelApp.js +50 -0
  135. package/channel-app/useCreateChannelApp.js.map +1 -0
  136. package/channel-app/useDeleteChannelApp.d.ts +31 -0
  137. package/channel-app/useDeleteChannelApp.d.ts.map +1 -0
  138. package/channel-app/useDeleteChannelApp.js +43 -0
  139. package/channel-app/useDeleteChannelApp.js.map +1 -0
  140. package/channel-app/useUpdateChannelApp.d.ts +39 -0
  141. package/channel-app/useUpdateChannelApp.d.ts.map +1 -0
  142. package/channel-app/useUpdateChannelApp.js +50 -0
  143. package/channel-app/useUpdateChannelApp.js.map +1 -0
  144. package/channel-app/whatsappAppSetup.d.ts +51 -0
  145. package/channel-app/whatsappAppSetup.d.ts.map +1 -0
  146. package/channel-app/whatsappAppSetup.js +57 -0
  147. package/channel-app/whatsappAppSetup.js.map +1 -0
  148. package/environment/index.d.ts +2 -0
  149. package/environment/index.d.ts.map +1 -1
  150. package/environment/index.js +1 -0
  151. package/environment/index.js.map +1 -1
  152. package/environment/useToolCredentialsReadiness.d.ts +52 -0
  153. package/environment/useToolCredentialsReadiness.d.ts.map +1 -0
  154. package/environment/useToolCredentialsReadiness.js +84 -0
  155. package/environment/useToolCredentialsReadiness.js.map +1 -0
  156. package/execution/ArtifactContentBody.d.ts.map +1 -1
  157. package/execution/ArtifactContentBody.js +5 -21
  158. package/execution/ArtifactContentBody.js.map +1 -1
  159. package/execution/ArtifactFileContent.d.ts +28 -0
  160. package/execution/ArtifactFileContent.d.ts.map +1 -0
  161. package/execution/ArtifactFileContent.js +36 -0
  162. package/execution/ArtifactFileContent.js.map +1 -0
  163. package/execution/ArtifactRow.d.ts +8 -20
  164. package/execution/ArtifactRow.d.ts.map +1 -1
  165. package/execution/ArtifactRow.js +12 -45
  166. package/execution/ArtifactRow.js.map +1 -1
  167. package/execution/ArtifactRowView.d.ts +43 -0
  168. package/execution/ArtifactRowView.d.ts.map +1 -0
  169. package/execution/ArtifactRowView.js +35 -0
  170. package/execution/ArtifactRowView.js.map +1 -0
  171. package/execution/FileChangesView.d.ts.map +1 -1
  172. package/execution/FileChangesView.js +1 -61
  173. package/execution/FileChangesView.js.map +1 -1
  174. package/execution/SubAgentSection.d.ts.map +1 -1
  175. package/execution/SubAgentSection.js +4 -15
  176. package/execution/SubAgentSection.js.map +1 -1
  177. package/execution/ToolCallItem.d.ts.map +1 -1
  178. package/execution/ToolCallItem.js +16 -61
  179. package/execution/ToolCallItem.js.map +1 -1
  180. package/execution/agent-execution-document.d.ts +31 -0
  181. package/execution/agent-execution-document.d.ts.map +1 -0
  182. package/execution/agent-execution-document.js +48 -0
  183. package/execution/agent-execution-document.js.map +1 -0
  184. package/{session → execution}/artifact-document.d.ts +2 -3
  185. package/execution/artifact-document.d.ts.map +1 -0
  186. package/execution/artifact-document.js +23 -0
  187. package/execution/artifact-document.js.map +1 -0
  188. package/execution/artifact-row-item.d.ts +56 -0
  189. package/execution/artifact-row-item.d.ts.map +1 -0
  190. package/execution/artifact-row-item.js +57 -0
  191. package/execution/artifact-row-item.js.map +1 -0
  192. package/execution/deriveExecutionFileChanges.d.ts +55 -0
  193. package/execution/deriveExecutionFileChanges.d.ts.map +1 -0
  194. package/execution/deriveExecutionFileChanges.js +216 -0
  195. package/execution/deriveExecutionFileChanges.js.map +1 -0
  196. package/execution/file-change-document.d.ts +22 -0
  197. package/execution/file-change-document.d.ts.map +1 -0
  198. package/execution/file-change-document.js +34 -0
  199. package/execution/file-change-document.js.map +1 -0
  200. package/execution/index.d.ts +14 -0
  201. package/execution/index.d.ts.map +1 -1
  202. package/execution/index.js +9 -0
  203. package/execution/index.js.map +1 -1
  204. package/execution/useArtifactContentById.d.ts +61 -0
  205. package/execution/useArtifactContentById.d.ts.map +1 -0
  206. package/execution/useArtifactContentById.js +63 -0
  207. package/execution/useArtifactContentById.js.map +1 -0
  208. package/execution/useArtifactDownload.d.ts +4 -3
  209. package/execution/useArtifactDownload.d.ts.map +1 -1
  210. package/execution/useArtifactDownload.js +4 -3
  211. package/execution/useArtifactDownload.js.map +1 -1
  212. package/execution/useCreateAgentExecution.d.ts +1 -1
  213. package/execution/useLiveAgentExecution.d.ts +59 -0
  214. package/execution/useLiveAgentExecution.d.ts.map +1 -0
  215. package/execution/useLiveAgentExecution.js +73 -0
  216. package/execution/useLiveAgentExecution.js.map +1 -0
  217. package/index.d.ts +15 -10
  218. package/index.d.ts.map +1 -1
  219. package/index.js +21 -6
  220. package/index.js.map +1 -1
  221. package/internal/DecisionButton.d.ts +4 -3
  222. package/internal/DecisionButton.d.ts.map +1 -1
  223. package/internal/DecisionButton.js +4 -3
  224. package/internal/DecisionButton.js.map +1 -1
  225. package/internal/oauthPopup.d.ts +101 -0
  226. package/internal/oauthPopup.d.ts.map +1 -0
  227. package/internal/oauthPopup.js +208 -0
  228. package/internal/oauthPopup.js.map +1 -0
  229. package/internal/store/index.d.ts +0 -2
  230. package/internal/store/index.d.ts.map +1 -1
  231. package/internal/store/index.js +0 -1
  232. package/internal/store/index.js.map +1 -1
  233. package/internal/store/workflow-execution-event-store.d.ts +34 -1
  234. package/internal/store/workflow-execution-event-store.d.ts.map +1 -1
  235. package/internal/store/workflow-execution-event-store.js +81 -3
  236. package/internal/store/workflow-execution-event-store.js.map +1 -1
  237. package/internal/store/workspace-file-selection-store.d.ts +1 -2
  238. package/internal/store/workspace-file-selection-store.d.ts.map +1 -1
  239. package/internal/store/workspace-file-selection-store.js +2 -5
  240. package/internal/store/workspace-file-selection-store.js.map +1 -1
  241. package/internal/thread-card/ThreadCardShell.d.ts +91 -0
  242. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -0
  243. package/internal/thread-card/ThreadCardShell.js +41 -0
  244. package/internal/thread-card/ThreadCardShell.js.map +1 -0
  245. package/internal/thread-card/glyphs.d.ts +34 -0
  246. package/internal/thread-card/glyphs.d.ts.map +1 -0
  247. package/internal/thread-card/glyphs.js +50 -0
  248. package/internal/thread-card/glyphs.js.map +1 -0
  249. package/internal/thread-card/index.d.ts +3 -0
  250. package/internal/thread-card/index.d.ts.map +1 -0
  251. package/internal/thread-card/index.js +3 -0
  252. package/internal/thread-card/index.js.map +1 -0
  253. package/internal/useRevealLine.d.ts +2 -2
  254. package/internal/useRevealLine.js +2 -2
  255. package/mcp-server/OAuthCallbackHandler.js +1 -1
  256. package/mcp-server/OAuthCallbackHandler.js.map +1 -1
  257. package/mcp-server/useMcpServerOAuthConnect.d.ts +4 -23
  258. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  259. package/mcp-server/useMcpServerOAuthConnect.js +12 -145
  260. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  261. package/package.json +4 -4
  262. package/session/NewSessionViewer.d.ts.map +1 -1
  263. package/session/NewSessionViewer.js +0 -1
  264. package/session/NewSessionViewer.js.map +1 -1
  265. package/session/SessionPanelChip.d.ts +7 -22
  266. package/session/SessionPanelChip.d.ts.map +1 -1
  267. package/session/SessionPanelChip.js +8 -36
  268. package/session/SessionPanelChip.js.map +1 -1
  269. package/session/SessionViewer.d.ts +7 -4
  270. package/session/SessionViewer.d.ts.map +1 -1
  271. package/session/SessionViewer.js +32 -30
  272. package/session/SessionViewer.js.map +1 -1
  273. package/session/audience.d.ts +15 -1
  274. package/session/audience.d.ts.map +1 -1
  275. package/session/channelOrigin.d.ts +33 -0
  276. package/session/channelOrigin.d.ts.map +1 -0
  277. package/session/channelOrigin.js +36 -0
  278. package/session/channelOrigin.js.map +1 -0
  279. package/session/facets/index.d.ts +0 -2
  280. package/session/facets/index.d.ts.map +1 -1
  281. package/session/facets/index.js +0 -1
  282. package/session/facets/index.js.map +1 -1
  283. package/session/index.d.ts +2 -2
  284. package/session/index.d.ts.map +1 -1
  285. package/session/index.js +5 -3
  286. package/session/index.js.map +1 -1
  287. package/session/useSessionFileChanges.d.ts +10 -34
  288. package/session/useSessionFileChanges.d.ts.map +1 -1
  289. package/session/useSessionFileChanges.js +9 -141
  290. package/session/useSessionFileChanges.js.map +1 -1
  291. package/session/useSessionPanel.d.ts +5 -15
  292. package/session/useSessionPanel.d.ts.map +1 -1
  293. package/session/useSessionPanel.js +3 -35
  294. package/session/useSessionPanel.js.map +1 -1
  295. package/session/useSessionRailViews.d.ts +3 -6
  296. package/session/useSessionRailViews.d.ts.map +1 -1
  297. package/session/useSessionRailViews.js +3 -17
  298. package/session/useSessionRailViews.js.map +1 -1
  299. package/settings/ChannelAppsSection.d.ts +13 -0
  300. package/settings/ChannelAppsSection.d.ts.map +1 -0
  301. package/settings/ChannelAppsSection.js +48 -0
  302. package/settings/ChannelAppsSection.js.map +1 -0
  303. package/settings/index.d.ts +1 -0
  304. package/settings/index.d.ts.map +1 -1
  305. package/settings/index.js +1 -0
  306. package/settings/index.js.map +1 -1
  307. package/settings/settings-nav.d.ts.map +1 -1
  308. package/settings/settings-nav.js +6 -1
  309. package/settings/settings-nav.js.map +1 -1
  310. package/sharing/AgentShareList.d.ts.map +1 -1
  311. package/sharing/AgentShareList.js +11 -3
  312. package/sharing/AgentShareList.js.map +1 -1
  313. package/sharing/ShareAgentDialog.js +1 -1
  314. package/sharing/useShareToolReadiness.d.ts +9 -38
  315. package/sharing/useShareToolReadiness.d.ts.map +1 -1
  316. package/sharing/useShareToolReadiness.js +7 -72
  317. package/sharing/useShareToolReadiness.js.map +1 -1
  318. package/src/agent-instance/AgentInstanceList.tsx +60 -42
  319. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +161 -0
  320. package/src/channel/AgentChannelsPanel.tsx +688 -0
  321. package/src/channel/ChannelConversationsDialog.tsx +267 -0
  322. package/src/channel/ChannelCredentialsDialog.tsx +219 -0
  323. package/src/channel/ChannelToolCredentials.tsx +124 -0
  324. package/src/channel/ConnectSlackDialog.tsx +611 -0
  325. package/src/channel/ConnectWhatsAppDialog.tsx +624 -0
  326. package/src/channel/SlackMarkIcon.tsx +21 -0
  327. package/src/channel/WhatsAppMarkIcon.tsx +22 -0
  328. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +638 -0
  329. package/src/channel/__tests__/ChannelConversationsDialog.test.tsx +114 -0
  330. package/src/channel/__tests__/ChannelCredentialsDialog.test.tsx +240 -0
  331. package/src/channel/__tests__/ConnectSlackDialog.test.tsx +659 -0
  332. package/src/channel/__tests__/ConnectWhatsAppDialog.test.tsx +564 -0
  333. package/src/channel/__tests__/providers.test.ts +118 -0
  334. package/src/channel/__tests__/useAgentChannel.test.tsx +116 -0
  335. package/src/channel/__tests__/useAgentChannelList.test.tsx +166 -0
  336. package/src/channel/__tests__/useChannelSessions.test.tsx +95 -0
  337. package/src/channel/__tests__/useChannelToolReadiness.test.tsx +158 -0
  338. package/src/channel/__tests__/useConnectSlackChannel.test.tsx +276 -0
  339. package/src/channel/__tests__/useDeleteAgentChannel.test.tsx +97 -0
  340. package/src/channel/__tests__/useInstallChannel.test.tsx +177 -0
  341. package/src/channel/__tests__/useSaveAgentChannel.test.tsx +294 -0
  342. package/src/channel/connect/ServingAppSection.tsx +185 -0
  343. package/src/channel/connect/ToolCredentialsSection.tsx +67 -0
  344. package/src/channel/connect/VerbatimRefusal.tsx +27 -0
  345. package/src/channel/connect/icons.tsx +42 -0
  346. package/src/channel/index.ts +65 -0
  347. package/src/channel/providerPresentation.ts +154 -0
  348. package/src/channel/providers.ts +73 -0
  349. package/src/channel/useAgentChannel.ts +58 -0
  350. package/src/channel/useAgentChannelList.ts +69 -0
  351. package/src/channel/useChannelSessions.ts +73 -0
  352. package/src/channel/useChannelToolReadiness.ts +39 -0
  353. package/src/channel/useConnectSlackChannel.ts +195 -0
  354. package/src/channel/useCreateAgentChannel.ts +73 -0
  355. package/src/channel/useDeleteAgentChannel.ts +71 -0
  356. package/src/channel/useInstallChannel.ts +117 -0
  357. package/src/channel/useOrgAgentChannelList.ts +60 -0
  358. package/src/channel/useSaveAgentChannel.ts +133 -0
  359. package/src/channel-app/ChannelAppDetailPanel.tsx +510 -0
  360. package/src/channel-app/ChannelAppListPanel.tsx +201 -0
  361. package/src/channel-app/CreateChannelAppForm.tsx +529 -0
  362. package/src/channel-app/__tests__/channelAppWhatsApp.test.tsx +270 -0
  363. package/src/channel-app/__tests__/slackAppSetup.test.ts +75 -0
  364. package/src/channel-app/__tests__/useChannelAppHooks.test.tsx +157 -0
  365. package/src/channel-app/__tests__/whatsappAppSetup.test.ts +39 -0
  366. package/src/channel-app/index.ts +30 -0
  367. package/src/channel-app/internal.tsx +180 -0
  368. package/src/channel-app/slackAppSetup.ts +153 -0
  369. package/src/channel-app/useChannelAppList.ts +59 -0
  370. package/src/channel-app/useCreateChannelApp.ts +70 -0
  371. package/src/channel-app/useDeleteChannelApp.ts +62 -0
  372. package/src/channel-app/useUpdateChannelApp.ts +70 -0
  373. package/src/channel-app/whatsappAppSetup.ts +62 -0
  374. package/src/environment/index.ts +2 -0
  375. package/src/environment/useToolCredentialsReadiness.ts +122 -0
  376. package/src/execution/ArtifactContentBody.tsx +6 -88
  377. package/src/execution/ArtifactFileContent.tsx +110 -0
  378. package/src/execution/ArtifactRow.tsx +28 -118
  379. package/src/execution/ArtifactRowView.tsx +137 -0
  380. package/src/execution/FileChangesView.tsx +4 -69
  381. package/src/execution/SubAgentSection.tsx +2 -36
  382. package/src/execution/ToolCallItem.tsx +48 -175
  383. package/src/execution/__tests__/ArtifactFileContent.test.tsx +60 -0
  384. package/src/execution/__tests__/ArtifactRowView.test.tsx +78 -0
  385. package/src/execution/__tests__/agent-execution-document.test.ts +45 -0
  386. package/src/execution/__tests__/artifact-row-item.test.ts +128 -0
  387. package/src/execution/__tests__/deriveExecutionFileChanges.test.ts +270 -0
  388. package/src/execution/__tests__/useArtifactContentById.test.tsx +85 -0
  389. package/src/execution/__tests__/useLiveAgentExecution.test.tsx +202 -0
  390. package/src/execution/agent-execution-document.ts +54 -0
  391. package/src/execution/artifact-document.ts +24 -0
  392. package/src/execution/artifact-row-item.ts +97 -0
  393. package/src/execution/deriveExecutionFileChanges.ts +237 -0
  394. package/src/execution/file-change-document.ts +37 -0
  395. package/src/execution/index.ts +36 -0
  396. package/src/execution/useArtifactContentById.ts +120 -0
  397. package/src/execution/useArtifactDownload.ts +4 -3
  398. package/src/execution/useCreateAgentExecution.ts +1 -1
  399. package/src/execution/useLiveAgentExecution.ts +127 -0
  400. package/src/index.ts +155 -11
  401. package/src/internal/DecisionButton.tsx +4 -3
  402. package/src/internal/__tests__/ThreadCardShell.test.tsx +105 -0
  403. package/src/internal/__tests__/oauthPopup.test.ts +245 -0
  404. package/src/internal/oauthPopup.ts +261 -0
  405. package/src/internal/store/__tests__/workflow-execution-event-store.test.ts +375 -5
  406. package/src/internal/store/index.ts +0 -3
  407. package/src/internal/store/workflow-execution-event-store.ts +123 -4
  408. package/src/internal/store/workspace-file-selection-store.ts +2 -5
  409. package/src/internal/thread-card/ThreadCardShell.tsx +189 -0
  410. package/src/internal/thread-card/glyphs.tsx +108 -0
  411. package/src/internal/thread-card/index.ts +19 -0
  412. package/src/internal/useRevealLine.ts +2 -2
  413. package/src/mcp-server/OAuthCallbackHandler.tsx +2 -2
  414. package/src/mcp-server/useMcpServerOAuthConnect.ts +22 -184
  415. package/src/session/NewSessionViewer.tsx +0 -1
  416. package/src/session/SessionPanelChip.tsx +10 -96
  417. package/src/session/SessionViewer.tsx +170 -144
  418. package/src/session/__tests__/SessionViewer-artifactTabs.test.tsx +1 -1
  419. package/src/session/__tests__/observerAudience.test.tsx +241 -0
  420. package/src/session/__tests__/useSessionPanel.test.ts +6 -61
  421. package/src/session/__tests__/useSessionRailViews.test.tsx +5 -27
  422. package/src/session/audience.ts +15 -1
  423. package/src/session/channelOrigin.ts +45 -0
  424. package/src/session/facets/index.ts +0 -3
  425. package/src/session/index.ts +9 -6
  426. package/src/session/useSessionFileChanges.ts +12 -153
  427. package/src/session/useSessionPanel.ts +8 -51
  428. package/src/session/useSessionRailViews.tsx +2 -27
  429. package/src/settings/ChannelAppsSection.tsx +133 -0
  430. package/src/settings/index.ts +1 -0
  431. package/src/settings/settings-nav.ts +6 -0
  432. package/src/sharing/AgentShareList.tsx +85 -64
  433. package/src/sharing/ShareAgentDialog.tsx +1 -1
  434. package/src/sharing/__tests__/AgentShareList.test.tsx +92 -12
  435. package/src/sharing/useShareToolReadiness.ts +13 -101
  436. package/src/workflow/WorkflowAgentExecutionDocument.tsx +283 -0
  437. package/src/workflow/WorkflowApprovalList.tsx +158 -0
  438. package/src/workflow/WorkflowArtifactDocument.tsx +257 -0
  439. package/src/workflow/WorkflowExecutionGraph.tsx +40 -78
  440. package/src/workflow/WorkflowExecutionViewer.tsx +610 -287
  441. package/src/workflow/WorkflowFileReviewList.tsx +1 -1
  442. package/src/workflow/WorkflowTaskApprovalCard.tsx +5 -4
  443. package/src/workflow/WorkflowTaskApprovalSummary.tsx +6 -6
  444. package/src/workflow/__tests__/WorkflowAgentExecutionDocument.test.tsx +651 -0
  445. package/src/workflow/__tests__/WorkflowApprovalList.test.tsx +229 -0
  446. package/src/workflow/__tests__/WorkflowArtifactDocument.test.tsx +90 -0
  447. package/src/workflow/__tests__/WorkflowArtifactsTab.test.tsx +85 -0
  448. package/src/workflow/__tests__/WorkflowChangesTab.test.tsx +113 -0
  449. package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +473 -0
  450. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +632 -0
  451. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
  452. package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +947 -0
  453. package/src/workflow/__tests__/WorkflowUsageTab.test.tsx +163 -0
  454. package/src/workflow/__tests__/agent-call-live-experience.test.ts +6 -53
  455. package/src/workflow/__tests__/derive-execution-overlays.test.ts +4 -0
  456. package/src/workflow/__tests__/deriveWorkflowArtifactItems.test.ts +71 -0
  457. package/src/workflow/__tests__/deriveWorkflowUsageItems.test.ts +132 -0
  458. package/src/workflow/__tests__/execution-graph.test.ts +8 -0
  459. package/src/workflow/__tests__/project-thread-items.test.ts +428 -0
  460. package/src/workflow/__tests__/structured-data-viewer.test.tsx +1 -1
  461. package/src/workflow/__tests__/task-approval.test.ts +149 -0
  462. package/src/workflow/__tests__/task-detail-io.test.ts +40 -0
  463. package/src/workflow/__tests__/task-presentation.test.ts +479 -0
  464. package/src/workflow/__tests__/useActiveTaskName.test.ts +4 -0
  465. package/src/workflow/__tests__/useApprovalBoundary.test.ts +158 -0
  466. package/src/workflow/__tests__/useExecutionAnnouncements.test.ts +4 -0
  467. package/src/workflow/__tests__/useFollowExecution.test.ts +2 -89
  468. package/src/workflow/__tests__/useWorkflowExecutionFileChanges.test.tsx +412 -0
  469. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +297 -0
  470. package/src/workflow/__tests__/useWorkflowExecutionRailViews.test.tsx +115 -0
  471. package/src/workflow/deriveWorkflowArtifactItems.ts +59 -0
  472. package/src/workflow/deriveWorkflowUsageItems.ts +73 -0
  473. package/src/workflow/diagnosis-document.ts +31 -0
  474. package/src/workflow/execution/index.ts +0 -15
  475. package/src/workflow/facets/WorkflowArtifactsTab.tsx +99 -0
  476. package/src/workflow/facets/WorkflowChangesTab.tsx +129 -0
  477. package/src/workflow/facets/WorkflowUsageTab.tsx +258 -0
  478. package/src/workflow/format-utils.ts +2 -3
  479. package/src/workflow/index.ts +106 -62
  480. package/src/workflow/inspector/index.ts +0 -4
  481. package/src/workflow/instance/WorkflowInstanceList.tsx +59 -41
  482. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +156 -0
  483. package/src/workflow/task-detail/index.ts +11 -0
  484. package/src/workflow/task-detail/task-approval.ts +158 -0
  485. package/src/workflow/task-detail/task-detail-io.ts +65 -0
  486. package/src/workflow/thread/WorkflowTaskThread.tsx +845 -0
  487. package/src/workflow/thread/project-thread-items.ts +235 -0
  488. package/src/workflow/thread/task-presentation.ts +427 -0
  489. package/src/workflow/thread/thread-presentation.ts +59 -0
  490. package/src/workflow/thread/useWorkflowThreadItems.ts +34 -0
  491. package/src/workflow/useApprovalBoundary.ts +72 -0
  492. package/src/workflow/useFollowExecution.ts +0 -26
  493. package/src/workflow/useWorkflowArtifactDownload.ts +68 -0
  494. package/src/workflow/useWorkflowExecutionActions.ts +3 -2
  495. package/src/workflow/useWorkflowExecutionFileChanges.ts +341 -0
  496. package/src/workflow/useWorkflowExecutionGraph.ts +3 -43
  497. package/src/workflow/useWorkflowExecutionPanel.ts +292 -0
  498. package/src/workflow/useWorkflowExecutionRailViews.tsx +173 -0
  499. package/src/workspace/FileViewer.tsx +3 -3
  500. package/src/workspace/PanelChip.tsx +103 -0
  501. package/src/workspace/WorkspaceSurface.tsx +50 -6
  502. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +110 -0
  503. package/src/workspace/index.ts +3 -0
  504. package/styles.css +1 -1
  505. package/workflow/WorkflowAgentExecutionDocument.d.ts +79 -0
  506. package/workflow/WorkflowAgentExecutionDocument.d.ts.map +1 -0
  507. package/workflow/WorkflowAgentExecutionDocument.js +87 -0
  508. package/workflow/WorkflowAgentExecutionDocument.js.map +1 -0
  509. package/workflow/WorkflowApprovalList.d.ts +62 -0
  510. package/workflow/WorkflowApprovalList.d.ts.map +1 -0
  511. package/workflow/WorkflowApprovalList.js +52 -0
  512. package/workflow/WorkflowApprovalList.js.map +1 -0
  513. package/workflow/WorkflowArtifactDocument.d.ts +29 -0
  514. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -0
  515. package/workflow/WorkflowArtifactDocument.js +89 -0
  516. package/workflow/WorkflowArtifactDocument.js.map +1 -0
  517. package/workflow/WorkflowExecutionGraph.d.ts +15 -13
  518. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  519. package/workflow/WorkflowExecutionGraph.js +18 -53
  520. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  521. package/workflow/WorkflowExecutionViewer.d.ts +8 -5
  522. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  523. package/workflow/WorkflowExecutionViewer.js +329 -54
  524. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  525. package/workflow/WorkflowFileReviewList.d.ts +1 -1
  526. package/workflow/WorkflowFileReviewList.js +1 -1
  527. package/workflow/WorkflowTaskApprovalCard.d.ts +4 -3
  528. package/workflow/WorkflowTaskApprovalCard.d.ts.map +1 -1
  529. package/workflow/WorkflowTaskApprovalCard.js +5 -4
  530. package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
  531. package/workflow/WorkflowTaskApprovalSummary.d.ts +6 -6
  532. package/workflow/WorkflowTaskApprovalSummary.js +5 -5
  533. package/workflow/deriveWorkflowArtifactItems.d.ts +30 -0
  534. package/workflow/deriveWorkflowArtifactItems.d.ts.map +1 -0
  535. package/workflow/deriveWorkflowArtifactItems.js +38 -0
  536. package/workflow/deriveWorkflowArtifactItems.js.map +1 -0
  537. package/workflow/deriveWorkflowUsageItems.d.ts +36 -0
  538. package/workflow/deriveWorkflowUsageItems.d.ts.map +1 -0
  539. package/workflow/deriveWorkflowUsageItems.js +50 -0
  540. package/workflow/deriveWorkflowUsageItems.js.map +1 -0
  541. package/workflow/diagnosis-document.d.ts +17 -0
  542. package/workflow/diagnosis-document.d.ts.map +1 -0
  543. package/workflow/diagnosis-document.js +29 -0
  544. package/workflow/diagnosis-document.js.map +1 -0
  545. package/workflow/execution/index.d.ts +0 -2
  546. package/workflow/execution/index.d.ts.map +1 -1
  547. package/workflow/execution/index.js +0 -2
  548. package/workflow/execution/index.js.map +1 -1
  549. package/workflow/facets/WorkflowArtifactsTab.d.ts +26 -0
  550. package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -0
  551. package/workflow/facets/WorkflowArtifactsTab.js +34 -0
  552. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -0
  553. package/workflow/facets/WorkflowChangesTab.d.ts +37 -0
  554. package/workflow/facets/WorkflowChangesTab.d.ts.map +1 -0
  555. package/workflow/facets/WorkflowChangesTab.js +50 -0
  556. package/workflow/facets/WorkflowChangesTab.js.map +1 -0
  557. package/workflow/facets/WorkflowUsageTab.d.ts +27 -0
  558. package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -0
  559. package/workflow/facets/WorkflowUsageTab.js +87 -0
  560. package/workflow/facets/WorkflowUsageTab.js.map +1 -0
  561. package/workflow/format-utils.d.ts +2 -3
  562. package/workflow/format-utils.d.ts.map +1 -1
  563. package/workflow/format-utils.js +2 -3
  564. package/workflow/format-utils.js.map +1 -1
  565. package/workflow/index.d.ts +21 -10
  566. package/workflow/index.d.ts.map +1 -1
  567. package/workflow/index.js +29 -14
  568. package/workflow/index.js.map +1 -1
  569. package/workflow/inspector/index.d.ts +0 -2
  570. package/workflow/inspector/index.d.ts.map +1 -1
  571. package/workflow/inspector/index.js +0 -2
  572. package/workflow/inspector/index.js.map +1 -1
  573. package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
  574. package/workflow/instance/WorkflowInstanceList.js +11 -3
  575. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  576. package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -0
  577. package/workflow/task-detail/StructuredDataViewer.js.map +1 -0
  578. package/workflow/task-detail/index.d.ts +4 -0
  579. package/workflow/task-detail/index.d.ts.map +1 -0
  580. package/workflow/task-detail/index.js +4 -0
  581. package/workflow/task-detail/index.js.map +1 -0
  582. package/workflow/task-detail/task-approval.d.ts +89 -0
  583. package/workflow/task-detail/task-approval.d.ts.map +1 -0
  584. package/workflow/task-detail/task-approval.js +84 -0
  585. package/workflow/task-detail/task-approval.js.map +1 -0
  586. package/workflow/task-detail/task-detail-io.d.ts +39 -0
  587. package/workflow/task-detail/task-detail-io.d.ts.map +1 -0
  588. package/workflow/task-detail/task-detail-io.js +42 -0
  589. package/workflow/task-detail/task-detail-io.js.map +1 -0
  590. package/workflow/thread/WorkflowTaskThread.d.ts +91 -0
  591. package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -0
  592. package/workflow/thread/WorkflowTaskThread.js +318 -0
  593. package/workflow/thread/WorkflowTaskThread.js.map +1 -0
  594. package/workflow/thread/project-thread-items.d.ts +108 -0
  595. package/workflow/thread/project-thread-items.d.ts.map +1 -0
  596. package/workflow/thread/project-thread-items.js +126 -0
  597. package/workflow/thread/project-thread-items.js.map +1 -0
  598. package/workflow/thread/task-presentation.d.ts +73 -0
  599. package/workflow/thread/task-presentation.d.ts.map +1 -0
  600. package/workflow/thread/task-presentation.js +331 -0
  601. package/workflow/thread/task-presentation.js.map +1 -0
  602. package/workflow/thread/thread-presentation.d.ts +28 -0
  603. package/workflow/thread/thread-presentation.d.ts.map +1 -0
  604. package/workflow/thread/thread-presentation.js +28 -0
  605. package/workflow/thread/thread-presentation.js.map +1 -0
  606. package/workflow/thread/useWorkflowThreadItems.d.ts +16 -0
  607. package/workflow/thread/useWorkflowThreadItems.d.ts.map +1 -0
  608. package/workflow/thread/useWorkflowThreadItems.js +22 -0
  609. package/workflow/thread/useWorkflowThreadItems.js.map +1 -0
  610. package/workflow/useApprovalBoundary.d.ts +38 -0
  611. package/workflow/useApprovalBoundary.d.ts.map +1 -0
  612. package/workflow/useApprovalBoundary.js +55 -0
  613. package/workflow/useApprovalBoundary.js.map +1 -0
  614. package/workflow/useFollowExecution.d.ts +0 -20
  615. package/workflow/useFollowExecution.d.ts.map +1 -1
  616. package/workflow/useFollowExecution.js +0 -17
  617. package/workflow/useFollowExecution.js.map +1 -1
  618. package/workflow/useWorkflowArtifactDownload.d.ts +28 -0
  619. package/workflow/useWorkflowArtifactDownload.d.ts.map +1 -0
  620. package/workflow/useWorkflowArtifactDownload.js +45 -0
  621. package/workflow/useWorkflowArtifactDownload.js.map +1 -0
  622. package/workflow/useWorkflowExecutionActions.d.ts +3 -2
  623. package/workflow/useWorkflowExecutionActions.d.ts.map +1 -1
  624. package/workflow/useWorkflowExecutionActions.js.map +1 -1
  625. package/workflow/useWorkflowExecutionFileChanges.d.ts +107 -0
  626. package/workflow/useWorkflowExecutionFileChanges.d.ts.map +1 -0
  627. package/workflow/useWorkflowExecutionFileChanges.js +244 -0
  628. package/workflow/useWorkflowExecutionFileChanges.js.map +1 -0
  629. package/workflow/useWorkflowExecutionGraph.d.ts +1 -14
  630. package/workflow/useWorkflowExecutionGraph.d.ts.map +1 -1
  631. package/workflow/useWorkflowExecutionGraph.js +2 -25
  632. package/workflow/useWorkflowExecutionGraph.js.map +1 -1
  633. package/workflow/useWorkflowExecutionPanel.d.ts +108 -0
  634. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -0
  635. package/workflow/useWorkflowExecutionPanel.js +103 -0
  636. package/workflow/useWorkflowExecutionPanel.js.map +1 -0
  637. package/workflow/useWorkflowExecutionRailViews.d.ts +46 -0
  638. package/workflow/useWorkflowExecutionRailViews.d.ts.map +1 -0
  639. package/workflow/useWorkflowExecutionRailViews.js +81 -0
  640. package/workflow/useWorkflowExecutionRailViews.js.map +1 -0
  641. package/workspace/FileViewer.d.ts +1 -1
  642. package/workspace/FileViewer.js +3 -3
  643. package/workspace/FileViewer.js.map +1 -1
  644. package/workspace/PanelChip.d.ts +27 -0
  645. package/workspace/PanelChip.d.ts.map +1 -0
  646. package/workspace/PanelChip.js +42 -0
  647. package/workspace/PanelChip.js.map +1 -0
  648. package/workspace/WorkspaceSurface.d.ts +25 -1
  649. package/workspace/WorkspaceSurface.d.ts.map +1 -1
  650. package/workspace/WorkspaceSurface.js +21 -9
  651. package/workspace/WorkspaceSurface.js.map +1 -1
  652. package/workspace/index.d.ts +3 -1
  653. package/workspace/index.d.ts.map +1 -1
  654. package/workspace/index.js +1 -0
  655. package/workspace/index.js.map +1 -1
  656. package/execution/ThreadSelectionContext.d.ts +0 -17
  657. package/execution/ThreadSelectionContext.d.ts.map +0 -1
  658. package/execution/ThreadSelectionContext.js +0 -18
  659. package/execution/ThreadSelectionContext.js.map +0 -1
  660. package/execution/useThreadSelection.d.ts +0 -35
  661. package/execution/useThreadSelection.d.ts.map +0 -1
  662. package/execution/useThreadSelection.js +0 -65
  663. package/execution/useThreadSelection.js.map +0 -1
  664. package/internal/store/selection-store.d.ts +0 -53
  665. package/internal/store/selection-store.d.ts.map +0 -1
  666. package/internal/store/selection-store.js +0 -88
  667. package/internal/store/selection-store.js.map +0 -1
  668. package/session/artifact-document.d.ts.map +0 -1
  669. package/session/artifact-document.js +0 -22
  670. package/session/artifact-document.js.map +0 -1
  671. package/session/facets/InspectTab.d.ts +0 -13
  672. package/session/facets/InspectTab.d.ts.map +0 -1
  673. package/session/facets/InspectTab.js +0 -19
  674. package/session/facets/InspectTab.js.map +0 -1
  675. package/src/execution/ThreadSelectionContext.tsx +0 -20
  676. package/src/execution/useThreadSelection.ts +0 -95
  677. package/src/internal/store/__tests__/selection-store.test.ts +0 -115
  678. package/src/internal/store/selection-store.ts +0 -112
  679. package/src/session/artifact-document.ts +0 -23
  680. package/src/session/facets/InspectTab.tsx +0 -57
  681. package/src/workflow/WorkflowExecutionApprovalCard.tsx +0 -154
  682. package/src/workflow/WorkflowExecutionArtifactPanel.tsx +0 -107
  683. package/src/workflow/WorkflowExecutionCostPanel.tsx +0 -120
  684. package/src/workflow/WorkflowExecutionTaskPanel.tsx +0 -129
  685. package/src/workflow/WorkflowExecutionTimeline.tsx +0 -151
  686. package/src/workflow/WorkflowExecutionTimelineEvent.tsx +0 -497
  687. package/src/workflow/__tests__/ExecutionInspector.test.tsx +0 -155
  688. package/src/workflow/__tests__/WorkflowExecutionApprovalCard.test.tsx +0 -129
  689. package/src/workflow/__tests__/derive-task-detail.test.ts +0 -1265
  690. package/src/workflow/__tests__/derive-waterfall-entries.test.ts +0 -521
  691. package/src/workflow/__tests__/execution-inspector.test.tsx +0 -332
  692. package/src/workflow/execution/derive-waterfall-entries.ts +0 -377
  693. package/src/workflow/execution/useWaterfallEntries.ts +0 -125
  694. package/src/workflow/execution-inspector/AgentCallTab.tsx +0 -169
  695. package/src/workflow/execution-inspector/ErrorTab.tsx +0 -110
  696. package/src/workflow/execution-inspector/EventLogTab.tsx +0 -79
  697. package/src/workflow/execution-inspector/ExecutionInspector.tsx +0 -341
  698. package/src/workflow/execution-inspector/InputOutputTab.tsx +0 -325
  699. package/src/workflow/execution-inspector/RetriesTab.tsx +0 -68
  700. package/src/workflow/execution-inspector/SummaryTab.tsx +0 -62
  701. package/src/workflow/execution-inspector/derive-task-detail.ts +0 -584
  702. package/src/workflow/execution-inspector/index.ts +0 -14
  703. package/src/workflow/execution-inspector/useExecutionTaskDetail.ts +0 -55
  704. package/src/workflow/inspector/ExecutionInspectorAdapter.tsx +0 -40
  705. package/src/workflow/waterfall/WaterfallBar.tsx +0 -167
  706. package/src/workflow/waterfall/WaterfallRow.tsx +0 -112
  707. package/src/workflow/waterfall/WaterfallScale.tsx +0 -52
  708. package/src/workflow/waterfall/WaterfallTimeline.tsx +0 -138
  709. package/src/workflow/waterfall/WaterfallTooltip.tsx +0 -74
  710. package/src/workflow/waterfall/index.ts +0 -5
  711. package/workflow/WorkflowExecutionApprovalCard.d.ts +0 -34
  712. package/workflow/WorkflowExecutionApprovalCard.d.ts.map +0 -1
  713. package/workflow/WorkflowExecutionApprovalCard.js +0 -46
  714. package/workflow/WorkflowExecutionApprovalCard.js.map +0 -1
  715. package/workflow/WorkflowExecutionArtifactPanel.d.ts +0 -15
  716. package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +0 -1
  717. package/workflow/WorkflowExecutionArtifactPanel.js +0 -46
  718. package/workflow/WorkflowExecutionArtifactPanel.js.map +0 -1
  719. package/workflow/WorkflowExecutionCostPanel.d.ts +0 -18
  720. package/workflow/WorkflowExecutionCostPanel.d.ts.map +0 -1
  721. package/workflow/WorkflowExecutionCostPanel.js +0 -31
  722. package/workflow/WorkflowExecutionCostPanel.js.map +0 -1
  723. package/workflow/WorkflowExecutionTaskPanel.d.ts +0 -24
  724. package/workflow/WorkflowExecutionTaskPanel.d.ts.map +0 -1
  725. package/workflow/WorkflowExecutionTaskPanel.js +0 -51
  726. package/workflow/WorkflowExecutionTaskPanel.js.map +0 -1
  727. package/workflow/WorkflowExecutionTimeline.d.ts +0 -42
  728. package/workflow/WorkflowExecutionTimeline.d.ts.map +0 -1
  729. package/workflow/WorkflowExecutionTimeline.js +0 -52
  730. package/workflow/WorkflowExecutionTimeline.js.map +0 -1
  731. package/workflow/WorkflowExecutionTimelineEvent.d.ts +0 -25
  732. package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +0 -1
  733. package/workflow/WorkflowExecutionTimelineEvent.js +0 -179
  734. package/workflow/WorkflowExecutionTimelineEvent.js.map +0 -1
  735. package/workflow/execution/derive-waterfall-entries.d.ts +0 -85
  736. package/workflow/execution/derive-waterfall-entries.d.ts.map +0 -1
  737. package/workflow/execution/derive-waterfall-entries.js +0 -268
  738. package/workflow/execution/derive-waterfall-entries.js.map +0 -1
  739. package/workflow/execution/useWaterfallEntries.d.ts +0 -25
  740. package/workflow/execution/useWaterfallEntries.d.ts.map +0 -1
  741. package/workflow/execution/useWaterfallEntries.js +0 -67
  742. package/workflow/execution/useWaterfallEntries.js.map +0 -1
  743. package/workflow/execution-inspector/AgentCallTab.d.ts +0 -21
  744. package/workflow/execution-inspector/AgentCallTab.d.ts.map +0 -1
  745. package/workflow/execution-inspector/AgentCallTab.js +0 -36
  746. package/workflow/execution-inspector/AgentCallTab.js.map +0 -1
  747. package/workflow/execution-inspector/ErrorTab.d.ts +0 -9
  748. package/workflow/execution-inspector/ErrorTab.d.ts.map +0 -1
  749. package/workflow/execution-inspector/ErrorTab.js +0 -29
  750. package/workflow/execution-inspector/ErrorTab.js.map +0 -1
  751. package/workflow/execution-inspector/EventLogTab.d.ts +0 -11
  752. package/workflow/execution-inspector/EventLogTab.d.ts.map +0 -1
  753. package/workflow/execution-inspector/EventLogTab.js +0 -47
  754. package/workflow/execution-inspector/EventLogTab.js.map +0 -1
  755. package/workflow/execution-inspector/ExecutionInspector.d.ts +0 -69
  756. package/workflow/execution-inspector/ExecutionInspector.d.ts.map +0 -1
  757. package/workflow/execution-inspector/ExecutionInspector.js +0 -145
  758. package/workflow/execution-inspector/ExecutionInspector.js.map +0 -1
  759. package/workflow/execution-inspector/InputOutputTab.d.ts +0 -20
  760. package/workflow/execution-inspector/InputOutputTab.d.ts.map +0 -1
  761. package/workflow/execution-inspector/InputOutputTab.js +0 -124
  762. package/workflow/execution-inspector/InputOutputTab.js.map +0 -1
  763. package/workflow/execution-inspector/RetriesTab.d.ts +0 -7
  764. package/workflow/execution-inspector/RetriesTab.d.ts.map +0 -1
  765. package/workflow/execution-inspector/RetriesTab.js +0 -11
  766. package/workflow/execution-inspector/RetriesTab.js.map +0 -1
  767. package/workflow/execution-inspector/StructuredDataViewer.d.ts.map +0 -1
  768. package/workflow/execution-inspector/StructuredDataViewer.js.map +0 -1
  769. package/workflow/execution-inspector/SummaryTab.d.ts +0 -7
  770. package/workflow/execution-inspector/SummaryTab.d.ts.map +0 -1
  771. package/workflow/execution-inspector/SummaryTab.js +0 -10
  772. package/workflow/execution-inspector/SummaryTab.js.map +0 -1
  773. package/workflow/execution-inspector/derive-task-detail.d.ts +0 -140
  774. package/workflow/execution-inspector/derive-task-detail.d.ts.map +0 -1
  775. package/workflow/execution-inspector/derive-task-detail.js +0 -366
  776. package/workflow/execution-inspector/derive-task-detail.js.map +0 -1
  777. package/workflow/execution-inspector/index.d.ts +0 -4
  778. package/workflow/execution-inspector/index.d.ts.map +0 -1
  779. package/workflow/execution-inspector/index.js +0 -4
  780. package/workflow/execution-inspector/index.js.map +0 -1
  781. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts +0 -38
  782. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts.map +0 -1
  783. package/workflow/execution-inspector/useExecutionTaskDetail.js +0 -37
  784. package/workflow/execution-inspector/useExecutionTaskDetail.js.map +0 -1
  785. package/workflow/inspector/ExecutionInspectorAdapter.d.ts +0 -26
  786. package/workflow/inspector/ExecutionInspectorAdapter.d.ts.map +0 -1
  787. package/workflow/inspector/ExecutionInspectorAdapter.js +0 -23
  788. package/workflow/inspector/ExecutionInspectorAdapter.js.map +0 -1
  789. package/workflow/waterfall/WaterfallBar.d.ts +0 -19
  790. package/workflow/waterfall/WaterfallBar.d.ts.map +0 -1
  791. package/workflow/waterfall/WaterfallBar.js +0 -70
  792. package/workflow/waterfall/WaterfallBar.js.map +0 -1
  793. package/workflow/waterfall/WaterfallRow.d.ts +0 -18
  794. package/workflow/waterfall/WaterfallRow.d.ts.map +0 -1
  795. package/workflow/waterfall/WaterfallRow.js +0 -45
  796. package/workflow/waterfall/WaterfallRow.js.map +0 -1
  797. package/workflow/waterfall/WaterfallScale.d.ts +0 -14
  798. package/workflow/waterfall/WaterfallScale.d.ts.map +0 -1
  799. package/workflow/waterfall/WaterfallScale.js +0 -22
  800. package/workflow/waterfall/WaterfallScale.js.map +0 -1
  801. package/workflow/waterfall/WaterfallTimeline.d.ts +0 -46
  802. package/workflow/waterfall/WaterfallTimeline.d.ts.map +0 -1
  803. package/workflow/waterfall/WaterfallTimeline.js +0 -60
  804. package/workflow/waterfall/WaterfallTimeline.js.map +0 -1
  805. package/workflow/waterfall/WaterfallTooltip.d.ts +0 -15
  806. package/workflow/waterfall/WaterfallTooltip.d.ts.map +0 -1
  807. package/workflow/waterfall/WaterfallTooltip.js +0 -20
  808. package/workflow/waterfall/WaterfallTooltip.js.map +0 -1
  809. package/workflow/waterfall/index.d.ts +0 -6
  810. package/workflow/waterfall/index.d.ts.map +0 -1
  811. package/workflow/waterfall/index.js +0 -6
  812. package/workflow/waterfall/index.js.map +0 -1
  813. /package/src/workflow/{execution-inspector → task-detail}/StructuredDataViewer.tsx +0 -0
  814. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.d.ts +0 -0
  815. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.js +0 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Pure projection from the event store's derived task-state map to the
3
+ * ordered card list the workflow task thread renders.
4
+ *
5
+ * Deliberately NOT a second event-log derivation (D-T02-4): the event log
6
+ * already has its canonical walk (`deriveTaskStates` in the store). This
7
+ * module only re-shapes the store's cached map. Thread order is the map's
8
+ * insertion order, which
9
+ * `deriveTaskStates` builds in first-event order (`Map.set` on an existing
10
+ * key preserves position) — the flat start-order model of D-T02-1 with no
11
+ * second ordering source to drift.
12
+ *
13
+ * No React dependency — independently importable and testable (DD-003).
14
+ *
15
+ * @since S8 (Workflow Task Thread)
16
+ */
17
+
18
+ import { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
19
+ import type { JsonObject } from "@bufbuild/protobuf";
20
+ import type {
21
+ ApprovalRequestedPayload,
22
+ ApprovalResolvedPayload,
23
+ } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
24
+ import type { DerivedTaskState } from "../../internal/store/workflow-execution-event-store.js";
25
+ import { kindToDisplayName } from "../kind-metadata.js";
26
+ import { taskKindToString } from "../workflow-graph-conversions.js";
27
+ import {
28
+ threadCardVariant,
29
+ type WorkflowThreadCardVariant,
30
+ } from "./thread-presentation.js";
31
+ import {
32
+ resolveTaskPreview,
33
+ type WorkflowTaskDisclosure,
34
+ } from "./task-presentation.js";
35
+
36
+ // ---------------------------------------------------------------------------
37
+ // Public types
38
+ // ---------------------------------------------------------------------------
39
+
40
+ /**
41
+ * One task card in the thread — a flat, display-ready projection of a
42
+ * `DerivedTaskState`. Fields are copied (not referenced) so value equality
43
+ * is a shallow field compare, which powers the structural sharing below.
44
+ */
45
+ export interface WorkflowThreadItem {
46
+ readonly taskName: string;
47
+ readonly taskKind: WorkflowTaskKind;
48
+ /**
49
+ * Human label for the kind, from the canonical `kindToDisplayName`.
50
+ * The empty string for `unspecified` kinds (the snapshot-derived fallback
51
+ * map carries no kind) — consumers hide the kind chip rather than render
52
+ * a meaningless "Unknown" label.
53
+ */
54
+ readonly kindLabel: string;
55
+ readonly variant: WorkflowThreadCardVariant;
56
+ readonly status: DerivedTaskState["status"];
57
+ readonly durationMs: number;
58
+ readonly costMicros: bigint;
59
+ readonly tokensUsed: bigint;
60
+ readonly attemptNumber: number;
61
+ readonly error: string;
62
+ readonly childExecutionId: string;
63
+ readonly agentSlug: string;
64
+ readonly currentToolName: string;
65
+ readonly messagesCount: number;
66
+ readonly toolCallsCount: number;
67
+ /**
68
+ * Kind-aware one-line preview from `resolveTaskPreview` (T04) — a
69
+ * primitive computed HERE (not in a card hook) so the structural-sharing
70
+ * compare below stays a cheap string check. The empty string when there
71
+ * is nothing kind-specific to say.
72
+ */
73
+ readonly previewLine: string;
74
+ /**
75
+ * Card disclosure mode (T04). Pure function of `taskKind` (like
76
+ * `variant`/`kindLabel`), so it is not part of the equality compare.
77
+ */
78
+ readonly disclosure: WorkflowTaskDisclosure;
79
+ /**
80
+ * Truncated event summaries carried for the card body's fallback ladder
81
+ * (snapshot → event summary → none). Reference-stable: the store reads
82
+ * them off the same immutable events on every re-derivation, so the
83
+ * identity compare below holds across appends.
84
+ */
85
+ readonly inputSummary: JsonObject | null;
86
+ readonly outputSummary: JsonObject | null;
87
+ /**
88
+ * The human_input gate's captured request/resolution payloads (T06) —
89
+ * the in-card review surface's data. Reference-stable like the
90
+ * summaries: the store carries the immutable events' payload messages,
91
+ * so the identity compare below holds across appends and only the
92
+ * gating card's item changes identity when a gate opens or resolves.
93
+ */
94
+ readonly approvalRequest: ApprovalRequestedPayload | null;
95
+ readonly approvalResolution: ApprovalResolvedPayload | null;
96
+ }
97
+
98
+ /**
99
+ * Progress line for the thread header. Pending tasks render no cards
100
+ * (D-T02-5); this is where "what's coming" stays visible (Nielsen #1).
101
+ */
102
+ export interface WorkflowThreadProgress {
103
+ /** Tasks in a terminal state (completed, failed, or skipped). */
104
+ readonly settledTasks: number;
105
+ /** Tasks currently active (running, retrying, or waiting approval). */
106
+ readonly activeTasks: number;
107
+ /** Total planned tasks from `execution_started`; `0` when unknown. */
108
+ readonly totalTasks: number;
109
+ }
110
+
111
+ /** Result of {@link projectThreadItems}. */
112
+ export interface WorkflowThreadProjection {
113
+ readonly items: readonly WorkflowThreadItem[];
114
+ readonly progress: WorkflowThreadProgress;
115
+ }
116
+
117
+ // ---------------------------------------------------------------------------
118
+ // Projection
119
+ // ---------------------------------------------------------------------------
120
+
121
+ const ACTIVE_STATUSES: ReadonlySet<DerivedTaskState["status"]> = new Set([
122
+ "running",
123
+ "retrying",
124
+ "waiting_approval",
125
+ ]);
126
+
127
+ const SETTLED_STATUSES: ReadonlySet<DerivedTaskState["status"]> = new Set([
128
+ "completed",
129
+ "failed",
130
+ "skipped",
131
+ ]);
132
+
133
+ /**
134
+ * Projects the derived task-state map into ordered thread items plus a
135
+ * progress summary.
136
+ *
137
+ * Structural sharing: pass the previous call's `items` and any task whose
138
+ * fields are unchanged keeps its previous object identity. The store
139
+ * rebuilds every `DerivedTaskState` on each event append, so without this,
140
+ * every card would get a fresh item per event and `React.memo` rows could
141
+ * never bail (DD-009/DD-010 — only the actively-changing card re-renders).
142
+ */
143
+ export function projectThreadItems(
144
+ taskStates: ReadonlyMap<string, DerivedTaskState>,
145
+ totalTasks: number,
146
+ previousItems?: readonly WorkflowThreadItem[],
147
+ ): WorkflowThreadProjection {
148
+ const previousByName = new Map<string, WorkflowThreadItem>();
149
+ if (previousItems) {
150
+ for (const item of previousItems) previousByName.set(item.taskName, item);
151
+ }
152
+
153
+ const items: WorkflowThreadItem[] = [];
154
+ let settledTasks = 0;
155
+ let activeTasks = 0;
156
+
157
+ for (const state of taskStates.values()) {
158
+ if (SETTLED_STATUSES.has(state.status)) settledTasks += 1;
159
+ else if (ACTIVE_STATUSES.has(state.status)) activeTasks += 1;
160
+
161
+ const preview = resolveTaskPreview(state);
162
+ const fresh: WorkflowThreadItem = {
163
+ taskName: state.taskName,
164
+ taskKind: state.taskKind,
165
+ kindLabel:
166
+ state.taskKind === WorkflowTaskKind.workflow_task_kind_unspecified
167
+ ? ""
168
+ : kindToDisplayName(taskKindToString(state.taskKind)),
169
+ variant: threadCardVariant(state.taskKind),
170
+ status: state.status,
171
+ durationMs: state.durationMs,
172
+ costMicros: state.costMicros,
173
+ tokensUsed: state.tokensUsed,
174
+ attemptNumber: state.attemptNumber,
175
+ error: state.error,
176
+ childExecutionId: state.childExecutionId,
177
+ agentSlug: state.agentSlug,
178
+ currentToolName: state.currentToolName,
179
+ messagesCount: state.messagesCount,
180
+ toolCallsCount: state.toolCallsCount,
181
+ previewLine: preview.previewLine,
182
+ disclosure: preview.disclosure,
183
+ inputSummary: state.inputSummary,
184
+ outputSummary: state.outputSummary,
185
+ approvalRequest: state.approvalRequest,
186
+ approvalResolution: state.approvalResolution,
187
+ };
188
+
189
+ const previous = previousByName.get(state.taskName);
190
+ items.push(previous && threadItemEqual(previous, fresh) ? previous : fresh);
191
+ }
192
+
193
+ return {
194
+ items,
195
+ progress: {
196
+ settledTasks,
197
+ activeTasks,
198
+ // The snapshot fallback path reports totalTasks as the map size; a
199
+ // stream that never saw execution_started reports 0 ("unknown").
200
+ totalTasks: totalTasks > 0 ? totalTasks : 0,
201
+ },
202
+ };
203
+ }
204
+
205
+ /** Shallow value equality across all card-visible fields. */
206
+ function threadItemEqual(
207
+ a: WorkflowThreadItem,
208
+ b: WorkflowThreadItem,
209
+ ): boolean {
210
+ return (
211
+ a.taskName === b.taskName &&
212
+ a.taskKind === b.taskKind &&
213
+ a.status === b.status &&
214
+ a.durationMs === b.durationMs &&
215
+ a.costMicros === b.costMicros &&
216
+ a.tokensUsed === b.tokensUsed &&
217
+ a.attemptNumber === b.attemptNumber &&
218
+ a.error === b.error &&
219
+ a.childExecutionId === b.childExecutionId &&
220
+ a.agentSlug === b.agentSlug &&
221
+ a.currentToolName === b.currentToolName &&
222
+ a.messagesCount === b.messagesCount &&
223
+ a.toolCallsCount === b.toolCallsCount &&
224
+ a.previewLine === b.previewLine &&
225
+ // The summaries and gate payloads are read off the same immutable
226
+ // stored events on every re-derivation, so identity is the correct
227
+ // (and cheap) compare here.
228
+ a.inputSummary === b.inputSummary &&
229
+ a.outputSummary === b.outputSummary &&
230
+ a.approvalRequest === b.approvalRequest &&
231
+ a.approvalResolution === b.approvalResolution
232
+ // kindLabel/variant/disclosure are pure functions of taskKind — no need
233
+ // to compare.
234
+ );
235
+ }
@@ -0,0 +1,427 @@
1
+ import { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
2
+ import type { JsonObject, JsonValue } from "@bufbuild/protobuf";
3
+ import type { DerivedTaskState } from "../../internal/store/workflow-execution-event-store.js";
4
+ import { formatDuration } from "../format-utils.js";
5
+
6
+ // Headless presentation layer for workflow task cards (T04) — the thread's
7
+ // sibling of the session's `tool-presenter.ts`.
8
+ //
9
+ // `resolveTaskPreview` turns a `DerivedTaskState` into the two presentation
10
+ // primitives a card needs — a bounded one-line preview of what the task did
11
+ // and its disclosure mode — without rendering anything.
12
+ //
13
+ // WHERE THIS RUNS (a deliberate divergence from the session): the session
14
+ // computes presentation in a card-level hook (`useToolPresentation`) because
15
+ // its stream store preserves `ToolCall` object identity across frames, so
16
+ // the hook's `useMemo` bails. The workflow store instead REBUILDS every
17
+ // `DerivedTaskState` on each event append; the memo boundary is the
18
+ // projection's `WorkflowThreadItem` (`threadItemEqual`). Preview-affecting
19
+ // values must therefore be primitives on that item, computed once in
20
+ // `projectThreadItems` — NOT in a card hook. Do not "fix" this back to a
21
+ // hook: it would defeat the thread's structural sharing (DD-009/DD-010).
22
+ //
23
+ // DATA HONESTY: the kind-specific lines read the TRUNCATED event summaries
24
+ // (`input_summary` on task_started, `output_summary` on task_completed).
25
+ // Their population is runner-dependent per kind — every parser here is
26
+ // defensive against absent or unexpectedly-shaped Structs and degrades to
27
+ // the empty string (status-only card), never a broken line. The FULL output
28
+ // lives on the status snapshot and is rendered by the card body, not here.
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Public types
32
+ // ---------------------------------------------------------------------------
33
+
34
+ /**
35
+ * Disclosure mode for a task card, mirroring the session's rule — "does the
36
+ * body carry content the one-line row cannot?":
37
+ *
38
+ * - `"preview"` — I/O-bearing kinds: the card keeps an always-visible,
39
+ * bounded body of the task's output (the session's shell/edit/MCP model).
40
+ * - `"summary"` — thin/derived kinds: a compact row with a chevron-gated
41
+ * detail body.
42
+ */
43
+ export type WorkflowTaskDisclosure = "preview" | "summary";
44
+
45
+ /** The resolved presentation primitives for one task card. */
46
+ export interface WorkflowTaskPreview {
47
+ /**
48
+ * Bounded one-line preview of what the task did (e.g. `set orderId,
49
+ * total`, `3 errors`, `emitted ticket.classified`). The empty string when
50
+ * there is nothing kind-specific to say — consumers hide the line rather
51
+ * than render filler.
52
+ */
53
+ readonly previewLine: string;
54
+ /** Disclosure mode for the card. Pure function of the task kind. */
55
+ readonly disclosure: WorkflowTaskDisclosure;
56
+ }
57
+
58
+ /**
59
+ * Optional per-kind overrides for the preview line and disclosure — the
60
+ * workflow twin of the session's `ToolPresenter` (minus `runGroupable`:
61
+ * workflow tasks are one card per task).
62
+ */
63
+ export interface WorkflowTaskPresenter {
64
+ /**
65
+ * Overrides the kind-specific preview line. Return `null` to fall back to
66
+ * the built-in line for the kind. Status lines (awaiting approval, the
67
+ * failure message, "Skipped") always take precedence and are not
68
+ * overridable — they are correctness surfaces, not wording.
69
+ */
70
+ readonly previewLine?: (state: DerivedTaskState) => string | null;
71
+ /** Overrides the default disclosure mode for the kind. */
72
+ readonly disclosure?: (state: DerivedTaskState) => WorkflowTaskDisclosure;
73
+ }
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // Registry (the platform-builder extension seam)
77
+ // ---------------------------------------------------------------------------
78
+
79
+ const registry = new Map<WorkflowTaskKind, WorkflowTaskPresenter>();
80
+
81
+ /**
82
+ * Registers a custom presenter for a {@link WorkflowTaskKind}, overriding
83
+ * the built-in preview line and/or disclosure. Call once at app startup.
84
+ * This is the extension point for platform builders embedding the workflow
85
+ * execution UI who want product-specific wording without forking the
86
+ * components — the same seam as the session's `registerToolPresenter`.
87
+ *
88
+ * Returns a disposer that unregisters the presenter, restoring the previous
89
+ * one for that kind (or the default). Most apps register once at startup
90
+ * and ignore it; tests and dynamic hosts use it to avoid leaking global
91
+ * state.
92
+ */
93
+ export function registerTaskPresenter(
94
+ kind: WorkflowTaskKind,
95
+ presenter: WorkflowTaskPresenter,
96
+ ): () => void {
97
+ const previous = registry.get(kind);
98
+ registry.set(kind, presenter);
99
+ return () => {
100
+ if (previous === undefined) {
101
+ registry.delete(kind);
102
+ } else {
103
+ registry.set(kind, previous);
104
+ }
105
+ };
106
+ }
107
+
108
+ /** Returns the registered presenter for a kind, if any. */
109
+ export function getTaskPresenter(
110
+ kind: WorkflowTaskKind,
111
+ ): WorkflowTaskPresenter | undefined {
112
+ return registry.get(kind);
113
+ }
114
+
115
+ // ---------------------------------------------------------------------------
116
+ // Disclosure defaults
117
+ // ---------------------------------------------------------------------------
118
+
119
+ /**
120
+ * Kinds whose output can be the point of the task — their cards keep an
121
+ * always-visible bounded body (the session's "preview" categories). The
122
+ * body renders only when output actually exists (the `showBody` gate), so
123
+ * a kind whose runner writes no output — today's invocation kinds, until
124
+ * the output-envelope follow-up standardizes them (DD-T04-3) — stays a
125
+ * clean one-line row with zero cost. `set_vars` earns its place from live
126
+ * data: the runner writes the seeded variables to task output (T05, R2-5).
127
+ *
128
+ * Only genuinely body-less kinds (control flow, `wait`/`listen`, and the
129
+ * snapshot fallback's `unspecified`) stay compact summary rows.
130
+ */
131
+ const PREVIEW_KINDS: ReadonlySet<WorkflowTaskKind> = new Set([
132
+ WorkflowTaskKind.transform,
133
+ WorkflowTaskKind.validate,
134
+ WorkflowTaskKind.llm_call,
135
+ WorkflowTaskKind.eval,
136
+ WorkflowTaskKind.emit_event,
137
+ WorkflowTaskKind.notification,
138
+ WorkflowTaskKind.agent_call,
139
+ WorkflowTaskKind.set_vars,
140
+ WorkflowTaskKind.human_input,
141
+ WorkflowTaskKind.http_call,
142
+ WorkflowTaskKind.grpc_call,
143
+ WorkflowTaskKind.activity_call,
144
+ WorkflowTaskKind.run_workflow,
145
+ ]);
146
+
147
+ /** Default disclosure mode for a task kind. */
148
+ export function defaultDisclosureForKind(
149
+ kind: WorkflowTaskKind,
150
+ ): WorkflowTaskDisclosure {
151
+ return PREVIEW_KINDS.has(kind) ? "preview" : "summary";
152
+ }
153
+
154
+ // ---------------------------------------------------------------------------
155
+ // Resolution
156
+ // ---------------------------------------------------------------------------
157
+
158
+ /** Hard cap on the preview line — it is a header suffix, not a body. */
159
+ const PREVIEW_LINE_MAX_CHARS = 80;
160
+
161
+ /**
162
+ * Resolves the presentation primitives for one task card.
163
+ *
164
+ * Precedence for the line: universal status lines first (awaiting approval,
165
+ * the failure's first line, "Skipped") — these are correctness surfaces —
166
+ * then the registered presenter's line, then the built-in per-kind line.
167
+ */
168
+ export function resolveTaskPreview(
169
+ state: DerivedTaskState,
170
+ ): WorkflowTaskPreview {
171
+ const override = registry.get(state.taskKind);
172
+ const disclosure =
173
+ override?.disclosure?.(state) ?? defaultDisclosureForKind(state.taskKind);
174
+
175
+ const statusLine = statusPreviewLine(state);
176
+ if (statusLine !== null) {
177
+ return { previewLine: truncateLine(statusLine), disclosure };
178
+ }
179
+
180
+ const line =
181
+ override?.previewLine?.(state) ?? defaultPreviewLine(state) ?? "";
182
+ return { previewLine: truncateLine(line), disclosure };
183
+ }
184
+
185
+ /** Universal status lines that outrank any kind-specific preview. */
186
+ function statusPreviewLine(state: DerivedTaskState): string | null {
187
+ if (state.status === "waiting_approval") return "Awaiting approval";
188
+ if (state.status === "failed" && state.error) return firstLine(state.error);
189
+ if (state.status === "skipped") return "Skipped";
190
+ return null;
191
+ }
192
+
193
+ // ---------------------------------------------------------------------------
194
+ // Built-in per-kind lines
195
+ // ---------------------------------------------------------------------------
196
+
197
+ function defaultPreviewLine(state: DerivedTaskState): string | null {
198
+ switch (state.taskKind) {
199
+ case WorkflowTaskKind.agent_call:
200
+ return agentCallLine(state);
201
+ case WorkflowTaskKind.set_vars:
202
+ return setVarsLine(state.inputSummary);
203
+ case WorkflowTaskKind.transform:
204
+ return transformLine(state);
205
+ case WorkflowTaskKind.validate:
206
+ return validateLine(state.outputSummary);
207
+ case WorkflowTaskKind.llm_call:
208
+ return llmCallLine(state);
209
+ case WorkflowTaskKind.eval:
210
+ return evalLine(state.outputSummary);
211
+ case WorkflowTaskKind.emit_event:
212
+ return emitEventLine(state);
213
+ case WorkflowTaskKind.notification:
214
+ return notificationLine(state);
215
+ case WorkflowTaskKind.human_input:
216
+ return humanInputLine(state.outputSummary);
217
+ case WorkflowTaskKind.wait:
218
+ return waitLine(state);
219
+ case WorkflowTaskKind.listen:
220
+ return listenLine(state);
221
+ default:
222
+ // Control flow (branch-taken / fork progress need graph topology the
223
+ // thread does not have — deferred), raise_error (the failure
224
+ // precedence already shows the message), the invocation kinds
225
+ // (pending the backend output-envelope follow-up), and the snapshot
226
+ // fallback's `unspecified` all stay status-only.
227
+ return null;
228
+ }
229
+ }
230
+
231
+ /**
232
+ * The flagship agent-call line: `slug · running <tool> · N msgs · M tools`.
233
+ * Field-for-field the pre-T04 card line — kept here so the thread has one
234
+ * source of preview semantics.
235
+ */
236
+ function agentCallLine(state: DerivedTaskState): string | null {
237
+ const parts: string[] = [];
238
+ if (state.agentSlug) parts.push(state.agentSlug);
239
+ if (state.status === "running" && state.currentToolName) {
240
+ parts.push(`running ${state.currentToolName}`);
241
+ }
242
+ if (state.messagesCount > 0 || state.toolCallsCount > 0) {
243
+ parts.push(`${state.messagesCount} msgs · ${state.toolCallsCount} tools`);
244
+ }
245
+ return parts.length > 0 ? parts.join(" · ") : null;
246
+ }
247
+
248
+ /** `set orderId, total +2 more` — from the resolved variables map. */
249
+ function setVarsLine(input: JsonObject | null): string | null {
250
+ if (!input) return null;
251
+ // The summary may nest the map under `variables` (the config field) or
252
+ // carry the resolved variables at the top level — accept both.
253
+ const vars = asObject(input["variables"]) ?? input;
254
+ const keys = Object.keys(vars);
255
+ if (keys.length === 0) return null;
256
+ const shown = keys.slice(0, 3).join(", ");
257
+ const rest = keys.length - 3;
258
+ return rest > 0 ? `set ${shown} +${rest} more` : `set ${shown}`;
259
+ }
260
+
261
+ /** `jq → 42` while settled; the engine alone while running. */
262
+ function transformLine(state: DerivedTaskState): string | null {
263
+ const engine = asString(state.inputSummary?.["engine"])?.toLowerCase() ?? null;
264
+ if (state.outputSummary) {
265
+ const snippet = valueSnippet(state.outputSummary);
266
+ return engine ? `${engine} → ${snippet}` : `→ ${snippet}`;
267
+ }
268
+ return engine;
269
+ }
270
+
271
+ /** `valid` / `3 errors` — from the documented `{valid, errors[]}` shape. */
272
+ function validateLine(output: JsonObject | null): string | null {
273
+ if (!output) return null;
274
+ const valid = output["valid"];
275
+ if (valid === true) return "valid";
276
+ if (valid === false) {
277
+ const errors = Array.isArray(output["errors"]) ? output["errors"].length : 0;
278
+ return errors > 0 ? `${errors} ${errors === 1 ? "error" : "errors"}` : "invalid";
279
+ }
280
+ return null;
281
+ }
282
+
283
+ /** `claude-sonnet · "snippet…"` — model from input, text from output. */
284
+ function llmCallLine(state: DerivedTaskState): string | null {
285
+ const parts: string[] = [];
286
+ const model = asString(state.inputSummary?.["model"]);
287
+ if (model) parts.push(model);
288
+ if (state.outputSummary) parts.push(valueSnippet(state.outputSummary));
289
+ return parts.length > 0 ? parts.join(" · ") : null;
290
+ }
291
+
292
+ /** `pass · score 0.82` — from the documented `{pass, score}` shape. */
293
+ function evalLine(output: JsonObject | null): string | null {
294
+ if (!output) return null;
295
+ const pass = output["pass"];
296
+ const score = output["score"];
297
+ if (typeof pass !== "boolean") return null;
298
+ const verdict = pass ? "pass" : "fail";
299
+ return typeof score === "number" ? `${verdict} · score ${score}` : verdict;
300
+ }
301
+
302
+ /** `emitted ticket.classified` — the CloudEvents `type` is the identity. */
303
+ function emitEventLine(state: DerivedTaskState): string | null {
304
+ const emittedType = asString(state.outputSummary?.["type"]);
305
+ if (emittedType) return `emitted ${emittedType}`;
306
+ const configured = asString(asObject(state.inputSummary?.["event"])?.["type"]);
307
+ return configured ? `emitting ${configured}` : null;
308
+ }
309
+
310
+ /** `sent via slack` / `delivery failed` — from `{channel, delivered}`. */
311
+ function notificationLine(state: DerivedTaskState): string | null {
312
+ const output = state.outputSummary;
313
+ const channel =
314
+ asString(output?.["channel"]) ?? asString(state.inputSummary?.["channel"]);
315
+ if (output && output["delivered"] === false) return "delivery failed";
316
+ if (output && channel) return `sent via ${channel}`;
317
+ return channel;
318
+ }
319
+
320
+ /** `approve · by suresh` — the settled decision from the task output. */
321
+ function humanInputLine(output: JsonObject | null): string | null {
322
+ // The gating state is covered by the universal "Awaiting approval" line;
323
+ // this renders only the settled decision record.
324
+ const outcome = asString(output?.["outcome"]);
325
+ if (!outcome) return null;
326
+ const reviewer = asString(output?.["reviewer"]);
327
+ return reviewer ? `${outcome} · by ${reviewer}` : outcome;
328
+ }
329
+
330
+ /** `waiting 10s` / `waited 10s` / `until <timestamp>`. */
331
+ function waitLine(state: DerivedTaskState): string | null {
332
+ const input = state.inputSummary;
333
+ if (!input) return null;
334
+ const verb = state.status === "running" ? "waiting" : "waited";
335
+ const duration = asObject(input["duration"]);
336
+ if (duration) {
337
+ const label = formatWaitDuration(duration);
338
+ return label ? `${verb} ${label}` : null;
339
+ }
340
+ const until = asString(input["until"]);
341
+ return until ? `${verb} until ${until}` : null;
342
+ }
343
+
344
+ /** `waiting for signal` / `signal received` — status-verbed. */
345
+ function listenLine(state: DerivedTaskState): string | null {
346
+ if (state.status === "running") return "waiting for signal";
347
+ if (state.status === "completed") return "signal received";
348
+ return null;
349
+ }
350
+
351
+ // ---------------------------------------------------------------------------
352
+ // Struct-reading helpers (defensive by construction)
353
+ // ---------------------------------------------------------------------------
354
+
355
+ function asString(value: JsonValue | undefined): string | null {
356
+ return typeof value === "string" && value.length > 0 ? value : null;
357
+ }
358
+
359
+ function asObject(value: JsonValue | undefined): JsonObject | null {
360
+ return value !== null &&
361
+ value !== undefined &&
362
+ typeof value === "object" &&
363
+ !Array.isArray(value)
364
+ ? (value as JsonObject)
365
+ : null;
366
+ }
367
+
368
+ /**
369
+ * One-line snippet of an arbitrary JSON value: scalars verbatim (strings
370
+ * quoted), containers as a shape summary. Used where a kind's output has
371
+ * no documented structure to name (transform results, raw LLM text).
372
+ */
373
+ export function valueSnippet(value: JsonValue): string {
374
+ if (value === null) return "null";
375
+ if (typeof value === "string") return `"${firstLine(value)}"`;
376
+ if (typeof value === "number" || typeof value === "boolean") {
377
+ return String(value);
378
+ }
379
+ if (Array.isArray(value)) {
380
+ return `[${value.length} ${value.length === 1 ? "item" : "items"}]`;
381
+ }
382
+ const keys = Object.keys(value);
383
+ // A single-field wrapper is usually an envelope (`{result: …}`) — unwrap
384
+ // one level so the snippet names the payload, not the wrapper.
385
+ if (keys.length === 1) {
386
+ const inner = value[keys[0]];
387
+ if (
388
+ inner === null ||
389
+ typeof inner === "string" ||
390
+ typeof inner === "number" ||
391
+ typeof inner === "boolean"
392
+ ) {
393
+ return valueSnippet(inner);
394
+ }
395
+ }
396
+ return `{${keys.length} ${keys.length === 1 ? "field" : "fields"}}`;
397
+ }
398
+
399
+ /**
400
+ * Formats the WaitTaskConfig `Duration` shape (`{days, hours, minutes,
401
+ * seconds, milliseconds}`) via the shared duration formatter. Unknown or
402
+ * empty shapes yield `null`.
403
+ */
404
+ function formatWaitDuration(duration: JsonObject): string | null {
405
+ const num = (key: string): number => {
406
+ const v = duration[key];
407
+ return typeof v === "number" && Number.isFinite(v) ? v : 0;
408
+ };
409
+ const totalMs =
410
+ num("days") * 86_400_000 +
411
+ num("hours") * 3_600_000 +
412
+ num("minutes") * 60_000 +
413
+ num("seconds") * 1_000 +
414
+ num("milliseconds");
415
+ return totalMs > 0 ? formatDuration(totalMs) : null;
416
+ }
417
+
418
+ function firstLine(text: string): string {
419
+ const nl = text.indexOf("\n");
420
+ return nl === -1 ? text : text.slice(0, nl);
421
+ }
422
+
423
+ function truncateLine(line: string): string {
424
+ return line.length > PREVIEW_LINE_MAX_CHARS
425
+ ? `${line.slice(0, PREVIEW_LINE_MAX_CHARS - 1)}\u2026`
426
+ : line;
427
+ }