@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
@@ -16,6 +16,7 @@ import {
16
16
  import {
17
17
  useWorkflowExecutionPanel,
18
18
  workflowArtifactTabPath,
19
+ type UseWorkflowExecutionPanelOptions,
19
20
  } from "../useWorkflowExecutionPanel";
20
21
 
21
22
  function artifact(id: string, displayName: string) {
@@ -238,3 +239,102 @@ describe("useWorkflowExecutionPanel openDiagnosis", () => {
238
239
  );
239
240
  });
240
241
  });
242
+
243
+ // ---------------------------------------------------------------------------
244
+ // The controlled/observable open-state seam — the #651 contract mirrored from
245
+ // useSessionPanel (#654). The panel opens ITSELF (Diagnose, artifact/change
246
+ // opens), so onOpenChange fires in BOTH modes; controlled mode surfaces
247
+ // requests without applying them, and a declined request stays re-fireable.
248
+ // ---------------------------------------------------------------------------
249
+
250
+ function renderSeamPanel(initial?: UseWorkflowExecutionPanelOptions) {
251
+ return renderHook(
252
+ (opts: UseWorkflowExecutionPanelOptions) => useWorkflowExecutionPanel(opts),
253
+ { initialProps: { ...initial } as UseWorkflowExecutionPanelOptions },
254
+ );
255
+ }
256
+
257
+ describe("useWorkflowExecutionPanel — observed open state (uncontrolled + onOpenChange)", () => {
258
+ it("reports the chip toggle without taking control", () => {
259
+ const seen: boolean[] = [];
260
+ const { result } = renderSeamPanel({ onOpenChange: (o) => seen.push(o) });
261
+ act(() => result.current.openPanel());
262
+ expect(result.current.isOpen).toBe(true);
263
+ act(() => result.current.closePanel());
264
+ expect(result.current.isOpen).toBe(false);
265
+ expect(seen).toEqual([true, false]);
266
+ });
267
+
268
+ it("reports internal open intents (openDiagnosis, openArtifact), once per actual transition", () => {
269
+ const seen: boolean[] = [];
270
+ const { result } = renderSeamPanel({ onOpenChange: (o) => seen.push(o) });
271
+ act(() => result.current.openDiagnosis());
272
+ // Already open — further open intents are not transitions.
273
+ act(() => result.current.openArtifact(artifact("art_1", "report.json")));
274
+ act(() => result.current.openPanel());
275
+ expect(seen).toEqual([true]);
276
+ });
277
+
278
+ it("starts open when defaultOpen is set, without a spurious notification", () => {
279
+ const seen: boolean[] = [];
280
+ const { result } = renderSeamPanel({
281
+ defaultOpen: true,
282
+ onOpenChange: (o) => seen.push(o),
283
+ });
284
+ expect(result.current.isOpen).toBe(true);
285
+ expect(seen).toEqual([]);
286
+ });
287
+ });
288
+
289
+ describe("useWorkflowExecutionPanel — controlled open state", () => {
290
+ it("follows the host's open value and ignores defaultOpen", () => {
291
+ const { result, rerender } = renderSeamPanel({ open: false, defaultOpen: true });
292
+ expect(result.current.isOpen).toBe(false);
293
+ rerender({ open: true, defaultOpen: true });
294
+ expect(result.current.isOpen).toBe(true);
295
+ });
296
+
297
+ it("surfaces intents through onOpenChange without flipping state itself", () => {
298
+ const seen: boolean[] = [];
299
+ const onOpenChange = (o: boolean) => seen.push(o);
300
+ const { result, rerender } = renderSeamPanel({ open: false, onOpenChange });
301
+ act(() => result.current.openPanel());
302
+ expect(seen).toEqual([true]);
303
+ expect(result.current.isOpen).toBe(false);
304
+ // The host grants the request.
305
+ rerender({ open: true, onOpenChange });
306
+ expect(result.current.isOpen).toBe(true);
307
+ act(() => result.current.closePanel());
308
+ expect(seen).toEqual([true, false]);
309
+ expect(result.current.isOpen).toBe(true);
310
+ });
311
+
312
+ it("re-fires a declined request (once per request, not per transition)", () => {
313
+ const seen: boolean[] = [];
314
+ const onOpenChange = (o: boolean) => seen.push(o);
315
+ const { result } = renderSeamPanel({ open: false, onOpenChange });
316
+ act(() => result.current.openArtifact(artifact("art_1", "a.json")));
317
+ // The host declined (open stayed false) — a later intent must re-fire,
318
+ // not be swallowed by a stale "already requested" memory.
319
+ act(() => result.current.openFileChange(fileChange("src/a.ts")));
320
+ expect(seen).toEqual([true, true]);
321
+ });
322
+
323
+ it("Diagnose is reported, not applied — but the tab is pinned and ready", () => {
324
+ const seen: boolean[] = [];
325
+ const onOpenChange = (o: boolean) => seen.push(o);
326
+ const { result } = renderSeamPanel({ open: false, onOpenChange });
327
+ act(() => result.current.openDiagnosis());
328
+ expect(seen).toEqual([true]);
329
+ expect(result.current.isOpen).toBe(false);
330
+ // Tab state stays SDK-owned: the diagnosis tab is pinned regardless, so
331
+ // the moment the host opens the panel the conversation greets the user.
332
+ expect(result.current.editorsStore.getSnapshot().editors).toEqual([
333
+ {
334
+ entryId: DIAGNOSIS_DOCUMENT_ENTRY_ID,
335
+ path: DIAGNOSIS_DOCUMENT_PATH,
336
+ preview: false,
337
+ },
338
+ ]);
339
+ });
340
+ });
@@ -6,6 +6,7 @@ import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecu
6
6
  import { useWorkflowExecutionList } from "../useWorkflowExecutionList.js";
7
7
  import { WorkflowExecutionPhaseBadge } from "../WorkflowExecutionPhaseBadge.js";
8
8
  import { formatDuration } from "../format-utils.js";
9
+ import { formatRelativeTime } from "../../activity/format-relative-time.js";
9
10
 
10
11
  /** Props for {@link ExecutionComparisonPicker}. */
11
12
  export interface ExecutionComparisonPickerProps {
@@ -119,7 +120,7 @@ export const ExecutionComparisonPicker = memo(function ExecutionComparisonPicker
119
120
  ref={dialogRef}
120
121
  className={cn(
121
122
  "stgm stg:m-auto stg:max-h-[70vh] stg:w-full stg:max-w-md stg:rounded-lg stg:border stg:border-[var(--stgm-border,#e5e5e5)] stg:bg-[var(--stgm-background,#fff)] stg:p-0 stg:shadow-xl",
122
- "stg:backdrop:bg-black/40",
123
+ "stg:backdrop:bg-backdrop",
123
124
  )}
124
125
  onClick={handleBackdropClick}
125
126
  aria-label="Select execution to compare"
@@ -183,7 +184,7 @@ export const ExecutionComparisonPicker = memo(function ExecutionComparisonPicker
183
184
  {name}
184
185
  </span>
185
186
  <span className="stg:text-[10px] stg:text-[var(--stgm-muted-foreground,#737373)]">
186
- {startedAt ? formatRelative(startedAt) : "—"}
187
+ {startedAt ? formatStartedAt(startedAt) : "—"}
187
188
  {durationMs != null && ` · ${formatDuration(durationMs)}`}
188
189
  </span>
189
190
  </div>
@@ -228,13 +229,8 @@ function getDurationMs(startedAt: string | undefined, completedAt: string | unde
228
229
  return e - s;
229
230
  }
230
231
 
231
- function formatRelative(iso: string): string {
232
- const d = new Date(iso);
233
- if (Number.isNaN(d.getTime())) return iso;
234
- const now = Date.now();
235
- const diff = now - d.getTime();
236
- if (diff < 60_000) return "just now";
237
- if (diff < 3_600_000) return `${Math.floor(diff / 60_000)}m ago`;
238
- if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)}h ago`;
239
- return d.toLocaleDateString(undefined, { month: "short", day: "numeric" });
232
+ /** ISO wire value → the shared compact stamp; unparseable renders as absent. */
233
+ function formatStartedAt(iso: string): string {
234
+ const date = new Date(iso);
235
+ return Number.isNaN(date.getTime()) ? "—" : formatRelativeTime(date);
240
236
  }
@@ -12,6 +12,7 @@ import {
12
12
  } from "./derive-execution-row.js";
13
13
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../internal/tooltip.js";
14
14
  import { TruncatedText } from "../../internal/truncated-text.js";
15
+ import { formatRelativeTime } from "../../activity/format-relative-time.js";
15
16
 
16
17
  // ---------------------------------------------------------------------------
17
18
  // Column definitions
@@ -436,28 +437,3 @@ function LoadingSkeleton({
436
437
  </div>
437
438
  );
438
439
  }
439
-
440
- // ---------------------------------------------------------------------------
441
- // Relative time formatter
442
- // ---------------------------------------------------------------------------
443
-
444
- function formatRelativeTime(date: Date): string {
445
- const now = Date.now();
446
- const diff = now - date.getTime();
447
-
448
- if (diff < 0) return date.toLocaleString();
449
- if (diff < 60_000) return "just now";
450
- if (diff < 3_600_000) {
451
- const mins = Math.floor(diff / 60_000);
452
- return `${mins}m ago`;
453
- }
454
- if (diff < 86_400_000) {
455
- const hours = Math.floor(diff / 3_600_000);
456
- return `${hours}h ago`;
457
- }
458
- if (diff < 604_800_000) {
459
- const days = Math.floor(diff / 86_400_000);
460
- return `${days}d ago`;
461
- }
462
- return date.toLocaleDateString();
463
- }
@@ -177,6 +177,7 @@ export {
177
177
  export {
178
178
  WorkflowExecutionViewer,
179
179
  type WorkflowExecutionViewerProps,
180
+ type WorkflowExecutionPanelMode,
180
181
  } from "./WorkflowExecutionViewer.js";
181
182
 
182
183
  export {
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useRef, useState } from "react";
3
+ import { useCallback, useId, useRef, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
6
6
  import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
@@ -42,6 +42,15 @@ export function CreateWorkflowInstanceDialog({
42
42
  const dialogRef = useRef<HTMLDialogElement>(null);
43
43
  const { create, isCreating, error, clearError } = useCreateWorkflowInstance();
44
44
 
45
+ // Instance-scoped element ids (oss#571): a reusable component must not
46
+ // hardcode DOM ids — hosts legitimately mount this dialog more than once
47
+ // per page (e.g. zone-cached detail pages), and duplicate ids silently
48
+ // break the label→input association for every copy after the first.
49
+ const baseId = useId();
50
+ const titleId = `${baseId}-title`;
51
+ const nameId = `${baseId}-name`;
52
+ const descriptionId = `${baseId}-description`;
53
+
45
54
  const [name, setName] = useState("");
46
55
  const [description, setDescription] = useState("");
47
56
  const [environmentRefs, setEnvironmentRefs] = useState<ResourceRef[]>([]);
@@ -106,14 +115,14 @@ export function CreateWorkflowInstanceDialog({
106
115
  onClose={handleClose}
107
116
  className={cn(
108
117
  "stg:fixed stg:inset-0 stg:m-auto stg:w-full stg:max-w-lg stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
109
- "stg:backdrop:bg-black/50",
118
+ "stg:backdrop:bg-backdrop",
110
119
  )}
111
- aria-labelledby="create-instance-title"
120
+ aria-labelledby={titleId}
112
121
  >
113
122
  <form onSubmit={handleSubmit} className="stg:flex stg:flex-col">
114
123
  {/* Header */}
115
124
  <div className="stg:flex stg:items-center stg:justify-between stg:border-b stg:border-border stg:px-6 stg:py-4">
116
- <h2 id="create-instance-title" className="stg:text-base stg:font-semibold stg:text-foreground">
125
+ <h2 id={titleId} className="stg:text-base stg:font-semibold stg:text-foreground">
117
126
  Create Workflow Instance
118
127
  </h2>
119
128
  <button
@@ -134,11 +143,11 @@ export function CreateWorkflowInstanceDialog({
134
143
  <div className="stg:space-y-5 stg:px-6 stg:py-5">
135
144
  {/* Name */}
136
145
  <div>
137
- <label htmlFor="instance-name" className="stg:block stg:text-sm stg:font-medium stg:text-foreground stg:mb-1.5">
146
+ <label htmlFor={nameId} className="stg:block stg:text-sm stg:font-medium stg:text-foreground stg:mb-1.5">
138
147
  Name <span className="stg:text-destructive">*</span>
139
148
  </label>
140
149
  <input
141
- id="instance-name"
150
+ id={nameId}
142
151
  type="text"
143
152
  required
144
153
  value={name}
@@ -160,11 +169,11 @@ export function CreateWorkflowInstanceDialog({
160
169
 
161
170
  {/* Description */}
162
171
  <div>
163
- <label htmlFor="instance-description" className="stg:block stg:text-sm stg:font-medium stg:text-foreground stg:mb-1.5">
172
+ <label htmlFor={descriptionId} className="stg:block stg:text-sm stg:font-medium stg:text-foreground stg:mb-1.5">
164
173
  Description
165
174
  </label>
166
175
  <textarea
167
- id="instance-description"
176
+ id={descriptionId}
168
177
  value={description}
169
178
  onChange={(e) => setDescription(e.target.value)}
170
179
  placeholder="What is this instance used for?"
@@ -296,7 +296,8 @@ export function WorkflowInstanceDetailPanel({
296
296
  ) : (
297
297
  <div className="stg:space-y-2 stg:rounded-md stg:border stg:border-destructive/30 stg:p-3 stg:bg-destructive/5">
298
298
  <p className="stg:text-xs stg:text-destructive stg:font-medium">
299
- This will permanently delete this instance and all its execution history.
299
+ This permanently removes the instance and its environment bindings. Executions
300
+ already run against it are preserved in the workflow&apos;s execution history.
300
301
  This action cannot be undone.
301
302
  </p>
302
303
  {deleteError && (
@@ -10,8 +10,11 @@ export interface UseDeleteWorkflowInstanceReturn {
10
10
  /**
11
11
  * Delete a workflow instance by ID. Returns the deleted resource.
12
12
  *
13
- * WARNING: Deleting an instance cascades all executions belonging
14
- * to this instance are permanently removed.
13
+ * Deletion does NOT cascade to executions: runs already created
14
+ * against the instance are preserved and stay visible in the parent
15
+ * workflow's execution history (every execution carries a
16
+ * denormalized workflow reference). Only the instance itself — its
17
+ * environment bindings and configuration — is removed.
15
18
  */
16
19
  readonly deleteInstance: (id: string) => Promise<WorkflowInstance>;
17
20
  /** `true` while the delete request is in flight. */
@@ -29,8 +32,10 @@ export interface UseDeleteWorkflowInstanceReturn {
29
32
  * The caller is responsible for handling post-delete UI updates
30
33
  * (e.g., refreshing the instance list, closing a detail panel).
31
34
  *
32
- * Deletion cascades to all WorkflowExecution resources that belong
33
- * to the instance. The confirmation UI should warn the user about this.
35
+ * Deletion is instance-only on both editions executions are NOT
36
+ * cascaded (deliberate platform posture: they keep a denormalized
37
+ * workflow reference and remain in the workflow's execution history).
38
+ * Confirmation UI must not claim execution history is deleted.
34
39
  *
35
40
  * @example
36
41
  * ```tsx
@@ -1,6 +1,5 @@
1
1
  import { getVisualSpec } from "../task-type-visual-registry.js";
2
- import { taskKindToString } from "../workflow-graph-conversions.js";
3
- import { START_NODE_ID, END_NODE_ID } from "../workflow-graph-model.js";
2
+ import { graphNodeKindString } from "../workflow-graph-conversions.js";
4
3
  import type { WorkflowGraphNode } from "../workflow-graph-model.js";
5
4
  import type { NodeDimensions } from "./types.js";
6
5
 
@@ -23,8 +22,6 @@ import type { NodeDimensions } from "./types.js";
23
22
  * wrapping in `useCallback` (DD-010).
24
23
  */
25
24
  export function registryNodeDimensions(node: WorkflowGraphNode): NodeDimensions {
26
- const isSentinel = node.id === START_NODE_ID || node.id === END_NODE_ID;
27
- const kindKey = isSentinel ? node.id : taskKindToString(node.kind);
28
- const spec = getVisualSpec(kindKey);
25
+ const spec = getVisualSpec(graphNodeKindString(node));
29
26
  return { width: spec.defaultWidth, height: spec.defaultHeight + spec.captionHeight };
30
27
  }
@@ -185,6 +185,10 @@ function SvgShell({
185
185
  height={shapeHeight}
186
186
  viewBox={`0 0 ${width} ${shapeHeight}`}
187
187
  aria-hidden="true"
188
+ // The stable hook for "this node renders an SVG shape
189
+ // background" — kind icons are also <svg>s, so a bare svg
190
+ // selector cannot distinguish shaped shells from task cards.
191
+ data-cursor-target="node-shape"
188
192
  >
189
193
  <path
190
194
  d={pathD ?? ""}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { memo, useState, useCallback, useRef, useEffect } from "react";
3
+ import { memo, useState, useCallback, useId, useRef, useEffect } from "react";
4
4
  import { Popover } from "@base-ui/react/popover";
5
5
  import { cn } from "@stigmer/theme";
6
6
  import { useStigmerPortalContainer } from "../../portal-container.js";
@@ -76,6 +76,7 @@ export const BranchAddPopover = memo(function BranchAddPopover({
76
76
  side = "bottom",
77
77
  align = "start",
78
78
  }: BranchAddPopoverProps) {
79
+ const errorId = useId();
79
80
  const portalContainer = useStigmerPortalContainer();
80
81
  const config = MODE_CONFIG[mode];
81
82
  const nameRef = useRef<HTMLInputElement>(null);
@@ -175,11 +176,11 @@ export const BranchAddPopover = memo(function BranchAddPopover({
175
176
  nameError ? "stg:border-[var(--stgm-destructive,#ef4444)]" : "stg:border-border",
176
177
  )}
177
178
  aria-invalid={!!nameError}
178
- aria-describedby={nameError ? "branch-name-error" : undefined}
179
+ aria-describedby={nameError ? errorId : undefined}
179
180
  />
180
181
  {nameError && (
181
182
  <p
182
- id="branch-name-error"
183
+ id={errorId}
183
184
  className="stg:mt-0.5 stg:text-[10px] stg:text-[var(--stgm-destructive,#ef4444)]"
184
185
  >
185
186
  {nameError}
@@ -4,6 +4,7 @@ import {
4
4
  SENTINEL_NODE_WIDTH,
5
5
  SENTINEL_NODE_HEIGHT,
6
6
  } from "./canvas-constants.js";
7
+ import { START_NODE_ID, END_NODE_ID } from "./workflow-graph-model.js";
7
8
 
8
9
  /**
9
10
  * Semantic shape identifier for workflow nodes.
@@ -203,9 +204,10 @@ export const VISUAL_REGISTRY: ReadonlyMap<string, TaskTypeVisualSpec> = Object.f
203
204
  ["notification", EVENT_CIRCLE],
204
205
  ["raise_error", EVENT_CIRCLE],
205
206
 
206
- // sentinels
207
- ["__start__", TERMINAL_PILL],
208
- ["__end__", TERMINAL_PILL_END],
207
+ // Sentinel pseudo-kinds: keyed by the sentinel node ids, which double
208
+ // as the sentinels' kindString (see graphNodeKindString).
209
+ [START_NODE_ID, TERMINAL_PILL],
210
+ [END_NODE_ID, TERMINAL_PILL_END],
209
211
  ]),
210
212
  );
211
213
 
@@ -83,7 +83,7 @@ export function WorkflowTemplatePreview({
83
83
  ref={dialogRef}
84
84
  className={cn(
85
85
  "stgm stg:m-auto stg:max-h-[85vh] stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-background stg:p-0 stg:shadow-lg",
86
- "stg:backdrop:bg-black/50",
86
+ "stg:backdrop:bg-backdrop",
87
87
  )}
88
88
  >
89
89
  <div className="stg:flex stg:flex-col">
@@ -29,7 +29,7 @@ export interface ApprovalBoundaryCrossing {
29
29
  * the decision surface (the panel's Inspect Approval tab) is never hidden
30
30
  * while the run is blocked.
31
31
  *
32
- * Same diffing shape as {@link useExecutionAnnouncements} (prev-map ref,
32
+ * Same diffing shape as `useExecutionAnnouncements` (prev-map ref,
33
33
  * diff on each map commit). A task first observed already in
34
34
  * `waiting_approval` counts as entered — with rAF-coalesced commits the
35
35
  * running→waiting transition can collapse into the task's first appearance.
@@ -19,6 +19,14 @@ export interface UseCanvasKeyboardShortcutsOptions {
19
19
  readonly copySelection?: () => void;
20
20
  readonly pasteAtCenter?: () => void;
21
21
  readonly cutSelection?: () => void;
22
+ /**
23
+ * Undo/redo MUST be the orchestrator's canvas-syncing wrappers
24
+ * (`useWorkflowCanvas.undo`/`redo`), never `useGraphHistory`'s raw
25
+ * mutations — a model mutation that skips the React Flow sync leaves
26
+ * the inspector editing a node the canvas doesn't show (oss#588).
27
+ */
28
+ readonly undo?: () => void;
29
+ readonly redo?: () => void;
22
30
  }
23
31
 
24
32
  function isTextInput(target: EventTarget | null): boolean {
@@ -39,12 +47,15 @@ function isFocusInsideContainer(container: HTMLElement): boolean {
39
47
  * Canvas-scoped keyboard shortcuts for the workflow editor.
40
48
  *
41
49
  * Binds shortcuts that are only active when focus is inside the canvas
42
- * container, using the same capture-phase listener pattern as
43
- * {@link useGraphHistory} (undo/redo). Bare-key shortcuts (N, Escape)
44
- * are suppressed when a text input has focus.
50
+ * container, using a capture-phase document listener. Shortcuts that
51
+ * collide with native text-editing (undo/redo, copy/paste/cut, bare
52
+ * keys) are suppressed when a text input has focus, so inspector
53
+ * fields keep their native behavior.
45
54
  *
46
55
  * | Shortcut | Action |
47
56
  * |-------------------|---------------------------------------|
57
+ * | `Ctrl/Cmd+Z` | Undo (canvas-synced, see oss#588) |
58
+ * | `Ctrl/Cmd+Shift+Z`| Redo |
48
59
  * | `Ctrl/Cmd+D` | Duplicate selected node |
49
60
  * | `Ctrl/Cmd+A` | Select all non-sentinel nodes |
50
61
  * | `Ctrl/Cmd+C` | Copy selected node(s) to clipboard |
@@ -66,6 +77,8 @@ export function useCanvasKeyboardShortcuts({
66
77
  copySelection,
67
78
  pasteAtCenter,
68
79
  cutSelection,
80
+ undo,
81
+ redo,
69
82
  }: UseCanvasKeyboardShortcutsOptions): void {
70
83
  useEffect(() => {
71
84
  const container = containerRef.current;
@@ -76,6 +89,21 @@ export function useCanvasKeyboardShortcuts({
76
89
 
77
90
  const isMod = e.metaKey || e.ctrlKey;
78
91
 
92
+ // Ctrl/Cmd+Z / Ctrl/Cmd+Shift+Z — undo/redo. Text inputs keep
93
+ // their native text undo (deliberate change with oss#588: the old
94
+ // binding hijacked Cmd+Z while typing in inspector fields).
95
+ if (isMod && !e.altKey && e.key.toLowerCase() === "z") {
96
+ if (isTextInput(e.target)) return;
97
+ e.preventDefault();
98
+ e.stopPropagation();
99
+ if (e.shiftKey) {
100
+ redo?.();
101
+ } else {
102
+ undo?.();
103
+ }
104
+ return;
105
+ }
106
+
79
107
  // Ctrl/Cmd+D — duplicate selected node
80
108
  if (isMod && !e.shiftKey && !e.altKey && e.key.toLowerCase() === "d") {
81
109
  e.preventDefault();
@@ -169,5 +197,7 @@ export function useCanvasKeyboardShortcuts({
169
197
  copySelection,
170
198
  pasteAtCenter,
171
199
  cutSelection,
200
+ undo,
201
+ redo,
172
202
  ]);
173
203
  }
@@ -1,7 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useState, useCallback, useRef, useEffect } from "react";
4
- import type { RefObject } from "react";
3
+ import { useState, useCallback, useRef } from "react";
5
4
  import type { WorkflowGraphModel } from "./workflow-graph-model.js";
6
5
  import type { GraphCommand } from "./graph-commands.js";
7
6
  import { GraphHistory } from "./graph-commands.js";
@@ -12,27 +11,34 @@ export interface UseGraphHistoryReturn {
12
11
  readonly canUndo: boolean;
13
12
  readonly canRedo: boolean;
14
13
  readonly dispatch: (command: GraphCommand) => WorkflowGraphModel;
15
- readonly undo: () => void;
16
- readonly redo: () => void;
14
+ readonly undo: () => WorkflowGraphModel | null;
15
+ readonly redo: () => WorkflowGraphModel | null;
17
16
  readonly reset: (model: WorkflowGraphModel) => void;
18
17
  }
19
18
 
20
19
  /**
21
20
  * React wrapper around {@link GraphHistory} providing undo/redo state
22
- * management and keyboard shortcut binding.
21
+ * management.
23
22
  *
24
- * Keyboard shortcuts (Ctrl/Cmd+Z, Ctrl/Cmd+Shift+Z) are only active
25
- * when the referenced container element contains the active focus target,
26
- * preventing conflicts with other editors on the page.
23
+ * Every mutation (`dispatch`, `undo`, `redo`) returns the resulting model
24
+ * SYNCHRONOUSLY so callers can derive dependent state (React Flow
25
+ * elements) in the same event handler. `currentModel` is a render-time
26
+ * snapshot — inside a callback it may be stale, so consumers reacting to
27
+ * a mutation must use the returned model, never `currentModel`
28
+ * (oss#588 was exactly that stale read).
29
+ *
30
+ * This hook deliberately owns NO DOM listeners: it cannot sync the canvas,
31
+ * so letting it mutate the model from a keyboard shortcut would desync
32
+ * model and canvas. Keyboard undo/redo binding lives with the other
33
+ * canvas shortcuts in `useCanvasKeyboardShortcuts`, wired to the
34
+ * orchestrator's syncing wrappers (`useWorkflowCanvas.undo`/`redo`).
27
35
  *
28
36
  * @param initialModel - The starting graph model (from YAML parse).
29
- * @param containerRef - Ref to the DOM element that scopes keyboard shortcuts.
30
37
  *
31
38
  * @since T15 Batch 2 (Node Authoring)
32
39
  */
33
40
  export function useGraphHistory(
34
41
  initialModel: WorkflowGraphModel | null,
35
- containerRef: RefObject<HTMLDivElement | null>,
36
42
  ): UseGraphHistoryReturn {
37
43
  const historyRef = useRef<GraphHistory | null>(null);
38
44
  const [model, setModel] = useState<WorkflowGraphModel | null>(null);
@@ -61,20 +67,22 @@ export function useGraphHistory(
61
67
  [forceUpdate],
62
68
  );
63
69
 
64
- const undo = useCallback(() => {
70
+ const undo = useCallback((): WorkflowGraphModel | null => {
65
71
  const history = historyRef.current;
66
- if (!history?.canUndo) return;
72
+ if (!history?.canUndo) return null;
67
73
  const next = history.undo();
68
74
  setModel(next);
69
75
  forceUpdate();
76
+ return next;
70
77
  }, [forceUpdate]);
71
78
 
72
- const redo = useCallback(() => {
79
+ const redo = useCallback((): WorkflowGraphModel | null => {
73
80
  const history = historyRef.current;
74
- if (!history?.canRedo) return;
81
+ if (!history?.canRedo) return null;
75
82
  const next = history.redo();
76
83
  setModel(next);
77
84
  forceUpdate();
85
+ return next;
78
86
  }, [forceUpdate]);
79
87
 
80
88
  const reset = useCallback(
@@ -90,33 +98,6 @@ export function useGraphHistory(
90
98
  [forceUpdate],
91
99
  );
92
100
 
93
- // Keyboard shortcuts: Ctrl/Cmd+Z (undo), Ctrl/Cmd+Shift+Z (redo)
94
- useEffect(() => {
95
- const container = containerRef.current;
96
- if (!container) return;
97
-
98
- function handleKeyDown(e: KeyboardEvent) {
99
- if (!container?.contains(document.activeElement) && document.activeElement !== container) {
100
- return;
101
- }
102
-
103
- const isMod = e.metaKey || e.ctrlKey;
104
- if (!isMod || e.key.toLowerCase() !== "z") return;
105
-
106
- e.preventDefault();
107
- e.stopPropagation();
108
-
109
- if (e.shiftKey) {
110
- redo();
111
- } else {
112
- undo();
113
- }
114
- }
115
-
116
- document.addEventListener("keydown", handleKeyDown, true);
117
- return () => document.removeEventListener("keydown", handleKeyDown, true);
118
- }, [containerRef, undo, redo]);
119
-
120
101
  const canUndo = historyRef.current?.canUndo ?? false;
121
102
  const canRedo = historyRef.current?.canRedo ?? false;
122
103