@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
@@ -28,9 +28,11 @@ import {
28
28
  import { MessageThread, type MessageThreadSlots } from "../MessageThread";
29
29
  import type { MessageEntryProps } from "../MessageEntry";
30
30
  import type { ApprovalCardProps } from "../ApprovalCard";
31
+ import type { ExecutionErrorNoticeProps } from "../ExecutionErrorNotice";
31
32
  import type { TodoCardProps } from "../TodoCard";
32
33
  import type { TodoRowProps } from "../TodoList";
33
34
  import type { SetupProgressProps } from "../SetupProgress";
35
+ import type { LivenessStatusLineProps } from "../LivenessStatusLine";
34
36
  import type { PlanCompletionCardProps } from "../PlanCompletionCard";
35
37
  import type { PlanArtifactCardProps } from "../PlanArtifactCard";
36
38
  import type { PlanStreamingCardProps } from "../PlanStreamingCard";
@@ -110,6 +112,7 @@ function makeExecution(opts: {
110
112
  todos?: Record<string, { content: string; status: TodoStatus }>;
111
113
  pendingApprovalToolCallId?: string;
112
114
  planArtifactName?: string;
115
+ error?: string;
113
116
  }): AgentExecution {
114
117
  const exec = create(AgentExecutionSchema);
115
118
 
@@ -128,6 +131,9 @@ function makeExecution(opts: {
128
131
 
129
132
  const status = create(AgentExecutionStatusSchema);
130
133
  status.phase = opts.phase ?? ExecutionPhase.EXECUTION_COMPLETED;
134
+ if (opts.error) {
135
+ status.error = opts.error;
136
+ }
131
137
 
132
138
  const aiMsg = create(AgentMessageSchema);
133
139
  aiMsg.type = MessageType.MESSAGE_AI;
@@ -312,6 +318,28 @@ describe("MessageThread slots", () => {
312
318
  expect(screen.getByTestId("custom-setup").textContent).toBe("waiting");
313
319
  });
314
320
 
321
+ it("renders the LivenessStatusLine slot while the execution is live between events", () => {
322
+ const CustomLiveness = ({ label }: LivenessStatusLineProps) => (
323
+ <div data-testid="custom-liveness">{label ?? "custom-live"}</div>
324
+ );
325
+
326
+ const exec = makeExecution({
327
+ id: "e-live",
328
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
329
+ aiContent: "thinking about it",
330
+ });
331
+
332
+ render(
333
+ <MessageThread
334
+ executions={[]}
335
+ activeStreamExecution={exec}
336
+ slots={{ LivenessStatusLine: CustomLiveness }}
337
+ />,
338
+ );
339
+
340
+ expect(screen.getByTestId("custom-liveness").textContent).toBe("custom-live");
341
+ });
342
+
315
343
  it("renders the PlanCompletionCard slot for an artifact-less completed Plan turn", () => {
316
344
  const CustomCompletion = ({ onImplement }: PlanCompletionCardProps) => (
317
345
  <button type="button" data-testid="custom-completion" onClick={onImplement}>
@@ -390,6 +418,70 @@ describe("MessageThread slots", () => {
390
418
  );
391
419
  });
392
420
 
421
+ it("renders the ExecutionErrorNotice slot with the retry wiring intact", () => {
422
+ const onRetryExecution = vi.fn();
423
+ const CustomNotice = ({ error, retryMessage, onRetry }: ExecutionErrorNoticeProps) => (
424
+ <div data-testid="custom-error-notice">
425
+ <span>{error}</span>
426
+ {onRetry && retryMessage && (
427
+ <button type="button" onClick={() => onRetry(retryMessage)}>
428
+ switch engine and retry
429
+ </button>
430
+ )}
431
+ </div>
432
+ );
433
+
434
+ render(
435
+ <MessageThread
436
+ executions={[
437
+ makeExecution({
438
+ id: "e-failed",
439
+ specMessage: "prompt text",
440
+ phase: ExecutionPhase.EXECUTION_FAILED,
441
+ error: "model capacity exhausted",
442
+ }),
443
+ ]}
444
+ onRetryExecution={onRetryExecution}
445
+ slots={{ ExecutionErrorNotice: CustomNotice }}
446
+ />,
447
+ );
448
+
449
+ const notice = screen.getByTestId("custom-error-notice");
450
+ expect(notice.textContent).toContain("model capacity exhausted");
451
+ // The built-in's clamp toggle must not render alongside the override.
452
+ expect(screen.queryByRole("button", { name: "Show more" })).toBeNull();
453
+
454
+ // The slot's retry contract is identical to the built-in's: it resends
455
+ // the originating message.
456
+ fireEvent.click(screen.getByRole("button", { name: "switch engine and retry" }));
457
+ expect(onRetryExecution).toHaveBeenCalledWith("prompt text");
458
+ });
459
+
460
+ it("falls back to the built-in ExecutionErrorNotice when the slot is omitted", () => {
461
+ const onRetryExecution = vi.fn();
462
+
463
+ render(
464
+ <MessageThread
465
+ executions={[
466
+ makeExecution({
467
+ id: "e-failed",
468
+ specMessage: "prompt text",
469
+ phase: ExecutionPhase.EXECUTION_FAILED,
470
+ error: "model capacity exhausted",
471
+ }),
472
+ ]}
473
+ onRetryExecution={onRetryExecution}
474
+ />,
475
+ );
476
+
477
+ // The built-in renders as a destructive alert with clamp + Retry.
478
+ const alert = screen.getByRole("alert");
479
+ expect(alert.textContent).toContain("model capacity exhausted");
480
+ expect(screen.getByRole("button", { name: "Show more" })).toBeTruthy();
481
+ fireEvent.click(screen.getByRole("button", { name: "Retry" }));
482
+ expect(onRetryExecution).toHaveBeenCalledWith("prompt text");
483
+ });
484
+
393
485
  // -------------------------------------------------------------------------
394
486
  // Backward compatibility and memo guarantees
395
487
  // -------------------------------------------------------------------------
@@ -78,8 +78,9 @@ describe("useToolPresentation", () => {
78
78
 
79
79
  describe("disclosure", () => {
80
80
  it("keeps known compact tools as summary", () => {
81
- // Shell/edit/write are intentionally excluded — they are `preview`
82
- // categories (output / diff is the information), asserted separately below.
81
+ // Shell/edit/write are intentionally excluded — shell is the `tail`
82
+ // category and edit/write are `preview` categories (output / diff is
83
+ // the information), asserted separately below.
83
84
  for (const name of ["Read", "Grep", "Glob"]) {
84
85
  const tc = makeToolCall({ name, args: { path: "/x", command: "ls", pattern: "p" } });
85
86
  const { result } = renderHook(() => useToolPresentation(tc));
@@ -98,11 +99,25 @@ describe("useToolPresentation", () => {
98
99
  }
99
100
  });
100
101
 
101
- it("keeps a shell tool's output as a persistent preview", () => {
102
+ it("gives shell the tail disclosure (live preview, dimmed-tail settle)", () => {
102
103
  const tc = makeToolCall({ name: "Shell", args: { command: "ls" }, result: "files" });
103
104
  const { result } = renderHook(() => useToolPresentation(tc));
104
105
  expect(result.current.category).toBe("shell");
105
- expect(result.current.disclosure).toBe("preview");
106
+ expect(result.current.disclosure).toBe("tail");
107
+ });
108
+
109
+ it("lets a host restore the always-expanded shell preview via the registry", () => {
110
+ // The one-line opt-out for hosts that prefer the pre-tail behaviour.
111
+ const dispose = registerToolPresenter(ToolKind.SHELL, {
112
+ disclosure: () => "preview",
113
+ });
114
+ try {
115
+ const tc = makeToolCall({ name: "Shell", args: { command: "ls" }, result: "files" });
116
+ const { result } = renderHook(() => useToolPresentation(tc));
117
+ expect(result.current.disclosure).toBe("preview");
118
+ } finally {
119
+ dispose();
120
+ }
106
121
  });
107
122
 
108
123
  it("foregrounds MCP tools as preview", () => {
@@ -140,6 +155,28 @@ describe("useToolPresentation", () => {
140
155
  });
141
156
  });
142
157
 
158
+ describe("chrome", () => {
159
+ it("quiets metadata-only categories and keeps content-bearing ones as cards", () => {
160
+ const quiet = makeToolCall({ name: "Read", args: { path: "/x" } });
161
+ const card = makeToolCall({ name: "Shell", args: { command: "ls" }, result: "files" });
162
+ expect(renderHook(() => useToolPresentation(quiet)).result.current.chrome).toBe("quiet");
163
+ expect(renderHook(() => useToolPresentation(card)).result.current.chrome).toBe("card");
164
+ });
165
+
166
+ it("lets a registered presenter restore the boxed look for a kind", () => {
167
+ const dispose = registerToolPresenter(ToolKind.FILE_READ, {
168
+ chrome: () => "card",
169
+ });
170
+ try {
171
+ const tc = makeToolCall({ name: "Read", args: { path: "/x" } });
172
+ const { result } = renderHook(() => useToolPresentation(tc));
173
+ expect(result.current.chrome).toBe("card");
174
+ } finally {
175
+ dispose();
176
+ }
177
+ });
178
+ });
179
+
143
180
  describe("runGroupable", () => {
144
181
  it("folds read-only repetitive categories", () => {
145
182
  for (const name of ["Read", "Grep", "Glob"]) {
@@ -127,6 +127,9 @@ export type { InteractionModeBadgeProps } from "./InteractionModeBadge.js";
127
127
  export { SetupProgress } from "./SetupProgress.js";
128
128
  export type { SetupProgressProps } from "./SetupProgress.js";
129
129
 
130
+ export { LivenessStatusLine } from "./LivenessStatusLine.js";
131
+ export type { LivenessStatusLineProps } from "./LivenessStatusLine.js";
132
+
130
133
  export { ToolCallGroup } from "./ToolCallGroup.js";
131
134
  export type { ToolCallGroupProps } from "./ToolCallGroup.js";
132
135
 
@@ -154,8 +157,8 @@ export type { ToolArgsViewProps } from "./ToolArgsView.js";
154
157
  export { ResultView, summarizeResultView } from "./ResultView.js";
155
158
  export type { ResultViewProps } from "./ResultView.js";
156
159
 
157
- export { TerminalSession } from "./TerminalSession.js";
158
- export type { TerminalSessionProps } from "./TerminalSession.js";
160
+ export { TerminalSession, TerminalTail } from "./TerminalSession.js";
161
+ export type { TerminalSessionProps, TerminalTailProps } from "./TerminalSession.js";
159
162
 
160
163
  export {
161
164
  useToolPresentation,
@@ -204,6 +207,9 @@ export type {
204
207
  ThreadContentColumn,
205
208
  } from "./MessageThread.js";
206
209
 
210
+ export { ExecutionErrorNotice } from "./ExecutionErrorNotice.js";
211
+ export type { ExecutionErrorNoticeProps } from "./ExecutionErrorNotice.js";
212
+
207
213
  export { ThreadSkeleton } from "./ThreadSkeleton.js";
208
214
  export type { ThreadSkeletonProps } from "./ThreadSkeleton.js";
209
215
 
@@ -36,16 +36,67 @@ export type ToolCategory =
36
36
  * `Search … 2 matches`). The full detail is one click away.
37
37
  * - `"preview"` — the row renders its result body **always** (no card chevron),
38
38
  * because the one-liner cannot convey what happened so the content itself IS
39
- * the information (a shell command's output, an MCP result such as a
40
- * screenshot, a fetched page, a web-search answer, or an unrecognised tool's
41
- * output). The body's own in-place reveal expands it beyond the height budget.
39
+ * the information (an MCP result such as a screenshot, a fetched page, a
40
+ * web-search answer, or an unrecognised tool's output). The body's own
41
+ * in-place reveal expands it beyond the height budget.
42
+ * - `"tail"` — live like `"preview"`, settled like a teaser: while the tool
43
+ * runs (or awaits approval) the full body streams in view; once it settles
44
+ * successfully the row collapses to a dimmed tail of its last output lines —
45
+ * at-a-glance evidence that it ran and what it printed last — expanding on
46
+ * demand via the header chevron. A settled *failure* stays open: error
47
+ * output is content, not context. Shell is the canonical tail category — a
48
+ * working session's compile/validate loops would otherwise dominate the
49
+ * transcript at full contrast (Cursor's chat is the reference UX).
42
50
  *
43
51
  * This is the *disclosure* axis (how much of a result to show); it is
44
52
  * orthogonal to {@link isRunGroupableCategory} (whether consecutive same-kind
45
53
  * calls fold into one chip). A category can be result-rich but never folded
46
54
  * (`shell`), or foldable but never previewed (`read`).
47
55
  */
48
- export type ToolDisclosure = "summary" | "preview";
56
+ export type ToolDisclosure = "summary" | "preview" | "tail";
57
+
58
+ /**
59
+ * How much *chrome* a tool row carries in the thread — the density axis,
60
+ * orthogonal to {@link ToolDisclosure} (how much of the result to show).
61
+ *
62
+ * - `"card"` — a self-contained bordered card. For content-bearing rows
63
+ * (shell, edit, fetch, MCP), where the body is real evidence worth a frame.
64
+ * - `"quiet"` — an unboxed single text line, no border, no card. For
65
+ * metadata-only rows (read / list / search / think) whose label + argument
66
+ * already tell the whole story: a 4 ms directory listing must not shout as
67
+ * loudly as a 3-minute shell run (Cursor's chat is the reference UX — prose
68
+ * with quiet evidence attached, not a stack of equally-loud widgets).
69
+ *
70
+ * This is the *settled default*. A row escalates to `"card"` regardless of
71
+ * category while it carries something the quiet line cannot: a pending
72
+ * approval gate (a decision surface) or a failure (error output is content).
73
+ * That escalation is owned by the component layer and is deliberately not
74
+ * override-able — a gate must never render without its frame.
75
+ */
76
+ export type ToolChrome = "card" | "quiet";
77
+
78
+ /**
79
+ * Categories whose settled summary row IS the complete information, rendered
80
+ * as quiet unboxed lines by default. Mirrors {@link RUN_GROUPABLE_CATEGORIES}
81
+ * plus `think` (a thought's row reads like narration, not evidence) — the
82
+ * same low-signal set, on the chrome axis instead of the folding axis.
83
+ */
84
+ const QUIET_CATEGORIES: ReadonlySet<ToolCategory> = new Set<ToolCategory>([
85
+ "read",
86
+ "list",
87
+ "search",
88
+ "think",
89
+ ]);
90
+
91
+ /**
92
+ * Returns the default {@link ToolChrome} for a presentation category.
93
+ * Consumers can override per {@link ToolKind} via {@link registerToolPresenter}
94
+ * (`chrome: () => "card"` to restore the boxed look for a kind), exactly like
95
+ * the disclosure axis.
96
+ */
97
+ export function defaultChromeForCategory(category: ToolCategory): ToolChrome {
98
+ return QUIET_CATEGORIES.has(category) ? "quiet" : "card";
99
+ }
49
100
 
50
101
  /**
51
102
  * Categories whose result is foregrounded as a persistent bounded preview by
@@ -60,7 +111,6 @@ export type ToolDisclosure = "summary" | "preview";
60
111
  * under control even in turns with many edits.
61
112
  */
62
113
  const PREVIEW_CATEGORIES: ReadonlySet<ToolCategory> = new Set<ToolCategory>([
63
- "shell",
64
114
  "edit",
65
115
  "write",
66
116
  "mcp",
@@ -69,6 +119,18 @@ const PREVIEW_CATEGORIES: ReadonlySet<ToolCategory> = new Set<ToolCategory>([
69
119
  "unknown",
70
120
  ]);
71
121
 
122
+ /**
123
+ * Categories that stream in full while live but settle to a dimmed tail of
124
+ * their last output lines (see the `"tail"` arm of {@link ToolDisclosure}).
125
+ * Today that is shell alone: its output is evidence worth keeping at a
126
+ * glance, but rarely worth reading line by line once the command succeeded.
127
+ * Consumers can restore the always-expanded preview per kind via
128
+ * {@link registerToolPresenter} (`disclosure: () => "preview"`).
129
+ */
130
+ const TAIL_CATEGORIES: ReadonlySet<ToolCategory> = new Set<ToolCategory>([
131
+ "shell",
132
+ ]);
133
+
72
134
  /**
73
135
  * Low-signal categories whose consecutive runs fold into a single collapsible
74
136
  * "Read 5 files" chip in the thread. These are the read-only, repetitive
@@ -84,13 +146,15 @@ const RUN_GROUPABLE_CATEGORIES: ReadonlySet<ToolCategory> = new Set<ToolCategory
84
146
 
85
147
  /**
86
148
  * Returns the default inline {@link ToolDisclosure} for a presentation
87
- * category. This is the headless policy behind the thread's "keep a live
88
- * preview for shell/MCP/unknown, keep generic tools compact" behaviour;
89
- * consumers can override per {@link ToolKind} via {@link registerToolPresenter}.
149
+ * category. This is the headless policy behind the thread's "collapse settled
150
+ * shell to a dimmed tail, keep a live preview for MCP/unknown, keep generic
151
+ * tools compact" behaviour; consumers can override per {@link ToolKind} via
152
+ * {@link registerToolPresenter}.
90
153
  */
91
154
  export function defaultDisclosureForCategory(
92
155
  category: ToolCategory,
93
156
  ): ToolDisclosure {
157
+ if (TAIL_CATEGORIES.has(category)) return "tail";
94
158
  return PREVIEW_CATEGORIES.has(category) ? "preview" : "summary";
95
159
  }
96
160
 
@@ -19,10 +19,11 @@ import type { ToolResultView } from "@stigmer/sdk";
19
19
  import {
20
20
  resolveToolCategoryFromCall,
21
21
  extractPrimaryArg,
22
+ defaultChromeForCategory,
22
23
  defaultDisclosureForCategory,
23
24
  isRunGroupableCategory,
24
25
  } from "./tool-categories.js";
25
- import type { ToolCategory, ToolDisclosure } from "./tool-categories.js";
26
+ import type { ToolCategory, ToolChrome, ToolDisclosure } from "./tool-categories.js";
26
27
  import { summarizeResultView } from "./ResultView.js";
27
28
 
28
29
  /** Optional per-kind overrides for label, summary, disclosure, and run-grouping. */
@@ -37,6 +38,15 @@ export interface ToolPresenter {
37
38
  * (`() => "preview"`) without forking the components.
38
39
  */
39
40
  readonly disclosure?: (toolCall: ToolCall, result: ToolResultView) => ToolDisclosure;
41
+ /**
42
+ * Overrides the default chrome tier — quiet unboxed line vs bordered card
43
+ * (see {@link ToolChrome}). Use to restore the boxed look for a kind
44
+ * (`() => "card"`) or to quiet a chatty custom tool (`() => "quiet"`).
45
+ * A pending approval gate or a failure always escalates the row to a card
46
+ * regardless of this override — a decision surface and error output must
47
+ * never render frameless.
48
+ */
49
+ readonly chrome?: (toolCall: ToolCall, result: ToolResultView) => ToolChrome;
40
50
  /**
41
51
  * Overrides whether consecutive same-kind calls fold into one collapsible
42
52
  * "Read 5 files" chip. Use to fold a chatty custom tool (`() => true`) or to
@@ -127,6 +137,13 @@ export interface ToolPresentation {
127
137
  * default.
128
138
  */
129
139
  readonly disclosure: ToolDisclosure;
140
+ /**
141
+ * Default chrome tier for this tool — `"quiet"` renders an unboxed line,
142
+ * `"card"` a bordered card (see {@link ToolChrome}). A pending gate or a
143
+ * failure escalates to `"card"` in the component layer; this is the
144
+ * *settled* default.
145
+ */
146
+ readonly chrome: ToolChrome;
130
147
  /**
131
148
  * Whether consecutive same-kind calls fold into one collapsible chip — the
132
149
  * run-grouping axis, orthogonal to {@link disclosure}. See
@@ -155,6 +172,9 @@ export function useToolPresentation(toolCall: ToolCall): ToolPresentation {
155
172
  const disclosure =
156
173
  override?.disclosure?.(toolCall, result) ??
157
174
  defaultDisclosureForCategory(categoryInfo.category);
175
+ const chrome =
176
+ override?.chrome?.(toolCall, result) ??
177
+ defaultChromeForCategory(categoryInfo.category);
158
178
  const runGroupable =
159
179
  override?.runGroupable?.(toolCall) ??
160
180
  isRunGroupableCategory(categoryInfo.category);
@@ -167,6 +187,7 @@ export function useToolPresentation(toolCall: ToolCall): ToolPresentation {
167
187
  result,
168
188
  resultSummary,
169
189
  disclosure,
190
+ chrome,
170
191
  runGroupable,
171
192
  };
172
193
  }, [toolCall]);
@@ -12,8 +12,7 @@ import {
12
12
  useApplyResource,
13
13
  type ApplyResourceResult,
14
14
  } from "../library/useApplyResource.js";
15
-
16
- const COPIED_FEEDBACK_MS = 2000;
15
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
17
16
 
18
17
  /** Options for {@link useArtifactInspection}. */
19
18
  export interface UseArtifactInspectionOptions {
@@ -198,14 +197,11 @@ export function useArtifactInspection(
198
197
 
199
198
  // --- Copy -----------------------------------------------------------------
200
199
 
201
- const [copied, setCopied] = useState(false);
200
+ const { copy: copyToClipboard, copied } = useCopyFeedback();
202
201
  const copy = useCallback(() => {
203
202
  if (!content) return;
204
- void navigator.clipboard.writeText(content).then(() => {
205
- setCopied(true);
206
- setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
207
- });
208
- }, [content]);
203
+ void copyToClipboard(content);
204
+ }, [content, copyToClipboard]);
209
205
 
210
206
  return useMemo(
211
207
  () => ({
@@ -94,8 +94,9 @@ export interface SharedAgentExecutionFields {
94
94
  *
95
95
  * Values are injected into the agent sandbox for this execution only
96
96
  * and deleted when the execution completes. They take the highest
97
- * merge priority, overriding both Environment values and agent
98
- * defaults.
97
+ * merge priority, overriding Environment values bound via the
98
+ * instance. Keys must be declared in the agent's env declarations
99
+ * (a whitelist, not a value source) or they are dropped.
99
100
  *
100
101
  * Use this for B2B integrations where per-call credentials are
101
102
  * injected at runtime, or for one-off secrets that should not persist.
@@ -12,6 +12,7 @@ import { getUserMessage, iamRoleToString } from "@stigmer/sdk";
12
12
  import { useCreateIamPolicy } from "./useCreateIamPolicy.js";
13
13
  import { RoleSelector } from "./RoleSelector.js";
14
14
  import { PrincipalPicker, type SelectedPrincipal } from "./PrincipalPicker.js";
15
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
15
16
 
16
17
  /** Props for {@link GrantAccessForm}. */
17
18
  export interface GrantAccessFormProps {
@@ -151,7 +152,7 @@ export function GrantAccessForm({
151
152
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
152
153
  )}
153
154
  >
154
- {isCreating && <SpinnerIcon />}
155
+ {isCreating && <SpinnerIcon size={12} />}
155
156
  Grant access
156
157
  </button>
157
158
 
@@ -174,20 +175,3 @@ export function GrantAccessForm({
174
175
  );
175
176
  }
176
177
 
177
- function SpinnerIcon() {
178
- return (
179
- <svg
180
- width="12"
181
- height="12"
182
- viewBox="0 0 16 16"
183
- fill="none"
184
- stroke="currentColor"
185
- strokeWidth="2"
186
- strokeLinecap="round"
187
- className="stg:animate-spin"
188
- aria-hidden="true"
189
- >
190
- <path d="M8 2a6 6 0 1 0 6 6" />
191
- </svg>
192
- );
193
- }
@@ -24,6 +24,7 @@ import { useCreateIamPolicy } from "./useCreateIamPolicy.js";
24
24
  import { useDeleteIamPolicy } from "./useDeleteIamPolicy.js";
25
25
  import { RoleSelector } from "./RoleSelector.js";
26
26
  import { ProviderBadge } from "./ProviderBadge.js";
27
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
27
28
 
28
29
  // ---------------------------------------------------------------------------
29
30
  // Public API
@@ -368,7 +369,7 @@ function RemoveConfirmation({
368
369
  "stg:disabled:pointer-events-none stg:disabled:opacity-50",
369
370
  )}
370
371
  >
371
- {isRevoking && <SpinnerIcon />}
372
+ {isRevoking && <SpinnerIcon size={12} />}
372
373
  Remove
373
374
  </button>
374
375
  <button
@@ -499,7 +500,7 @@ function ChangeRoleRow({
499
500
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
500
501
  )}
501
502
  >
502
- {isWorking && <SpinnerIcon />}
503
+ {isWorking && <SpinnerIcon size={12} />}
503
504
  {isWorking ? "Changing role…" : "Confirm"}
504
505
  </button>
505
506
  <button
@@ -562,20 +563,3 @@ function TrashIcon() {
562
563
  );
563
564
  }
564
565
 
565
- function SpinnerIcon() {
566
- return (
567
- <svg
568
- width="12"
569
- height="12"
570
- viewBox="0 0 16 16"
571
- fill="none"
572
- stroke="currentColor"
573
- strokeWidth="2"
574
- strokeLinecap="round"
575
- className="stg:animate-spin"
576
- aria-hidden="true"
577
- >
578
- <path d="M8 2a6 6 0 1 0 6 6" />
579
- </svg>
580
- );
581
- }
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
 
3
+ import { useId } from "react";
3
4
  import type { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
4
5
  import type { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
5
6
  import { cn } from "@stigmer/theme";
@@ -47,6 +48,12 @@ export function RoleSelector({
47
48
  disabled = false,
48
49
  className,
49
50
  }: RoleSelectorProps) {
51
+ // Instance-scoped radio-group name (oss#593): a hardcoded name would make
52
+ // every mounted RoleSelector share ONE radio group — with two copies on a
53
+ // page (e.g. zone-cached detail pages), keyboard selection escapes into
54
+ // the other, possibly aria-hidden, copy.
55
+ const groupName = useId();
56
+
50
57
  const { options, selected: internalSelected, select } = useRoleSelector(
51
58
  kind,
52
59
  defaultRole,
@@ -84,7 +91,7 @@ export function RoleSelector({
84
91
  >
85
92
  <input
86
93
  type="radio"
87
- name="stgm-role-selector"
94
+ name={groupName}
88
95
  value={opt.value}
89
96
  checked={isChecked}
90
97
  disabled={disabled}