@stigmer/react 3.1.17 → 3.2.1

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 (832) 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/useNewSessionFlow.d.ts +4 -0
  288. package/session/useNewSessionFlow.d.ts.map +1 -1
  289. package/session/useNewSessionFlow.js +33 -4
  290. package/session/useNewSessionFlow.js.map +1 -1
  291. package/session/usePersistedModel.d.ts +11 -0
  292. package/session/usePersistedModel.d.ts.map +1 -1
  293. package/session/usePersistedModel.js +14 -3
  294. package/session/usePersistedModel.js.map +1 -1
  295. package/session/useSessionFileChanges.d.ts +10 -34
  296. package/session/useSessionFileChanges.d.ts.map +1 -1
  297. package/session/useSessionFileChanges.js +9 -141
  298. package/session/useSessionFileChanges.js.map +1 -1
  299. package/session/useSessionPageFlow.d.ts.map +1 -1
  300. package/session/useSessionPageFlow.js +12 -1
  301. package/session/useSessionPageFlow.js.map +1 -1
  302. package/session/useSessionPanel.d.ts +5 -15
  303. package/session/useSessionPanel.d.ts.map +1 -1
  304. package/session/useSessionPanel.js +3 -35
  305. package/session/useSessionPanel.js.map +1 -1
  306. package/session/useSessionRailViews.d.ts +3 -6
  307. package/session/useSessionRailViews.d.ts.map +1 -1
  308. package/session/useSessionRailViews.js +3 -17
  309. package/session/useSessionRailViews.js.map +1 -1
  310. package/settings/ChannelAppsSection.d.ts +13 -0
  311. package/settings/ChannelAppsSection.d.ts.map +1 -0
  312. package/settings/ChannelAppsSection.js +48 -0
  313. package/settings/ChannelAppsSection.js.map +1 -0
  314. package/settings/index.d.ts +1 -0
  315. package/settings/index.d.ts.map +1 -1
  316. package/settings/index.js +1 -0
  317. package/settings/index.js.map +1 -1
  318. package/settings/settings-nav.d.ts.map +1 -1
  319. package/settings/settings-nav.js +6 -1
  320. package/settings/settings-nav.js.map +1 -1
  321. package/sharing/AgentShareList.d.ts.map +1 -1
  322. package/sharing/AgentShareList.js +11 -3
  323. package/sharing/AgentShareList.js.map +1 -1
  324. package/sharing/ShareAgentDialog.js +1 -1
  325. package/sharing/useShareToolReadiness.d.ts +9 -38
  326. package/sharing/useShareToolReadiness.d.ts.map +1 -1
  327. package/sharing/useShareToolReadiness.js +7 -72
  328. package/sharing/useShareToolReadiness.js.map +1 -1
  329. package/src/agent-instance/AgentInstanceList.tsx +60 -42
  330. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +161 -0
  331. package/src/channel/AgentChannelsPanel.tsx +688 -0
  332. package/src/channel/ChannelConversationsDialog.tsx +267 -0
  333. package/src/channel/ChannelCredentialsDialog.tsx +219 -0
  334. package/src/channel/ChannelToolCredentials.tsx +124 -0
  335. package/src/channel/ConnectSlackDialog.tsx +611 -0
  336. package/src/channel/ConnectWhatsAppDialog.tsx +624 -0
  337. package/src/channel/SlackMarkIcon.tsx +21 -0
  338. package/src/channel/WhatsAppMarkIcon.tsx +22 -0
  339. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +638 -0
  340. package/src/channel/__tests__/ChannelConversationsDialog.test.tsx +114 -0
  341. package/src/channel/__tests__/ChannelCredentialsDialog.test.tsx +240 -0
  342. package/src/channel/__tests__/ConnectSlackDialog.test.tsx +659 -0
  343. package/src/channel/__tests__/ConnectWhatsAppDialog.test.tsx +564 -0
  344. package/src/channel/__tests__/providers.test.ts +118 -0
  345. package/src/channel/__tests__/useAgentChannel.test.tsx +116 -0
  346. package/src/channel/__tests__/useAgentChannelList.test.tsx +166 -0
  347. package/src/channel/__tests__/useChannelSessions.test.tsx +95 -0
  348. package/src/channel/__tests__/useChannelToolReadiness.test.tsx +158 -0
  349. package/src/channel/__tests__/useConnectSlackChannel.test.tsx +276 -0
  350. package/src/channel/__tests__/useDeleteAgentChannel.test.tsx +97 -0
  351. package/src/channel/__tests__/useInstallChannel.test.tsx +177 -0
  352. package/src/channel/__tests__/useSaveAgentChannel.test.tsx +294 -0
  353. package/src/channel/connect/ServingAppSection.tsx +185 -0
  354. package/src/channel/connect/ToolCredentialsSection.tsx +67 -0
  355. package/src/channel/connect/VerbatimRefusal.tsx +27 -0
  356. package/src/channel/connect/icons.tsx +42 -0
  357. package/src/channel/index.ts +65 -0
  358. package/src/channel/providerPresentation.ts +154 -0
  359. package/src/channel/providers.ts +73 -0
  360. package/src/channel/useAgentChannel.ts +58 -0
  361. package/src/channel/useAgentChannelList.ts +69 -0
  362. package/src/channel/useChannelSessions.ts +73 -0
  363. package/src/channel/useChannelToolReadiness.ts +39 -0
  364. package/src/channel/useConnectSlackChannel.ts +195 -0
  365. package/src/channel/useCreateAgentChannel.ts +73 -0
  366. package/src/channel/useDeleteAgentChannel.ts +71 -0
  367. package/src/channel/useInstallChannel.ts +117 -0
  368. package/src/channel/useOrgAgentChannelList.ts +60 -0
  369. package/src/channel/useSaveAgentChannel.ts +133 -0
  370. package/src/channel-app/ChannelAppDetailPanel.tsx +510 -0
  371. package/src/channel-app/ChannelAppListPanel.tsx +201 -0
  372. package/src/channel-app/CreateChannelAppForm.tsx +529 -0
  373. package/src/channel-app/__tests__/channelAppWhatsApp.test.tsx +270 -0
  374. package/src/channel-app/__tests__/slackAppSetup.test.ts +75 -0
  375. package/src/channel-app/__tests__/useChannelAppHooks.test.tsx +157 -0
  376. package/src/channel-app/__tests__/whatsappAppSetup.test.ts +39 -0
  377. package/src/channel-app/index.ts +30 -0
  378. package/src/channel-app/internal.tsx +180 -0
  379. package/src/channel-app/slackAppSetup.ts +153 -0
  380. package/src/channel-app/useChannelAppList.ts +59 -0
  381. package/src/channel-app/useCreateChannelApp.ts +70 -0
  382. package/src/channel-app/useDeleteChannelApp.ts +62 -0
  383. package/src/channel-app/useUpdateChannelApp.ts +70 -0
  384. package/src/channel-app/whatsappAppSetup.ts +62 -0
  385. package/src/environment/index.ts +2 -0
  386. package/src/environment/useToolCredentialsReadiness.ts +122 -0
  387. package/src/execution/ArtifactContentBody.tsx +6 -88
  388. package/src/execution/ArtifactFileContent.tsx +110 -0
  389. package/src/execution/ArtifactRow.tsx +28 -118
  390. package/src/execution/ArtifactRowView.tsx +137 -0
  391. package/src/execution/FileChangesView.tsx +4 -69
  392. package/src/execution/SubAgentSection.tsx +2 -36
  393. package/src/execution/ToolCallItem.tsx +48 -175
  394. package/src/execution/__tests__/ArtifactFileContent.test.tsx +60 -0
  395. package/src/execution/__tests__/ArtifactRowView.test.tsx +78 -0
  396. package/src/execution/__tests__/agent-execution-document.test.ts +45 -0
  397. package/src/execution/__tests__/artifact-row-item.test.ts +128 -0
  398. package/src/execution/__tests__/deriveExecutionFileChanges.test.ts +270 -0
  399. package/src/execution/__tests__/useArtifactContentById.test.tsx +85 -0
  400. package/src/execution/__tests__/useLiveAgentExecution.test.tsx +202 -0
  401. package/src/execution/agent-execution-document.ts +54 -0
  402. package/src/execution/artifact-document.ts +24 -0
  403. package/src/execution/artifact-row-item.ts +97 -0
  404. package/src/execution/deriveExecutionFileChanges.ts +237 -0
  405. package/src/execution/file-change-document.ts +37 -0
  406. package/src/execution/index.ts +36 -0
  407. package/src/execution/useArtifactContentById.ts +120 -0
  408. package/src/execution/useArtifactDownload.ts +4 -3
  409. package/src/execution/useCreateAgentExecution.ts +1 -1
  410. package/src/execution/useLiveAgentExecution.ts +127 -0
  411. package/src/index.ts +155 -11
  412. package/src/internal/DecisionButton.tsx +4 -3
  413. package/src/internal/__tests__/ThreadCardShell.test.tsx +105 -0
  414. package/src/internal/__tests__/oauthPopup.test.ts +245 -0
  415. package/src/internal/oauthPopup.ts +261 -0
  416. package/src/internal/store/__tests__/workflow-execution-event-store.test.ts +375 -5
  417. package/src/internal/store/index.ts +0 -3
  418. package/src/internal/store/workflow-execution-event-store.ts +123 -4
  419. package/src/internal/store/workspace-file-selection-store.ts +2 -5
  420. package/src/internal/thread-card/ThreadCardShell.tsx +189 -0
  421. package/src/internal/thread-card/glyphs.tsx +108 -0
  422. package/src/internal/thread-card/index.ts +19 -0
  423. package/src/internal/useRevealLine.ts +2 -2
  424. package/src/mcp-server/OAuthCallbackHandler.tsx +2 -2
  425. package/src/mcp-server/useMcpServerOAuthConnect.ts +22 -184
  426. package/src/session/NewSessionViewer.tsx +0 -1
  427. package/src/session/SessionPanelChip.tsx +10 -96
  428. package/src/session/SessionViewer.tsx +170 -144
  429. package/src/session/__tests__/SessionViewer-artifactTabs.test.tsx +1 -1
  430. package/src/session/__tests__/observerAudience.test.tsx +241 -0
  431. package/src/session/__tests__/useNewSessionFlow.test.tsx +64 -0
  432. package/src/session/__tests__/usePersistedModel.test.tsx +36 -0
  433. package/src/session/__tests__/useSessionPageFlow.guest.test.tsx +48 -1
  434. package/src/session/__tests__/useSessionPanel.test.ts +6 -61
  435. package/src/session/__tests__/useSessionRailViews.test.tsx +5 -27
  436. package/src/session/audience.ts +15 -1
  437. package/src/session/channelOrigin.ts +45 -0
  438. package/src/session/facets/index.ts +0 -3
  439. package/src/session/index.ts +9 -6
  440. package/src/session/useNewSessionFlow.ts +35 -4
  441. package/src/session/usePersistedModel.ts +25 -3
  442. package/src/session/useSessionFileChanges.ts +12 -153
  443. package/src/session/useSessionPageFlow.ts +13 -2
  444. package/src/session/useSessionPanel.ts +8 -51
  445. package/src/session/useSessionRailViews.tsx +2 -27
  446. package/src/settings/ChannelAppsSection.tsx +133 -0
  447. package/src/settings/index.ts +1 -0
  448. package/src/settings/settings-nav.ts +6 -0
  449. package/src/sharing/AgentShareList.tsx +85 -64
  450. package/src/sharing/ShareAgentDialog.tsx +1 -1
  451. package/src/sharing/__tests__/AgentShareList.test.tsx +92 -12
  452. package/src/sharing/useShareToolReadiness.ts +13 -101
  453. package/src/workflow/WorkflowAgentExecutionDocument.tsx +283 -0
  454. package/src/workflow/WorkflowApprovalList.tsx +158 -0
  455. package/src/workflow/WorkflowArtifactDocument.tsx +257 -0
  456. package/src/workflow/WorkflowExecutionGraph.tsx +40 -78
  457. package/src/workflow/WorkflowExecutionViewer.tsx +610 -287
  458. package/src/workflow/WorkflowFileReviewList.tsx +1 -1
  459. package/src/workflow/WorkflowTaskApprovalCard.tsx +5 -4
  460. package/src/workflow/WorkflowTaskApprovalSummary.tsx +6 -6
  461. package/src/workflow/__tests__/WorkflowAgentExecutionDocument.test.tsx +651 -0
  462. package/src/workflow/__tests__/WorkflowApprovalList.test.tsx +229 -0
  463. package/src/workflow/__tests__/WorkflowArtifactDocument.test.tsx +90 -0
  464. package/src/workflow/__tests__/WorkflowArtifactsTab.test.tsx +85 -0
  465. package/src/workflow/__tests__/WorkflowChangesTab.test.tsx +113 -0
  466. package/src/workflow/__tests__/WorkflowExecutionViewer.approvals.test.tsx +473 -0
  467. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +632 -0
  468. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
  469. package/src/workflow/__tests__/WorkflowTaskThread.test.tsx +947 -0
  470. package/src/workflow/__tests__/WorkflowUsageTab.test.tsx +163 -0
  471. package/src/workflow/__tests__/agent-call-live-experience.test.ts +6 -53
  472. package/src/workflow/__tests__/derive-execution-overlays.test.ts +4 -0
  473. package/src/workflow/__tests__/deriveWorkflowArtifactItems.test.ts +71 -0
  474. package/src/workflow/__tests__/deriveWorkflowUsageItems.test.ts +132 -0
  475. package/src/workflow/__tests__/execution-graph.test.ts +8 -0
  476. package/src/workflow/__tests__/project-thread-items.test.ts +428 -0
  477. package/src/workflow/__tests__/structured-data-viewer.test.tsx +1 -1
  478. package/src/workflow/__tests__/task-approval.test.ts +149 -0
  479. package/src/workflow/__tests__/task-detail-io.test.ts +40 -0
  480. package/src/workflow/__tests__/task-presentation.test.ts +479 -0
  481. package/src/workflow/__tests__/useActiveTaskName.test.ts +4 -0
  482. package/src/workflow/__tests__/useApprovalBoundary.test.ts +158 -0
  483. package/src/workflow/__tests__/useExecutionAnnouncements.test.ts +4 -0
  484. package/src/workflow/__tests__/useFollowExecution.test.ts +2 -89
  485. package/src/workflow/__tests__/useWorkflowExecutionFileChanges.test.tsx +412 -0
  486. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +297 -0
  487. package/src/workflow/__tests__/useWorkflowExecutionRailViews.test.tsx +115 -0
  488. package/src/workflow/deriveWorkflowArtifactItems.ts +59 -0
  489. package/src/workflow/deriveWorkflowUsageItems.ts +73 -0
  490. package/src/workflow/diagnosis-document.ts +31 -0
  491. package/src/workflow/execution/index.ts +0 -15
  492. package/src/workflow/facets/WorkflowArtifactsTab.tsx +99 -0
  493. package/src/workflow/facets/WorkflowChangesTab.tsx +129 -0
  494. package/src/workflow/facets/WorkflowUsageTab.tsx +258 -0
  495. package/src/workflow/format-utils.ts +2 -3
  496. package/src/workflow/index.ts +106 -62
  497. package/src/workflow/inspector/index.ts +0 -4
  498. package/src/workflow/instance/WorkflowInstanceList.tsx +59 -41
  499. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +156 -0
  500. package/src/workflow/task-detail/index.ts +11 -0
  501. package/src/workflow/task-detail/task-approval.ts +158 -0
  502. package/src/workflow/task-detail/task-detail-io.ts +65 -0
  503. package/src/workflow/thread/WorkflowTaskThread.tsx +845 -0
  504. package/src/workflow/thread/project-thread-items.ts +235 -0
  505. package/src/workflow/thread/task-presentation.ts +427 -0
  506. package/src/workflow/thread/thread-presentation.ts +59 -0
  507. package/src/workflow/thread/useWorkflowThreadItems.ts +34 -0
  508. package/src/workflow/useApprovalBoundary.ts +72 -0
  509. package/src/workflow/useFollowExecution.ts +0 -26
  510. package/src/workflow/useWorkflowArtifactDownload.ts +68 -0
  511. package/src/workflow/useWorkflowExecutionActions.ts +3 -2
  512. package/src/workflow/useWorkflowExecutionFileChanges.ts +341 -0
  513. package/src/workflow/useWorkflowExecutionGraph.ts +3 -43
  514. package/src/workflow/useWorkflowExecutionPanel.ts +292 -0
  515. package/src/workflow/useWorkflowExecutionRailViews.tsx +173 -0
  516. package/src/workspace/FileViewer.tsx +3 -3
  517. package/src/workspace/PanelChip.tsx +103 -0
  518. package/src/workspace/WorkspaceSurface.tsx +50 -6
  519. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +110 -0
  520. package/src/workspace/index.ts +3 -0
  521. package/styles.css +1 -1
  522. package/workflow/WorkflowAgentExecutionDocument.d.ts +79 -0
  523. package/workflow/WorkflowAgentExecutionDocument.d.ts.map +1 -0
  524. package/workflow/WorkflowAgentExecutionDocument.js +87 -0
  525. package/workflow/WorkflowAgentExecutionDocument.js.map +1 -0
  526. package/workflow/WorkflowApprovalList.d.ts +62 -0
  527. package/workflow/WorkflowApprovalList.d.ts.map +1 -0
  528. package/workflow/WorkflowApprovalList.js +52 -0
  529. package/workflow/WorkflowApprovalList.js.map +1 -0
  530. package/workflow/WorkflowArtifactDocument.d.ts +29 -0
  531. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -0
  532. package/workflow/WorkflowArtifactDocument.js +89 -0
  533. package/workflow/WorkflowArtifactDocument.js.map +1 -0
  534. package/workflow/WorkflowExecutionGraph.d.ts +15 -13
  535. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  536. package/workflow/WorkflowExecutionGraph.js +18 -53
  537. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  538. package/workflow/WorkflowExecutionViewer.d.ts +8 -5
  539. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  540. package/workflow/WorkflowExecutionViewer.js +329 -54
  541. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  542. package/workflow/WorkflowFileReviewList.d.ts +1 -1
  543. package/workflow/WorkflowFileReviewList.js +1 -1
  544. package/workflow/WorkflowTaskApprovalCard.d.ts +4 -3
  545. package/workflow/WorkflowTaskApprovalCard.d.ts.map +1 -1
  546. package/workflow/WorkflowTaskApprovalCard.js +5 -4
  547. package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
  548. package/workflow/WorkflowTaskApprovalSummary.d.ts +6 -6
  549. package/workflow/WorkflowTaskApprovalSummary.js +5 -5
  550. package/workflow/deriveWorkflowArtifactItems.d.ts +30 -0
  551. package/workflow/deriveWorkflowArtifactItems.d.ts.map +1 -0
  552. package/workflow/deriveWorkflowArtifactItems.js +38 -0
  553. package/workflow/deriveWorkflowArtifactItems.js.map +1 -0
  554. package/workflow/deriveWorkflowUsageItems.d.ts +36 -0
  555. package/workflow/deriveWorkflowUsageItems.d.ts.map +1 -0
  556. package/workflow/deriveWorkflowUsageItems.js +50 -0
  557. package/workflow/deriveWorkflowUsageItems.js.map +1 -0
  558. package/workflow/diagnosis-document.d.ts +17 -0
  559. package/workflow/diagnosis-document.d.ts.map +1 -0
  560. package/workflow/diagnosis-document.js +29 -0
  561. package/workflow/diagnosis-document.js.map +1 -0
  562. package/workflow/execution/index.d.ts +0 -2
  563. package/workflow/execution/index.d.ts.map +1 -1
  564. package/workflow/execution/index.js +0 -2
  565. package/workflow/execution/index.js.map +1 -1
  566. package/workflow/facets/WorkflowArtifactsTab.d.ts +26 -0
  567. package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -0
  568. package/workflow/facets/WorkflowArtifactsTab.js +34 -0
  569. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -0
  570. package/workflow/facets/WorkflowChangesTab.d.ts +37 -0
  571. package/workflow/facets/WorkflowChangesTab.d.ts.map +1 -0
  572. package/workflow/facets/WorkflowChangesTab.js +50 -0
  573. package/workflow/facets/WorkflowChangesTab.js.map +1 -0
  574. package/workflow/facets/WorkflowUsageTab.d.ts +27 -0
  575. package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -0
  576. package/workflow/facets/WorkflowUsageTab.js +87 -0
  577. package/workflow/facets/WorkflowUsageTab.js.map +1 -0
  578. package/workflow/format-utils.d.ts +2 -3
  579. package/workflow/format-utils.d.ts.map +1 -1
  580. package/workflow/format-utils.js +2 -3
  581. package/workflow/format-utils.js.map +1 -1
  582. package/workflow/index.d.ts +21 -10
  583. package/workflow/index.d.ts.map +1 -1
  584. package/workflow/index.js +29 -14
  585. package/workflow/index.js.map +1 -1
  586. package/workflow/inspector/index.d.ts +0 -2
  587. package/workflow/inspector/index.d.ts.map +1 -1
  588. package/workflow/inspector/index.js +0 -2
  589. package/workflow/inspector/index.js.map +1 -1
  590. package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
  591. package/workflow/instance/WorkflowInstanceList.js +11 -3
  592. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  593. package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -0
  594. package/workflow/task-detail/StructuredDataViewer.js.map +1 -0
  595. package/workflow/task-detail/index.d.ts +4 -0
  596. package/workflow/task-detail/index.d.ts.map +1 -0
  597. package/workflow/task-detail/index.js +4 -0
  598. package/workflow/task-detail/index.js.map +1 -0
  599. package/workflow/task-detail/task-approval.d.ts +89 -0
  600. package/workflow/task-detail/task-approval.d.ts.map +1 -0
  601. package/workflow/task-detail/task-approval.js +84 -0
  602. package/workflow/task-detail/task-approval.js.map +1 -0
  603. package/workflow/task-detail/task-detail-io.d.ts +39 -0
  604. package/workflow/task-detail/task-detail-io.d.ts.map +1 -0
  605. package/workflow/task-detail/task-detail-io.js +42 -0
  606. package/workflow/task-detail/task-detail-io.js.map +1 -0
  607. package/workflow/thread/WorkflowTaskThread.d.ts +91 -0
  608. package/workflow/thread/WorkflowTaskThread.d.ts.map +1 -0
  609. package/workflow/thread/WorkflowTaskThread.js +318 -0
  610. package/workflow/thread/WorkflowTaskThread.js.map +1 -0
  611. package/workflow/thread/project-thread-items.d.ts +108 -0
  612. package/workflow/thread/project-thread-items.d.ts.map +1 -0
  613. package/workflow/thread/project-thread-items.js +126 -0
  614. package/workflow/thread/project-thread-items.js.map +1 -0
  615. package/workflow/thread/task-presentation.d.ts +73 -0
  616. package/workflow/thread/task-presentation.d.ts.map +1 -0
  617. package/workflow/thread/task-presentation.js +331 -0
  618. package/workflow/thread/task-presentation.js.map +1 -0
  619. package/workflow/thread/thread-presentation.d.ts +28 -0
  620. package/workflow/thread/thread-presentation.d.ts.map +1 -0
  621. package/workflow/thread/thread-presentation.js +28 -0
  622. package/workflow/thread/thread-presentation.js.map +1 -0
  623. package/workflow/thread/useWorkflowThreadItems.d.ts +16 -0
  624. package/workflow/thread/useWorkflowThreadItems.d.ts.map +1 -0
  625. package/workflow/thread/useWorkflowThreadItems.js +22 -0
  626. package/workflow/thread/useWorkflowThreadItems.js.map +1 -0
  627. package/workflow/useApprovalBoundary.d.ts +38 -0
  628. package/workflow/useApprovalBoundary.d.ts.map +1 -0
  629. package/workflow/useApprovalBoundary.js +55 -0
  630. package/workflow/useApprovalBoundary.js.map +1 -0
  631. package/workflow/useFollowExecution.d.ts +0 -20
  632. package/workflow/useFollowExecution.d.ts.map +1 -1
  633. package/workflow/useFollowExecution.js +0 -17
  634. package/workflow/useFollowExecution.js.map +1 -1
  635. package/workflow/useWorkflowArtifactDownload.d.ts +28 -0
  636. package/workflow/useWorkflowArtifactDownload.d.ts.map +1 -0
  637. package/workflow/useWorkflowArtifactDownload.js +45 -0
  638. package/workflow/useWorkflowArtifactDownload.js.map +1 -0
  639. package/workflow/useWorkflowExecutionActions.d.ts +3 -2
  640. package/workflow/useWorkflowExecutionActions.d.ts.map +1 -1
  641. package/workflow/useWorkflowExecutionActions.js.map +1 -1
  642. package/workflow/useWorkflowExecutionFileChanges.d.ts +107 -0
  643. package/workflow/useWorkflowExecutionFileChanges.d.ts.map +1 -0
  644. package/workflow/useWorkflowExecutionFileChanges.js +244 -0
  645. package/workflow/useWorkflowExecutionFileChanges.js.map +1 -0
  646. package/workflow/useWorkflowExecutionGraph.d.ts +1 -14
  647. package/workflow/useWorkflowExecutionGraph.d.ts.map +1 -1
  648. package/workflow/useWorkflowExecutionGraph.js +2 -25
  649. package/workflow/useWorkflowExecutionGraph.js.map +1 -1
  650. package/workflow/useWorkflowExecutionPanel.d.ts +108 -0
  651. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -0
  652. package/workflow/useWorkflowExecutionPanel.js +103 -0
  653. package/workflow/useWorkflowExecutionPanel.js.map +1 -0
  654. package/workflow/useWorkflowExecutionRailViews.d.ts +46 -0
  655. package/workflow/useWorkflowExecutionRailViews.d.ts.map +1 -0
  656. package/workflow/useWorkflowExecutionRailViews.js +81 -0
  657. package/workflow/useWorkflowExecutionRailViews.js.map +1 -0
  658. package/workspace/FileViewer.d.ts +1 -1
  659. package/workspace/FileViewer.js +3 -3
  660. package/workspace/FileViewer.js.map +1 -1
  661. package/workspace/PanelChip.d.ts +27 -0
  662. package/workspace/PanelChip.d.ts.map +1 -0
  663. package/workspace/PanelChip.js +42 -0
  664. package/workspace/PanelChip.js.map +1 -0
  665. package/workspace/WorkspaceSurface.d.ts +25 -1
  666. package/workspace/WorkspaceSurface.d.ts.map +1 -1
  667. package/workspace/WorkspaceSurface.js +21 -9
  668. package/workspace/WorkspaceSurface.js.map +1 -1
  669. package/workspace/index.d.ts +3 -1
  670. package/workspace/index.d.ts.map +1 -1
  671. package/workspace/index.js +1 -0
  672. package/workspace/index.js.map +1 -1
  673. package/execution/ThreadSelectionContext.d.ts +0 -17
  674. package/execution/ThreadSelectionContext.d.ts.map +0 -1
  675. package/execution/ThreadSelectionContext.js +0 -18
  676. package/execution/ThreadSelectionContext.js.map +0 -1
  677. package/execution/useThreadSelection.d.ts +0 -35
  678. package/execution/useThreadSelection.d.ts.map +0 -1
  679. package/execution/useThreadSelection.js +0 -65
  680. package/execution/useThreadSelection.js.map +0 -1
  681. package/internal/store/selection-store.d.ts +0 -53
  682. package/internal/store/selection-store.d.ts.map +0 -1
  683. package/internal/store/selection-store.js +0 -88
  684. package/internal/store/selection-store.js.map +0 -1
  685. package/session/artifact-document.d.ts.map +0 -1
  686. package/session/artifact-document.js +0 -22
  687. package/session/artifact-document.js.map +0 -1
  688. package/session/facets/InspectTab.d.ts +0 -13
  689. package/session/facets/InspectTab.d.ts.map +0 -1
  690. package/session/facets/InspectTab.js +0 -19
  691. package/session/facets/InspectTab.js.map +0 -1
  692. package/src/execution/ThreadSelectionContext.tsx +0 -20
  693. package/src/execution/useThreadSelection.ts +0 -95
  694. package/src/internal/store/__tests__/selection-store.test.ts +0 -115
  695. package/src/internal/store/selection-store.ts +0 -112
  696. package/src/session/artifact-document.ts +0 -23
  697. package/src/session/facets/InspectTab.tsx +0 -57
  698. package/src/workflow/WorkflowExecutionApprovalCard.tsx +0 -154
  699. package/src/workflow/WorkflowExecutionArtifactPanel.tsx +0 -107
  700. package/src/workflow/WorkflowExecutionCostPanel.tsx +0 -120
  701. package/src/workflow/WorkflowExecutionTaskPanel.tsx +0 -129
  702. package/src/workflow/WorkflowExecutionTimeline.tsx +0 -151
  703. package/src/workflow/WorkflowExecutionTimelineEvent.tsx +0 -497
  704. package/src/workflow/__tests__/ExecutionInspector.test.tsx +0 -155
  705. package/src/workflow/__tests__/WorkflowExecutionApprovalCard.test.tsx +0 -129
  706. package/src/workflow/__tests__/derive-task-detail.test.ts +0 -1265
  707. package/src/workflow/__tests__/derive-waterfall-entries.test.ts +0 -521
  708. package/src/workflow/__tests__/execution-inspector.test.tsx +0 -332
  709. package/src/workflow/execution/derive-waterfall-entries.ts +0 -377
  710. package/src/workflow/execution/useWaterfallEntries.ts +0 -125
  711. package/src/workflow/execution-inspector/AgentCallTab.tsx +0 -169
  712. package/src/workflow/execution-inspector/ErrorTab.tsx +0 -110
  713. package/src/workflow/execution-inspector/EventLogTab.tsx +0 -79
  714. package/src/workflow/execution-inspector/ExecutionInspector.tsx +0 -341
  715. package/src/workflow/execution-inspector/InputOutputTab.tsx +0 -325
  716. package/src/workflow/execution-inspector/RetriesTab.tsx +0 -68
  717. package/src/workflow/execution-inspector/SummaryTab.tsx +0 -62
  718. package/src/workflow/execution-inspector/derive-task-detail.ts +0 -584
  719. package/src/workflow/execution-inspector/index.ts +0 -14
  720. package/src/workflow/execution-inspector/useExecutionTaskDetail.ts +0 -55
  721. package/src/workflow/inspector/ExecutionInspectorAdapter.tsx +0 -40
  722. package/src/workflow/waterfall/WaterfallBar.tsx +0 -167
  723. package/src/workflow/waterfall/WaterfallRow.tsx +0 -112
  724. package/src/workflow/waterfall/WaterfallScale.tsx +0 -52
  725. package/src/workflow/waterfall/WaterfallTimeline.tsx +0 -138
  726. package/src/workflow/waterfall/WaterfallTooltip.tsx +0 -74
  727. package/src/workflow/waterfall/index.ts +0 -5
  728. package/workflow/WorkflowExecutionApprovalCard.d.ts +0 -34
  729. package/workflow/WorkflowExecutionApprovalCard.d.ts.map +0 -1
  730. package/workflow/WorkflowExecutionApprovalCard.js +0 -46
  731. package/workflow/WorkflowExecutionApprovalCard.js.map +0 -1
  732. package/workflow/WorkflowExecutionArtifactPanel.d.ts +0 -15
  733. package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +0 -1
  734. package/workflow/WorkflowExecutionArtifactPanel.js +0 -46
  735. package/workflow/WorkflowExecutionArtifactPanel.js.map +0 -1
  736. package/workflow/WorkflowExecutionCostPanel.d.ts +0 -18
  737. package/workflow/WorkflowExecutionCostPanel.d.ts.map +0 -1
  738. package/workflow/WorkflowExecutionCostPanel.js +0 -31
  739. package/workflow/WorkflowExecutionCostPanel.js.map +0 -1
  740. package/workflow/WorkflowExecutionTaskPanel.d.ts +0 -24
  741. package/workflow/WorkflowExecutionTaskPanel.d.ts.map +0 -1
  742. package/workflow/WorkflowExecutionTaskPanel.js +0 -51
  743. package/workflow/WorkflowExecutionTaskPanel.js.map +0 -1
  744. package/workflow/WorkflowExecutionTimeline.d.ts +0 -42
  745. package/workflow/WorkflowExecutionTimeline.d.ts.map +0 -1
  746. package/workflow/WorkflowExecutionTimeline.js +0 -52
  747. package/workflow/WorkflowExecutionTimeline.js.map +0 -1
  748. package/workflow/WorkflowExecutionTimelineEvent.d.ts +0 -25
  749. package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +0 -1
  750. package/workflow/WorkflowExecutionTimelineEvent.js +0 -179
  751. package/workflow/WorkflowExecutionTimelineEvent.js.map +0 -1
  752. package/workflow/execution/derive-waterfall-entries.d.ts +0 -85
  753. package/workflow/execution/derive-waterfall-entries.d.ts.map +0 -1
  754. package/workflow/execution/derive-waterfall-entries.js +0 -268
  755. package/workflow/execution/derive-waterfall-entries.js.map +0 -1
  756. package/workflow/execution/useWaterfallEntries.d.ts +0 -25
  757. package/workflow/execution/useWaterfallEntries.d.ts.map +0 -1
  758. package/workflow/execution/useWaterfallEntries.js +0 -67
  759. package/workflow/execution/useWaterfallEntries.js.map +0 -1
  760. package/workflow/execution-inspector/AgentCallTab.d.ts +0 -21
  761. package/workflow/execution-inspector/AgentCallTab.d.ts.map +0 -1
  762. package/workflow/execution-inspector/AgentCallTab.js +0 -36
  763. package/workflow/execution-inspector/AgentCallTab.js.map +0 -1
  764. package/workflow/execution-inspector/ErrorTab.d.ts +0 -9
  765. package/workflow/execution-inspector/ErrorTab.d.ts.map +0 -1
  766. package/workflow/execution-inspector/ErrorTab.js +0 -29
  767. package/workflow/execution-inspector/ErrorTab.js.map +0 -1
  768. package/workflow/execution-inspector/EventLogTab.d.ts +0 -11
  769. package/workflow/execution-inspector/EventLogTab.d.ts.map +0 -1
  770. package/workflow/execution-inspector/EventLogTab.js +0 -47
  771. package/workflow/execution-inspector/EventLogTab.js.map +0 -1
  772. package/workflow/execution-inspector/ExecutionInspector.d.ts +0 -69
  773. package/workflow/execution-inspector/ExecutionInspector.d.ts.map +0 -1
  774. package/workflow/execution-inspector/ExecutionInspector.js +0 -145
  775. package/workflow/execution-inspector/ExecutionInspector.js.map +0 -1
  776. package/workflow/execution-inspector/InputOutputTab.d.ts +0 -20
  777. package/workflow/execution-inspector/InputOutputTab.d.ts.map +0 -1
  778. package/workflow/execution-inspector/InputOutputTab.js +0 -124
  779. package/workflow/execution-inspector/InputOutputTab.js.map +0 -1
  780. package/workflow/execution-inspector/RetriesTab.d.ts +0 -7
  781. package/workflow/execution-inspector/RetriesTab.d.ts.map +0 -1
  782. package/workflow/execution-inspector/RetriesTab.js +0 -11
  783. package/workflow/execution-inspector/RetriesTab.js.map +0 -1
  784. package/workflow/execution-inspector/StructuredDataViewer.d.ts.map +0 -1
  785. package/workflow/execution-inspector/StructuredDataViewer.js.map +0 -1
  786. package/workflow/execution-inspector/SummaryTab.d.ts +0 -7
  787. package/workflow/execution-inspector/SummaryTab.d.ts.map +0 -1
  788. package/workflow/execution-inspector/SummaryTab.js +0 -10
  789. package/workflow/execution-inspector/SummaryTab.js.map +0 -1
  790. package/workflow/execution-inspector/derive-task-detail.d.ts +0 -140
  791. package/workflow/execution-inspector/derive-task-detail.d.ts.map +0 -1
  792. package/workflow/execution-inspector/derive-task-detail.js +0 -366
  793. package/workflow/execution-inspector/derive-task-detail.js.map +0 -1
  794. package/workflow/execution-inspector/index.d.ts +0 -4
  795. package/workflow/execution-inspector/index.d.ts.map +0 -1
  796. package/workflow/execution-inspector/index.js +0 -4
  797. package/workflow/execution-inspector/index.js.map +0 -1
  798. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts +0 -38
  799. package/workflow/execution-inspector/useExecutionTaskDetail.d.ts.map +0 -1
  800. package/workflow/execution-inspector/useExecutionTaskDetail.js +0 -37
  801. package/workflow/execution-inspector/useExecutionTaskDetail.js.map +0 -1
  802. package/workflow/inspector/ExecutionInspectorAdapter.d.ts +0 -26
  803. package/workflow/inspector/ExecutionInspectorAdapter.d.ts.map +0 -1
  804. package/workflow/inspector/ExecutionInspectorAdapter.js +0 -23
  805. package/workflow/inspector/ExecutionInspectorAdapter.js.map +0 -1
  806. package/workflow/waterfall/WaterfallBar.d.ts +0 -19
  807. package/workflow/waterfall/WaterfallBar.d.ts.map +0 -1
  808. package/workflow/waterfall/WaterfallBar.js +0 -70
  809. package/workflow/waterfall/WaterfallBar.js.map +0 -1
  810. package/workflow/waterfall/WaterfallRow.d.ts +0 -18
  811. package/workflow/waterfall/WaterfallRow.d.ts.map +0 -1
  812. package/workflow/waterfall/WaterfallRow.js +0 -45
  813. package/workflow/waterfall/WaterfallRow.js.map +0 -1
  814. package/workflow/waterfall/WaterfallScale.d.ts +0 -14
  815. package/workflow/waterfall/WaterfallScale.d.ts.map +0 -1
  816. package/workflow/waterfall/WaterfallScale.js +0 -22
  817. package/workflow/waterfall/WaterfallScale.js.map +0 -1
  818. package/workflow/waterfall/WaterfallTimeline.d.ts +0 -46
  819. package/workflow/waterfall/WaterfallTimeline.d.ts.map +0 -1
  820. package/workflow/waterfall/WaterfallTimeline.js +0 -60
  821. package/workflow/waterfall/WaterfallTimeline.js.map +0 -1
  822. package/workflow/waterfall/WaterfallTooltip.d.ts +0 -15
  823. package/workflow/waterfall/WaterfallTooltip.d.ts.map +0 -1
  824. package/workflow/waterfall/WaterfallTooltip.js +0 -20
  825. package/workflow/waterfall/WaterfallTooltip.js.map +0 -1
  826. package/workflow/waterfall/index.d.ts +0 -6
  827. package/workflow/waterfall/index.d.ts.map +0 -1
  828. package/workflow/waterfall/index.js +0 -6
  829. package/workflow/waterfall/index.js.map +0 -1
  830. /package/src/workflow/{execution-inspector → task-detail}/StructuredDataViewer.tsx +0 -0
  831. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.d.ts +0 -0
  832. /package/workflow/{execution-inspector → task-detail}/StructuredDataViewer.js +0 -0
@@ -0,0 +1,241 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // Wiring-contract tests for the read-only `"observer"` audience (design
6
+ // decision 012: channel-session observability).
7
+ //
8
+ // Two invariants are pinned:
9
+ // 1. `audience="observer"` renders a pure transcript — no composer, no
10
+ // interaction callbacks on the thread, no decision surfaces — while the
11
+ // session panel (usage/artifacts inspection) stays available.
12
+ // 2. A channel-originated session (the `stigmer.ai/channel-id` label)
13
+ // self-selects observer regardless of the host's audience, so a pasted
14
+ // /sessions/{id} URL can never render a send surface the server would
15
+ // refuse (channel viewers hold can_view only).
16
+ // ---------------------------------------------------------------------------
17
+
18
+ type CapturedProps = Record<string, unknown>;
19
+
20
+ const composerProps: CapturedProps[] = [];
21
+ vi.mock("../../composer", async (importOriginal) => {
22
+ const actual = await importOriginal<typeof import("../../composer")>();
23
+ return {
24
+ ...actual,
25
+ SessionComposer: (props: CapturedProps) => {
26
+ composerProps.push(props);
27
+ return <div data-testid="composer-probe" />;
28
+ },
29
+ };
30
+ });
31
+
32
+ const threadProps: CapturedProps[] = [];
33
+ vi.mock("../../execution/MessageThread", () => ({
34
+ MessageThread: (props: CapturedProps) => {
35
+ threadProps.push(props);
36
+ return <div data-testid="thread-probe" />;
37
+ },
38
+ }));
39
+
40
+ const fileReviewDockProps: CapturedProps[] = [];
41
+ vi.mock("../../execution/FileReviewDock", () => ({
42
+ FileReviewDock: (props: CapturedProps) => {
43
+ fileReviewDockProps.push(props);
44
+ return <div data-testid="file-review-dock-probe" />;
45
+ },
46
+ }));
47
+
48
+ const setupTabProps: CapturedProps[] = [];
49
+ vi.mock("../facets/SetupTab", () => ({
50
+ SetupTab: (props: CapturedProps) => {
51
+ setupTabProps.push(props);
52
+ return <div data-testid="setup-probe" />;
53
+ },
54
+ }));
55
+
56
+ // ---------------------------------------------------------------------------
57
+ // Flow stub — the organism owns the hook; stub it to a loaded state whose
58
+ // session the individual tests can shape (channel-labeled or plain).
59
+ // ---------------------------------------------------------------------------
60
+
61
+ const stubWorkspace = {
62
+ entries: [],
63
+ hasEntries: false,
64
+ toInput: vi.fn().mockReturnValue([]),
65
+ addGitRepo: vi.fn(),
66
+ addLocalPath: vi.fn(),
67
+ removeEntry: vi.fn(),
68
+ clear: vi.fn(),
69
+ };
70
+
71
+ const stubConv = {
72
+ session: { spec: {} } as Record<string, unknown>,
73
+ isLoading: false,
74
+ loadError: null,
75
+ completedExecutions: [],
76
+ activeStreamExecution: null,
77
+ activePhase: null,
78
+ isStreaming: false,
79
+ isConnecting: false,
80
+ sendFollowUp: vi.fn(),
81
+ canSendFollowUp: true,
82
+ isSending: false,
83
+ sendError: null,
84
+ clearSendError: vi.fn(),
85
+ pendingUserMessage: null,
86
+ workspaceEntries: [],
87
+ mcpServerUsages: [],
88
+ skillRefs: [],
89
+ pendingApprovals: [],
90
+ submitApproval: vi.fn(),
91
+ submittingApprovalIds: new Set<string>(),
92
+ fileChangeSets: [],
93
+ submitFileDecision: vi.fn(),
94
+ submittingFileDecisionKeys: new Set<string>(),
95
+ fileDecisionErrors: new Map<string, Error>(),
96
+ streamError: null,
97
+ reconnectStream: vi.fn(),
98
+ approvalError: null,
99
+ retryLastSend: vi.fn(),
100
+ };
101
+
102
+ const stubSessionPageFlow = {
103
+ conv: stubConv,
104
+ harness: "native" as const,
105
+ executionTarget: undefined,
106
+ model: [undefined, vi.fn()] as const,
107
+ interactionMode: ["agent" as const, vi.fn()] as const,
108
+ agentRef: { org: "acme", slug: "support-bot" },
109
+ setAgentRef: vi.fn(),
110
+ resolution: null,
111
+ setResolution: vi.fn(),
112
+ isDefaultAgent: false,
113
+ mcpServerUsages: [],
114
+ setMcpServerUsages: vi.fn(),
115
+ skillRefs: [],
116
+ setSkillRefs: vi.fn(),
117
+ workspace: stubWorkspace,
118
+ sessionVariables: { entries: [], isEmpty: true, clear: vi.fn() },
119
+ autoApproveAll: false,
120
+ setAutoApproveAll: vi.fn(),
121
+ submitApproval: vi.fn(),
122
+ handleSubmit: vi.fn(),
123
+ submitError: null as Error | null,
124
+ displayExecution: null,
125
+ allExecutions: [],
126
+ sandboxWorkspaceRoot: undefined,
127
+ };
128
+ vi.mock("../useSessionPageFlow", () => ({
129
+ useSessionPageFlow: () => stubSessionPageFlow,
130
+ }));
131
+
132
+ vi.mock("../../hooks", () => ({
133
+ useStigmer: () => ({
134
+ agentExecution: {
135
+ uploadAttachment: vi.fn(),
136
+ getArtifactContent: vi.fn(),
137
+ },
138
+ }),
139
+ }));
140
+
141
+ import { SessionViewer } from "../SessionViewer";
142
+
143
+ const CHANNEL_SESSION = {
144
+ metadata: {
145
+ id: "ses_1",
146
+ org: "acme",
147
+ labels: {
148
+ "stigmer.ai/channel-id": "ach_1",
149
+ "stigmer.ai/channel-external-user-key": "U0AB12CD3",
150
+ },
151
+ },
152
+ spec: {},
153
+ };
154
+
155
+ function lastThreadProps(): CapturedProps {
156
+ expect(threadProps.length).toBeGreaterThan(0);
157
+ return threadProps.at(-1)!;
158
+ }
159
+
160
+ function expectReadOnlyTranscript() {
161
+ // No composer mounted at all — read-only by construction, not a
162
+ // disabled state.
163
+ expect(composerProps).toHaveLength(0);
164
+ expect(screen.queryByTestId("composer-probe")).toBeNull();
165
+
166
+ // Every thread interaction affordance is unwired (they are opt-in via
167
+ // their callbacks).
168
+ const thread = lastThreadProps();
169
+ expect(thread.onApprovalSubmit).toBeUndefined();
170
+ expect(thread.onEditMessage).toBeUndefined();
171
+ expect(thread.onRetrySend).toBeUndefined();
172
+ expect(thread.onRetryExecution).toBeUndefined();
173
+ expect(thread.onBuildFromPlan).toBeUndefined();
174
+ expect(thread.planActionsDisabled).toBe(true);
175
+
176
+ // The file-review decision surface never mounts.
177
+ expect(fileReviewDockProps).toHaveLength(0);
178
+
179
+ // The session panel stays available — inspecting usage/artifacts is
180
+ // the point of observability.
181
+ expect(screen.getByRole("button", { name: "Show panel" })).toBeDefined();
182
+ }
183
+
184
+ beforeEach(() => {
185
+ composerProps.length = 0;
186
+ threadProps.length = 0;
187
+ fileReviewDockProps.length = 0;
188
+ setupTabProps.length = 0;
189
+ stubConv.session = { spec: {} };
190
+ });
191
+
192
+ afterEach(() => {
193
+ cleanup();
194
+ vi.clearAllMocks();
195
+ });
196
+
197
+ describe("SessionViewer — observer audience", () => {
198
+ it("observer: read-only transcript, no composer, panel available", () => {
199
+ render(<SessionViewer sessionId="ses_1" org="acme" audience="observer" />);
200
+
201
+ expectReadOnlyTranscript();
202
+ });
203
+
204
+ it("a channel-originated session forces observer even for integrator hosts", () => {
205
+ stubConv.session = CHANNEL_SESSION;
206
+
207
+ render(<SessionViewer sessionId="ses_1" org="acme" />);
208
+
209
+ expectReadOnlyTranscript();
210
+ });
211
+
212
+ it("observer: the host's access slot is withheld from the panel", () => {
213
+ stubConv.session = CHANNEL_SESSION;
214
+
215
+ render(
216
+ <SessionViewer
217
+ sessionId="ses_1"
218
+ org="acme"
219
+ accessSlot={<button type="button">Manage access</button>}
220
+ />,
221
+ );
222
+
223
+ // Even inside the opened Config facet — observers hold neither
224
+ // can_grant_access nor can_view_access on a channel session, so the
225
+ // control is withheld rather than left to fail server-side.
226
+ fireEvent.click(screen.getByRole("button", { name: "Show panel" }));
227
+ fireEvent.click(screen.getByRole("radio", { name: "Config" }));
228
+ expect(setupTabProps.length).toBeGreaterThan(0);
229
+ expect(setupTabProps.at(-1)!.accessSlot).toBeUndefined();
230
+ expect(screen.queryByRole("button", { name: "Manage access" })).toBeNull();
231
+ });
232
+
233
+ it("a plain console session keeps its composer (no accidental forcing)", () => {
234
+ render(<SessionViewer sessionId="ses_1" org="acme" />);
235
+
236
+ expect(composerProps.length).toBeGreaterThan(0);
237
+ const thread = lastThreadProps();
238
+ expect(thread.onApprovalSubmit).toBeDefined();
239
+ expect(thread.onRetrySend).toBeDefined();
240
+ });
241
+ });
@@ -801,6 +801,70 @@ describe("useNewSessionFlow", () => {
801
801
  expect(opts.onError).toHaveBeenCalled();
802
802
  });
803
803
 
804
+ it("always uses the cursor harness, ignoring a stored Console choice", () => {
805
+ // A browser previously used in the Console must not leak its stored
806
+ // harness into a share/embed session.
807
+ localStorage.setItem(STORAGE_KEY_HARNESS, "native");
808
+ const opts = { ...defaultOptions(), audience: "guest" as const };
809
+ const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
810
+
811
+ expect(result.current.harness).toBe("cursor");
812
+ });
813
+
814
+ it("ignores the embedder's defaultHarness — guests get platform policy", () => {
815
+ const opts = {
816
+ ...defaultOptions(),
817
+ audience: "guest" as const,
818
+ defaultHarness: "native" as const,
819
+ };
820
+ const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
821
+
822
+ expect(result.current.harness).toBe("cursor");
823
+ });
824
+
825
+ it("does not restore a stored model — modelId stays undefined", () => {
826
+ localStorage.setItem(STORAGE_KEY_MODEL_CURSOR, DEFAULT_CURSOR_MODEL_ID);
827
+ const opts = { ...defaultOptions(), audience: "guest" as const };
828
+ const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
829
+
830
+ expect(result.current.modelId).toBeUndefined();
831
+ });
832
+
833
+ it("never writes Console preference keys", () => {
834
+ const opts = { ...defaultOptions(), audience: "guest" as const };
835
+ const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
836
+
837
+ act(() => result.current.setHarness("native"));
838
+ act(() => result.current.setModelId(DEFAULT_CURSOR_MODEL_ID));
839
+
840
+ expect(localStorage.getItem(STORAGE_KEY_HARNESS)).toBeNull();
841
+ expect(localStorage.getItem(STORAGE_KEY_MODEL_NATIVE)).toBeNull();
842
+ expect(localStorage.getItem(STORAGE_KEY_MODEL_CURSOR)).toBeNull();
843
+ });
844
+
845
+ it("submits with the cursor harness and NO model (server resolves Auto)", async () => {
846
+ // Stored values simulate a Console-used browser: neither may leak.
847
+ localStorage.setItem(STORAGE_KEY_HARNESS, "native");
848
+ localStorage.setItem(STORAGE_KEY_MODEL_CURSOR, DEFAULT_CURSOR_MODEL_ID);
849
+ const opts = { ...defaultOptions(), audience: "guest" as const };
850
+ const { result } = renderHook(() => useNewSessionFlow(opts), { wrapper: createWrapper() });
851
+
852
+ act(() => {
853
+ result.current.setAgentRef({ org: "acme", slug: "support-bot" });
854
+ result.current.setResolution({ mode: "saved", instanceId: "shared-inst" });
855
+ });
856
+ await act(async () => {
857
+ await result.current.submit("Hello");
858
+ });
859
+
860
+ const execInput = mockCreateExecution.mock.calls[0][0];
861
+ expect(execInput.sessionSpec.harness).toBe("cursor");
862
+ // Omitted model = cursor's Auto ("default") in the runner. If this ever
863
+ // carries a value, guest follow-ups would silently pin to it via
864
+ // lastExecModelId in useSessionPageFlow.
865
+ expect(execInput.modelName).toBeUndefined();
866
+ });
867
+
804
868
  it("surfaces launch-gate refusal copy verbatim from the status description", async () => {
805
869
  // The backend resolves owner-customizable refusal copy server-side and
806
870
  // carries it in the gRPC status description — the flow must hand it to
@@ -70,6 +70,42 @@ describe("usePersistedModel", () => {
70
70
  });
71
71
  });
72
72
 
73
+ describe("disabled mode (guest isolation)", () => {
74
+ it("returns undefined even when a valid model is stored", () => {
75
+ localStorage.setItem(STORAGE_KEY_NATIVE, DEFAULT_MODEL_ID);
76
+ const { result } = renderHook(
77
+ () => usePersistedModel({ harness: "native", enabled: false }),
78
+ { wrapper: createWrapper() },
79
+ );
80
+ expect(result.current[0]).toBeUndefined();
81
+ });
82
+
83
+ it("never writes localStorage through the setter", () => {
84
+ const { result } = renderHook(
85
+ () => usePersistedModel({ harness: "native", enabled: false }),
86
+ { wrapper: createWrapper() },
87
+ );
88
+
89
+ act(() => result.current[1](DEFAULT_MODEL_ID));
90
+
91
+ expect(localStorage.getItem(STORAGE_KEY_NATIVE)).toBeNull();
92
+ expect(result.current[0]).toBeUndefined();
93
+ });
94
+
95
+ it("does not re-read storage on a harness transition", () => {
96
+ localStorage.setItem(STORAGE_KEY_CURSOR, DEFAULT_CURSOR_MODEL_ID);
97
+ const { result, rerender } = renderHook(
98
+ ({ harness }: { harness: "native" | "cursor" }) =>
99
+ usePersistedModel({ harness, enabled: false }),
100
+ { initialProps: { harness: "native" as "native" | "cursor" }, wrapper: createWrapper() },
101
+ );
102
+
103
+ rerender({ harness: "cursor" });
104
+
105
+ expect(result.current[0]).toBeUndefined();
106
+ });
107
+ });
108
+
73
109
  describe("compound key handling", () => {
74
110
  it("extracts plain modelId from compound key in localStorage", () => {
75
111
  localStorage.setItem(STORAGE_KEY_CURSOR, "cursor/default");
@@ -61,8 +61,17 @@ vi.mock("../../execution/useSessionVariables", () => ({
61
61
  useSessionVariables: () => mockSessionVariables,
62
62
  }));
63
63
 
64
+ // Honors `enabled` like the real hook: disabled → no persisted model. Guest
65
+ // isolation depends on this contract (usePersistedModel has its own tests).
66
+ const usePersistedModelSpy = vi.fn(
67
+ (opts?: { harness?: string; enabled?: boolean }) =>
68
+ (opts?.enabled === false
69
+ ? ([undefined, vi.fn()] as const)
70
+ : (["model-x", vi.fn()] as const)),
71
+ );
64
72
  vi.mock("../usePersistedModel", () => ({
65
- usePersistedModel: () => ["model-x", vi.fn()] as const,
73
+ usePersistedModel: (opts?: { harness?: string; enabled?: boolean }) =>
74
+ usePersistedModelSpy(opts),
66
75
  }));
67
76
 
68
77
  const useAgentRefFromSessionSpy = vi.fn((_instanceId: string | null) => ({
@@ -109,4 +118,42 @@ describe("useSessionPageFlow — guest audience", () => {
109
118
  // No override: the execution continues on the session's bound instance.
110
119
  expect(mockSendFollowUp.mock.calls[0][1].agentInstanceId).toBeUndefined();
111
120
  });
121
+
122
+ it("disables model persistence — a Console-stored model must not leak in", () => {
123
+ renderHook(() => useSessionPageFlow({ ...OPTS, audience: "guest" }));
124
+
125
+ expect(usePersistedModelSpy).toHaveBeenCalledWith(
126
+ expect.objectContaining({ enabled: false }),
127
+ );
128
+ });
129
+
130
+ it("keeps model persistence for other audiences", () => {
131
+ renderHook(() => useSessionPageFlow(OPTS));
132
+
133
+ expect(usePersistedModelSpy).toHaveBeenCalledWith(
134
+ expect.objectContaining({ enabled: true }),
135
+ );
136
+ });
137
+
138
+ it("sends follow-ups with NO model — the session's harness resolves it", async () => {
139
+ // Invariant this relies on: guest executions never carry a modelName
140
+ // (the first message omits it and the server-side guest execution
141
+ // profile owns spec.execution_config thereafter), so the composer's
142
+ // lastExecModelId fallback stays undefined too. If this test starts
143
+ // failing because a guest execution carries a model, fix the server
144
+ // profile — do not special-case lastExecModelId.
145
+ mockConv.completedExecutions = [
146
+ { spec: { executionConfig: { maxCostUsd: 0.5 } } },
147
+ ];
148
+ const { result } = renderHook(() =>
149
+ useSessionPageFlow({ ...OPTS, audience: "guest" }),
150
+ );
151
+
152
+ await act(async () => {
153
+ await result.current.handleSubmit("follow up");
154
+ });
155
+
156
+ expect(mockSendFollowUp.mock.calls[0][1].modelName).toBeUndefined();
157
+ mockConv.completedExecutions = [];
158
+ });
112
159
  });
@@ -8,20 +8,17 @@ import {
8
8
  import { ExecutionArtifactSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
9
9
  import { useSessionPanel, type UseSessionPanelOptions } from "../useSessionPanel";
10
10
  import { PLAN_DOCUMENT_ENTRY_ID, PLAN_DOCUMENT_PATH } from "../plan-document";
11
- import { ARTIFACT_DOCUMENT_ENTRY_ID } from "../artifact-document";
11
+ import { ARTIFACT_DOCUMENT_ENTRY_ID } from "../../execution/artifact-document";
12
12
  import { artifactKey } from "../useSessionArtifacts";
13
- import type { SelectedThreadItem } from "../../internal/store/selection-store";
14
13
 
15
14
  // ---------------------------------------------------------------------------
16
15
  // The unified-panel controller: collapsed-by-default state, the open-editor
17
16
  // group, and the rail-view FSM ported from the retired inspector tabs. The
18
17
  // FSM rules under test: explicit picks are sticky; auto-switching happens only
19
- // in an OPEN panel (arrivals/selections never auto-open); running⇄terminal
20
- // transitions reset stickiness.
18
+ // in an OPEN panel (arrivals never auto-open); running⇄terminal transitions
19
+ // reset stickiness.
21
20
  // ---------------------------------------------------------------------------
22
21
 
23
- const item = { kind: "toolCall" } as unknown as SelectedThreadItem;
24
-
25
22
  function renderPanel(initial?: Partial<UseSessionPanelOptions>) {
26
23
  return renderHook(
27
24
  (opts: UseSessionPanelOptions) => useSessionPanel(opts),
@@ -73,49 +70,6 @@ describe("useSessionPanel — open/collapse", () => {
73
70
  });
74
71
  });
75
72
 
76
- describe("useSessionPanel — selection (Inspect)", () => {
77
- it("auto-surfaces Inspect for a selection while the panel is open", () => {
78
- const { result } = renderPanel();
79
- act(() => result.current.openPanel());
80
- act(() => result.current.notifySelection(item));
81
- expect(result.current.view).toBe("inspect");
82
- });
83
-
84
- it("never auto-opens a collapsed panel on selection", () => {
85
- const { result } = renderPanel();
86
- act(() => result.current.notifySelection(item));
87
- expect(result.current.isOpen).toBe(false);
88
- expect(result.current.view).toBe("files");
89
- });
90
-
91
- it("surfaces a selection made while collapsed when the panel opens", () => {
92
- const { result } = renderPanel();
93
- act(() => result.current.notifySelection(item));
94
- act(() => result.current.openPanel());
95
- expect(result.current.view).toBe("inspect");
96
- });
97
-
98
- it("yields to an explicit pick (sticky) over selection auto-switch", () => {
99
- const { result } = renderPanel();
100
- act(() => result.current.openPanel());
101
- act(() => result.current.setView("usage"));
102
- act(() => result.current.notifySelection(item));
103
- expect(result.current.view).toBe("usage");
104
- });
105
-
106
- it("leaves Inspect (and unsticks) when the selection clears", () => {
107
- const { result } = renderPanel();
108
- act(() => result.current.openPanel());
109
- act(() => result.current.notifySelection(item));
110
- expect(result.current.view).toBe("inspect");
111
- act(() => result.current.notifySelection(null));
112
- expect(result.current.view).toBe("files");
113
- // Unstuck: the next selection auto-surfaces Inspect again.
114
- act(() => result.current.notifySelection(item));
115
- expect(result.current.view).toBe("inspect");
116
- });
117
- });
118
-
119
73
  describe("useSessionPanel — arrivals and phase", () => {
120
74
  it("auto-surfaces Changes on first write-back while the panel is open", () => {
121
75
  const { result, rerender } = renderPanel();
@@ -150,9 +104,9 @@ describe("useSessionPanel — arrivals and phase", () => {
150
104
  hasChanges: false,
151
105
  });
152
106
  expect(result.current.view).toBe("files");
153
- // Unstuck: a selection now auto-surfaces Inspect.
154
- act(() => result.current.notifySelection(item));
155
- expect(result.current.view).toBe("inspect");
107
+ // Unstuck: the next arrival auto-switch takes effect again.
108
+ rerender({ phase: ExecutionPhase.EXECUTION_COMPLETED, hasChanges: true });
109
+ expect(result.current.view).toBe("changes");
156
110
  });
157
111
  });
158
112
 
@@ -345,15 +299,6 @@ describe("useSessionPanel — defaultView (home view)", () => {
345
299
  expect(result.current.view).toBe("configure");
346
300
  });
347
301
 
348
- it("returns to defaultView (not files) when a selection clears", () => {
349
- const { result } = renderPanel({ defaultView: "configure" });
350
- act(() => result.current.openPanel());
351
- act(() => result.current.notifySelection(item));
352
- expect(result.current.view).toBe("inspect");
353
- act(() => result.current.notifySelection(null));
354
- expect(result.current.view).toBe("configure");
355
- });
356
-
357
302
  it("defaults the home view to Explorer (files) when omitted", () => {
358
303
  const { result, rerender } = renderPanel({
359
304
  phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
@@ -5,8 +5,8 @@ import { renderHook, cleanup } from "@testing-library/react";
5
5
  // useSessionRailViews composes the session facets as injected rail views for
6
6
  // the workspace surface. The facet components themselves have their own
7
7
  // suites; here we prove the composition rules — ordering, contextual
8
- // visibility (Changes/Artifacts only with data, Inspect only with a
9
- // selection), and count badges — by mocking the aggregation hooks.
8
+ // visibility (Changes/Artifacts only with data), and count badges — by
9
+ // mocking the aggregation hooks.
10
10
  // ---------------------------------------------------------------------------
11
11
 
12
12
  const writeBacksState = { hasWriteBacks: false, writeBackCount: 0 };
@@ -21,7 +21,6 @@ vi.mock("../useSessionArtifacts", () => ({
21
21
 
22
22
  import { useSessionRailViews } from "../useSessionRailViews";
23
23
  import type { SetupTabProps } from "../facets/SetupTab";
24
- import type { SelectedThreadItem } from "../../internal/store/selection-store";
25
24
 
26
25
  const sessionConfig = {
27
26
  agentRef: null,
@@ -42,7 +41,6 @@ function renderViews(
42
41
  allExecutions: [],
43
42
  org: "acme",
44
43
  sessionConfig,
45
- selectedItem: null,
46
44
  ...overrides,
47
45
  }),
48
46
  );
@@ -57,7 +55,7 @@ afterEach(() => {
57
55
  });
58
56
 
59
57
  describe("useSessionRailViews", () => {
60
- it("always offers Config and Usage; Changes/Artifacts/Inspect are contextual", () => {
58
+ it("always offers Config and Usage; Changes/Artifacts are contextual", () => {
61
59
  const { result } = renderViews();
62
60
  expect(result.current.map((v) => v.id)).toEqual(["configure", "usage"]);
63
61
  });
@@ -100,37 +98,17 @@ describe("useSessionRailViews", () => {
100
98
  expect(artifacts?.badge).toBe(4);
101
99
  });
102
100
 
103
- it("surfaces Inspect only while a thread item is selected", () => {
104
- const selectedItem = { kind: "toolCall" } as unknown as SelectedThreadItem;
105
- const { result, rerender } = renderHook(
106
- ({ item }: { item: SelectedThreadItem | null }) =>
107
- useSessionRailViews({
108
- allExecutions: [],
109
- org: "acme",
110
- sessionConfig,
111
- selectedItem: item,
112
- }),
113
- { initialProps: { item: selectedItem as SelectedThreadItem | null } },
114
- );
115
- expect(result.current.some((v) => v.id === "inspect")).toBe(true);
116
- rerender({ item: null });
117
- expect(result.current.some((v) => v.id === "inspect")).toBe(false);
118
- });
119
-
120
- it("keeps full inspector ordering: Config, Changes, Artifacts, Usage, Inspect", () => {
101
+ it("keeps full inspector ordering: Config, Changes, Artifacts, Usage", () => {
121
102
  writeBacksState.hasWriteBacks = true;
122
103
  writeBacksState.writeBackCount = 1;
123
104
  artifactsState.hasArtifacts = true;
124
105
  artifactsState.artifactCount = 1;
125
- const { result } = renderViews({
126
- selectedItem: { kind: "toolCall" } as unknown as SelectedThreadItem,
127
- });
106
+ const { result } = renderViews();
128
107
  expect(result.current.map((v) => v.id)).toEqual([
129
108
  "configure",
130
109
  "changes",
131
110
  "artifacts",
132
111
  "usage",
133
- "inspect",
134
112
  ]);
135
113
  });
136
114
  });
@@ -20,9 +20,23 @@
20
20
  * org-level reads a guest principal cannot make (default-agent
21
21
  * resolution, session→agent derivation, personal environments) and
22
22
  * never fall back to the org's default agent.
23
+ * - `"observer"` — a read-only transcript for someone watching a
24
+ * conversation they cannot participate in, e.g. a channel connector
25
+ * or org admin reviewing a Slack/WhatsApp conversation the channel
26
+ * runtime owns. No composer, no approval/edit/retry/build
27
+ * affordances, no access management — the server enforces the same
28
+ * boundary (channel viewers hold `can_view` only, never
29
+ * `can_create_execution_in`), so the presentation simply never
30
+ * offers what the caller could not do. The session panel stays
31
+ * available read-only: usage, artifacts, and setup inspection are
32
+ * the point of observability. `SessionViewer` also self-selects this
33
+ * audience for channel-originated sessions (the
34
+ * `stigmer.ai/channel-id` label), so every entry point — a
35
+ * conversations list, a pasted URL — renders read-only without host
36
+ * wiring.
23
37
  *
24
38
  * A preset rather than individual flags: each audience is a product
25
39
  * intent, and keeping it in one place lets the SDK evolve what that
26
40
  * presentation means without breaking embedders.
27
41
  */
28
- export type SessionAudience = "integrator" | "endUser" | "guest";
42
+ export type SessionAudience = "integrator" | "endUser" | "guest" | "observer";
@@ -0,0 +1,45 @@
1
+ import type { Session } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
2
+
3
+ /**
4
+ * Metadata labels the cloud channel runtime stamps on every session it
5
+ * creates (one per external conversation). Mirrors
6
+ * `ChannelRuntimeConstants` in the Stigmer Cloud backend — the single
7
+ * continuity/audit key set for channel conversations. Console-created
8
+ * sessions never carry any of them.
9
+ */
10
+ export const CHANNEL_SESSION_LABELS = {
11
+ /** The AgentChannel that originated the conversation. */
12
+ channelId: "stigmer.ai/channel-id",
13
+ /** The external platform user (e.g. Slack user id, WhatsApp wa_id). */
14
+ externalUserKey: "stigmer.ai/channel-external-user-key",
15
+ /** The provider-side conversation identity (thread ts, wa_id, ...). */
16
+ conversationKey: "stigmer.ai/channel-conversation-key",
17
+ } as const;
18
+
19
+ /**
20
+ * Whether a session was created by the channel runtime (a Slack/WhatsApp
21
+ * conversation) rather than by a person in the console.
22
+ *
23
+ * Channel viewers hold read-only access (`can_view` without
24
+ * `can_create_execution_in`), so session organisms use this to
25
+ * self-select the `"observer"` audience — every entry point renders
26
+ * read-only without host wiring.
27
+ */
28
+ export function isChannelOriginSession(
29
+ session: Session | null | undefined,
30
+ ): boolean {
31
+ return Boolean(
32
+ session?.metadata?.labels?.[CHANNEL_SESSION_LABELS.channelId],
33
+ );
34
+ }
35
+
36
+ /**
37
+ * The external platform user a channel session belongs to, or `undefined`
38
+ * for non-channel sessions. An opaque provider id (e.g. `U0AB12CD3`) in
39
+ * v1 — display-name resolution is a future enhancement.
40
+ */
41
+ export function channelSessionExternalUserKey(
42
+ session: Session | null | undefined,
43
+ ): string | undefined {
44
+ return session?.metadata?.labels?.[CHANNEL_SESSION_LABELS.externalUserKey];
45
+ }
@@ -7,9 +7,6 @@ export type { ArtifactsTabProps } from "./ArtifactsTab.js";
7
7
  export { UsageTab } from "./UsageTab.js";
8
8
  export type { UsageTabProps } from "./UsageTab.js";
9
9
 
10
- export { InspectTab } from "./InspectTab.js";
11
- export type { InspectTabProps } from "./InspectTab.js";
12
-
13
10
  export { SetupTab } from "./SetupTab.js";
14
11
  export type {
15
12
  SetupTabProps,