@stigmer/react 3.12.1 → 3.12.3

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 (708) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +8 -19
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/activity/format-relative-time.d.ts +11 -9
  5. package/activity/format-relative-time.d.ts.map +1 -1
  6. package/activity/format-relative-time.js +11 -9
  7. package/activity/format-relative-time.js.map +1 -1
  8. package/agent/steps/CapabilitiesStep.js +5 -2
  9. package/agent/steps/CapabilitiesStep.js.map +1 -1
  10. package/agent/steps/IdentityStep.d.ts.map +1 -1
  11. package/agent/steps/IdentityStep.js +6 -5
  12. package/agent/steps/IdentityStep.js.map +1 -1
  13. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  14. package/agent-instance/CreateAgentInstanceDialog.js +15 -20
  15. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  16. package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
  17. package/api-key/ApiKeyCreatedAlert.js +12 -20
  18. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  19. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  20. package/api-key/ApiKeyListPanel.js +3 -23
  21. package/api-key/ApiKeyListPanel.js.map +1 -1
  22. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  23. package/api-key/CreateApiKeyForm.js +6 -10
  24. package/api-key/CreateApiKeyForm.js.map +1 -1
  25. package/approval-defaults-context.d.ts +47 -0
  26. package/approval-defaults-context.d.ts.map +1 -0
  27. package/approval-defaults-context.js +27 -0
  28. package/approval-defaults-context.js.map +1 -0
  29. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  30. package/attachment/AttachmentImageLightbox.js +8 -23
  31. package/attachment/AttachmentImageLightbox.js.map +1 -1
  32. package/attachment/index.d.ts +2 -0
  33. package/attachment/index.d.ts.map +1 -1
  34. package/attachment/index.js +1 -0
  35. package/attachment/index.js.map +1 -1
  36. package/attachment/vision-preflight.d.ts +113 -0
  37. package/attachment/vision-preflight.d.ts.map +1 -0
  38. package/attachment/vision-preflight.js +143 -0
  39. package/attachment/vision-preflight.js.map +1 -0
  40. package/billing/AutoRechargeCard.d.ts.map +1 -1
  41. package/billing/AutoRechargeCard.js +3 -2
  42. package/billing/AutoRechargeCard.js.map +1 -1
  43. package/billing/BillingSection.d.ts.map +1 -1
  44. package/billing/BillingSection.js +3 -2
  45. package/billing/BillingSection.js.map +1 -1
  46. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  47. package/channel/ChannelConversationsDialog.js +6 -21
  48. package/channel/ChannelConversationsDialog.js.map +1 -1
  49. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  50. package/channel/ChannelCredentialsDialog.js +10 -21
  51. package/channel/ChannelCredentialsDialog.js.map +1 -1
  52. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  53. package/channel/ChannelTemplatesDialog.js +7 -22
  54. package/channel/ChannelTemplatesDialog.js.map +1 -1
  55. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  56. package/channel/ConnectSlackDialog.js +10 -23
  57. package/channel/ConnectSlackDialog.js.map +1 -1
  58. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  59. package/channel/ConnectWhatsAppDialog.js +10 -23
  60. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  61. package/channel/useChannelSessions.d.ts.map +1 -1
  62. package/channel/useChannelSessions.js.map +1 -1
  63. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  64. package/channel-app/ChannelAppDetailPanel.js +8 -5
  65. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  66. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  67. package/channel-app/CreateChannelAppForm.js +12 -7
  68. package/channel-app/CreateChannelAppForm.js.map +1 -1
  69. package/channel-app/internal.d.ts +0 -1
  70. package/channel-app/internal.d.ts.map +1 -1
  71. package/channel-app/internal.js +5 -10
  72. package/channel-app/internal.js.map +1 -1
  73. package/composer/ComposerToolbar.js +2 -1
  74. package/composer/ComposerToolbar.js.map +1 -1
  75. package/composer/SessionComposer.d.ts +1 -1
  76. package/composer/SessionComposer.d.ts.map +1 -1
  77. package/composer/SessionComposer.js +120 -13
  78. package/composer/SessionComposer.js.map +1 -1
  79. package/composer/icons.d.ts +0 -1
  80. package/composer/icons.d.ts.map +1 -1
  81. package/composer/icons.js +0 -3
  82. package/composer/icons.js.map +1 -1
  83. package/conversation/ConversationAttentionBanner.d.ts +23 -6
  84. package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
  85. package/conversation/ConversationAttentionBanner.js +25 -10
  86. package/conversation/ConversationAttentionBanner.js.map +1 -1
  87. package/conversation/ConversationComposer.js +1 -1
  88. package/conversation/ConversationComposer.js.map +1 -1
  89. package/conversation/ConversationListPane.d.ts.map +1 -1
  90. package/conversation/ConversationListPane.js +28 -8
  91. package/conversation/ConversationListPane.js.map +1 -1
  92. package/conversation/ConversationsWorkbench.d.ts.map +1 -1
  93. package/conversation/ConversationsWorkbench.js +1 -1
  94. package/conversation/ConversationsWorkbench.js.map +1 -1
  95. package/cursor-accounts/MemberCoverageTable.js +3 -14
  96. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  97. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  98. package/dashboard/DashboardFailedRuns.js +2 -14
  99. package/dashboard/DashboardFailedRuns.js.map +1 -1
  100. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  101. package/environment/CreateEnvironmentForm.js +4 -8
  102. package/environment/CreateEnvironmentForm.js.map +1 -1
  103. package/environment/EnvVarForm.d.ts.map +1 -1
  104. package/environment/EnvVarForm.js +2 -4
  105. package/environment/EnvVarForm.js.map +1 -1
  106. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  107. package/environment/EnvironmentVariableEditor.js +5 -7
  108. package/environment/EnvironmentVariableEditor.js.map +1 -1
  109. package/execution/ApprovalCard.d.ts.map +1 -1
  110. package/execution/ApprovalCard.js +13 -3
  111. package/execution/ApprovalCard.js.map +1 -1
  112. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  113. package/execution/ArtifactApplyButton.js +2 -4
  114. package/execution/ArtifactApplyButton.js.map +1 -1
  115. package/execution/ArtifactPreviewModal.d.ts.map +1 -1
  116. package/execution/ArtifactPreviewModal.js +11 -17
  117. package/execution/ArtifactPreviewModal.js.map +1 -1
  118. package/execution/ExecutionErrorNotice.d.ts +36 -0
  119. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  120. package/execution/ExecutionErrorNotice.js +39 -0
  121. package/execution/ExecutionErrorNotice.js.map +1 -0
  122. package/execution/FilePathLink.d.ts.map +1 -1
  123. package/execution/FilePathLink.js +5 -8
  124. package/execution/FilePathLink.js.map +1 -1
  125. package/execution/FileReviewCard.d.ts.map +1 -1
  126. package/execution/FileReviewCard.js +1 -6
  127. package/execution/FileReviewCard.js.map +1 -1
  128. package/execution/FollowUpInput.d.ts.map +1 -1
  129. package/execution/FollowUpInput.js +1 -3
  130. package/execution/FollowUpInput.js.map +1 -1
  131. package/execution/LivenessStatusLine.d.ts +40 -0
  132. package/execution/LivenessStatusLine.d.ts.map +1 -0
  133. package/execution/LivenessStatusLine.js +34 -0
  134. package/execution/LivenessStatusLine.js.map +1 -0
  135. package/execution/MessageEntry.d.ts.map +1 -1
  136. package/execution/MessageEntry.js +31 -3
  137. package/execution/MessageEntry.js.map +1 -1
  138. package/execution/MessageThread.d.ts +25 -0
  139. package/execution/MessageThread.d.ts.map +1 -1
  140. package/execution/MessageThread.js +51 -36
  141. package/execution/MessageThread.js.map +1 -1
  142. package/execution/SetupProgress.d.ts.map +1 -1
  143. package/execution/SetupProgress.js +1 -1
  144. package/execution/SetupProgress.js.map +1 -1
  145. package/execution/SubAgentSection.d.ts.map +1 -1
  146. package/execution/SubAgentSection.js +9 -7
  147. package/execution/SubAgentSection.js.map +1 -1
  148. package/execution/TerminalSession.d.ts +30 -0
  149. package/execution/TerminalSession.d.ts.map +1 -1
  150. package/execution/TerminalSession.js +37 -1
  151. package/execution/TerminalSession.js.map +1 -1
  152. package/execution/ToolCallDetail.d.ts +9 -0
  153. package/execution/ToolCallDetail.d.ts.map +1 -1
  154. package/execution/ToolCallDetail.js +16 -0
  155. package/execution/ToolCallDetail.js.map +1 -1
  156. package/execution/ToolCallItem.d.ts +23 -7
  157. package/execution/ToolCallItem.d.ts.map +1 -1
  158. package/execution/ToolCallItem.js +120 -35
  159. package/execution/ToolCallItem.js.map +1 -1
  160. package/execution/ToolRunGroup.d.ts.map +1 -1
  161. package/execution/ToolRunGroup.js +11 -11
  162. package/execution/ToolRunGroup.js.map +1 -1
  163. package/execution/WriteBackCard.d.ts.map +1 -1
  164. package/execution/WriteBackCard.js +5 -20
  165. package/execution/WriteBackCard.js.map +1 -1
  166. package/execution/index.d.ts +7 -3
  167. package/execution/index.d.ts.map +1 -1
  168. package/execution/index.js +4 -2
  169. package/execution/index.js.map +1 -1
  170. package/execution/tool-categories.d.ts +93 -7
  171. package/execution/tool-categories.d.ts.map +1 -1
  172. package/execution/tool-categories.js +141 -5
  173. package/execution/tool-categories.js.map +1 -1
  174. package/execution/tool-presenter.d.ts +32 -1
  175. package/execution/tool-presenter.d.ts.map +1 -1
  176. package/execution/tool-presenter.js +10 -2
  177. package/execution/tool-presenter.js.map +1 -1
  178. package/execution/useArtifactInspection.d.ts.map +1 -1
  179. package/execution/useArtifactInspection.js +4 -7
  180. package/execution/useArtifactInspection.js.map +1 -1
  181. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  182. package/iam-policy/GrantAccessForm.js +2 -4
  183. package/iam-policy/GrantAccessForm.js.map +1 -1
  184. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  185. package/iam-policy/OrgMembersPanel.js +3 -5
  186. package/iam-policy/OrgMembersPanel.js.map +1 -1
  187. package/iam-policy/RoleSelector.d.ts.map +1 -1
  188. package/iam-policy/RoleSelector.js +7 -1
  189. package/iam-policy/RoleSelector.js.map +1 -1
  190. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  191. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  192. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  193. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  194. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  195. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  196. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  197. package/identity-provider/IdentityProviderListPanel.js +2 -4
  198. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  199. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  200. package/identity-provider/IdentityProviderWizard.js +8 -7
  201. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  202. package/identity-provider/SsoLoginPrompt.js +5 -6
  203. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  204. package/index.d.ts +9 -8
  205. package/index.d.ts.map +1 -1
  206. package/index.js +4 -4
  207. package/index.js.map +1 -1
  208. package/internal/DecisionButton.d.ts.map +1 -1
  209. package/internal/DecisionButton.js +1 -6
  210. package/internal/DecisionButton.js.map +1 -1
  211. package/internal/DialogShell.d.ts +77 -0
  212. package/internal/DialogShell.d.ts.map +1 -0
  213. package/internal/DialogShell.js +77 -0
  214. package/internal/DialogShell.js.map +1 -0
  215. package/internal/SpinnerIcon.d.ts +22 -0
  216. package/internal/SpinnerIcon.d.ts.map +1 -0
  217. package/internal/SpinnerIcon.js +23 -0
  218. package/internal/SpinnerIcon.js.map +1 -0
  219. package/internal/select-element-text.d.ts +11 -0
  220. package/internal/select-element-text.d.ts.map +1 -0
  221. package/internal/select-element-text.js +19 -0
  222. package/internal/select-element-text.js.map +1 -0
  223. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  224. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  225. package/internal/thread-card/ThreadCardShell.js +11 -5
  226. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  227. package/internal/thread-card/glyphs.d.ts +11 -2
  228. package/internal/thread-card/glyphs.d.ts.map +1 -1
  229. package/internal/thread-card/glyphs.js +9 -3
  230. package/internal/thread-card/glyphs.js.map +1 -1
  231. package/internal/thread-card/index.d.ts +1 -1
  232. package/internal/thread-card/index.d.ts.map +1 -1
  233. package/internal/thread-card/index.js.map +1 -1
  234. package/internal/useCopyFeedback.d.ts +28 -0
  235. package/internal/useCopyFeedback.d.ts.map +1 -0
  236. package/internal/useCopyFeedback.js +40 -0
  237. package/internal/useCopyFeedback.js.map +1 -0
  238. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  239. package/invitation/InvitationCreatedAlert.js +12 -19
  240. package/invitation/InvitationCreatedAlert.js.map +1 -1
  241. package/invitation/InvitationManager.d.ts.map +1 -1
  242. package/invitation/InvitationManager.js +14 -21
  243. package/invitation/InvitationManager.js.map +1 -1
  244. package/invitation/InvitationRedemption.d.ts.map +1 -1
  245. package/invitation/InvitationRedemption.js +2 -4
  246. package/invitation/InvitationRedemption.js.map +1 -1
  247. package/library/useExportResource.d.ts.map +1 -1
  248. package/library/useExportResource.js +16 -27
  249. package/library/useExportResource.js.map +1 -1
  250. package/manifest/ApplyManifestDialog.d.ts.map +1 -1
  251. package/manifest/ApplyManifestDialog.js +7 -17
  252. package/manifest/ApplyManifestDialog.js.map +1 -1
  253. package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
  254. package/manifest/EditResourceYamlDialog.js +3 -19
  255. package/manifest/EditResourceYamlDialog.js.map +1 -1
  256. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  257. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  258. package/mcp-server/DefinitionDriftNotice.js +52 -0
  259. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  260. package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
  261. package/mcp-server/McpServerConnectDialog.js +8 -20
  262. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  263. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  264. package/mcp-server/McpServerDetailView.js +50 -28
  265. package/mcp-server/McpServerDetailView.js.map +1 -1
  266. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  267. package/mcp-server/OAuthAppForm.js +2 -4
  268. package/mcp-server/OAuthAppForm.js.map +1 -1
  269. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  270. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  271. package/mcp-server/internal/definitionDrift.js +122 -0
  272. package/mcp-server/internal/definitionDrift.js.map +1 -0
  273. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  274. package/mcp-server/internal/mcpServerToInput.js +3 -0
  275. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  276. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  277. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  278. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  279. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  280. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  281. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  282. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  283. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  284. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  285. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  286. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  287. package/models/ModelRegistryContext.d.ts +7 -1
  288. package/models/ModelRegistryContext.d.ts.map +1 -1
  289. package/models/ModelRegistryContext.js.map +1 -1
  290. package/models/ModelSelector.js +9 -1
  291. package/models/ModelSelector.js.map +1 -1
  292. package/models/index.d.ts +2 -2
  293. package/models/index.d.ts.map +1 -1
  294. package/models/index.js +1 -1
  295. package/models/index.js.map +1 -1
  296. package/models/registry.d.ts +88 -6
  297. package/models/registry.d.ts.map +1 -1
  298. package/models/registry.js +133 -27
  299. package/models/registry.js.map +1 -1
  300. package/models/useModelRegistry.d.ts +7 -1
  301. package/models/useModelRegistry.d.ts.map +1 -1
  302. package/models/useModelRegistry.js +3 -2
  303. package/models/useModelRegistry.js.map +1 -1
  304. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  305. package/oauth-app/CreateOAuthAppForm.js +4 -5
  306. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  307. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  308. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  309. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  310. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  311. package/organization/CreateOrganizationForm.js +5 -9
  312. package/organization/CreateOrganizationForm.js.map +1 -1
  313. package/organization/OrgProfilePanel.d.ts.map +1 -1
  314. package/organization/OrgProfilePanel.js +7 -16
  315. package/organization/OrgProfilePanel.js.map +1 -1
  316. package/package.json +4 -4
  317. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  318. package/platform-client/CreatePlatformClientForm.js +5 -6
  319. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  320. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  321. package/platform-client/PlatformClientDetailPanel.js +6 -7
  322. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  323. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  324. package/platform-client/PlatformClientListPanel.js +2 -4
  325. package/platform-client/PlatformClientListPanel.js.map +1 -1
  326. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  327. package/platform-client/PlatformClientSecretAlert.js +18 -25
  328. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  329. package/provider.d.ts +34 -1
  330. package/provider.d.ts.map +1 -1
  331. package/provider.js +14 -7
  332. package/provider.js.map +1 -1
  333. package/resource-creation/WizardNav.d.ts.map +1 -1
  334. package/resource-creation/WizardNav.js +2 -4
  335. package/resource-creation/WizardNav.js.map +1 -1
  336. package/resource-detail/ConfirmDialog.d.ts +2 -3
  337. package/resource-detail/ConfirmDialog.d.ts.map +1 -1
  338. package/resource-detail/ConfirmDialog.js +8 -20
  339. package/resource-detail/ConfirmDialog.js.map +1 -1
  340. package/resource-detail/useCopyResource.d.ts +4 -3
  341. package/resource-detail/useCopyResource.d.ts.map +1 -1
  342. package/resource-detail/useCopyResource.js +10 -19
  343. package/resource-detail/useCopyResource.js.map +1 -1
  344. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  345. package/schedule/ScheduleDetailView.js +2 -4
  346. package/schedule/ScheduleDetailView.js.map +1 -1
  347. package/schedule/ScheduleForm.d.ts.map +1 -1
  348. package/schedule/ScheduleForm.js +6 -7
  349. package/schedule/ScheduleForm.js.map +1 -1
  350. package/session/NewSessionViewer.d.ts +52 -2
  351. package/session/NewSessionViewer.d.ts.map +1 -1
  352. package/session/NewSessionViewer.js +21 -6
  353. package/session/NewSessionViewer.js.map +1 -1
  354. package/session/SessionViewer.d.ts +63 -2
  355. package/session/SessionViewer.d.ts.map +1 -1
  356. package/session/SessionViewer.js +43 -17
  357. package/session/SessionViewer.js.map +1 -1
  358. package/session/audience.d.ts +17 -0
  359. package/session/audience.d.ts.map +1 -1
  360. package/session/index.d.ts +2 -1
  361. package/session/index.d.ts.map +1 -1
  362. package/session/index.js.map +1 -1
  363. package/session/run-config.d.ts +50 -0
  364. package/session/run-config.d.ts.map +1 -0
  365. package/session/run-config.js +15 -0
  366. package/session/run-config.js.map +1 -0
  367. package/session/useNewSessionFlow.d.ts +11 -0
  368. package/session/useNewSessionFlow.d.ts.map +1 -1
  369. package/session/useNewSessionFlow.js +29 -2
  370. package/session/useNewSessionFlow.js.map +1 -1
  371. package/session/useSessionConversation.d.ts +7 -7
  372. package/session/useSessionConversation.d.ts.map +1 -1
  373. package/session/useSessionConversation.js +2 -0
  374. package/session/useSessionConversation.js.map +1 -1
  375. package/session/useSessionPageFlow.d.ts +18 -4
  376. package/session/useSessionPageFlow.d.ts.map +1 -1
  377. package/session/useSessionPageFlow.js +33 -6
  378. package/session/useSessionPageFlow.js.map +1 -1
  379. package/session/useSessionPanel.d.ts +37 -2
  380. package/session/useSessionPanel.d.ts.map +1 -1
  381. package/session/useSessionPanel.js +44 -10
  382. package/session/useSessionPanel.js.map +1 -1
  383. package/settings/ApiKeysSection.d.ts.map +1 -1
  384. package/settings/ApiKeysSection.js +3 -2
  385. package/settings/ApiKeysSection.js.map +1 -1
  386. package/settings/ChannelAppsSection.d.ts.map +1 -1
  387. package/settings/ChannelAppsSection.js +3 -2
  388. package/settings/ChannelAppsSection.js.map +1 -1
  389. package/settings/EnvironmentsSection.js +5 -3
  390. package/settings/EnvironmentsSection.js.map +1 -1
  391. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  392. package/settings/IdentityProvidersSection.js +3 -2
  393. package/settings/IdentityProvidersSection.js.map +1 -1
  394. package/settings/InvitationsSection.d.ts.map +1 -1
  395. package/settings/InvitationsSection.js +3 -1
  396. package/settings/InvitationsSection.js.map +1 -1
  397. package/settings/MembersSection.d.ts.map +1 -1
  398. package/settings/MembersSection.js +3 -1
  399. package/settings/MembersSection.js.map +1 -1
  400. package/settings/OAuthAppsSection.d.ts.map +1 -1
  401. package/settings/OAuthAppsSection.js +3 -2
  402. package/settings/OAuthAppsSection.js.map +1 -1
  403. package/settings/OrgProfileSection.d.ts.map +1 -1
  404. package/settings/OrgProfileSection.js +3 -2
  405. package/settings/OrgProfileSection.js.map +1 -1
  406. package/settings/PlatformClientsSection.d.ts.map +1 -1
  407. package/settings/PlatformClientsSection.js +3 -2
  408. package/settings/PlatformClientsSection.js.map +1 -1
  409. package/settings/UsageSection.d.ts.map +1 -1
  410. package/settings/UsageSection.js +3 -1
  411. package/settings/UsageSection.js.map +1 -1
  412. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  413. package/sharing/ShareAgentDialog.js +19 -26
  414. package/sharing/ShareAgentDialog.js.map +1 -1
  415. package/sidebar/chrome.d.ts +3 -4
  416. package/sidebar/chrome.d.ts.map +1 -1
  417. package/sidebar/chrome.js +5 -4
  418. package/sidebar/chrome.js.map +1 -1
  419. package/skill/SkillDiffDialog.d.ts.map +1 -1
  420. package/skill/SkillDiffDialog.js +5 -21
  421. package/skill/SkillDiffDialog.js.map +1 -1
  422. package/src/access/ManageAccessDialog.tsx +14 -28
  423. package/src/activity/format-relative-time.ts +11 -9
  424. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  425. package/src/agent/steps/IdentityStep.tsx +19 -12
  426. package/src/agent-instance/CreateAgentInstanceDialog.tsx +29 -33
  427. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  428. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  429. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  430. package/src/approval-defaults-context.ts +56 -0
  431. package/src/attachment/AttachmentImageLightbox.tsx +13 -36
  432. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  433. package/src/attachment/index.ts +12 -0
  434. package/src/attachment/vision-preflight.ts +236 -0
  435. package/src/billing/AutoRechargeCard.tsx +5 -4
  436. package/src/billing/BillingSection.tsx +4 -3
  437. package/src/channel/ChannelConversationsDialog.tsx +14 -29
  438. package/src/channel/ChannelCredentialsDialog.tsx +19 -29
  439. package/src/channel/ChannelTemplatesDialog.tsx +16 -31
  440. package/src/channel/ConnectSlackDialog.tsx +19 -31
  441. package/src/channel/ConnectWhatsAppDialog.tsx +19 -31
  442. package/src/channel/useChannelSessions.ts +3 -0
  443. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  444. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  445. package/src/channel-app/internal.tsx +5 -25
  446. package/src/composer/ComposerToolbar.tsx +1 -1
  447. package/src/composer/SessionComposer.tsx +160 -13
  448. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  449. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  450. package/src/composer/icons.tsx +0 -18
  451. package/src/conversation/ConversationAttentionBanner.tsx +64 -19
  452. package/src/conversation/ConversationComposer.tsx +1 -1
  453. package/src/conversation/ConversationListPane.tsx +46 -20
  454. package/src/conversation/ConversationsWorkbench.tsx +1 -0
  455. package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
  456. package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
  457. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  458. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  459. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  460. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  461. package/src/environment/EnvVarForm.tsx +2 -18
  462. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  463. package/src/execution/ApprovalCard.tsx +23 -2
  464. package/src/execution/ArtifactApplyButton.tsx +2 -17
  465. package/src/execution/ArtifactPreviewModal.tsx +15 -27
  466. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  467. package/src/execution/FilePathLink.tsx +5 -9
  468. package/src/execution/FileReviewCard.tsx +1 -20
  469. package/src/execution/FollowUpInput.tsx +1 -16
  470. package/src/execution/LivenessStatusLine.tsx +59 -0
  471. package/src/execution/MessageEntry.tsx +136 -25
  472. package/src/execution/MessageThread.tsx +84 -83
  473. package/src/execution/SetupProgress.tsx +5 -1
  474. package/src/execution/SubAgentSection.tsx +9 -20
  475. package/src/execution/TerminalSession.tsx +97 -10
  476. package/src/execution/ToolCallDetail.tsx +19 -0
  477. package/src/execution/ToolCallItem.tsx +175 -44
  478. package/src/execution/ToolRunGroup.tsx +30 -32
  479. package/src/execution/WriteBackCard.tsx +5 -24
  480. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  481. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  482. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  483. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  484. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  485. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  486. package/src/execution/__tests__/intent-title.test.tsx +221 -0
  487. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  488. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  489. package/src/execution/index.ts +11 -2
  490. package/src/execution/tool-categories.ts +195 -9
  491. package/src/execution/tool-presenter.ts +44 -2
  492. package/src/execution/useArtifactInspection.ts +4 -8
  493. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  494. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  495. package/src/iam-policy/RoleSelector.tsx +8 -1
  496. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  497. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  498. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  499. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  500. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  501. package/src/index.ts +26 -1
  502. package/src/internal/DecisionButton.tsx +1 -20
  503. package/src/internal/DialogShell.tsx +169 -0
  504. package/src/internal/SpinnerIcon.tsx +42 -0
  505. package/src/internal/__tests__/DialogShell.test.tsx +223 -0
  506. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  507. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  508. package/src/internal/select-element-text.ts +17 -0
  509. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  510. package/src/internal/thread-card/glyphs.tsx +24 -3
  511. package/src/internal/thread-card/index.ts +1 -0
  512. package/src/internal/useCopyFeedback.ts +61 -0
  513. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  514. package/src/invitation/InvitationManager.tsx +23 -34
  515. package/src/invitation/InvitationRedemption.tsx +2 -18
  516. package/src/library/useExportResource.ts +15 -29
  517. package/src/manifest/ApplyManifestDialog.tsx +8 -26
  518. package/src/manifest/EditResourceYamlDialog.tsx +4 -31
  519. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  520. package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
  521. package/src/mcp-server/McpServerDetailView.tsx +69 -49
  522. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  523. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  524. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  525. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  526. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  527. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  528. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  529. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  530. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  531. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  532. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  533. package/src/models/ModelRegistryContext.ts +7 -1
  534. package/src/models/ModelSelector.tsx +37 -0
  535. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  536. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  537. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  538. package/src/models/index.ts +2 -2
  539. package/src/models/registry.ts +196 -29
  540. package/src/models/useModelRegistry.ts +10 -2
  541. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  542. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  543. package/src/organization/CreateOrganizationForm.tsx +10 -29
  544. package/src/organization/OrgProfilePanel.tsx +13 -44
  545. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  546. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  547. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  548. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  549. package/src/provider.tsx +76 -33
  550. package/src/resource-creation/WizardNav.tsx +2 -18
  551. package/src/resource-detail/ConfirmDialog.tsx +9 -30
  552. package/src/resource-detail/useCopyResource.ts +17 -23
  553. package/src/schedule/ScheduleDetailView.tsx +2 -18
  554. package/src/schedule/ScheduleForm.tsx +19 -34
  555. package/src/session/NewSessionViewer.tsx +85 -7
  556. package/src/session/SessionViewer.tsx +120 -17
  557. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  558. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  559. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  560. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  561. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  562. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  563. package/src/session/audience.ts +18 -0
  564. package/src/session/index.ts +2 -1
  565. package/src/session/run-config.ts +59 -0
  566. package/src/session/useNewSessionFlow.ts +39 -2
  567. package/src/session/useSessionConversation.ts +10 -8
  568. package/src/session/useSessionPageFlow.ts +51 -10
  569. package/src/session/useSessionPanel.ts +91 -10
  570. package/src/settings/ApiKeysSection.tsx +4 -3
  571. package/src/settings/ChannelAppsSection.tsx +4 -3
  572. package/src/settings/EnvironmentsSection.tsx +8 -5
  573. package/src/settings/IdentityProvidersSection.tsx +4 -3
  574. package/src/settings/InvitationsSection.tsx +4 -2
  575. package/src/settings/MembersSection.tsx +4 -2
  576. package/src/settings/OAuthAppsSection.tsx +4 -3
  577. package/src/settings/OrgProfileSection.tsx +4 -3
  578. package/src/settings/PlatformClientsSection.tsx +4 -3
  579. package/src/settings/UsageSection.tsx +4 -2
  580. package/src/sharing/ShareAgentDialog.tsx +33 -37
  581. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  582. package/src/sidebar/chrome.tsx +6 -6
  583. package/src/skill/SkillDiffDialog.tsx +13 -36
  584. package/src/styles.css +43 -0
  585. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  586. package/src/workflow/FailedRunsWidget.tsx +2 -9
  587. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  588. package/src/workflow/ViewYamlDialog.tsx +21 -55
  589. package/src/workflow/WorkflowArchitectDialog.tsx +17 -68
  590. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  591. package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
  592. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  593. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  594. package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
  595. package/src/workflow/WorkflowExplainDialog.tsx +18 -60
  596. package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
  597. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  598. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  599. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  600. package/src/workflow/WorkflowRunDialog.tsx +23 -70
  601. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  602. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  603. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  604. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  605. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  606. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  607. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  608. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -41
  609. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  610. package/src/workflow/index.ts +1 -0
  611. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
  612. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  613. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  614. package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
  615. package/src/workflow/useApprovalBoundary.ts +1 -1
  616. package/src/workflow/useWorkflowCanvas.ts +114 -11
  617. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  618. package/styles.css +1 -1
  619. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  620. package/version-history/VersionTimelineEntry.js +1 -23
  621. package/version-history/VersionTimelineEntry.js.map +1 -1
  622. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  623. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  624. package/workflow/FailedRunsWidget.js +2 -11
  625. package/workflow/FailedRunsWidget.js.map +1 -1
  626. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  627. package/workflow/PendingApprovalsWidget.js +2 -11
  628. package/workflow/PendingApprovalsWidget.js.map +1 -1
  629. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  630. package/workflow/ViewYamlDialog.js +14 -49
  631. package/workflow/ViewYamlDialog.js.map +1 -1
  632. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  633. package/workflow/WorkflowArchitectDialog.js +10 -33
  634. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  635. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  636. package/workflow/WorkflowArtifactDocument.js +5 -8
  637. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  638. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  639. package/workflow/WorkflowCanvasEditor.js +1 -1
  640. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  641. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  642. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  643. package/workflow/WorkflowCanvasInner.js +7 -3
  644. package/workflow/WorkflowCanvasInner.js.map +1 -1
  645. package/workflow/WorkflowDiffGraph.js +6 -2
  646. package/workflow/WorkflowDiffGraph.js.map +1 -1
  647. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  648. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  649. package/workflow/WorkflowExecutionViewer.js +23 -6
  650. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  651. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  652. package/workflow/WorkflowExplainDialog.js +10 -28
  653. package/workflow/WorkflowExplainDialog.js.map +1 -1
  654. package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
  655. package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
  656. package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
  657. package/workflow/WorkflowOverviewGraph.js +8 -2
  658. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  659. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  660. package/workflow/WorkflowRefinePanel.js +2 -4
  661. package/workflow/WorkflowRefinePanel.js.map +1 -1
  662. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  663. package/workflow/WorkflowRepairCard.js +2 -4
  664. package/workflow/WorkflowRepairCard.js.map +1 -1
  665. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  666. package/workflow/WorkflowRunDialog.js +14 -35
  667. package/workflow/WorkflowRunDialog.js.map +1 -1
  668. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  669. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  670. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  671. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  672. package/workflow/WorkflowVersionBadge.js +4 -13
  673. package/workflow/WorkflowVersionBadge.js.map +1 -1
  674. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  675. package/workflow/WorkflowVersionTimeline.js +1 -26
  676. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  677. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  678. package/workflow/execution-comparison/ExecutionComparisonPicker.js +14 -40
  679. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  680. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  681. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  682. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  683. package/workflow/index.d.ts +1 -1
  684. package/workflow/index.d.ts.map +1 -1
  685. package/workflow/index.js.map +1 -1
  686. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  687. package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
  688. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  689. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  690. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  691. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  692. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  693. package/workflow/picker/BranchAddPopover.js +3 -2
  694. package/workflow/picker/BranchAddPopover.js.map +1 -1
  695. package/workflow/templates/WorkflowTemplatePreview.d.ts +1 -1
  696. package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
  697. package/workflow/templates/WorkflowTemplatePreview.js +10 -22
  698. package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
  699. package/workflow/useApprovalBoundary.d.ts +1 -1
  700. package/workflow/useApprovalBoundary.js +1 -1
  701. package/workflow/useWorkflowCanvas.d.ts +5 -1
  702. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  703. package/workflow/useWorkflowCanvas.js +99 -13
  704. package/workflow/useWorkflowCanvas.js.map +1 -1
  705. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  706. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  707. package/workflow/useWorkflowExecutionPanel.js +46 -13
  708. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
@@ -85,12 +85,64 @@ function readStoredCenterView(): CenterView {
85
85
  return "thread";
86
86
  }
87
87
 
88
+ /**
89
+ * Whether {@link WorkflowExecutionViewer} offers the execution panel surface.
90
+ *
91
+ * - `"auto"` (default) — the panel and its toggle chip are available.
92
+ * - `"none"` — the panel and chip are absent entirely, and Diagnose is
93
+ * withheld with them (the diagnosis conversation renders inside the
94
+ * panel, so without one the affordance would be a dead end). For hosts
95
+ * whose surrounding surface already renders artifacts/changes/usage.
96
+ *
97
+ * The workflow twin of the session organisms' `SessionPanelMode` — a
98
+ * deliberately separate union, like the panel controllers themselves, so
99
+ * each organism's vocabulary can grow domain-specific modes. A union (not
100
+ * a boolean) so a future mode — e.g. a host-rendered panel fed by the
101
+ * SDK's controller — extends the vocabulary instead of breaking it.
102
+ */
103
+ export type WorkflowExecutionPanelMode = "auto" | "none";
104
+
88
105
  /** Props for {@link WorkflowExecutionViewer}. */
89
106
  export interface WorkflowExecutionViewerProps {
90
107
  /** ID of the workflow execution to display. */
91
108
  readonly executionId: string;
92
109
  /** Organization slug — needed for AI diagnosis authorization. */
93
110
  readonly org?: string;
111
+ /**
112
+ * Whether the viewer offers the execution panel at all. `"none"` removes
113
+ * the panel AND its toggle chip and withholds the Diagnose action (its
114
+ * conversation renders inside the panel) — for hosts whose surrounding
115
+ * surface already presents the execution's artifacts and usage.
116
+ *
117
+ * @default "auto"
118
+ */
119
+ readonly panel?: WorkflowExecutionPanelMode;
120
+ /**
121
+ * Initial open state of the execution panel in uncontrolled mode — a
122
+ * docking host that wants the artifacts rail visible from the first paint
123
+ * passes `true`. Ignored when
124
+ * {@link WorkflowExecutionViewerProps.panelOpen} is provided.
125
+ *
126
+ * @default false
127
+ */
128
+ readonly defaultPanelOpen?: boolean;
129
+ /**
130
+ * Controlled open state of the execution panel. When provided, the host
131
+ * owns the panel: the chip toggle, Diagnose, and artifact/file-change
132
+ * opens surface through
133
+ * {@link WorkflowExecutionViewerProps.onPanelOpenChange} instead of
134
+ * flipping state, and the panel follows this value. Leave `undefined`
135
+ * for the self-managing default.
136
+ */
137
+ readonly panelOpen?: boolean;
138
+ /**
139
+ * Called on every panel open/close transition, in BOTH modes — pass it
140
+ * alone (uncontrolled) to simply observe the panel, e.g. widening a
141
+ * docked pane when Diagnose expands it and reclaiming the room on close.
142
+ * See {@link UseWorkflowExecutionPanelOptions.onOpenChange} for the exact
143
+ * request-vs-transition semantics in each mode.
144
+ */
145
+ readonly onPanelOpenChange?: (open: boolean) => void;
94
146
  /**
95
147
  * Callback when the user clicks a link to a child agent execution.
96
148
  * Receives the AgentExecution ID. The host application is responsible
@@ -150,6 +202,10 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
150
202
  onNavigateToWorkflowEditor,
151
203
  headerActions,
152
204
  nodesDraggable,
205
+ panel: panelMode = "auto",
206
+ defaultPanelOpen,
207
+ panelOpen,
208
+ onPanelOpenChange,
153
209
  className,
154
210
  }: WorkflowExecutionViewerProps) {
155
211
  const {
@@ -306,11 +362,24 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
306
362
  ],
307
363
  );
308
364
 
365
+ // The one flag every panel affordance keys on: the host opted out
366
+ // (`panel="none"`). Everything the panel touches — the chip, the split's
367
+ // secondary pane, and Diagnose (whose conversation renders inside the
368
+ // panel) — gates on this, so the affordances can never drift apart.
369
+ const panelEnabled = panelMode !== "none";
370
+
309
371
  // The execution-level workspace panel (facets + virtual document
310
372
  // tabs). The controller lives at the owner level — the editors-store
311
373
  // SUBSCRIPTION stays inside ExecutionWorkspacePanel so tab churn re-renders
312
374
  // only the panel subtree, never the streaming graph (DD-009/DD-010).
313
- const panel = useWorkflowExecutionPanel();
375
+ const panel = useWorkflowExecutionPanel({
376
+ // With the panel disabled the controller is pinned controlled-closed
377
+ // and unobserved — airtight inertness, not just hidden UI: no intent
378
+ // can flip state or reach the host's callback.
379
+ open: panelEnabled ? panelOpen : false,
380
+ defaultOpen: defaultPanelOpen,
381
+ onOpenChange: panelEnabled ? onPanelOpenChange : undefined,
382
+ });
314
383
 
315
384
  const [showComparePicker, setShowComparePicker] = useState(false);
316
385
  const [compareTargetId, setCompareTargetId] = useState<string | null>(null);
@@ -467,8 +536,11 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
467
536
  actions={actions}
468
537
  // Diagnose opens (or focuses) the singleton diagnosis document tab —
469
538
  // the tab itself is the "diagnosis is active" state, so there is no
470
- // owner-level isDiagnosing boolean to keep in sync (SSOT).
471
- onDiagnose={org ? panel.openDiagnosis : undefined}
539
+ // owner-level isDiagnosing boolean to keep in sync (SSOT). A viewer
540
+ // without a panel (panel="none") withholds the action: the
541
+ // conversation renders inside the panel, so offering it would be a
542
+ // dead end.
543
+ onDiagnose={org && panelEnabled ? panel.openDiagnosis : undefined}
472
544
  onCompare={handleOpenComparePicker}
473
545
  headerActions={
474
546
  <>
@@ -477,12 +549,15 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
477
549
  Usage facet gives the panel data-independent content (its
478
550
  empty state is honest even before any usage accrues). The
479
551
  badge stays the artifact count: artifacts are countable
480
- collateral, usage is a continuous quantity. */}
481
- <PanelChip
482
- isOpen={panel.isOpen}
483
- onToggle={panel.isOpen ? panel.closePanel : panel.openPanel}
484
- badgeCount={artifacts.length}
485
- />
552
+ collateral, usage is a continuous quantity. A viewer without
553
+ a panel (panel="none") has no toggle: it is simply absent. */}
554
+ {panelEnabled && (
555
+ <PanelChip
556
+ isOpen={panel.isOpen}
557
+ onToggle={panel.isOpen ? panel.closePanel : panel.openPanel}
558
+ badgeCount={artifacts.length}
559
+ />
560
+ )}
486
561
  </>
487
562
  }
488
563
  />
@@ -613,8 +688,10 @@ export const WorkflowExecutionViewer = memo(function WorkflowExecutionViewer({
613
688
  secondary={
614
689
  // Content unmounts while collapsed (matching the session panel
615
690
  // region); the editors store lives on the controller, so open tabs
616
- // survive a collapse/expand cycle.
617
- panel.isOpen ? (
691
+ // survive a collapse/expand cycle. The panelEnabled guard is
692
+ // belt-and-braces beside the pinned-closed controller: with
693
+ // panel="none", isOpen can never be true.
694
+ panel.isOpen && panelEnabled ? (
618
695
  <ExecutionWorkspacePanel
619
696
  panel={panel}
620
697
  executionId={executionId}
@@ -1,9 +1,12 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef } from "react";
3
+ import { useCallback, useEffect } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
  import { useExplainWorkflowFlow, type ExplainPhase } from "./useExplainWorkflowFlow.js";
6
7
  import { MessageThread } from "../execution/MessageThread.js";
8
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
9
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
7
10
 
8
11
  /** Props for {@link WorkflowExplainDialog}. */
9
12
  export interface WorkflowExplainDialogProps {
@@ -34,8 +37,6 @@ export function WorkflowExplainDialog({
34
37
  org,
35
38
  currentYaml,
36
39
  }: WorkflowExplainDialogProps) {
37
- const dialogRef = useRef<HTMLDialogElement>(null);
38
-
39
40
  const flow = useExplainWorkflowFlow({
40
41
  org,
41
42
  currentYaml,
@@ -44,54 +45,28 @@ export function WorkflowExplainDialog({
44
45
  },
45
46
  });
46
47
 
47
- // Show/hide dialog
48
+ // Each opening starts a fresh explanation.
48
49
  useEffect(() => {
49
- const dialog = dialogRef.current;
50
- if (!dialog) return;
51
- if (open && !dialog.open) {
50
+ if (open) {
52
51
  flow.reset();
53
- dialog.showModal();
54
52
  flow.explain();
55
- } else if (!open && dialog.open) {
56
- dialog.close();
57
53
  }
58
54
  }, [open, flow.reset, flow.explain]);
59
55
 
60
- const handleDialogCancel = useCallback(
61
- (e: React.SyntheticEvent) => {
62
- e.preventDefault();
63
- onOpenChange(false);
64
- },
65
- [onOpenChange],
66
- );
67
-
68
- const handleBackdropClick = useCallback(
69
- (e: React.MouseEvent<HTMLDialogElement>) => {
70
- if (e.target === dialogRef.current) {
71
- onOpenChange(false);
72
- }
73
- },
74
- [onOpenChange],
75
- );
76
-
56
+ const { copy, copied } = useCopyFeedback();
77
57
  const handleCopy = useCallback(() => {
78
58
  if (flow.explanation) {
79
- navigator.clipboard.writeText(flow.explanation).catch(() => {
80
- /* Clipboard unavailable in some contexts */
81
- });
59
+ void copy(flow.explanation);
82
60
  }
83
- }, [flow.explanation]);
61
+ }, [copy, flow.explanation]);
84
62
 
85
63
  return (
86
- <dialog
87
- ref={dialogRef}
88
- onCancel={handleDialogCancel}
89
- onClick={handleBackdropClick}
90
- className={cn(
91
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-2xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
92
- "stg:backdrop:bg-black/50",
93
- "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
94
- )}
64
+ <DialogShell
65
+ open={open}
66
+ onOpenChange={onOpenChange}
67
+ width="2xl"
68
+ dismissOnBackdrop
69
+ aria-label="Workflow Explanation"
95
70
  >
96
71
  <div className="stg:flex stg:flex-col">
97
72
  {/* Header */}
@@ -102,7 +77,7 @@ export function WorkflowExplainDialog({
102
77
  </h3>
103
78
  {flow.isStreaming && (
104
79
  <span className="stg:inline-flex stg:items-center stg:gap-1.5 stg:text-xs stg:text-muted-foreground">
105
- <SpinnerIcon />
80
+ <SpinnerIcon size={14} />
106
81
  Analyzing…
107
82
  </span>
108
83
  )}
@@ -199,30 +174,13 @@ export function WorkflowExplainDialog({
199
174
  "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
200
175
  )}
201
176
  >
202
- Copy to clipboard
177
+ {copied ? "Copied" : "Copy to clipboard"}
203
178
  </button>
204
179
  )}
205
180
  </div>
206
181
  </div>
207
182
  </div>
208
- </dialog>
183
+ </DialogShell>
209
184
  );
210
185
  }
211
186
 
212
- function SpinnerIcon({ size = 14 }: { readonly size?: number }) {
213
- return (
214
- <svg
215
- width={size}
216
- height={size}
217
- viewBox="0 0 16 16"
218
- fill="none"
219
- stroke="currentColor"
220
- strokeWidth="2"
221
- strokeLinecap="round"
222
- className="stg:animate-spin"
223
- aria-hidden="true"
224
- >
225
- <path d="M8 2a6 6 0 1 0 6 6" />
226
- </svg>
227
- );
228
- }
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef } from "react";
3
+ import { useCallback } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
  import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
6
7
  import { WorkflowOverviewGraph } from "./WorkflowOverviewGraph.js";
7
8
 
@@ -38,23 +39,9 @@ export function WorkflowGraphFullscreenDialog({
38
39
  onClose,
39
40
  onOpenInEditor,
40
41
  }: WorkflowGraphFullscreenDialogProps) {
41
- const dialogRef = useRef<HTMLDialogElement>(null);
42
-
43
- useEffect(() => {
44
- const dialog = dialogRef.current;
45
- if (!dialog) return;
46
-
47
- if (open && !dialog.open) {
48
- dialog.showModal();
49
- } else if (!open && dialog.open) {
50
- dialog.close();
51
- }
52
- }, [open]);
53
-
54
- const handleCancel = useCallback(
55
- (e: React.SyntheticEvent) => {
56
- e.preventDefault();
57
- onClose();
42
+ const handleOpenChange = useCallback(
43
+ (nextOpen: boolean) => {
44
+ if (!nextOpen) onClose();
58
45
  },
59
46
  [onClose],
60
47
  );
@@ -62,14 +49,15 @@ export function WorkflowGraphFullscreenDialog({
62
49
  const workflowName = workflow?.metadata?.name || "Task Flow";
63
50
 
64
51
  return (
65
- <dialog
66
- ref={dialogRef}
67
- onCancel={handleCancel}
52
+ <DialogShell
53
+ open={open}
54
+ onOpenChange={handleOpenChange}
68
55
  aria-label={`${workflowName} — full view`}
69
- className={cn(
70
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:h-[90vh] stg:w-[95vw] stg:rounded-lg stg:border stg:border-border stg:bg-background stg:p-0 stg:text-foreground stg:shadow-2xl stg:outline-none",
71
- "stg:[&::backdrop]:bg-black/60",
72
- )}
56
+ // Near-full-viewport outlier: free-form sizing and the background
57
+ // surface for the graph canvas. The previously hardcoded ::backdrop
58
+ // color (bg-black/60 — it predated and escaped the #652 fence via the
59
+ // arbitrary-variant spelling) now rides the shell's token backdrop.
60
+ className="stg:h-[90vh] stg:w-[95vw] stg:max-w-none stg:bg-background stg:text-foreground stg:outline-none"
73
61
  >
74
62
  {open && (
75
63
  <div className="stg:flex stg:h-full stg:flex-col">
@@ -101,7 +89,7 @@ export function WorkflowGraphFullscreenDialog({
101
89
  </div>
102
90
  </div>
103
91
  )}
104
- </dialog>
92
+ </DialogShell>
105
93
  );
106
94
  }
107
95
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { memo, useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
4
4
  import {
5
5
  ReactFlow,
6
6
  Controls,
@@ -96,6 +96,13 @@ function WorkflowOverviewGraphInner({
96
96
  nodesDraggable: draggable = false,
97
97
  className,
98
98
  }: WorkflowOverviewGraphProps) {
99
+ // Instance-scoped React Flow id (oss#593): React Flow derives its internal
100
+ // DOM ids (aria descriptions, SVG marker/pattern defs) from this id, so two
101
+ // mounted graphs without explicit ids collide — e.g. the zone-cached detail
102
+ // page renders a hidden copy whose defs hijack the visible copy's url(#…)
103
+ // and aria-describedby references.
104
+ const flowId = useId();
105
+
99
106
  const {
100
107
  nodes: baseNodes,
101
108
  nodesWithSelection,
@@ -216,6 +223,7 @@ function WorkflowOverviewGraphInner({
216
223
  <WorkflowGraphModeProvider mode="overview">
217
224
  <div ref={containerRef} className={cn("stg:relative stg:h-full stg:w-full", className)}>
218
225
  <ReactFlow
226
+ id={flowId}
219
227
  nodes={displayNodes}
220
228
  edges={edges}
221
229
  onNodesChange={draggable ? handleNodesChange : undefined}
@@ -6,6 +6,7 @@ import { useRefineWorkflowFlow, type RefinePhase } from "./useRefineWorkflowFlow
6
6
  import { MessageThread } from "../execution/MessageThread.js";
7
7
  import { computeUnifiedDiff, type DiffLine } from "./workflow-yaml-diff.js";
8
8
  import { WorkflowDiffGraph } from "./WorkflowDiffGraph.js";
9
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
9
10
 
10
11
  /** Props for {@link WorkflowRefinePanel}. */
11
12
  export interface WorkflowRefinePanelProps {
@@ -173,7 +174,7 @@ export function WorkflowRefinePanel({
173
174
  {/* Starting indicator (before stream connects) */}
174
175
  {flow.phase === "starting" && (
175
176
  <div className="stg:flex stg:flex-col stg:items-center stg:justify-center stg:gap-2 stg:py-8">
176
- <SpinnerIcon />
177
+ <SpinnerIcon size={14} />
177
178
  <p className="stg:text-xs stg:text-muted-foreground">
178
179
  Starting Workflow Architect…
179
180
  </p>
@@ -429,20 +430,3 @@ function CloseIcon() {
429
430
  );
430
431
  }
431
432
 
432
- function SpinnerIcon({ size = 14 }: { readonly size?: number }) {
433
- return (
434
- <svg
435
- width={size}
436
- height={size}
437
- viewBox="0 0 16 16"
438
- fill="none"
439
- stroke="currentColor"
440
- strokeWidth="2"
441
- strokeLinecap="round"
442
- className="stg:animate-spin"
443
- aria-hidden="true"
444
- >
445
- <path d="M8 2a6 6 0 1 0 6 6" />
446
- </svg>
447
- );
448
- }
@@ -6,6 +6,7 @@ import { useDiagnoseExecutionFlow, type DiagnosePhase } from "./useDiagnoseExecu
6
6
  import { MessageThread } from "../execution/MessageThread.js";
7
7
  import { computeUnifiedDiff, type DiffLine } from "./workflow-yaml-diff.js";
8
8
  import { WorkflowDiffGraph } from "./WorkflowDiffGraph.js";
9
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
9
10
 
10
11
  /** Props for {@link WorkflowRepairCard}. */
11
12
  export interface WorkflowRepairCardProps {
@@ -160,7 +161,7 @@ export function WorkflowRepairCard({
160
161
  {/* Starting indicator */}
161
162
  {flow.phase === "starting" && !hasConversation && (
162
163
  <div className="stg:flex stg:flex-col stg:items-center stg:justify-center stg:gap-2 stg:py-8">
163
- <SpinnerIcon />
164
+ <SpinnerIcon size={14} />
164
165
  <p className="stg:text-xs stg:text-muted-foreground">
165
166
  Starting Workflow Architect…
166
167
  </p>
@@ -436,20 +437,3 @@ function CloseIcon() {
436
437
  );
437
438
  }
438
439
 
439
- function SpinnerIcon({ size = 14 }: { readonly size?: number }) {
440
- return (
441
- <svg
442
- width={size}
443
- height={size}
444
- viewBox="0 0 16 16"
445
- fill="none"
446
- stroke="currentColor"
447
- strokeWidth="2"
448
- strokeLinecap="round"
449
- className="stg:animate-spin"
450
- aria-hidden="true"
451
- >
452
- <path d="M8 2a6 6 0 1 0 6 6" />
453
- </svg>
454
- );
455
- }
@@ -1,11 +1,13 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef } from "react";
3
+ import { useCallback, useEffect } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
  import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
6
7
  import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
7
8
  import { useRunWorkflowFlow } from "./useRunWorkflowFlow.js";
8
9
  import { WorkflowRunForm } from "./WorkflowRunForm.js";
10
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
9
11
 
10
12
  /** Props for {@link WorkflowRunDialog}. */
11
13
  export interface WorkflowRunDialogProps {
@@ -81,8 +83,6 @@ export function WorkflowRunDialog({
81
83
  onSuccess,
82
84
  onError,
83
85
  }: WorkflowRunDialogProps) {
84
- const dialogRef = useRef<HTMLDialogElement>(null);
85
-
86
86
  const handleSuccess = useCallback(
87
87
  (executionId: string) => {
88
88
  onOpenChange(false);
@@ -99,25 +99,19 @@ export function WorkflowRunDialog({
99
99
  onError,
100
100
  });
101
101
 
102
- // Sync open state with the native dialog
102
+ // Each opening starts from a clean form.
103
103
  useEffect(() => {
104
- const dialog = dialogRef.current;
105
- if (!dialog) return;
106
- if (open && !dialog.open) {
107
- flow.reset();
108
- // Preselection must follow reset (reset clears the selection back to
109
- // the server-resolved default). Guarded against stale ids: an instance
110
- // deleted between the caller capturing the id and this open falls back
111
- // to the default option instead of a <select> value with no option.
112
- if (
113
- initialInstanceId &&
114
- instances.some((i) => i.metadata?.id === initialInstanceId)
115
- ) {
116
- flow.setSelectedInstanceId(initialInstanceId);
117
- }
118
- dialog.showModal();
119
- } else if (!open && dialog.open) {
120
- dialog.close();
104
+ if (!open) return;
105
+ flow.reset();
106
+ // Preselection must follow reset (reset clears the selection back to
107
+ // the server-resolved default). Guarded against stale ids: an instance
108
+ // deleted between the caller capturing the id and this open falls back
109
+ // to the default option instead of a <select> value with no option.
110
+ if (
111
+ initialInstanceId &&
112
+ instances.some((i) => i.metadata?.id === initialInstanceId)
113
+ ) {
114
+ flow.setSelectedInstanceId(initialInstanceId);
121
115
  }
122
116
  }, [
123
117
  open,
@@ -127,36 +121,16 @@ export function WorkflowRunDialog({
127
121
  instances,
128
122
  ]);
129
123
 
130
- const handleDialogCancel = useCallback(
131
- (e: React.SyntheticEvent) => {
132
- e.preventDefault();
133
- onOpenChange(false);
134
- },
135
- [onOpenChange],
136
- );
137
-
138
- const handleBackdropClick = useCallback(
139
- (e: React.MouseEvent<HTMLDialogElement>) => {
140
- if (e.target === dialogRef.current) {
141
- onOpenChange(false);
142
- }
143
- },
144
- [onOpenChange],
145
- );
146
-
147
124
  const workflowName =
148
125
  workflow.metadata?.name || workflow.metadata?.slug || "Workflow";
149
126
 
150
127
  return (
151
- <dialog
152
- ref={dialogRef}
153
- onCancel={handleDialogCancel}
154
- onClick={handleBackdropClick}
155
- className={cn(
156
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-lg stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
157
- "stg:backdrop:bg-black/50",
158
- "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
159
- )}
128
+ <DialogShell
129
+ open={open}
130
+ onOpenChange={onOpenChange}
131
+ width="lg"
132
+ dismissOnBackdrop
133
+ aria-label={`Run ${workflowName}`}
160
134
  >
161
135
  <div className="stg:flex stg:flex-col">
162
136
  {/* Header */}
@@ -225,33 +199,12 @@ export function WorkflowRunDialog({
225
199
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
226
200
  )}
227
201
  >
228
- {flow.isSubmitting && <SpinnerIcon />}
202
+ {flow.isSubmitting && <SpinnerIcon size={14} />}
229
203
  {flow.isSubmitting ? "Starting…" : "Run Workflow"}
230
204
  </button>
231
205
  </div>
232
206
  </div>
233
- </dialog>
207
+ </DialogShell>
234
208
  );
235
209
  }
236
210
 
237
- // ---------------------------------------------------------------------------
238
- // Icons
239
- // ---------------------------------------------------------------------------
240
-
241
- function SpinnerIcon() {
242
- return (
243
- <svg
244
- width="14"
245
- height="14"
246
- viewBox="0 0 16 16"
247
- fill="none"
248
- stroke="currentColor"
249
- strokeWidth="2"
250
- strokeLinecap="round"
251
- className="stg:animate-spin"
252
- aria-hidden="true"
253
- >
254
- <path d="M8 2a6 6 0 1 0 6 6" />
255
- </svg>
256
- );
257
- }
@@ -13,6 +13,7 @@ import {
13
13
  type TaskDetailApprovalDecision,
14
14
  type TaskReviewerView,
15
15
  } from "./task-detail/task-approval.js";
16
+ import { SpinnerIcon } from "../internal/thread-card/glyphs.js";
16
17
 
17
18
  /** Props for {@link WorkflowTaskApprovalSummary}. */
18
19
  export interface WorkflowTaskApprovalSummaryProps {
@@ -101,7 +102,7 @@ export const WorkflowTaskApprovalSummary = memo(function WorkflowTaskApprovalSum
101
102
  {/* Decision header */}
102
103
  {isFinalizing ? (
103
104
  <div className="stg:flex stg:items-center stg:gap-2 stg:text-xs stg:text-muted-foreground">
104
- <SpinnerIcon />
105
+ <SpinnerIcon size={12} />
105
106
  <span>Decision recorded — finalizing…</span>
106
107
  </div>
107
108
  ) : (
@@ -315,19 +316,3 @@ function ToneIcon({ tone }: { readonly tone: DecisionTone }) {
315
316
  );
316
317
  }
317
318
 
318
- function SpinnerIcon() {
319
- return (
320
- <svg
321
- width="12"
322
- height="12"
323
- viewBox="0 0 12 12"
324
- fill="none"
325
- stroke="currentColor"
326
- strokeWidth="1.5"
327
- className="stg:animate-spin"
328
- aria-hidden="true"
329
- >
330
- <path d="M6 1.5A4.5 4.5 0 1 1 1.5 6" strokeLinecap="round" />
331
- </svg>
332
- );
333
- }
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
 
3
- import { memo, useCallback, useState } from "react";
3
+ import { memo } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
6
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
6
7
 
7
8
  /** Props for {@link WorkflowVersionBadge}. */
8
9
  export interface WorkflowVersionBadgeProps {
@@ -41,19 +42,9 @@ export const WorkflowVersionBadge = memo(function WorkflowVersionBadge({
41
42
  isCurrent,
42
43
  className,
43
44
  }: WorkflowVersionBadgeProps) {
44
- const [copied, setCopied] = useState(false);
45
+ const { copy, copied } = useCopyFeedback();
45
46
  const truncated = versionHash.slice(0, 8);
46
47
 
47
- const handleCopy = useCallback(async () => {
48
- try {
49
- await navigator.clipboard.writeText(versionHash);
50
- setCopied(true);
51
- setTimeout(() => setCopied(false), 1500);
52
- } catch {
53
- // Clipboard API may be unavailable in some contexts
54
- }
55
- }, [versionHash]);
56
-
57
48
  return (
58
49
  <span className={cn("stg:inline-flex stg:items-center stg:gap-1.5", className)}>
59
50
  {isCurrent && (
@@ -75,7 +66,7 @@ export const WorkflowVersionBadge = memo(function WorkflowVersionBadge({
75
66
  render={
76
67
  <button
77
68
  type="button"
78
- onClick={handleCopy}
69
+ onClick={() => void copy(versionHash)}
79
70
  className={cn(
80
71
  "stg:shrink-0 stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-mono stg:text-[11px] stg:font-medium stg:text-foreground stg:transition-colors",
81
72
  "stg:hover:bg-accent-hover",