@stigmer/react 3.12.0 → 3.12.2

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 (738) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +7 -2
  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 +10 -2
  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/index.d.ts +2 -0
  30. package/attachment/index.d.ts.map +1 -1
  31. package/attachment/index.js +1 -0
  32. package/attachment/index.js.map +1 -1
  33. package/attachment/vision-preflight.d.ts +113 -0
  34. package/attachment/vision-preflight.d.ts.map +1 -0
  35. package/attachment/vision-preflight.js +143 -0
  36. package/attachment/vision-preflight.js.map +1 -0
  37. package/billing/AutoRechargeCard.d.ts.map +1 -1
  38. package/billing/AutoRechargeCard.js +3 -2
  39. package/billing/AutoRechargeCard.js.map +1 -1
  40. package/billing/BillingSection.d.ts.map +1 -1
  41. package/billing/BillingSection.js +3 -2
  42. package/billing/BillingSection.js.map +1 -1
  43. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  44. package/channel/ChannelConversationsDialog.js +5 -4
  45. package/channel/ChannelConversationsDialog.js.map +1 -1
  46. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  47. package/channel/ChannelCredentialsDialog.js +9 -4
  48. package/channel/ChannelCredentialsDialog.js.map +1 -1
  49. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  50. package/channel/ChannelTemplatesDialog.js +5 -4
  51. package/channel/ChannelTemplatesDialog.js.map +1 -1
  52. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  53. package/channel/ConnectSlackDialog.js +9 -4
  54. package/channel/ConnectSlackDialog.js.map +1 -1
  55. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  56. package/channel/ConnectWhatsAppDialog.js +9 -4
  57. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  58. package/channel/useChannelSessions.d.ts.map +1 -1
  59. package/channel/useChannelSessions.js.map +1 -1
  60. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  61. package/channel-app/ChannelAppDetailPanel.js +8 -5
  62. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  63. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  64. package/channel-app/CreateChannelAppForm.js +12 -7
  65. package/channel-app/CreateChannelAppForm.js.map +1 -1
  66. package/channel-app/internal.d.ts +0 -1
  67. package/channel-app/internal.d.ts.map +1 -1
  68. package/channel-app/internal.js +5 -10
  69. package/channel-app/internal.js.map +1 -1
  70. package/composer/ComposerToolbar.js +2 -1
  71. package/composer/ComposerToolbar.js.map +1 -1
  72. package/composer/SessionComposer.d.ts +1 -1
  73. package/composer/SessionComposer.d.ts.map +1 -1
  74. package/composer/SessionComposer.js +120 -13
  75. package/composer/SessionComposer.js.map +1 -1
  76. package/composer/icons.d.ts +0 -1
  77. package/composer/icons.d.ts.map +1 -1
  78. package/composer/icons.js +0 -3
  79. package/composer/icons.js.map +1 -1
  80. package/conversation/ConversationComposer.js +1 -1
  81. package/conversation/ConversationComposer.js.map +1 -1
  82. package/conversation/ConversationListPane.d.ts.map +1 -1
  83. package/conversation/ConversationListPane.js +3 -2
  84. package/conversation/ConversationListPane.js.map +1 -1
  85. package/cursor-accounts/MemberCoverageTable.js +3 -14
  86. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  87. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  88. package/dashboard/DashboardFailedRuns.js +2 -14
  89. package/dashboard/DashboardFailedRuns.js.map +1 -1
  90. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  91. package/environment/CreateEnvironmentForm.js +4 -8
  92. package/environment/CreateEnvironmentForm.js.map +1 -1
  93. package/environment/EnvVarForm.d.ts.map +1 -1
  94. package/environment/EnvVarForm.js +2 -4
  95. package/environment/EnvVarForm.js.map +1 -1
  96. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  97. package/environment/EnvironmentVariableEditor.js +5 -7
  98. package/environment/EnvironmentVariableEditor.js.map +1 -1
  99. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  100. package/execution/ArtifactApplyButton.js +2 -4
  101. package/execution/ArtifactApplyButton.js.map +1 -1
  102. package/execution/ExecutionErrorNotice.d.ts +36 -0
  103. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  104. package/execution/ExecutionErrorNotice.js +39 -0
  105. package/execution/ExecutionErrorNotice.js.map +1 -0
  106. package/execution/FilePathLink.d.ts.map +1 -1
  107. package/execution/FilePathLink.js +5 -8
  108. package/execution/FilePathLink.js.map +1 -1
  109. package/execution/FileReviewCard.d.ts.map +1 -1
  110. package/execution/FileReviewCard.js +1 -6
  111. package/execution/FileReviewCard.js.map +1 -1
  112. package/execution/FollowUpInput.d.ts.map +1 -1
  113. package/execution/FollowUpInput.js +1 -3
  114. package/execution/FollowUpInput.js.map +1 -1
  115. package/execution/LivenessStatusLine.d.ts +40 -0
  116. package/execution/LivenessStatusLine.d.ts.map +1 -0
  117. package/execution/LivenessStatusLine.js +34 -0
  118. package/execution/LivenessStatusLine.js.map +1 -0
  119. package/execution/MessageEntry.d.ts.map +1 -1
  120. package/execution/MessageEntry.js +31 -3
  121. package/execution/MessageEntry.js.map +1 -1
  122. package/execution/MessageThread.d.ts +25 -0
  123. package/execution/MessageThread.d.ts.map +1 -1
  124. package/execution/MessageThread.js +51 -36
  125. package/execution/MessageThread.js.map +1 -1
  126. package/execution/SetupProgress.d.ts.map +1 -1
  127. package/execution/SetupProgress.js +1 -1
  128. package/execution/SetupProgress.js.map +1 -1
  129. package/execution/SubAgentSection.d.ts.map +1 -1
  130. package/execution/SubAgentSection.js +9 -7
  131. package/execution/SubAgentSection.js.map +1 -1
  132. package/execution/TerminalSession.d.ts +30 -0
  133. package/execution/TerminalSession.d.ts.map +1 -1
  134. package/execution/TerminalSession.js +37 -1
  135. package/execution/TerminalSession.js.map +1 -1
  136. package/execution/ToolCallDetail.d.ts +9 -0
  137. package/execution/ToolCallDetail.d.ts.map +1 -1
  138. package/execution/ToolCallDetail.js +16 -0
  139. package/execution/ToolCallDetail.js.map +1 -1
  140. package/execution/ToolCallItem.d.ts +20 -6
  141. package/execution/ToolCallItem.d.ts.map +1 -1
  142. package/execution/ToolCallItem.js +102 -29
  143. package/execution/ToolCallItem.js.map +1 -1
  144. package/execution/ToolRunGroup.d.ts.map +1 -1
  145. package/execution/ToolRunGroup.js +11 -11
  146. package/execution/ToolRunGroup.js.map +1 -1
  147. package/execution/WriteBackCard.d.ts.map +1 -1
  148. package/execution/WriteBackCard.js +5 -20
  149. package/execution/WriteBackCard.js.map +1 -1
  150. package/execution/index.d.ts +6 -2
  151. package/execution/index.d.ts.map +1 -1
  152. package/execution/index.js +3 -1
  153. package/execution/index.js.map +1 -1
  154. package/execution/tool-categories.d.ts +42 -7
  155. package/execution/tool-categories.d.ts.map +1 -1
  156. package/execution/tool-categories.js +38 -4
  157. package/execution/tool-categories.js.map +1 -1
  158. package/execution/tool-presenter.d.ts +17 -1
  159. package/execution/tool-presenter.d.ts.map +1 -1
  160. package/execution/tool-presenter.js +4 -1
  161. package/execution/tool-presenter.js.map +1 -1
  162. package/execution/useArtifactInspection.d.ts.map +1 -1
  163. package/execution/useArtifactInspection.js +4 -7
  164. package/execution/useArtifactInspection.js.map +1 -1
  165. package/execution/useCreateAgentExecution.d.ts +3 -2
  166. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  167. package/execution/useCreateAgentExecution.js.map +1 -1
  168. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  169. package/iam-policy/GrantAccessForm.js +2 -4
  170. package/iam-policy/GrantAccessForm.js.map +1 -1
  171. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  172. package/iam-policy/OrgMembersPanel.js +3 -5
  173. package/iam-policy/OrgMembersPanel.js.map +1 -1
  174. package/iam-policy/RoleSelector.d.ts.map +1 -1
  175. package/iam-policy/RoleSelector.js +7 -1
  176. package/iam-policy/RoleSelector.js.map +1 -1
  177. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  178. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  179. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  180. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  181. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  182. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  183. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  184. package/identity-provider/IdentityProviderListPanel.js +2 -4
  185. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  186. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  187. package/identity-provider/IdentityProviderWizard.js +8 -7
  188. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  189. package/identity-provider/SsoLoginPrompt.js +5 -6
  190. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  191. package/index.d.ts +9 -8
  192. package/index.d.ts.map +1 -1
  193. package/index.js +4 -4
  194. package/index.js.map +1 -1
  195. package/internal/DecisionButton.d.ts.map +1 -1
  196. package/internal/DecisionButton.js +1 -6
  197. package/internal/DecisionButton.js.map +1 -1
  198. package/internal/SpinnerIcon.d.ts +22 -0
  199. package/internal/SpinnerIcon.d.ts.map +1 -0
  200. package/internal/SpinnerIcon.js +23 -0
  201. package/internal/SpinnerIcon.js.map +1 -0
  202. package/internal/isUnimplemented.d.ts +17 -0
  203. package/internal/isUnimplemented.d.ts.map +1 -0
  204. package/internal/isUnimplemented.js +26 -0
  205. package/internal/isUnimplemented.js.map +1 -0
  206. package/internal/select-element-text.d.ts +11 -0
  207. package/internal/select-element-text.d.ts.map +1 -0
  208. package/internal/select-element-text.js +19 -0
  209. package/internal/select-element-text.js.map +1 -0
  210. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  211. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  212. package/internal/thread-card/ThreadCardShell.js +11 -5
  213. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  214. package/internal/thread-card/glyphs.d.ts +11 -2
  215. package/internal/thread-card/glyphs.d.ts.map +1 -1
  216. package/internal/thread-card/glyphs.js +9 -3
  217. package/internal/thread-card/glyphs.js.map +1 -1
  218. package/internal/thread-card/index.d.ts +1 -1
  219. package/internal/thread-card/index.d.ts.map +1 -1
  220. package/internal/thread-card/index.js.map +1 -1
  221. package/internal/useCopyFeedback.d.ts +28 -0
  222. package/internal/useCopyFeedback.d.ts.map +1 -0
  223. package/internal/useCopyFeedback.js +40 -0
  224. package/internal/useCopyFeedback.js.map +1 -0
  225. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  226. package/invitation/InvitationCreatedAlert.js +12 -19
  227. package/invitation/InvitationCreatedAlert.js.map +1 -1
  228. package/invitation/InvitationManager.d.ts.map +1 -1
  229. package/invitation/InvitationManager.js +14 -21
  230. package/invitation/InvitationManager.js.map +1 -1
  231. package/invitation/InvitationRedemption.d.ts.map +1 -1
  232. package/invitation/InvitationRedemption.js +2 -4
  233. package/invitation/InvitationRedemption.js.map +1 -1
  234. package/library/useExportResource.d.ts.map +1 -1
  235. package/library/useExportResource.js +16 -27
  236. package/library/useExportResource.js.map +1 -1
  237. package/manifest/ApplyManifestDialog.js +1 -1
  238. package/manifest/EditResourceYamlDialog.js +1 -1
  239. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  240. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  241. package/mcp-server/DefinitionDriftNotice.js +52 -0
  242. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  243. package/mcp-server/McpServerConnectDialog.js +8 -4
  244. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  245. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  246. package/mcp-server/McpServerDetailView.js +47 -14
  247. package/mcp-server/McpServerDetailView.js.map +1 -1
  248. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  249. package/mcp-server/OAuthAppForm.js +2 -4
  250. package/mcp-server/OAuthAppForm.js.map +1 -1
  251. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  252. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  253. package/mcp-server/internal/definitionDrift.js +122 -0
  254. package/mcp-server/internal/definitionDrift.js.map +1 -0
  255. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  256. package/mcp-server/internal/mcpServerToInput.js +3 -0
  257. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  258. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  259. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  260. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  261. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  262. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  263. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  264. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  265. package/mcp-server/useMcpServerCredentials.d.ts +38 -10
  266. package/mcp-server/useMcpServerCredentials.d.ts.map +1 -1
  267. package/mcp-server/useMcpServerCredentials.js +50 -7
  268. package/mcp-server/useMcpServerCredentials.js.map +1 -1
  269. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  270. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  271. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  272. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  273. package/mcp-server/useOrgOAuthApp.d.ts +22 -0
  274. package/mcp-server/useOrgOAuthApp.d.ts.map +1 -1
  275. package/mcp-server/useOrgOAuthApp.js +39 -7
  276. package/mcp-server/useOrgOAuthApp.js.map +1 -1
  277. package/models/ModelRegistryContext.d.ts +7 -1
  278. package/models/ModelRegistryContext.d.ts.map +1 -1
  279. package/models/ModelRegistryContext.js.map +1 -1
  280. package/models/ModelSelector.js +9 -1
  281. package/models/ModelSelector.js.map +1 -1
  282. package/models/index.d.ts +2 -2
  283. package/models/index.d.ts.map +1 -1
  284. package/models/index.js +1 -1
  285. package/models/index.js.map +1 -1
  286. package/models/registry.d.ts +88 -6
  287. package/models/registry.d.ts.map +1 -1
  288. package/models/registry.js +133 -27
  289. package/models/registry.js.map +1 -1
  290. package/models/useModelRegistry.d.ts +7 -1
  291. package/models/useModelRegistry.d.ts.map +1 -1
  292. package/models/useModelRegistry.js +3 -2
  293. package/models/useModelRegistry.js.map +1 -1
  294. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  295. package/oauth-app/CreateOAuthAppForm.js +4 -5
  296. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  297. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  298. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  299. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  300. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  301. package/organization/CreateOrganizationForm.js +5 -9
  302. package/organization/CreateOrganizationForm.js.map +1 -1
  303. package/organization/OrgProfilePanel.d.ts.map +1 -1
  304. package/organization/OrgProfilePanel.js +7 -16
  305. package/organization/OrgProfilePanel.js.map +1 -1
  306. package/package.json +4 -4
  307. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  308. package/platform-client/CreatePlatformClientForm.js +5 -6
  309. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  310. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  311. package/platform-client/PlatformClientDetailPanel.js +6 -7
  312. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  313. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  314. package/platform-client/PlatformClientListPanel.js +2 -4
  315. package/platform-client/PlatformClientListPanel.js.map +1 -1
  316. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  317. package/platform-client/PlatformClientSecretAlert.js +18 -25
  318. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  319. package/provider.d.ts +34 -1
  320. package/provider.d.ts.map +1 -1
  321. package/provider.js +14 -7
  322. package/provider.js.map +1 -1
  323. package/resource-creation/WizardNav.d.ts.map +1 -1
  324. package/resource-creation/WizardNav.js +2 -4
  325. package/resource-creation/WizardNav.js.map +1 -1
  326. package/resource-detail/ConfirmDialog.js +1 -1
  327. package/resource-detail/useCopyResource.d.ts +4 -3
  328. package/resource-detail/useCopyResource.d.ts.map +1 -1
  329. package/resource-detail/useCopyResource.js +10 -19
  330. package/resource-detail/useCopyResource.js.map +1 -1
  331. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  332. package/schedule/ScheduleDetailView.js +2 -4
  333. package/schedule/ScheduleDetailView.js.map +1 -1
  334. package/schedule/ScheduleForm.d.ts.map +1 -1
  335. package/schedule/ScheduleForm.js +6 -7
  336. package/schedule/ScheduleForm.js.map +1 -1
  337. package/session/NewSessionViewer.d.ts +52 -2
  338. package/session/NewSessionViewer.d.ts.map +1 -1
  339. package/session/NewSessionViewer.js +21 -6
  340. package/session/NewSessionViewer.js.map +1 -1
  341. package/session/SessionViewer.d.ts +63 -2
  342. package/session/SessionViewer.d.ts.map +1 -1
  343. package/session/SessionViewer.js +43 -17
  344. package/session/SessionViewer.js.map +1 -1
  345. package/session/audience.d.ts +17 -0
  346. package/session/audience.d.ts.map +1 -1
  347. package/session/index.d.ts +2 -1
  348. package/session/index.d.ts.map +1 -1
  349. package/session/index.js.map +1 -1
  350. package/session/run-config.d.ts +50 -0
  351. package/session/run-config.d.ts.map +1 -0
  352. package/session/run-config.js +15 -0
  353. package/session/run-config.js.map +1 -0
  354. package/session/useNewSessionFlow.d.ts +11 -0
  355. package/session/useNewSessionFlow.d.ts.map +1 -1
  356. package/session/useNewSessionFlow.js +29 -2
  357. package/session/useNewSessionFlow.js.map +1 -1
  358. package/session/useSessionConversation.d.ts +11 -9
  359. package/session/useSessionConversation.d.ts.map +1 -1
  360. package/session/useSessionConversation.js +2 -0
  361. package/session/useSessionConversation.js.map +1 -1
  362. package/session/useSessionPageFlow.d.ts +18 -4
  363. package/session/useSessionPageFlow.d.ts.map +1 -1
  364. package/session/useSessionPageFlow.js +33 -6
  365. package/session/useSessionPageFlow.js.map +1 -1
  366. package/session/useSessionPanel.d.ts +37 -2
  367. package/session/useSessionPanel.d.ts.map +1 -1
  368. package/session/useSessionPanel.js +44 -10
  369. package/session/useSessionPanel.js.map +1 -1
  370. package/settings/ApiKeysSection.d.ts.map +1 -1
  371. package/settings/ApiKeysSection.js +3 -2
  372. package/settings/ApiKeysSection.js.map +1 -1
  373. package/settings/ChannelAppsSection.d.ts.map +1 -1
  374. package/settings/ChannelAppsSection.js +3 -2
  375. package/settings/ChannelAppsSection.js.map +1 -1
  376. package/settings/EnvironmentsSection.js +5 -3
  377. package/settings/EnvironmentsSection.js.map +1 -1
  378. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  379. package/settings/IdentityProvidersSection.js +3 -2
  380. package/settings/IdentityProvidersSection.js.map +1 -1
  381. package/settings/InvitationsSection.d.ts.map +1 -1
  382. package/settings/InvitationsSection.js +3 -1
  383. package/settings/InvitationsSection.js.map +1 -1
  384. package/settings/MembersSection.d.ts.map +1 -1
  385. package/settings/MembersSection.js +3 -1
  386. package/settings/MembersSection.js.map +1 -1
  387. package/settings/OAuthAppsSection.d.ts.map +1 -1
  388. package/settings/OAuthAppsSection.js +3 -2
  389. package/settings/OAuthAppsSection.js.map +1 -1
  390. package/settings/OrgProfileSection.d.ts.map +1 -1
  391. package/settings/OrgProfileSection.js +3 -2
  392. package/settings/OrgProfileSection.js.map +1 -1
  393. package/settings/PlatformClientsSection.d.ts.map +1 -1
  394. package/settings/PlatformClientsSection.js +3 -2
  395. package/settings/PlatformClientsSection.js.map +1 -1
  396. package/settings/UsageSection.d.ts.map +1 -1
  397. package/settings/UsageSection.js +3 -1
  398. package/settings/UsageSection.js.map +1 -1
  399. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  400. package/sharing/ShareAgentDialog.js +18 -7
  401. package/sharing/ShareAgentDialog.js.map +1 -1
  402. package/sidebar/chrome.d.ts +3 -4
  403. package/sidebar/chrome.d.ts.map +1 -1
  404. package/sidebar/chrome.js +5 -4
  405. package/sidebar/chrome.js.map +1 -1
  406. package/skill/SkillDiffDialog.js +1 -1
  407. package/skill/useSkillVersions.d.ts.map +1 -1
  408. package/skill/useSkillVersions.js +1 -9
  409. package/skill/useSkillVersions.js.map +1 -1
  410. package/src/access/ManageAccessDialog.tsx +10 -4
  411. package/src/activity/format-relative-time.ts +11 -9
  412. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  413. package/src/agent/steps/IdentityStep.tsx +19 -12
  414. package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
  415. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  416. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  417. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  418. package/src/approval-defaults-context.ts +56 -0
  419. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  420. package/src/attachment/index.ts +12 -0
  421. package/src/attachment/vision-preflight.ts +236 -0
  422. package/src/billing/AutoRechargeCard.tsx +5 -4
  423. package/src/billing/BillingSection.tsx +4 -3
  424. package/src/channel/ChannelConversationsDialog.tsx +8 -4
  425. package/src/channel/ChannelCredentialsDialog.tsx +14 -4
  426. package/src/channel/ChannelTemplatesDialog.tsx +8 -4
  427. package/src/channel/ConnectSlackDialog.tsx +14 -4
  428. package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
  429. package/src/channel/useChannelSessions.ts +3 -0
  430. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  431. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  432. package/src/channel-app/internal.tsx +5 -25
  433. package/src/composer/ComposerToolbar.tsx +1 -1
  434. package/src/composer/SessionComposer.tsx +160 -13
  435. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  436. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  437. package/src/composer/icons.tsx +0 -18
  438. package/src/conversation/ConversationComposer.tsx +1 -1
  439. package/src/conversation/ConversationListPane.tsx +4 -3
  440. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  441. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  442. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  443. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  444. package/src/environment/EnvVarForm.tsx +2 -18
  445. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  446. package/src/execution/ArtifactApplyButton.tsx +2 -17
  447. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  448. package/src/execution/FilePathLink.tsx +5 -9
  449. package/src/execution/FileReviewCard.tsx +1 -20
  450. package/src/execution/FollowUpInput.tsx +1 -16
  451. package/src/execution/LivenessStatusLine.tsx +59 -0
  452. package/src/execution/MessageEntry.tsx +136 -25
  453. package/src/execution/MessageThread.tsx +84 -83
  454. package/src/execution/SetupProgress.tsx +5 -1
  455. package/src/execution/SubAgentSection.tsx +9 -20
  456. package/src/execution/TerminalSession.tsx +97 -10
  457. package/src/execution/ToolCallDetail.tsx +19 -0
  458. package/src/execution/ToolCallItem.tsx +157 -37
  459. package/src/execution/ToolRunGroup.tsx +30 -32
  460. package/src/execution/WriteBackCard.tsx +5 -24
  461. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  462. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  463. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  464. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  465. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  466. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  467. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  468. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  469. package/src/execution/index.ts +8 -2
  470. package/src/execution/tool-categories.ts +72 -8
  471. package/src/execution/tool-presenter.ts +22 -1
  472. package/src/execution/useArtifactInspection.ts +4 -8
  473. package/src/execution/useCreateAgentExecution.ts +3 -2
  474. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  475. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  476. package/src/iam-policy/RoleSelector.tsx +8 -1
  477. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  478. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  479. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  480. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  481. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  482. package/src/index.ts +23 -1
  483. package/src/internal/DecisionButton.tsx +1 -20
  484. package/src/internal/SpinnerIcon.tsx +42 -0
  485. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  486. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  487. package/src/internal/isUnimplemented.ts +26 -0
  488. package/src/internal/select-element-text.ts +17 -0
  489. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  490. package/src/internal/thread-card/glyphs.tsx +24 -3
  491. package/src/internal/thread-card/index.ts +1 -0
  492. package/src/internal/useCopyFeedback.ts +61 -0
  493. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  494. package/src/invitation/InvitationManager.tsx +23 -34
  495. package/src/invitation/InvitationRedemption.tsx +2 -18
  496. package/src/library/useExportResource.ts +15 -29
  497. package/src/manifest/ApplyManifestDialog.tsx +1 -1
  498. package/src/manifest/EditResourceYamlDialog.tsx +1 -1
  499. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  500. package/src/mcp-server/McpServerConnectDialog.tsx +30 -12
  501. package/src/mcp-server/McpServerDetailView.tsx +58 -26
  502. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  503. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  504. package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +103 -5
  505. package/src/mcp-server/__tests__/byoaEditionDegradation.test.tsx +323 -0
  506. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  507. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  508. package/src/mcp-server/__tests__/useMcpServerCredentials.test.tsx +306 -0
  509. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  510. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  511. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  512. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  513. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  514. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  515. package/src/mcp-server/useMcpServerCredentials.ts +87 -19
  516. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  517. package/src/mcp-server/useOrgOAuthApp.ts +54 -8
  518. package/src/models/ModelRegistryContext.ts +7 -1
  519. package/src/models/ModelSelector.tsx +37 -0
  520. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  521. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  522. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  523. package/src/models/index.ts +2 -2
  524. package/src/models/registry.ts +196 -29
  525. package/src/models/useModelRegistry.ts +10 -2
  526. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  527. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  528. package/src/organization/CreateOrganizationForm.tsx +10 -29
  529. package/src/organization/OrgProfilePanel.tsx +13 -44
  530. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  531. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  532. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  533. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  534. package/src/provider.tsx +76 -33
  535. package/src/resource-creation/WizardNav.tsx +2 -18
  536. package/src/resource-detail/ConfirmDialog.tsx +1 -1
  537. package/src/resource-detail/useCopyResource.ts +17 -23
  538. package/src/schedule/ScheduleDetailView.tsx +2 -18
  539. package/src/schedule/ScheduleForm.tsx +19 -34
  540. package/src/session/NewSessionViewer.tsx +85 -7
  541. package/src/session/SessionViewer.tsx +120 -17
  542. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  543. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  544. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  545. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  546. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  547. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  548. package/src/session/audience.ts +18 -0
  549. package/src/session/index.ts +2 -1
  550. package/src/session/run-config.ts +59 -0
  551. package/src/session/useNewSessionFlow.ts +39 -2
  552. package/src/session/useSessionConversation.ts +14 -10
  553. package/src/session/useSessionPageFlow.ts +51 -10
  554. package/src/session/useSessionPanel.ts +91 -10
  555. package/src/settings/ApiKeysSection.tsx +4 -3
  556. package/src/settings/ChannelAppsSection.tsx +4 -3
  557. package/src/settings/EnvironmentsSection.tsx +8 -5
  558. package/src/settings/IdentityProvidersSection.tsx +4 -3
  559. package/src/settings/InvitationsSection.tsx +4 -2
  560. package/src/settings/MembersSection.tsx +4 -2
  561. package/src/settings/OAuthAppsSection.tsx +4 -3
  562. package/src/settings/OrgProfileSection.tsx +4 -3
  563. package/src/settings/PlatformClientsSection.tsx +4 -3
  564. package/src/settings/UsageSection.tsx +4 -2
  565. package/src/sharing/ShareAgentDialog.tsx +28 -10
  566. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  567. package/src/sidebar/chrome.tsx +6 -6
  568. package/src/skill/SkillDiffDialog.tsx +1 -1
  569. package/src/skill/useSkillVersions.ts +1 -11
  570. package/src/styles.css +43 -0
  571. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  572. package/src/workflow/FailedRunsWidget.tsx +2 -9
  573. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  574. package/src/workflow/ViewYamlDialog.tsx +7 -22
  575. package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
  576. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  577. package/src/workflow/WorkflowCanvasEditor.tsx +39 -7
  578. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  579. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  580. package/src/workflow/WorkflowExecutionGraph.tsx +26 -1
  581. package/src/workflow/WorkflowExecutionViewer.tsx +115 -24
  582. package/src/workflow/WorkflowExplainDialog.tsx +8 -24
  583. package/src/workflow/WorkflowNode.tsx +5 -2
  584. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  585. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  586. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  587. package/src/workflow/WorkflowRunDialog.tsx +31 -24
  588. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  589. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  590. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  591. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +48 -1
  592. package/src/workflow/__tests__/WorkflowNode.test.tsx +93 -0
  593. package/src/workflow/__tests__/WorkflowRunDialog.test.tsx +127 -0
  594. package/src/workflow/__tests__/graph-history.test.ts +103 -0
  595. package/src/workflow/__tests__/overview-graph.test.ts +17 -0
  596. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  597. package/src/workflow/__tests__/useCanvasKeyboardShortcuts.undo.test.ts +115 -0
  598. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  599. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  600. package/src/workflow/__tests__/useWorkflowCanvas.undo.test.tsx +133 -0
  601. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  602. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
  603. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  604. package/src/workflow/index.ts +1 -0
  605. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +17 -8
  606. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  607. package/src/workflow/instance/useDeleteWorkflowInstance.ts +9 -4
  608. package/src/workflow/layout/registry-dimensions.ts +2 -5
  609. package/src/workflow/node-shell/NodeShell.tsx +4 -0
  610. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  611. package/src/workflow/task-type-visual-registry.ts +5 -3
  612. package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
  613. package/src/workflow/useApprovalBoundary.ts +1 -1
  614. package/src/workflow/useCanvasKeyboardShortcuts.ts +33 -3
  615. package/src/workflow/useGraphHistory.ts +22 -41
  616. package/src/workflow/useWorkflowCanvas.ts +126 -21
  617. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  618. package/src/workflow/useWorkflowSave.ts +2 -15
  619. package/src/workflow/workflow-graph-conversions.ts +25 -3
  620. package/styles.css +1 -1
  621. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  622. package/version-history/VersionTimelineEntry.js +1 -23
  623. package/version-history/VersionTimelineEntry.js.map +1 -1
  624. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  625. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  626. package/workflow/FailedRunsWidget.js +2 -11
  627. package/workflow/FailedRunsWidget.js.map +1 -1
  628. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  629. package/workflow/PendingApprovalsWidget.js +2 -11
  630. package/workflow/PendingApprovalsWidget.js.map +1 -1
  631. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  632. package/workflow/ViewYamlDialog.js +7 -23
  633. package/workflow/ViewYamlDialog.js.map +1 -1
  634. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  635. package/workflow/WorkflowArchitectDialog.js +7 -11
  636. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  637. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  638. package/workflow/WorkflowArtifactDocument.js +5 -8
  639. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  640. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  641. package/workflow/WorkflowCanvasEditor.js +31 -6
  642. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  643. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  644. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  645. package/workflow/WorkflowCanvasInner.js +7 -3
  646. package/workflow/WorkflowCanvasInner.js.map +1 -1
  647. package/workflow/WorkflowDiffGraph.js +6 -2
  648. package/workflow/WorkflowDiffGraph.js.map +1 -1
  649. package/workflow/WorkflowExecutionGraph.d.ts.map +1 -1
  650. package/workflow/WorkflowExecutionGraph.js +27 -1
  651. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  652. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  653. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  654. package/workflow/WorkflowExecutionViewer.js +49 -18
  655. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  656. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  657. package/workflow/WorkflowExplainDialog.js +6 -8
  658. package/workflow/WorkflowExplainDialog.js.map +1 -1
  659. package/workflow/WorkflowNode.d.ts.map +1 -1
  660. package/workflow/WorkflowNode.js +2 -2
  661. package/workflow/WorkflowNode.js.map +1 -1
  662. package/workflow/WorkflowOverviewGraph.js +8 -2
  663. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  664. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  665. package/workflow/WorkflowRefinePanel.js +2 -4
  666. package/workflow/WorkflowRefinePanel.js.map +1 -1
  667. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  668. package/workflow/WorkflowRepairCard.js +2 -4
  669. package/workflow/WorkflowRepairCard.js.map +1 -1
  670. package/workflow/WorkflowRunDialog.d.ts +11 -1
  671. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  672. package/workflow/WorkflowRunDialog.js +18 -9
  673. package/workflow/WorkflowRunDialog.js.map +1 -1
  674. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  675. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  676. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  677. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  678. package/workflow/WorkflowVersionBadge.js +4 -13
  679. package/workflow/WorkflowVersionBadge.js.map +1 -1
  680. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  681. package/workflow/WorkflowVersionTimeline.js +1 -26
  682. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  683. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  684. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
  685. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  686. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  687. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  688. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  689. package/workflow/index.d.ts +1 -1
  690. package/workflow/index.d.ts.map +1 -1
  691. package/workflow/index.js.map +1 -1
  692. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  693. package/workflow/instance/CreateWorkflowInstanceDialog.js +10 -2
  694. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  695. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  696. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  697. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  698. package/workflow/instance/useDeleteWorkflowInstance.d.ts +9 -4
  699. package/workflow/instance/useDeleteWorkflowInstance.d.ts.map +1 -1
  700. package/workflow/instance/useDeleteWorkflowInstance.js +4 -2
  701. package/workflow/instance/useDeleteWorkflowInstance.js.map +1 -1
  702. package/workflow/layout/registry-dimensions.d.ts.map +1 -1
  703. package/workflow/layout/registry-dimensions.js +2 -5
  704. package/workflow/layout/registry-dimensions.js.map +1 -1
  705. package/workflow/node-shell/NodeShell.js +1 -1
  706. package/workflow/node-shell/NodeShell.js.map +1 -1
  707. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  708. package/workflow/picker/BranchAddPopover.js +3 -2
  709. package/workflow/picker/BranchAddPopover.js.map +1 -1
  710. package/workflow/task-type-visual-registry.d.ts.map +1 -1
  711. package/workflow/task-type-visual-registry.js +5 -3
  712. package/workflow/task-type-visual-registry.js.map +1 -1
  713. package/workflow/templates/WorkflowTemplatePreview.js +1 -1
  714. package/workflow/useApprovalBoundary.d.ts +1 -1
  715. package/workflow/useApprovalBoundary.js +1 -1
  716. package/workflow/useCanvasKeyboardShortcuts.d.ts +15 -4
  717. package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -1
  718. package/workflow/useCanvasKeyboardShortcuts.js +25 -4
  719. package/workflow/useCanvasKeyboardShortcuts.js.map +1 -1
  720. package/workflow/useGraphHistory.d.ts +16 -9
  721. package/workflow/useGraphHistory.d.ts.map +1 -1
  722. package/workflow/useGraphHistory.js +19 -33
  723. package/workflow/useGraphHistory.js.map +1 -1
  724. package/workflow/useWorkflowCanvas.d.ts +6 -4
  725. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  726. package/workflow/useWorkflowCanvas.js +115 -23
  727. package/workflow/useWorkflowCanvas.js.map +1 -1
  728. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  729. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  730. package/workflow/useWorkflowExecutionPanel.js +46 -13
  731. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
  732. package/workflow/useWorkflowSave.d.ts.map +1 -1
  733. package/workflow/useWorkflowSave.js +2 -15
  734. package/workflow/useWorkflowSave.js.map +1 -1
  735. package/workflow/workflow-graph-conversions.d.ts +19 -1
  736. package/workflow/workflow-graph-conversions.d.ts.map +1 -1
  737. package/workflow/workflow-graph-conversions.js +17 -3
  738. package/workflow/workflow-graph-conversions.js.map +1 -1
@@ -3,18 +3,15 @@
3
3
  import { useCallback, useMemo } from "react";
4
4
  import { create } from "@bufbuild/protobuf";
5
5
  import { timestampDate } from "@bufbuild/protobuf/wkt";
6
- import { StigmerError } from "@stigmer/sdk";
7
6
  import {
8
7
  ListSkillVersionsInputSchema,
9
8
  type SkillVersionEntry as ProtoSkillVersionEntry,
10
9
  } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/io_pb";
11
10
  import { useStigmer } from "../hooks.js";
11
+ import { isUnimplemented } from "../internal/isUnimplemented.js";
12
12
  import { useFetch } from "../internal/useFetch.js";
13
13
  import type { VersionEntry } from "../version-history/types.js";
14
14
 
15
- // gRPC/Connect Code.Unimplemented = 12
16
- const CODE_UNIMPLEMENTED = 12;
17
-
18
15
  // ---------------------------------------------------------------------------
19
16
  // Public types
20
17
  // ---------------------------------------------------------------------------
@@ -156,10 +153,3 @@ function mapProtoToVersionEntry(proto: ProtoSkillVersionEntry): VersionEntry {
156
153
  };
157
154
  }
158
155
 
159
- // ---------------------------------------------------------------------------
160
- // Error detection
161
- // ---------------------------------------------------------------------------
162
-
163
- function isUnimplemented(err: unknown): boolean {
164
- return err instanceof StigmerError && err.connectCode === CODE_UNIMPLEMENTED;
165
- }
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";
3
+ import { memo, useCallback, useEffect, useRef } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import type { WorkflowGraphModel } from "./workflow-graph-model.js";
6
6
  import { taskToYaml } from "./inspector/task-to-yaml.js";
7
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
7
8
 
8
9
  /** Props for {@link ViewYamlDialog}. */
9
10
  export interface ViewYamlDialogProps {
@@ -32,7 +33,7 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
32
33
  onClose,
33
34
  }: ViewYamlDialogProps) {
34
35
  const dialogRef = useRef<HTMLDialogElement>(null);
35
- const [copied, setCopied] = useState(false);
36
+ const { copy, copied } = useCopyFeedback();
36
37
 
37
38
  const node = nodeId && graph
38
39
  ? graph.nodes.find((n) => n.id === nodeId) ?? null
@@ -58,25 +59,9 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
58
59
  return () => dialog.removeEventListener("close", handleClose);
59
60
  }, [onClose]);
60
61
 
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]);
62
+ const handleCopy = useCallback(() => {
63
+ void copy(yaml);
64
+ }, [copy, yaml]);
80
65
 
81
66
  const handleBackdropClick = useCallback(
82
67
  (e: React.MouseEvent<HTMLDialogElement>) => {
@@ -92,7 +77,7 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
92
77
  ref={dialogRef}
93
78
  className={cn(
94
79
  "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",
80
+ "stg:backdrop:bg-backdrop",
96
81
  )}
97
82
  onClick={handleBackdropClick}
98
83
  aria-label={node ? `YAML for ${node.taskName}` : "View YAML"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import {
6
6
  useWorkflowArchitectFlow,
@@ -8,6 +8,7 @@ import {
8
8
  } from "./useWorkflowArchitectFlow.js";
9
9
  import { MessageThread } from "../execution/MessageThread.js";
10
10
  import { WorkflowDiffGraph } from "./WorkflowDiffGraph.js";
11
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
11
12
 
12
13
  /** Props for {@link WorkflowArchitectDialog}. */
13
14
  export interface WorkflowArchitectDialogProps {
@@ -119,7 +120,7 @@ export function WorkflowArchitectDialog({
119
120
  onClick={handleBackdropClick}
120
121
  className={cn(
121
122
  "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:backdrop:bg-backdrop",
123
124
  "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
124
125
  )}
125
126
  >
@@ -176,6 +177,7 @@ function InputPhase({
176
177
  readonly flow: ReturnType<typeof useWorkflowArchitectFlow>;
177
178
  readonly onClose: () => void;
178
179
  }) {
180
+ const promptId = useId();
179
181
  return (
180
182
  <>
181
183
  <div className="stg:border-b stg:border-border stg:px-6 stg:py-4">
@@ -200,7 +202,7 @@ function InputPhase({
200
202
 
201
203
  <div className="stg:flex stg:flex-col stg:gap-1">
202
204
  <label
203
- htmlFor="architect-prompt"
205
+ htmlFor={promptId}
204
206
  className="stg:text-xs stg:font-medium stg:text-foreground"
205
207
  >
206
208
  Description
@@ -209,7 +211,7 @@ function InputPhase({
209
211
  </span>
210
212
  </label>
211
213
  <textarea
212
- id="architect-prompt"
214
+ id={promptId}
213
215
  value={flow.prompt}
214
216
  onChange={(e) => flow.setPrompt(e.target.value)}
215
217
  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 +281,7 @@ function StreamingPhase({
279
281
  Workflow Architect
280
282
  </h3>
281
283
  <span className="stg:inline-flex stg:items-center stg:gap-1.5 stg:text-xs stg:text-muted-foreground">
282
- <SpinnerIcon />
284
+ <SpinnerIcon size={14} />
283
285
  {flow.phase === "starting" ? "Starting…" : "Working…"}
284
286
  </span>
285
287
  </div>
@@ -436,7 +438,7 @@ function ResultPhase({
436
438
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
437
439
  )}
438
440
  >
439
- {isApplying && <SpinnerIcon />}
441
+ {isApplying && <SpinnerIcon size={14} />}
440
442
  {isApplying ? "Creating…" : "Create Workflow"}
441
443
  </button>
442
444
  </div>
@@ -502,24 +504,3 @@ function ErrorPhase({
502
504
  );
503
505
  }
504
506
 
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
 
@@ -87,7 +87,7 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
87
87
  layoutEngine,
88
88
  }: WorkflowCanvasEditorProps) {
89
89
  const containerRef = useRef<HTMLDivElement>(null);
90
- const canvas = useWorkflowCanvas(yaml, containerRef, { layoutEngine: layoutEngine ?? undefined });
90
+ const canvas = useWorkflowCanvas(yaml, { layoutEngine: layoutEngine ?? undefined });
91
91
  const [paletteCollapsed, setPaletteCollapsed] = useState(false);
92
92
  const togglePalette = useCallback(() => setPaletteCollapsed((p) => !p), []);
93
93
 
@@ -161,8 +161,35 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
161
161
  copySelection: canvas.copySelection,
162
162
  pasteAtCenter: canvas.pasteAtCenter,
163
163
  cutSelection: canvas.cutSelection,
164
+ undo: canvas.undo,
165
+ redo: canvas.redo,
164
166
  });
165
167
 
168
+ // All canvas shortcuts are gated on focus being inside the container,
169
+ // but React Flow's pane prevents default on mousedown, so pane clicks
170
+ // never move focus into it on their own — without this, Cmd+Z (etc.)
171
+ // after a pane interaction silently does nothing (oss#588). Focusing
172
+ // unconditionally also commits-and-blurs an inspector field when the
173
+ // user clicks back into the canvas. Scoped to the canvas column so
174
+ // palette and inspector clicks keep their native focus flow; when the
175
+ // press lands on a real focusable (node, toolbar button, picker
176
+ // input), the default mousedown focus takes over right after.
177
+ const handleCanvasPointerDownCapture = useCallback(() => {
178
+ containerRef.current?.focus({ preventScroll: true });
179
+ }, []);
180
+
181
+ // Deleting the focused node drops DOM focus to <body> when React Flow
182
+ // unmounts the element, disarming every canvas shortcut at exactly the
183
+ // moment the user reaches for Cmd+Z (oss#588). Return focus to the
184
+ // container after any node deletion so undo stays reachable.
185
+ const handleNodesDelete = useCallback(
186
+ (deleted: Parameters<typeof canvas.onNodesDelete>[0]) => {
187
+ canvas.onNodesDelete(deleted);
188
+ containerRef.current?.focus({ preventScroll: true });
189
+ },
190
+ [canvas.onNodesDelete],
191
+ );
192
+
166
193
  useEffect(() => {
167
194
  onDirtyChange?.(canvas.isDirty);
168
195
  }, [canvas.isDirty, onDirtyChange]);
@@ -239,10 +266,10 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
239
266
 
240
267
  const handleContextMenuDeleteNode = useCallback(
241
268
  (nodeId: string) => {
242
- canvas.onNodesDelete([{ id: nodeId } as import("@xyflow/react").Node]);
269
+ handleNodesDelete([{ id: nodeId } as import("@xyflow/react").Node]);
243
270
  setContextMenu(null);
244
271
  },
245
- [canvas.onNodesDelete],
272
+ [handleNodesDelete],
246
273
  );
247
274
 
248
275
  const handleContextMenuDuplicateNode = useCallback(
@@ -371,6 +398,9 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
371
398
  const handleContextMenuDeleteSelection = useCallback(() => {
372
399
  canvas.deleteSelection();
373
400
  setContextMenu(null);
401
+ // Same focus restoration as handleNodesDelete — the selection may
402
+ // include the focused node element.
403
+ containerRef.current?.focus({ preventScroll: true });
374
404
  }, [canvas.deleteSelection]);
375
405
 
376
406
  const handleSelectionContextMenu = useCallback(
@@ -475,9 +505,9 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
475
505
 
476
506
  const handleDeleteNode = useCallback(
477
507
  (nodeId: string) => {
478
- canvas.onNodesDelete([{ id: nodeId } as import("@xyflow/react").Node]);
508
+ handleNodesDelete([{ id: nodeId } as import("@xyflow/react").Node]);
479
509
  },
480
- [canvas.onNodesDelete],
510
+ [handleNodesDelete],
481
511
  );
482
512
 
483
513
  const handleDuplicateNode = useCallback(
@@ -580,7 +610,7 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
580
610
 
581
611
  {showPalette && !paletteCollapsed && <WorkflowTaskPalette />}
582
612
 
583
- <div className="stg:relative stg:flex-1">
613
+ <div className="stg:relative stg:flex-1" onPointerDownCapture={handleCanvasPointerDownCapture}>
584
614
  {showPalette && (
585
615
  <PaletteToggle
586
616
  collapsed={paletteCollapsed}
@@ -606,6 +636,8 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
606
636
  edges={canvas.edges}
607
637
  onNodesChange={canvas.onNodesChange}
608
638
  onEdgesChange={canvas.onEdgesChange}
639
+ onNodeDragStart={canvas.onNodeDragStart}
640
+ onNodeDragStop={canvas.onNodeDragStop}
609
641
  onNodeClick={handleNodeClick}
610
642
  onEdgeClick={handleEdgeClick}
611
643
  onPaneClick={handlePaneClick}
@@ -613,7 +645,7 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
613
645
  isValidConnection={canvas.isValidConnection}
614
646
  onDrop={canvas.onDrop}
615
647
  onDragOver={canvas.onDragOver}
616
- onNodesDelete={canvas.onNodesDelete}
648
+ onNodesDelete={handleNodesDelete}
617
649
  onEdgesDelete={canvas.onEdgesDelete}
618
650
  onNodeContextMenu={handleNodeContextMenu}
619
651
  onEdgeContextMenu={handleEdgeContextMenu}
@@ -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}
@@ -152,6 +152,7 @@ function WorkflowExecutionGraphInner({
152
152
  const [didInitialFit, setDidInitialFit] = useState(false);
153
153
  const isInitializedRef = useRef(false);
154
154
  const didFitGuardRef = useRef(false);
155
+ const containerRef = useRef<HTMLDivElement | null>(null);
155
156
 
156
157
  // ── Ephemeral drag positions ───────────────────────────────────────
157
158
  // Resets when the execution changes (navigating to a different run).
@@ -188,6 +189,14 @@ function WorkflowExecutionGraphInner({
188
189
 
189
190
  const performInitialFit = useCallback(() => {
190
191
  if (didFitGuardRef.current) return;
192
+ // A CSS-hidden mount (the execution viewer keeps BOTH center views
193
+ // mounted with the inactive one `display:none`) measures 0×0 —
194
+ // `fitView` against that computes a degenerate transform that never
195
+ // self-corrects, so the first toggle to Graph would show an
196
+ // apparently empty canvas (oss#571). Defer: the ResizeObserver below
197
+ // re-attempts on the hidden→visible transition.
198
+ const el = containerRef.current;
199
+ if (!el || el.offsetWidth === 0 || el.offsetHeight === 0) return;
191
200
  didFitGuardRef.current = true;
192
201
  fitView({ padding: 0.15, duration: getAnimationDuration(300) });
193
202
  setDidInitialFit(true);
@@ -209,6 +218,22 @@ function WorkflowExecutionGraphInner({
209
218
  }
210
219
  }, [nodes.length, performInitialFit]);
211
220
 
221
+ // The deferred-fit path for hidden mounts: when the container gains
222
+ // real dimensions (first reveal, or a late layout pass), run the
223
+ // pending initial fit. One-shot — `performInitialFit` self-guards, so
224
+ // user pan/zoom is never overridden by later resizes.
225
+ useEffect(() => {
226
+ const el = containerRef.current;
227
+ if (!el || typeof ResizeObserver === "undefined") return;
228
+ const observer = new ResizeObserver(() => {
229
+ if (isInitializedRef.current && nodes.length > 0) {
230
+ performInitialFit();
231
+ }
232
+ });
233
+ observer.observe(el);
234
+ return () => observer.disconnect();
235
+ }, [nodes.length, performInitialFit]);
236
+
212
237
  // Derive active task name stably from taskStates (not from nodes array — DD-010)
213
238
  const activeTaskInfo = useActiveTaskName(taskStates);
214
239
  const isTerminal = executionPhase != null && TERMINAL_EXECUTION_PHASES.has(executionPhase);
@@ -276,7 +301,7 @@ function WorkflowExecutionGraphInner({
276
301
 
277
302
  return (
278
303
  <WorkflowGraphModeProvider mode="execution">
279
- <div className={cn("stg:relative stg:h-full stg:w-full", className)}>
304
+ <div ref={containerRef} className={cn("stg:relative stg:h-full stg:w-full", className)}>
280
305
  {versionMismatch && (
281
306
  <div className="stg:absolute stg:left-3 stg:right-3 stg:top-3 stg:z-50 stg:rounded-md stg:border stg:border-[var(--stgm-warning,#f59e0b)]/30 stg:bg-[var(--stgm-warning,#f59e0b)]/5 stg:px-3 stg:py-2 stg:text-xs stg:text-[var(--stgm-foreground,#1a1a2e)]">
282
307
  {versionMismatch}