@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
@@ -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 { useSkillDiff } from "./useSkillDiff.js";
6
7
  import { MultiFileDiffView } from "../version-history/MultiFileDiffView.js";
7
8
  import { ErrorMessage } from "../error/ErrorMessage.js";
@@ -57,31 +58,9 @@ export interface SkillDiffDialogProps {
57
58
  * ```
58
59
  */
59
60
  export function SkillDiffDialog({ state, onClose }: SkillDiffDialogProps) {
60
- const dialogRef = useRef<HTMLDialogElement>(null);
61
-
62
- useEffect(() => {
63
- const dialog = dialogRef.current;
64
- if (!dialog) return;
65
- if (state && !dialog.open) {
66
- dialog.showModal();
67
- } else if (!state && dialog.open) {
68
- dialog.close();
69
- }
70
- }, [state]);
71
-
72
- const handleDialogCancel = useCallback(
73
- (e: React.SyntheticEvent) => {
74
- e.preventDefault();
75
- onClose();
76
- },
77
- [onClose],
78
- );
79
-
80
- const handleBackdropClick = useCallback(
81
- (e: React.MouseEvent<HTMLDialogElement>) => {
82
- if (e.target === e.currentTarget) {
83
- onClose();
84
- }
61
+ const handleOpenChange = useCallback(
62
+ (open: boolean) => {
63
+ if (!open) onClose();
85
64
  },
86
65
  [onClose],
87
66
  );
@@ -94,15 +73,13 @@ export function SkillDiffDialog({ state, onClose }: SkillDiffDialogProps) {
94
73
  if (!state) return null;
95
74
 
96
75
  return (
97
- <dialog
98
- ref={dialogRef}
99
- onCancel={handleDialogCancel}
100
- onClick={handleBackdropClick}
101
- className={cn(
102
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:h-[85vh] stg:w-full stg:max-w-4xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
103
- "stg:backdrop:bg-black/50",
104
- "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
105
- )}
76
+ <DialogShell
77
+ open
78
+ onOpenChange={handleOpenChange}
79
+ width="4xl"
80
+ dismissOnBackdrop
81
+ className="stg:h-[85vh]"
82
+ aria-label="Skill version diff"
106
83
  >
107
84
  <div className="stg:flex stg:h-full stg:flex-col">
108
85
  {/* Header */}
@@ -142,7 +119,7 @@ export function SkillDiffDialog({ state, onClose }: SkillDiffDialogProps) {
142
119
  ) : null}
143
120
  </div>
144
121
  </div>
145
- </dialog>
122
+ </DialogShell>
146
123
  );
147
124
  }
148
125
 
package/src/styles.css CHANGED
@@ -331,6 +331,40 @@
331
331
  animation: stgm-running-pulse 2s ease-in-out infinite;
332
332
  }
333
333
 
334
+ /* Ambient liveness (stigmer#277): a left-to-right light sweep across the
335
+ text of whatever is currently in flight — a running tool's label, the
336
+ thinking indicator, the thread's bottom status line. The sweep rides the
337
+ WORDS describing the current activity (not a spinner beside them), so
338
+ the screen is never still while the agent is alive.
339
+
340
+ Token-driven: the text settles to the muted base with a foreground-
341
+ colored band sweeping through, which reads correctly in both color
342
+ modes and every preset. background-clip:text needs the -webkit- prefix
343
+ in Safari; the transparent fill is what lets the gradient show through
344
+ the glyphs. */
345
+ @keyframes stgm-shimmer {
346
+ to {
347
+ background-position: -200% 0;
348
+ }
349
+ }
350
+
351
+ .stgm-shimmer-label {
352
+ background-image: linear-gradient(
353
+ 90deg,
354
+ var(--stgm-muted-foreground) 0%,
355
+ var(--stgm-muted-foreground) 35%,
356
+ var(--stgm-foreground) 50%,
357
+ var(--stgm-muted-foreground) 65%,
358
+ var(--stgm-muted-foreground) 100%
359
+ );
360
+ background-size: 200% 100%;
361
+ background-position: 0 0;
362
+ -webkit-background-clip: text;
363
+ background-clip: text;
364
+ color: transparent;
365
+ animation: stgm-shimmer 2s linear infinite;
366
+ }
367
+
334
368
  @media (prefers-reduced-motion: reduce) {
335
369
  .stgm {
336
370
  --stgm-motion-duration: 0ms;
@@ -344,6 +378,15 @@
344
378
  animation-iteration-count: 1 !important;
345
379
  transition-duration: 0.01ms !important;
346
380
  }
381
+
382
+ /* The shimmer is pure decoration: under reduced motion the label drops
383
+ the clipped gradient entirely and reads as ordinary text (DD-015) —
384
+ a frozen gradient band would look like a rendering glitch. */
385
+ .stgm-shimmer-label {
386
+ background-image: none;
387
+ color: inherit;
388
+ animation: none;
389
+ }
347
390
  }
348
391
  }
349
392
 
@@ -3,6 +3,7 @@
3
3
  import { cn } from "@stigmer/theme";
4
4
  import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
5
5
  import type { VersionTimelineEntryProps } from "./types.js";
6
+ import { formatRelativeTime } from "../activity/format-relative-time.js";
6
7
 
7
8
  /**
8
9
  * A single row in a version timeline.
@@ -205,27 +206,6 @@ function GitProvenanceRow({
205
206
  // Utilities
206
207
  // ---------------------------------------------------------------------------
207
208
 
208
- function formatRelativeTime(date: Date): string {
209
- const now = Date.now();
210
- const diffMs = now - date.getTime();
211
- const diffSec = Math.floor(diffMs / 1000);
212
- const diffMin = Math.floor(diffSec / 60);
213
- const diffHr = Math.floor(diffMin / 60);
214
- const diffDays = Math.floor(diffHr / 24);
215
-
216
- if (diffSec < 60) return "just now";
217
- if (diffMin < 60) return `${diffMin}m ago`;
218
- if (diffHr < 24) return `${diffHr}h ago`;
219
- if (diffDays < 7) return `${diffDays}d ago`;
220
- if (diffDays < 30) return `${Math.floor(diffDays / 7)}w ago`;
221
-
222
- return date.toLocaleDateString(undefined, {
223
- month: "short",
224
- day: "numeric",
225
- year: date.getFullYear() !== new Date().getFullYear() ? "numeric" : undefined,
226
- });
227
- }
228
-
229
209
  function normalizeGitUrl(url: string): string | null {
230
210
  if (!url) return null;
231
211
  const cleaned = url.replace(/\.git$/, "");
@@ -4,6 +4,7 @@ import { memo } from "react";
4
4
  import type { WorkflowExecution } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
5
5
  import { timestampDate } from "@bufbuild/protobuf/wkt";
6
6
  import { cn } from "@stigmer/theme";
7
+ import { formatRelativeTime } from "../activity/format-relative-time.js";
7
8
 
8
9
  export interface FailedRunsWidgetProps {
9
10
  /** Recent failed executions to display. */
@@ -14,14 +15,6 @@ export interface FailedRunsWidgetProps {
14
15
  readonly className?: string;
15
16
  }
16
17
 
17
- function formatTimeAgo(date: Date): string {
18
- const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
19
- if (seconds < 60) return "just now";
20
- if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
21
- if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
22
- return `${Math.floor(seconds / 86400)}d ago`;
23
- }
24
-
25
18
  /**
26
19
  * Dashboard widget showing recent failed workflow executions.
27
20
  *
@@ -85,7 +78,7 @@ export const FailedRunsWidget = memo(function FailedRunsWidget({
85
78
  </p>
86
79
  {failedDate && (
87
80
  <p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
88
- {formatTimeAgo(failedDate)}
81
+ {formatRelativeTime(failedDate)}
89
82
  </p>
90
83
  )}
91
84
  </div>
@@ -4,6 +4,7 @@ import { memo } from "react";
4
4
  import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
5
5
  import { timestampDate } from "@bufbuild/protobuf/wkt";
6
6
  import { cn } from "@stigmer/theme";
7
+ import { formatRelativeTime } from "../activity/format-relative-time.js";
7
8
 
8
9
  export interface PendingApprovalsWidgetProps {
9
10
  readonly approvals: readonly PendingApproval[];
@@ -14,14 +15,6 @@ export interface PendingApprovalsWidgetProps {
14
15
  readonly className?: string;
15
16
  }
16
17
 
17
- function formatTimeAgo(date: Date): string {
18
- const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
19
- if (seconds < 60) return "just now";
20
- if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
21
- if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
22
- return `${Math.floor(seconds / 86400)}d ago`;
23
- }
24
-
25
18
  /**
26
19
  * Dashboard widget showing pending human_input approvals.
27
20
  *
@@ -98,7 +91,7 @@ export const PendingApprovalsWidget = memo(function PendingApprovalsWidget({
98
91
  <p className="stg:mt-0.5 stg:truncate stg:text-xs stg:text-muted-foreground">
99
92
  Task: {approval.taskName}
100
93
  {requestedAt && (
101
- <> &middot; {formatTimeAgo(requestedAt)}</>
94
+ <> &middot; {formatRelativeTime(requestedAt)}</>
102
95
  )}
103
96
  </p>
104
97
  </div>
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
 
3
- import { memo, useCallback, useEffect, useRef, useState } from "react";
4
- import { cn } from "@stigmer/theme";
3
+ import { memo, useCallback } from "react";
5
4
  import type { WorkflowGraphModel } from "./workflow-graph-model.js";
6
5
  import { taskToYaml } from "./inspector/task-to-yaml.js";
6
+ import { DialogShell } from "../internal/DialogShell.js";
7
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
7
8
 
8
9
  /** Props for {@link ViewYamlDialog}. */
9
10
  export interface ViewYamlDialogProps {
@@ -31,8 +32,7 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
31
32
  graph,
32
33
  onClose,
33
34
  }: ViewYamlDialogProps) {
34
- const dialogRef = useRef<HTMLDialogElement>(null);
35
- const [copied, setCopied] = useState(false);
35
+ const { copy, copied } = useCopyFeedback();
36
36
 
37
37
  const node = nodeId && graph
38
38
  ? graph.nodes.find((n) => n.id === nodeId) ?? null
@@ -40,61 +40,27 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
40
40
 
41
41
  const yaml = node ? taskToYaml(node) : "";
42
42
 
43
- useEffect(() => {
44
- const dialog = dialogRef.current;
45
- if (!dialog) return;
46
- if (nodeId && node) {
47
- if (!dialog.open) dialog.showModal();
48
- } else {
49
- if (dialog.open) dialog.close();
50
- }
51
- }, [nodeId, node]);
52
-
53
- useEffect(() => {
54
- const dialog = dialogRef.current;
55
- if (!dialog) return;
56
- const handleClose = () => onClose();
57
- dialog.addEventListener("close", handleClose);
58
- return () => dialog.removeEventListener("close", handleClose);
59
- }, [onClose]);
60
-
61
- const handleCopy = useCallback(async () => {
62
- try {
63
- await navigator.clipboard.writeText(yaml);
64
- setCopied(true);
65
- setTimeout(() => setCopied(false), 2000);
66
- } catch {
67
- // Fallback for environments without clipboard API
68
- const textarea = document.createElement("textarea");
69
- textarea.value = yaml;
70
- textarea.style.position = "fixed";
71
- textarea.style.opacity = "0";
72
- document.body.appendChild(textarea);
73
- textarea.select();
74
- document.execCommand("copy");
75
- document.body.removeChild(textarea);
76
- setCopied(true);
77
- setTimeout(() => setCopied(false), 2000);
78
- }
79
- }, [yaml]);
80
-
81
- const handleBackdropClick = useCallback(
82
- (e: React.MouseEvent<HTMLDialogElement>) => {
83
- if (e.target === dialogRef.current) {
84
- onClose();
85
- }
43
+ const handleOpenChange = useCallback(
44
+ (open: boolean) => {
45
+ if (!open) onClose();
86
46
  },
87
47
  [onClose],
88
48
  );
89
49
 
50
+ const handleCopy = useCallback(() => {
51
+ void copy(yaml);
52
+ }, [copy, yaml]);
53
+
90
54
  return (
91
- <dialog
92
- ref={dialogRef}
93
- className={cn(
94
- "stgm stg:m-auto stg:max-h-[80vh] stg:w-full stg:max-w-lg stg:rounded-lg stg:border stg:border-[var(--stgm-border,#e5e5e5)] stg:bg-[var(--stgm-background,#fff)] stg:p-0 stg:shadow-xl",
95
- "stg:backdrop:bg-black/40",
96
- )}
97
- onClick={handleBackdropClick}
55
+ <DialogShell
56
+ open={Boolean(nodeId && node)}
57
+ onOpenChange={handleOpenChange}
58
+ width="lg"
59
+ dismissOnBackdrop
60
+ // `stgm` re-establishes the theme scope (this dialog renders from the
61
+ // workflow canvas); the var-fallback styling of the body predates the
62
+ // token utilities and stays untouched here.
63
+ className="stgm stg:max-h-[80vh] stg:bg-[var(--stgm-background,#fff)] stg:border-[var(--stgm-border,#e5e5e5)]"
98
64
  aria-label={node ? `YAML for ${node.taskName}` : "View YAML"}
99
65
  >
100
66
  {node && (
@@ -136,7 +102,7 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
136
102
  </div>
137
103
  </div>
138
104
  )}
139
- </dialog>
105
+ </DialogShell>
140
106
  );
141
107
  });
142
108
 
@@ -1,13 +1,15 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
  import {
6
7
  useWorkflowArchitectFlow,
7
8
  type ArchitectPhase,
8
9
  } from "./useWorkflowArchitectFlow.js";
9
10
  import { MessageThread } from "../execution/MessageThread.js";
10
11
  import { WorkflowDiffGraph } from "./WorkflowDiffGraph.js";
12
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
11
13
 
12
14
  /** Props for {@link WorkflowArchitectDialog}. */
13
15
  export interface WorkflowArchitectDialogProps {
@@ -63,8 +65,6 @@ export function WorkflowArchitectDialog({
63
65
  onSuccess,
64
66
  onError,
65
67
  }: WorkflowArchitectDialogProps) {
66
- const dialogRef = useRef<HTMLDialogElement>(null);
67
-
68
68
  const handleSuccess = useCallback(
69
69
  (successOrg: string, slug: string) => {
70
70
  onOpenChange(false);
@@ -79,54 +79,23 @@ export function WorkflowArchitectDialog({
79
79
  onError,
80
80
  });
81
81
 
82
+ // Each opening starts from a clean prompt.
82
83
  useEffect(() => {
83
- const dialog = dialogRef.current;
84
- if (!dialog) return;
85
- if (open && !dialog.open) {
86
- flow.reset();
87
- dialog.showModal();
88
- } else if (!open && dialog.open) {
89
- dialog.close();
90
- }
84
+ if (open) flow.reset();
91
85
  }, [open, flow.reset]);
92
86
 
93
- const handleDialogCancel = useCallback(
94
- (e: React.SyntheticEvent) => {
95
- e.preventDefault();
96
- onOpenChange(false);
97
- },
98
- [onOpenChange],
99
- );
100
-
101
- const handleBackdropClick = useCallback(
102
- (e: React.MouseEvent<HTMLDialogElement>) => {
103
- if (e.target === dialogRef.current) {
104
- onOpenChange(false);
105
- }
106
- },
107
- [onOpenChange],
108
- );
109
-
110
- const isWorking =
111
- flow.phase === "starting" ||
112
- flow.phase === "streaming" ||
113
- flow.phase === "applying";
114
-
115
87
  return (
116
- <dialog
117
- ref={dialogRef}
118
- onCancel={handleDialogCancel}
119
- onClick={handleBackdropClick}
120
- className={cn(
121
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
122
- "stg:backdrop:bg-black/50",
123
- "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
124
- )}
88
+ <DialogShell
89
+ open={open}
90
+ onOpenChange={onOpenChange}
91
+ width="3xl"
92
+ dismissOnBackdrop
93
+ aria-label="Workflow Architect"
125
94
  >
126
95
  <div className="stg:flex stg:flex-col">
127
96
  <DialogPhase flow={flow} onClose={() => onOpenChange(false)} />
128
97
  </div>
129
- </dialog>
98
+ </DialogShell>
130
99
  );
131
100
  }
132
101
 
@@ -176,6 +145,7 @@ function InputPhase({
176
145
  readonly flow: ReturnType<typeof useWorkflowArchitectFlow>;
177
146
  readonly onClose: () => void;
178
147
  }) {
148
+ const promptId = useId();
179
149
  return (
180
150
  <>
181
151
  <div className="stg:border-b stg:border-border stg:px-6 stg:py-4">
@@ -200,7 +170,7 @@ function InputPhase({
200
170
 
201
171
  <div className="stg:flex stg:flex-col stg:gap-1">
202
172
  <label
203
- htmlFor="architect-prompt"
173
+ htmlFor={promptId}
204
174
  className="stg:text-xs stg:font-medium stg:text-foreground"
205
175
  >
206
176
  Description
@@ -209,7 +179,7 @@ function InputPhase({
209
179
  </span>
210
180
  </label>
211
181
  <textarea
212
- id="architect-prompt"
182
+ id={promptId}
213
183
  value={flow.prompt}
214
184
  onChange={(e) => flow.setPrompt(e.target.value)}
215
185
  placeholder="e.g., A workflow that enriches customer data using my data-agent, validates the output, and sends a Slack notification on failure"
@@ -279,7 +249,7 @@ function StreamingPhase({
279
249
  Workflow Architect
280
250
  </h3>
281
251
  <span className="stg:inline-flex stg:items-center stg:gap-1.5 stg:text-xs stg:text-muted-foreground">
282
- <SpinnerIcon />
252
+ <SpinnerIcon size={14} />
283
253
  {flow.phase === "starting" ? "Starting…" : "Working…"}
284
254
  </span>
285
255
  </div>
@@ -436,7 +406,7 @@ function ResultPhase({
436
406
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
437
407
  )}
438
408
  >
439
- {isApplying && <SpinnerIcon />}
409
+ {isApplying && <SpinnerIcon size={14} />}
440
410
  {isApplying ? "Creating…" : "Create Workflow"}
441
411
  </button>
442
412
  </div>
@@ -502,24 +472,3 @@ function ErrorPhase({
502
472
  );
503
473
  }
504
474
 
505
- // ---------------------------------------------------------------------------
506
- // Shared components
507
- // ---------------------------------------------------------------------------
508
-
509
- function SpinnerIcon({ size = 14 }: { readonly size?: number }) {
510
- return (
511
- <svg
512
- width={size}
513
- height={size}
514
- viewBox="0 0 16 16"
515
- fill="none"
516
- stroke="currentColor"
517
- strokeWidth="2"
518
- strokeLinecap="round"
519
- className="stg:animate-spin"
520
- aria-hidden="true"
521
- >
522
- <path d="M8 2a6 6 0 1 0 6 6" />
523
- </svg>
524
- );
525
- }
@@ -3,16 +3,15 @@
3
3
  // Editor-area document rendering one workflow Artifact resource's content.
4
4
  // Domain: workflow (the Artifact-resource counterpart of execution/ArtifactDocument).
5
5
 
6
- import { useCallback, useState } from "react";
6
+ import { useCallback } from "react";
7
7
  import type { Artifact } from "@stigmer/protos/ai/stigmer/agentic/artifact/v1/api_pb";
8
8
  import { cn } from "@stigmer/theme";
9
9
  import { ArtifactFileContent } from "../execution/ArtifactFileContent.js";
10
10
  import { formatArtifactSize } from "../execution/artifact-utils.js";
11
11
  import { useArtifactContentById } from "../execution/useArtifactContentById.js";
12
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
12
13
  import { useWorkflowArtifactDownload } from "./useWorkflowArtifactDownload.js";
13
14
 
14
- const COPIED_FEEDBACK_MS = 2000;
15
-
16
15
  /** Props for {@link WorkflowArtifactDocument}. */
17
16
  export interface WorkflowArtifactDocumentProps {
18
17
  /** The workflow artifact to render. */
@@ -78,14 +77,11 @@ export function WorkflowArtifactDocument({
78
77
 
79
78
  const { download, isDownloading } = useWorkflowArtifactDownload();
80
79
 
81
- const [copied, setCopied] = useState(false);
80
+ const { copy: copyToClipboard, copied } = useCopyFeedback();
82
81
  const copy = useCallback(() => {
83
82
  if (!content) return;
84
- void navigator.clipboard.writeText(content).then(() => {
85
- setCopied(true);
86
- setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
87
- });
88
- }, [content]);
83
+ void copyToClipboard(content);
84
+ }, [content, copyToClipboard]);
89
85
 
90
86
  const showCopy = content !== null;
91
87
 
@@ -636,6 +636,8 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
636
636
  edges={canvas.edges}
637
637
  onNodesChange={canvas.onNodesChange}
638
638
  onEdgesChange={canvas.onEdgesChange}
639
+ onNodeDragStart={canvas.onNodeDragStart}
640
+ onNodeDragStop={canvas.onNodeDragStop}
639
641
  onNodeClick={handleNodeClick}
640
642
  onEdgeClick={handleEdgeClick}
641
643
  onPaneClick={handlePaneClick}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useMemo } from "react";
3
+ import { useId, useMemo } from "react";
4
4
  import {
5
5
  ReactFlow,
6
6
  Controls,
@@ -15,6 +15,7 @@ import type {
15
15
  Edge,
16
16
  OnNodesChange,
17
17
  OnEdgesChange,
18
+ OnNodeDrag,
18
19
  OnConnect,
19
20
  IsValidConnection,
20
21
  } from "@xyflow/react";
@@ -29,6 +30,8 @@ interface WorkflowCanvasInnerProps {
29
30
  edges: Edge[];
30
31
  onNodesChange: OnNodesChange;
31
32
  onEdgesChange: OnEdgesChange;
33
+ onNodeDragStart: OnNodeDrag;
34
+ onNodeDragStop: OnNodeDrag;
32
35
  onNodeClick: (event: React.MouseEvent, node: Node) => void;
33
36
  onEdgeClick: (event: React.MouseEvent, edge: Edge) => void;
34
37
  onPaneClick: () => void;
@@ -72,6 +75,8 @@ export function WorkflowCanvasInner({
72
75
  edges,
73
76
  onNodesChange,
74
77
  onEdgesChange,
78
+ onNodeDragStart,
79
+ onNodeDragStop,
75
80
  onNodeClick,
76
81
  onEdgeClick,
77
82
  onPaneClick,
@@ -87,6 +92,11 @@ export function WorkflowCanvasInner({
87
92
  onSelectionContextMenu,
88
93
  nodeErrors,
89
94
  }: WorkflowCanvasInnerProps) {
95
+ // Instance-scoped React Flow id (oss#593): React Flow derives its internal
96
+ // DOM ids (aria descriptions, SVG marker/pattern defs) from this id, so two
97
+ // mounted graphs without explicit ids collide.
98
+ const flowId = useId();
99
+
90
100
  const enrichedNodes = useMemo(() => {
91
101
  if (!nodeErrors || nodeErrors.size === 0) return nodes;
92
102
  return nodes.map((node) => {
@@ -109,10 +119,13 @@ export function WorkflowCanvasInner({
109
119
 
110
120
  return (
111
121
  <ReactFlow
122
+ id={flowId}
112
123
  nodes={enrichedNodes}
113
124
  edges={edges}
114
125
  onNodesChange={onNodesChange}
115
126
  onEdgesChange={onEdgesChange}
127
+ onNodeDragStart={onNodeDragStart}
128
+ onNodeDragStop={onNodeDragStop}
116
129
  onNodeClick={onNodeClick}
117
130
  onEdgeClick={onEdgeClick}
118
131
  onPaneClick={onPaneClick}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { memo, useCallback, useEffect, useMemo, useRef } from "react";
3
+ import { memo, useCallback, useEffect, useId, useMemo, useRef } from "react";
4
4
  import {
5
5
  ReactFlow,
6
6
  Controls,
@@ -73,6 +73,11 @@ function WorkflowDiffGraphInner({
73
73
  onTaskClick,
74
74
  className,
75
75
  }: WorkflowDiffGraphProps) {
76
+ // Instance-scoped React Flow id (oss#593): React Flow derives its internal
77
+ // DOM ids (aria descriptions, SVG marker/pattern defs) from this id, so two
78
+ // mounted graphs without explicit ids collide.
79
+ const flowId = useId();
80
+
76
81
  const {
77
82
  nodes,
78
83
  edges,
@@ -146,6 +151,7 @@ function WorkflowDiffGraphInner({
146
151
  </div>
147
152
  )}
148
153
  <ReactFlow
154
+ id={flowId}
149
155
  nodes={nodesWithSelection}
150
156
  edges={edges}
151
157
  nodeTypes={nodeTypes}