@stigmer/react 3.12.1 → 3.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (708) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +8 -19
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/activity/format-relative-time.d.ts +11 -9
  5. package/activity/format-relative-time.d.ts.map +1 -1
  6. package/activity/format-relative-time.js +11 -9
  7. package/activity/format-relative-time.js.map +1 -1
  8. package/agent/steps/CapabilitiesStep.js +5 -2
  9. package/agent/steps/CapabilitiesStep.js.map +1 -1
  10. package/agent/steps/IdentityStep.d.ts.map +1 -1
  11. package/agent/steps/IdentityStep.js +6 -5
  12. package/agent/steps/IdentityStep.js.map +1 -1
  13. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  14. package/agent-instance/CreateAgentInstanceDialog.js +15 -20
  15. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  16. package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
  17. package/api-key/ApiKeyCreatedAlert.js +12 -20
  18. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  19. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  20. package/api-key/ApiKeyListPanel.js +3 -23
  21. package/api-key/ApiKeyListPanel.js.map +1 -1
  22. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  23. package/api-key/CreateApiKeyForm.js +6 -10
  24. package/api-key/CreateApiKeyForm.js.map +1 -1
  25. package/approval-defaults-context.d.ts +47 -0
  26. package/approval-defaults-context.d.ts.map +1 -0
  27. package/approval-defaults-context.js +27 -0
  28. package/approval-defaults-context.js.map +1 -0
  29. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  30. package/attachment/AttachmentImageLightbox.js +8 -23
  31. package/attachment/AttachmentImageLightbox.js.map +1 -1
  32. package/attachment/index.d.ts +2 -0
  33. package/attachment/index.d.ts.map +1 -1
  34. package/attachment/index.js +1 -0
  35. package/attachment/index.js.map +1 -1
  36. package/attachment/vision-preflight.d.ts +113 -0
  37. package/attachment/vision-preflight.d.ts.map +1 -0
  38. package/attachment/vision-preflight.js +143 -0
  39. package/attachment/vision-preflight.js.map +1 -0
  40. package/billing/AutoRechargeCard.d.ts.map +1 -1
  41. package/billing/AutoRechargeCard.js +3 -2
  42. package/billing/AutoRechargeCard.js.map +1 -1
  43. package/billing/BillingSection.d.ts.map +1 -1
  44. package/billing/BillingSection.js +3 -2
  45. package/billing/BillingSection.js.map +1 -1
  46. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  47. package/channel/ChannelConversationsDialog.js +6 -21
  48. package/channel/ChannelConversationsDialog.js.map +1 -1
  49. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  50. package/channel/ChannelCredentialsDialog.js +10 -21
  51. package/channel/ChannelCredentialsDialog.js.map +1 -1
  52. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  53. package/channel/ChannelTemplatesDialog.js +7 -22
  54. package/channel/ChannelTemplatesDialog.js.map +1 -1
  55. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  56. package/channel/ConnectSlackDialog.js +10 -23
  57. package/channel/ConnectSlackDialog.js.map +1 -1
  58. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  59. package/channel/ConnectWhatsAppDialog.js +10 -23
  60. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  61. package/channel/useChannelSessions.d.ts.map +1 -1
  62. package/channel/useChannelSessions.js.map +1 -1
  63. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  64. package/channel-app/ChannelAppDetailPanel.js +8 -5
  65. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  66. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  67. package/channel-app/CreateChannelAppForm.js +12 -7
  68. package/channel-app/CreateChannelAppForm.js.map +1 -1
  69. package/channel-app/internal.d.ts +0 -1
  70. package/channel-app/internal.d.ts.map +1 -1
  71. package/channel-app/internal.js +5 -10
  72. package/channel-app/internal.js.map +1 -1
  73. package/composer/ComposerToolbar.js +2 -1
  74. package/composer/ComposerToolbar.js.map +1 -1
  75. package/composer/SessionComposer.d.ts +1 -1
  76. package/composer/SessionComposer.d.ts.map +1 -1
  77. package/composer/SessionComposer.js +120 -13
  78. package/composer/SessionComposer.js.map +1 -1
  79. package/composer/icons.d.ts +0 -1
  80. package/composer/icons.d.ts.map +1 -1
  81. package/composer/icons.js +0 -3
  82. package/composer/icons.js.map +1 -1
  83. package/conversation/ConversationAttentionBanner.d.ts +23 -6
  84. package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
  85. package/conversation/ConversationAttentionBanner.js +25 -10
  86. package/conversation/ConversationAttentionBanner.js.map +1 -1
  87. package/conversation/ConversationComposer.js +1 -1
  88. package/conversation/ConversationComposer.js.map +1 -1
  89. package/conversation/ConversationListPane.d.ts.map +1 -1
  90. package/conversation/ConversationListPane.js +28 -8
  91. package/conversation/ConversationListPane.js.map +1 -1
  92. package/conversation/ConversationsWorkbench.d.ts.map +1 -1
  93. package/conversation/ConversationsWorkbench.js +1 -1
  94. package/conversation/ConversationsWorkbench.js.map +1 -1
  95. package/cursor-accounts/MemberCoverageTable.js +3 -14
  96. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  97. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  98. package/dashboard/DashboardFailedRuns.js +2 -14
  99. package/dashboard/DashboardFailedRuns.js.map +1 -1
  100. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  101. package/environment/CreateEnvironmentForm.js +4 -8
  102. package/environment/CreateEnvironmentForm.js.map +1 -1
  103. package/environment/EnvVarForm.d.ts.map +1 -1
  104. package/environment/EnvVarForm.js +2 -4
  105. package/environment/EnvVarForm.js.map +1 -1
  106. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  107. package/environment/EnvironmentVariableEditor.js +5 -7
  108. package/environment/EnvironmentVariableEditor.js.map +1 -1
  109. package/execution/ApprovalCard.d.ts.map +1 -1
  110. package/execution/ApprovalCard.js +13 -3
  111. package/execution/ApprovalCard.js.map +1 -1
  112. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  113. package/execution/ArtifactApplyButton.js +2 -4
  114. package/execution/ArtifactApplyButton.js.map +1 -1
  115. package/execution/ArtifactPreviewModal.d.ts.map +1 -1
  116. package/execution/ArtifactPreviewModal.js +11 -17
  117. package/execution/ArtifactPreviewModal.js.map +1 -1
  118. package/execution/ExecutionErrorNotice.d.ts +36 -0
  119. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  120. package/execution/ExecutionErrorNotice.js +39 -0
  121. package/execution/ExecutionErrorNotice.js.map +1 -0
  122. package/execution/FilePathLink.d.ts.map +1 -1
  123. package/execution/FilePathLink.js +5 -8
  124. package/execution/FilePathLink.js.map +1 -1
  125. package/execution/FileReviewCard.d.ts.map +1 -1
  126. package/execution/FileReviewCard.js +1 -6
  127. package/execution/FileReviewCard.js.map +1 -1
  128. package/execution/FollowUpInput.d.ts.map +1 -1
  129. package/execution/FollowUpInput.js +1 -3
  130. package/execution/FollowUpInput.js.map +1 -1
  131. package/execution/LivenessStatusLine.d.ts +40 -0
  132. package/execution/LivenessStatusLine.d.ts.map +1 -0
  133. package/execution/LivenessStatusLine.js +34 -0
  134. package/execution/LivenessStatusLine.js.map +1 -0
  135. package/execution/MessageEntry.d.ts.map +1 -1
  136. package/execution/MessageEntry.js +31 -3
  137. package/execution/MessageEntry.js.map +1 -1
  138. package/execution/MessageThread.d.ts +25 -0
  139. package/execution/MessageThread.d.ts.map +1 -1
  140. package/execution/MessageThread.js +51 -36
  141. package/execution/MessageThread.js.map +1 -1
  142. package/execution/SetupProgress.d.ts.map +1 -1
  143. package/execution/SetupProgress.js +1 -1
  144. package/execution/SetupProgress.js.map +1 -1
  145. package/execution/SubAgentSection.d.ts.map +1 -1
  146. package/execution/SubAgentSection.js +9 -7
  147. package/execution/SubAgentSection.js.map +1 -1
  148. package/execution/TerminalSession.d.ts +30 -0
  149. package/execution/TerminalSession.d.ts.map +1 -1
  150. package/execution/TerminalSession.js +37 -1
  151. package/execution/TerminalSession.js.map +1 -1
  152. package/execution/ToolCallDetail.d.ts +9 -0
  153. package/execution/ToolCallDetail.d.ts.map +1 -1
  154. package/execution/ToolCallDetail.js +16 -0
  155. package/execution/ToolCallDetail.js.map +1 -1
  156. package/execution/ToolCallItem.d.ts +23 -7
  157. package/execution/ToolCallItem.d.ts.map +1 -1
  158. package/execution/ToolCallItem.js +120 -35
  159. package/execution/ToolCallItem.js.map +1 -1
  160. package/execution/ToolRunGroup.d.ts.map +1 -1
  161. package/execution/ToolRunGroup.js +11 -11
  162. package/execution/ToolRunGroup.js.map +1 -1
  163. package/execution/WriteBackCard.d.ts.map +1 -1
  164. package/execution/WriteBackCard.js +5 -20
  165. package/execution/WriteBackCard.js.map +1 -1
  166. package/execution/index.d.ts +7 -3
  167. package/execution/index.d.ts.map +1 -1
  168. package/execution/index.js +4 -2
  169. package/execution/index.js.map +1 -1
  170. package/execution/tool-categories.d.ts +93 -7
  171. package/execution/tool-categories.d.ts.map +1 -1
  172. package/execution/tool-categories.js +141 -5
  173. package/execution/tool-categories.js.map +1 -1
  174. package/execution/tool-presenter.d.ts +32 -1
  175. package/execution/tool-presenter.d.ts.map +1 -1
  176. package/execution/tool-presenter.js +10 -2
  177. package/execution/tool-presenter.js.map +1 -1
  178. package/execution/useArtifactInspection.d.ts.map +1 -1
  179. package/execution/useArtifactInspection.js +4 -7
  180. package/execution/useArtifactInspection.js.map +1 -1
  181. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  182. package/iam-policy/GrantAccessForm.js +2 -4
  183. package/iam-policy/GrantAccessForm.js.map +1 -1
  184. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  185. package/iam-policy/OrgMembersPanel.js +3 -5
  186. package/iam-policy/OrgMembersPanel.js.map +1 -1
  187. package/iam-policy/RoleSelector.d.ts.map +1 -1
  188. package/iam-policy/RoleSelector.js +7 -1
  189. package/iam-policy/RoleSelector.js.map +1 -1
  190. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  191. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  192. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  193. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  194. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  195. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  196. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  197. package/identity-provider/IdentityProviderListPanel.js +2 -4
  198. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  199. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  200. package/identity-provider/IdentityProviderWizard.js +8 -7
  201. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  202. package/identity-provider/SsoLoginPrompt.js +5 -6
  203. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  204. package/index.d.ts +9 -8
  205. package/index.d.ts.map +1 -1
  206. package/index.js +4 -4
  207. package/index.js.map +1 -1
  208. package/internal/DecisionButton.d.ts.map +1 -1
  209. package/internal/DecisionButton.js +1 -6
  210. package/internal/DecisionButton.js.map +1 -1
  211. package/internal/DialogShell.d.ts +77 -0
  212. package/internal/DialogShell.d.ts.map +1 -0
  213. package/internal/DialogShell.js +77 -0
  214. package/internal/DialogShell.js.map +1 -0
  215. package/internal/SpinnerIcon.d.ts +22 -0
  216. package/internal/SpinnerIcon.d.ts.map +1 -0
  217. package/internal/SpinnerIcon.js +23 -0
  218. package/internal/SpinnerIcon.js.map +1 -0
  219. package/internal/select-element-text.d.ts +11 -0
  220. package/internal/select-element-text.d.ts.map +1 -0
  221. package/internal/select-element-text.js +19 -0
  222. package/internal/select-element-text.js.map +1 -0
  223. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  224. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  225. package/internal/thread-card/ThreadCardShell.js +11 -5
  226. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  227. package/internal/thread-card/glyphs.d.ts +11 -2
  228. package/internal/thread-card/glyphs.d.ts.map +1 -1
  229. package/internal/thread-card/glyphs.js +9 -3
  230. package/internal/thread-card/glyphs.js.map +1 -1
  231. package/internal/thread-card/index.d.ts +1 -1
  232. package/internal/thread-card/index.d.ts.map +1 -1
  233. package/internal/thread-card/index.js.map +1 -1
  234. package/internal/useCopyFeedback.d.ts +28 -0
  235. package/internal/useCopyFeedback.d.ts.map +1 -0
  236. package/internal/useCopyFeedback.js +40 -0
  237. package/internal/useCopyFeedback.js.map +1 -0
  238. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  239. package/invitation/InvitationCreatedAlert.js +12 -19
  240. package/invitation/InvitationCreatedAlert.js.map +1 -1
  241. package/invitation/InvitationManager.d.ts.map +1 -1
  242. package/invitation/InvitationManager.js +14 -21
  243. package/invitation/InvitationManager.js.map +1 -1
  244. package/invitation/InvitationRedemption.d.ts.map +1 -1
  245. package/invitation/InvitationRedemption.js +2 -4
  246. package/invitation/InvitationRedemption.js.map +1 -1
  247. package/library/useExportResource.d.ts.map +1 -1
  248. package/library/useExportResource.js +16 -27
  249. package/library/useExportResource.js.map +1 -1
  250. package/manifest/ApplyManifestDialog.d.ts.map +1 -1
  251. package/manifest/ApplyManifestDialog.js +7 -17
  252. package/manifest/ApplyManifestDialog.js.map +1 -1
  253. package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
  254. package/manifest/EditResourceYamlDialog.js +3 -19
  255. package/manifest/EditResourceYamlDialog.js.map +1 -1
  256. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  257. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  258. package/mcp-server/DefinitionDriftNotice.js +52 -0
  259. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  260. package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
  261. package/mcp-server/McpServerConnectDialog.js +8 -20
  262. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  263. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  264. package/mcp-server/McpServerDetailView.js +50 -28
  265. package/mcp-server/McpServerDetailView.js.map +1 -1
  266. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  267. package/mcp-server/OAuthAppForm.js +2 -4
  268. package/mcp-server/OAuthAppForm.js.map +1 -1
  269. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  270. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  271. package/mcp-server/internal/definitionDrift.js +122 -0
  272. package/mcp-server/internal/definitionDrift.js.map +1 -0
  273. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  274. package/mcp-server/internal/mcpServerToInput.js +3 -0
  275. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  276. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  277. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  278. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  279. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  280. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  281. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  282. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  283. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  284. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  285. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  286. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  287. package/models/ModelRegistryContext.d.ts +7 -1
  288. package/models/ModelRegistryContext.d.ts.map +1 -1
  289. package/models/ModelRegistryContext.js.map +1 -1
  290. package/models/ModelSelector.js +9 -1
  291. package/models/ModelSelector.js.map +1 -1
  292. package/models/index.d.ts +2 -2
  293. package/models/index.d.ts.map +1 -1
  294. package/models/index.js +1 -1
  295. package/models/index.js.map +1 -1
  296. package/models/registry.d.ts +88 -6
  297. package/models/registry.d.ts.map +1 -1
  298. package/models/registry.js +133 -27
  299. package/models/registry.js.map +1 -1
  300. package/models/useModelRegistry.d.ts +7 -1
  301. package/models/useModelRegistry.d.ts.map +1 -1
  302. package/models/useModelRegistry.js +3 -2
  303. package/models/useModelRegistry.js.map +1 -1
  304. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  305. package/oauth-app/CreateOAuthAppForm.js +4 -5
  306. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  307. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  308. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  309. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  310. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  311. package/organization/CreateOrganizationForm.js +5 -9
  312. package/organization/CreateOrganizationForm.js.map +1 -1
  313. package/organization/OrgProfilePanel.d.ts.map +1 -1
  314. package/organization/OrgProfilePanel.js +7 -16
  315. package/organization/OrgProfilePanel.js.map +1 -1
  316. package/package.json +4 -4
  317. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  318. package/platform-client/CreatePlatformClientForm.js +5 -6
  319. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  320. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  321. package/platform-client/PlatformClientDetailPanel.js +6 -7
  322. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  323. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  324. package/platform-client/PlatformClientListPanel.js +2 -4
  325. package/platform-client/PlatformClientListPanel.js.map +1 -1
  326. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  327. package/platform-client/PlatformClientSecretAlert.js +18 -25
  328. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  329. package/provider.d.ts +34 -1
  330. package/provider.d.ts.map +1 -1
  331. package/provider.js +14 -7
  332. package/provider.js.map +1 -1
  333. package/resource-creation/WizardNav.d.ts.map +1 -1
  334. package/resource-creation/WizardNav.js +2 -4
  335. package/resource-creation/WizardNav.js.map +1 -1
  336. package/resource-detail/ConfirmDialog.d.ts +2 -3
  337. package/resource-detail/ConfirmDialog.d.ts.map +1 -1
  338. package/resource-detail/ConfirmDialog.js +8 -20
  339. package/resource-detail/ConfirmDialog.js.map +1 -1
  340. package/resource-detail/useCopyResource.d.ts +4 -3
  341. package/resource-detail/useCopyResource.d.ts.map +1 -1
  342. package/resource-detail/useCopyResource.js +10 -19
  343. package/resource-detail/useCopyResource.js.map +1 -1
  344. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  345. package/schedule/ScheduleDetailView.js +2 -4
  346. package/schedule/ScheduleDetailView.js.map +1 -1
  347. package/schedule/ScheduleForm.d.ts.map +1 -1
  348. package/schedule/ScheduleForm.js +6 -7
  349. package/schedule/ScheduleForm.js.map +1 -1
  350. package/session/NewSessionViewer.d.ts +52 -2
  351. package/session/NewSessionViewer.d.ts.map +1 -1
  352. package/session/NewSessionViewer.js +21 -6
  353. package/session/NewSessionViewer.js.map +1 -1
  354. package/session/SessionViewer.d.ts +63 -2
  355. package/session/SessionViewer.d.ts.map +1 -1
  356. package/session/SessionViewer.js +43 -17
  357. package/session/SessionViewer.js.map +1 -1
  358. package/session/audience.d.ts +17 -0
  359. package/session/audience.d.ts.map +1 -1
  360. package/session/index.d.ts +2 -1
  361. package/session/index.d.ts.map +1 -1
  362. package/session/index.js.map +1 -1
  363. package/session/run-config.d.ts +50 -0
  364. package/session/run-config.d.ts.map +1 -0
  365. package/session/run-config.js +15 -0
  366. package/session/run-config.js.map +1 -0
  367. package/session/useNewSessionFlow.d.ts +11 -0
  368. package/session/useNewSessionFlow.d.ts.map +1 -1
  369. package/session/useNewSessionFlow.js +29 -2
  370. package/session/useNewSessionFlow.js.map +1 -1
  371. package/session/useSessionConversation.d.ts +7 -7
  372. package/session/useSessionConversation.d.ts.map +1 -1
  373. package/session/useSessionConversation.js +2 -0
  374. package/session/useSessionConversation.js.map +1 -1
  375. package/session/useSessionPageFlow.d.ts +18 -4
  376. package/session/useSessionPageFlow.d.ts.map +1 -1
  377. package/session/useSessionPageFlow.js +33 -6
  378. package/session/useSessionPageFlow.js.map +1 -1
  379. package/session/useSessionPanel.d.ts +37 -2
  380. package/session/useSessionPanel.d.ts.map +1 -1
  381. package/session/useSessionPanel.js +44 -10
  382. package/session/useSessionPanel.js.map +1 -1
  383. package/settings/ApiKeysSection.d.ts.map +1 -1
  384. package/settings/ApiKeysSection.js +3 -2
  385. package/settings/ApiKeysSection.js.map +1 -1
  386. package/settings/ChannelAppsSection.d.ts.map +1 -1
  387. package/settings/ChannelAppsSection.js +3 -2
  388. package/settings/ChannelAppsSection.js.map +1 -1
  389. package/settings/EnvironmentsSection.js +5 -3
  390. package/settings/EnvironmentsSection.js.map +1 -1
  391. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  392. package/settings/IdentityProvidersSection.js +3 -2
  393. package/settings/IdentityProvidersSection.js.map +1 -1
  394. package/settings/InvitationsSection.d.ts.map +1 -1
  395. package/settings/InvitationsSection.js +3 -1
  396. package/settings/InvitationsSection.js.map +1 -1
  397. package/settings/MembersSection.d.ts.map +1 -1
  398. package/settings/MembersSection.js +3 -1
  399. package/settings/MembersSection.js.map +1 -1
  400. package/settings/OAuthAppsSection.d.ts.map +1 -1
  401. package/settings/OAuthAppsSection.js +3 -2
  402. package/settings/OAuthAppsSection.js.map +1 -1
  403. package/settings/OrgProfileSection.d.ts.map +1 -1
  404. package/settings/OrgProfileSection.js +3 -2
  405. package/settings/OrgProfileSection.js.map +1 -1
  406. package/settings/PlatformClientsSection.d.ts.map +1 -1
  407. package/settings/PlatformClientsSection.js +3 -2
  408. package/settings/PlatformClientsSection.js.map +1 -1
  409. package/settings/UsageSection.d.ts.map +1 -1
  410. package/settings/UsageSection.js +3 -1
  411. package/settings/UsageSection.js.map +1 -1
  412. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  413. package/sharing/ShareAgentDialog.js +19 -26
  414. package/sharing/ShareAgentDialog.js.map +1 -1
  415. package/sidebar/chrome.d.ts +3 -4
  416. package/sidebar/chrome.d.ts.map +1 -1
  417. package/sidebar/chrome.js +5 -4
  418. package/sidebar/chrome.js.map +1 -1
  419. package/skill/SkillDiffDialog.d.ts.map +1 -1
  420. package/skill/SkillDiffDialog.js +5 -21
  421. package/skill/SkillDiffDialog.js.map +1 -1
  422. package/src/access/ManageAccessDialog.tsx +14 -28
  423. package/src/activity/format-relative-time.ts +11 -9
  424. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  425. package/src/agent/steps/IdentityStep.tsx +19 -12
  426. package/src/agent-instance/CreateAgentInstanceDialog.tsx +29 -33
  427. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  428. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  429. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  430. package/src/approval-defaults-context.ts +56 -0
  431. package/src/attachment/AttachmentImageLightbox.tsx +13 -36
  432. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  433. package/src/attachment/index.ts +12 -0
  434. package/src/attachment/vision-preflight.ts +236 -0
  435. package/src/billing/AutoRechargeCard.tsx +5 -4
  436. package/src/billing/BillingSection.tsx +4 -3
  437. package/src/channel/ChannelConversationsDialog.tsx +14 -29
  438. package/src/channel/ChannelCredentialsDialog.tsx +19 -29
  439. package/src/channel/ChannelTemplatesDialog.tsx +16 -31
  440. package/src/channel/ConnectSlackDialog.tsx +19 -31
  441. package/src/channel/ConnectWhatsAppDialog.tsx +19 -31
  442. package/src/channel/useChannelSessions.ts +3 -0
  443. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  444. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  445. package/src/channel-app/internal.tsx +5 -25
  446. package/src/composer/ComposerToolbar.tsx +1 -1
  447. package/src/composer/SessionComposer.tsx +160 -13
  448. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  449. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  450. package/src/composer/icons.tsx +0 -18
  451. package/src/conversation/ConversationAttentionBanner.tsx +64 -19
  452. package/src/conversation/ConversationComposer.tsx +1 -1
  453. package/src/conversation/ConversationListPane.tsx +46 -20
  454. package/src/conversation/ConversationsWorkbench.tsx +1 -0
  455. package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
  456. package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
  457. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  458. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  459. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  460. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  461. package/src/environment/EnvVarForm.tsx +2 -18
  462. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  463. package/src/execution/ApprovalCard.tsx +23 -2
  464. package/src/execution/ArtifactApplyButton.tsx +2 -17
  465. package/src/execution/ArtifactPreviewModal.tsx +15 -27
  466. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  467. package/src/execution/FilePathLink.tsx +5 -9
  468. package/src/execution/FileReviewCard.tsx +1 -20
  469. package/src/execution/FollowUpInput.tsx +1 -16
  470. package/src/execution/LivenessStatusLine.tsx +59 -0
  471. package/src/execution/MessageEntry.tsx +136 -25
  472. package/src/execution/MessageThread.tsx +84 -83
  473. package/src/execution/SetupProgress.tsx +5 -1
  474. package/src/execution/SubAgentSection.tsx +9 -20
  475. package/src/execution/TerminalSession.tsx +97 -10
  476. package/src/execution/ToolCallDetail.tsx +19 -0
  477. package/src/execution/ToolCallItem.tsx +175 -44
  478. package/src/execution/ToolRunGroup.tsx +30 -32
  479. package/src/execution/WriteBackCard.tsx +5 -24
  480. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  481. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  482. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  483. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  484. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  485. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  486. package/src/execution/__tests__/intent-title.test.tsx +221 -0
  487. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  488. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  489. package/src/execution/index.ts +11 -2
  490. package/src/execution/tool-categories.ts +195 -9
  491. package/src/execution/tool-presenter.ts +44 -2
  492. package/src/execution/useArtifactInspection.ts +4 -8
  493. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  494. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  495. package/src/iam-policy/RoleSelector.tsx +8 -1
  496. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  497. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  498. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  499. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  500. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  501. package/src/index.ts +26 -1
  502. package/src/internal/DecisionButton.tsx +1 -20
  503. package/src/internal/DialogShell.tsx +169 -0
  504. package/src/internal/SpinnerIcon.tsx +42 -0
  505. package/src/internal/__tests__/DialogShell.test.tsx +223 -0
  506. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  507. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  508. package/src/internal/select-element-text.ts +17 -0
  509. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  510. package/src/internal/thread-card/glyphs.tsx +24 -3
  511. package/src/internal/thread-card/index.ts +1 -0
  512. package/src/internal/useCopyFeedback.ts +61 -0
  513. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  514. package/src/invitation/InvitationManager.tsx +23 -34
  515. package/src/invitation/InvitationRedemption.tsx +2 -18
  516. package/src/library/useExportResource.ts +15 -29
  517. package/src/manifest/ApplyManifestDialog.tsx +8 -26
  518. package/src/manifest/EditResourceYamlDialog.tsx +4 -31
  519. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  520. package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
  521. package/src/mcp-server/McpServerDetailView.tsx +69 -49
  522. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  523. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  524. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  525. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  526. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  527. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  528. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  529. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  530. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  531. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  532. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  533. package/src/models/ModelRegistryContext.ts +7 -1
  534. package/src/models/ModelSelector.tsx +37 -0
  535. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  536. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  537. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  538. package/src/models/index.ts +2 -2
  539. package/src/models/registry.ts +196 -29
  540. package/src/models/useModelRegistry.ts +10 -2
  541. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  542. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  543. package/src/organization/CreateOrganizationForm.tsx +10 -29
  544. package/src/organization/OrgProfilePanel.tsx +13 -44
  545. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  546. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  547. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  548. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  549. package/src/provider.tsx +76 -33
  550. package/src/resource-creation/WizardNav.tsx +2 -18
  551. package/src/resource-detail/ConfirmDialog.tsx +9 -30
  552. package/src/resource-detail/useCopyResource.ts +17 -23
  553. package/src/schedule/ScheduleDetailView.tsx +2 -18
  554. package/src/schedule/ScheduleForm.tsx +19 -34
  555. package/src/session/NewSessionViewer.tsx +85 -7
  556. package/src/session/SessionViewer.tsx +120 -17
  557. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  558. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  559. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  560. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  561. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  562. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  563. package/src/session/audience.ts +18 -0
  564. package/src/session/index.ts +2 -1
  565. package/src/session/run-config.ts +59 -0
  566. package/src/session/useNewSessionFlow.ts +39 -2
  567. package/src/session/useSessionConversation.ts +10 -8
  568. package/src/session/useSessionPageFlow.ts +51 -10
  569. package/src/session/useSessionPanel.ts +91 -10
  570. package/src/settings/ApiKeysSection.tsx +4 -3
  571. package/src/settings/ChannelAppsSection.tsx +4 -3
  572. package/src/settings/EnvironmentsSection.tsx +8 -5
  573. package/src/settings/IdentityProvidersSection.tsx +4 -3
  574. package/src/settings/InvitationsSection.tsx +4 -2
  575. package/src/settings/MembersSection.tsx +4 -2
  576. package/src/settings/OAuthAppsSection.tsx +4 -3
  577. package/src/settings/OrgProfileSection.tsx +4 -3
  578. package/src/settings/PlatformClientsSection.tsx +4 -3
  579. package/src/settings/UsageSection.tsx +4 -2
  580. package/src/sharing/ShareAgentDialog.tsx +33 -37
  581. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  582. package/src/sidebar/chrome.tsx +6 -6
  583. package/src/skill/SkillDiffDialog.tsx +13 -36
  584. package/src/styles.css +43 -0
  585. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  586. package/src/workflow/FailedRunsWidget.tsx +2 -9
  587. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  588. package/src/workflow/ViewYamlDialog.tsx +21 -55
  589. package/src/workflow/WorkflowArchitectDialog.tsx +17 -68
  590. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  591. package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
  592. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  593. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  594. package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
  595. package/src/workflow/WorkflowExplainDialog.tsx +18 -60
  596. package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
  597. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  598. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  599. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  600. package/src/workflow/WorkflowRunDialog.tsx +23 -70
  601. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  602. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  603. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  604. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  605. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  606. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  607. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  608. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -41
  609. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  610. package/src/workflow/index.ts +1 -0
  611. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
  612. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  613. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  614. package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
  615. package/src/workflow/useApprovalBoundary.ts +1 -1
  616. package/src/workflow/useWorkflowCanvas.ts +114 -11
  617. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  618. package/styles.css +1 -1
  619. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  620. package/version-history/VersionTimelineEntry.js +1 -23
  621. package/version-history/VersionTimelineEntry.js.map +1 -1
  622. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  623. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  624. package/workflow/FailedRunsWidget.js +2 -11
  625. package/workflow/FailedRunsWidget.js.map +1 -1
  626. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  627. package/workflow/PendingApprovalsWidget.js +2 -11
  628. package/workflow/PendingApprovalsWidget.js.map +1 -1
  629. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  630. package/workflow/ViewYamlDialog.js +14 -49
  631. package/workflow/ViewYamlDialog.js.map +1 -1
  632. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  633. package/workflow/WorkflowArchitectDialog.js +10 -33
  634. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  635. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  636. package/workflow/WorkflowArtifactDocument.js +5 -8
  637. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  638. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  639. package/workflow/WorkflowCanvasEditor.js +1 -1
  640. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  641. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  642. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  643. package/workflow/WorkflowCanvasInner.js +7 -3
  644. package/workflow/WorkflowCanvasInner.js.map +1 -1
  645. package/workflow/WorkflowDiffGraph.js +6 -2
  646. package/workflow/WorkflowDiffGraph.js.map +1 -1
  647. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  648. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  649. package/workflow/WorkflowExecutionViewer.js +23 -6
  650. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  651. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  652. package/workflow/WorkflowExplainDialog.js +10 -28
  653. package/workflow/WorkflowExplainDialog.js.map +1 -1
  654. package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
  655. package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
  656. package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
  657. package/workflow/WorkflowOverviewGraph.js +8 -2
  658. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  659. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  660. package/workflow/WorkflowRefinePanel.js +2 -4
  661. package/workflow/WorkflowRefinePanel.js.map +1 -1
  662. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  663. package/workflow/WorkflowRepairCard.js +2 -4
  664. package/workflow/WorkflowRepairCard.js.map +1 -1
  665. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  666. package/workflow/WorkflowRunDialog.js +14 -35
  667. package/workflow/WorkflowRunDialog.js.map +1 -1
  668. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  669. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  670. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  671. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  672. package/workflow/WorkflowVersionBadge.js +4 -13
  673. package/workflow/WorkflowVersionBadge.js.map +1 -1
  674. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  675. package/workflow/WorkflowVersionTimeline.js +1 -26
  676. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  677. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  678. package/workflow/execution-comparison/ExecutionComparisonPicker.js +14 -40
  679. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  680. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  681. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  682. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  683. package/workflow/index.d.ts +1 -1
  684. package/workflow/index.d.ts.map +1 -1
  685. package/workflow/index.js.map +1 -1
  686. package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
  687. package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
  688. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  689. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  690. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  691. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  692. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  693. package/workflow/picker/BranchAddPopover.js +3 -2
  694. package/workflow/picker/BranchAddPopover.js.map +1 -1
  695. package/workflow/templates/WorkflowTemplatePreview.d.ts +1 -1
  696. package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
  697. package/workflow/templates/WorkflowTemplatePreview.js +10 -22
  698. package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
  699. package/workflow/useApprovalBoundary.d.ts +1 -1
  700. package/workflow/useApprovalBoundary.js +1 -1
  701. package/workflow/useWorkflowCanvas.d.ts +5 -1
  702. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  703. package/workflow/useWorkflowCanvas.js +99 -13
  704. package/workflow/useWorkflowCanvas.js.map +1 -1
  705. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  706. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  707. package/workflow/useWorkflowExecutionPanel.js +46 -13
  708. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { lazy, Suspense, useCallback, useEffect, useRef } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
  import { toast } from "../feedback/toast.js";
6
7
  import { RedactedSecretsNotice } from "./RedactedSecretsNotice.js";
7
8
  import {
@@ -71,22 +72,10 @@ export function ApplyManifestDialog({
71
72
  org,
72
73
  onApplied,
73
74
  }: ApplyManifestDialogProps) {
74
- const dialogRef = useRef<HTMLDialogElement>(null);
75
75
  const fileInputRef = useRef<HTMLInputElement>(null);
76
76
  const manifest = useApplyManifest(org);
77
77
  const { reset } = manifest;
78
78
 
79
- // Sync dialog open state with the native <dialog> element.
80
- useEffect(() => {
81
- const dialog = dialogRef.current;
82
- if (!dialog) return;
83
- if (open && !dialog.open) {
84
- dialog.showModal();
85
- } else if (!open && dialog.open) {
86
- dialog.close();
87
- }
88
- }, [open]);
89
-
90
79
  // Start each session clean.
91
80
  useEffect(() => {
92
81
  if (open) {
@@ -109,10 +98,11 @@ export function ApplyManifestDialog({
109
98
  if (applied.length > 0) onApplied?.(applied);
110
99
  }, [onOpenChange, manifest.entries, onApplied]);
111
100
 
112
- const handleCancel = useCallback(
113
- (e: React.SyntheticEvent) => {
114
- e.preventDefault();
115
- closeAndMaybeRefresh();
101
+ // Escape/cancel routes through the same dismiss-after-partial path as the
102
+ // Close button, via the shell's single close-intent callback.
103
+ const handleShellOpenChange = useCallback(
104
+ (nextOpen: boolean) => {
105
+ if (!nextOpen) closeAndMaybeRefresh();
116
106
  },
117
107
  [closeAndMaybeRefresh],
118
108
  );
@@ -151,15 +141,7 @@ export function ApplyManifestDialog({
151
141
  !manifest.isApplying;
152
142
 
153
143
  return (
154
- <dialog
155
- ref={dialogRef}
156
- onCancel={handleCancel}
157
- className={cn(
158
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
159
- "stg:backdrop:bg-black/50",
160
- "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
161
- )}
162
- >
144
+ <DialogShell open={open} onOpenChange={handleShellOpenChange} width="3xl" aria-label="Apply YAML">
163
145
  <div className="stg:flex stg:flex-col stg:gap-4 stg:p-6">
164
146
  {/* Header */}
165
147
  <div className="stg:flex stg:flex-col stg:gap-1">
@@ -252,7 +234,7 @@ export function ApplyManifestDialog({
252
234
  </div>
253
235
  </div>
254
236
  </div>
255
- </dialog>
237
+ </DialogShell>
256
238
  );
257
239
  }
258
240
 
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
 
3
- import { lazy, Suspense, useCallback, useEffect, useRef } from "react";
3
+ import { lazy, Suspense, useCallback, useEffect } from "react";
4
4
  import type { Message } from "@bufbuild/protobuf";
5
5
  import { cn } from "@stigmer/theme";
6
+ import { DialogShell } from "../internal/DialogShell.js";
6
7
  import { getUserMessage, type AppliedManifest } from "@stigmer/sdk";
7
8
  import { toast } from "../feedback/toast.js";
8
9
  import { RedactedSecretsNotice } from "./RedactedSecretsNotice.js";
@@ -67,34 +68,14 @@ export function EditResourceYamlDialog({
67
68
  resource,
68
69
  onApplied,
69
70
  }: EditResourceYamlDialogProps) {
70
- const dialogRef = useRef<HTMLDialogElement>(null);
71
71
  const edit = useEditResourceYaml({ resource });
72
72
  const { reset } = edit;
73
73
 
74
- // Sync dialog open state with the native <dialog> element.
75
- useEffect(() => {
76
- const dialog = dialogRef.current;
77
- if (!dialog) return;
78
- if (open && !dialog.open) {
79
- dialog.showModal();
80
- } else if (!open && dialog.open) {
81
- dialog.close();
82
- }
83
- }, [open]);
84
-
85
74
  // Discard stale edits from a previous session when the dialog opens.
86
75
  useEffect(() => {
87
76
  if (open) reset();
88
77
  }, [open, reset]);
89
78
 
90
- const handleCancel = useCallback(
91
- (e: React.SyntheticEvent) => {
92
- e.preventDefault();
93
- onOpenChange(false);
94
- },
95
- [onOpenChange],
96
- );
97
-
98
79
  const handleApply = useCallback(async () => {
99
80
  try {
100
81
  const result = await edit.apply();
@@ -111,15 +92,7 @@ export function EditResourceYamlDialog({
111
92
  edit.validation.status === "valid" && edit.isDirty && !edit.isApplying;
112
93
 
113
94
  return (
114
- <dialog
115
- ref={dialogRef}
116
- onCancel={handleCancel}
117
- className={cn(
118
- "stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
119
- "stg:backdrop:bg-black/50",
120
- "stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
121
- )}
122
- >
95
+ <DialogShell open={open} onOpenChange={onOpenChange} width="3xl" aria-label="Edit YAML">
123
96
  <div className="stg:flex stg:flex-col stg:gap-4 stg:p-6">
124
97
  {/* Header */}
125
98
  <div className="stg:flex stg:flex-col stg:gap-1">
@@ -233,7 +206,7 @@ export function EditResourceYamlDialog({
233
206
  </div>
234
207
  </div>
235
208
  </div>
236
- </dialog>
209
+ </DialogShell>
237
210
  );
238
211
  }
239
212
 
@@ -0,0 +1,120 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+ import type { McpServerDefinitionDrift } from "./useMcpServerDefinitionDrift.js";
5
+ import type { DriftFieldId } from "./internal/definitionDrift.js";
6
+
7
+ /** Props for {@link DefinitionDriftNotice}. */
8
+ export interface DefinitionDriftNoticeProps {
9
+ /**
10
+ * The detected drift from {@link useMcpServerDefinitionDrift}, or
11
+ * `null`. The notice renders `null` when there is no drift.
12
+ */
13
+ readonly drift: McpServerDefinitionDrift | null;
14
+ /** Applies the marketplace configuration and re-runs discovery. */
15
+ readonly onRefresh: () => void;
16
+ /** `true` while the refresh (update + re-discovery) is in flight. */
17
+ readonly isRefreshing: boolean;
18
+ /** Additional CSS class names for the root container. */
19
+ readonly className?: string;
20
+ }
21
+
22
+ /** Human-readable labels for the drifted field groups. */
23
+ const DRIFT_FIELD_LABELS: Record<DriftFieldId, string> = {
24
+ transport: "connection type",
25
+ endpoint: "endpoint URL",
26
+ headers: "request headers",
27
+ queryParams: "query parameters",
28
+ timeout: "request timeout",
29
+ command: "launch command",
30
+ workingDirectory: "working directory",
31
+ environmentVariables: "environment variables",
32
+ authentication: "authentication",
33
+ };
34
+
35
+ /**
36
+ * Tells the owner of an org-owned MCP server that its connection-defining
37
+ * configuration differs from the current marketplace definition, and
38
+ * offers a one-click refresh (stigmer/stigmer#228).
39
+ *
40
+ * Without this notice, a server copied before a template fix is stranded
41
+ * forever: the user sees only downstream symptoms ("Token expired", 401s)
42
+ * with no indication that the root cause is a stale definition and no
43
+ * recovery path short of hand-editing YAML. This surfaces the actual
44
+ * state and pairs it with the action that fixes it (Nielsen: visibility
45
+ * of system status; error recovery).
46
+ *
47
+ * The copy says the configuration **differs** — never "was updated" —
48
+ * because the marketplace counterpart is matched by slug, and a
49
+ * hand-made server that happens to share a marketplace name must not be
50
+ * told a false history. Naming the differing fields keeps the claim
51
+ * verifiable, and the refresh explicitly promises what it preserves.
52
+ *
53
+ * Self-gating: renders `null` unless drift was detected. Callers render
54
+ * it unconditionally next to the other connection notices, mirroring
55
+ * {@link OAuthRequiredNotice}.
56
+ *
57
+ * All visual properties flow through `--stgm-*` design tokens. No
58
+ * Console-specific dependencies — safe for platform-builder embedding.
59
+ */
60
+ export function DefinitionDriftNotice({
61
+ drift,
62
+ onRefresh,
63
+ isRefreshing,
64
+ className,
65
+ }: DefinitionDriftNoticeProps) {
66
+ if (!drift) return null;
67
+
68
+ const fieldList = drift.changedFields
69
+ .map((id) => DRIFT_FIELD_LABELS[id])
70
+ .join(", ");
71
+
72
+ return (
73
+ <div
74
+ role="status"
75
+ className={cn(
76
+ "stg:bg-muted-subtle stg:text-muted-foreground stg:flex stg:items-start stg:gap-2.5 stg:rounded-lg stg:border stg:border-transparent stg:px-4 stg:py-3",
77
+ className,
78
+ )}
79
+ >
80
+ <RefreshIcon className="stg:mt-0.5 stg:size-4 stg:shrink-0" />
81
+ <div className="stg:flex-1">
82
+ <p className="stg:text-xs stg:leading-relaxed">
83
+ This server&apos;s configuration differs from the current
84
+ marketplace definition ({fieldList}). Refreshing applies the
85
+ marketplace configuration and re-runs discovery — your enabled
86
+ tools and approval pins are kept.
87
+ </p>
88
+ <button
89
+ type="button"
90
+ onClick={onRefresh}
91
+ disabled={isRefreshing}
92
+ data-cursor-target="definition-drift-refresh"
93
+ className="stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover stg:mt-2 stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-[11px] stg:font-medium stg:disabled:opacity-60"
94
+ >
95
+ {isRefreshing ? "Refreshing…" : "Refresh configuration"}
96
+ </button>
97
+ </div>
98
+ </div>
99
+ );
100
+ }
101
+
102
+ function RefreshIcon({ className }: { readonly className?: string }) {
103
+ return (
104
+ <svg
105
+ width="16"
106
+ height="16"
107
+ viewBox="0 0 16 16"
108
+ fill="none"
109
+ stroke="currentColor"
110
+ strokeWidth="1.5"
111
+ strokeLinecap="round"
112
+ strokeLinejoin="round"
113
+ className={className}
114
+ aria-hidden="true"
115
+ >
116
+ <path d="M13.5 8a5.5 5.5 0 1 1-1.61-3.89" />
117
+ <path d="M13.5 2v3h-3" />
118
+ </svg>
119
+ );
120
+ }
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { DialogShell } from "../internal/DialogShell.js";
5
6
  import type { EnvVarInput } from "@stigmer/sdk";
6
7
  import { useMcpServer } from "./useMcpServer.js";
7
8
  import { useMcpServerCredentials } from "./useMcpServerCredentials.js";
@@ -88,29 +89,11 @@ export function McpServerConnectDialog({
88
89
  onOpenDetails,
89
90
  className,
90
91
  }: McpServerConnectDialogProps) {
91
- const dialogRef = useRef<HTMLDialogElement>(null);
92
92
  const resolvedOrg = activeOrg || org;
93
93
 
94
- useEffect(() => {
95
- const dialog = dialogRef.current;
96
- if (!dialog) return;
97
-
98
- if (open && !dialog.open) {
99
- dialog.showModal();
100
- } else if (!open && dialog.open) {
101
- dialog.close();
102
- }
103
- }, [open]);
104
-
105
- const handleDialogClose = useCallback(() => {
106
- onClose();
107
- }, [onClose]);
108
-
109
- const handleBackdropClick = useCallback(
110
- (e: React.MouseEvent<HTMLDialogElement>) => {
111
- if (e.target === dialogRef.current) {
112
- onClose();
113
- }
94
+ const handleOpenChange = useCallback(
95
+ (nextOpen: boolean) => {
96
+ if (!nextOpen) onClose();
114
97
  },
115
98
  [onClose],
116
99
  );
@@ -118,15 +101,18 @@ export function McpServerConnectDialog({
118
101
  if (!open) return null;
119
102
 
120
103
  return (
121
- <dialog
122
- ref={dialogRef}
123
- onClose={handleDialogClose}
124
- onClick={handleBackdropClick}
104
+ <DialogShell
105
+ open
106
+ onOpenChange={handleOpenChange}
107
+ width="md"
108
+ dismissOnBackdrop
109
+ // Card surface + visible overflow are deliberate: the connect form
110
+ // hosts popovers that extend past the dialog bounds.
125
111
  className={cn(
126
- "stg:m-auto stg:max-h-[85vh] stg:w-full stg:max-w-md stg:overflow-visible stg:rounded-lg stg:border stg:border-border stg:bg-card stg:p-0 stg:text-foreground stg:shadow-lg",
127
- "stg:backdrop:bg-black/50",
112
+ "stg:max-h-[85vh] stg:overflow-visible stg:bg-card stg:text-foreground",
128
113
  className,
129
114
  )}
115
+ aria-label={`Connect ${slug}`}
130
116
  >
131
117
  <div
132
118
  className="stg:flex stg:max-h-[85vh] stg:flex-col stg:overflow-y-auto stg:p-6"
@@ -141,7 +127,7 @@ export function McpServerConnectDialog({
141
127
  onOpenDetails={onOpenDetails}
142
128
  />
143
129
  </div>
144
- </dialog>
130
+ </DialogShell>
145
131
  );
146
132
  }
147
133
 
@@ -27,12 +27,16 @@ import type { OAuthConnectPhase } from "./useMcpServerOAuthConnect.js";
27
27
  import { StdioSandboxNotice } from "./StdioSandboxNotice.js";
28
28
  import { OAuthRequiredNotice } from "./OAuthRequiredNotice.js";
29
29
  import { VendorApprovalBlockedNotice } from "./VendorApprovalBlockedNotice.js";
30
+ import { DefinitionDriftNotice } from "./DefinitionDriftNotice.js";
31
+ import { useMcpServerDefinitionDrift } from "./useMcpServerDefinitionDrift.js";
32
+ import { buildRefreshInput } from "./internal/definitionDrift.js";
30
33
  import { useDisconnectOAuth } from "./useDisconnectOAuth.js";
31
34
  import { useOrgOAuthApp } from "./useOrgOAuthApp.js";
32
35
  import { OAuthAppForm } from "./OAuthAppForm.js";
33
36
  import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
34
37
  import { ErrorMessage } from "../error/ErrorMessage.js";
35
38
  import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
39
+ import { DialogShell } from "../internal/DialogShell.js";
36
40
  import { EnvVarForm } from "../environment/EnvVarForm.js";
37
41
  import type { EnvVarFormVariable } from "../environment/EnvVarForm.js";
38
42
  import { VisibilityBadge } from "../library/VisibilitySelector.js";
@@ -226,6 +230,50 @@ export function McpServerDetailView({
226
230
  const credentials = useMcpServerCredentials(activeOrg ?? org, mcpServer ?? null);
227
231
  const connection = useMcpServerConnect();
228
232
  const oauth = useMcpServerOAuthConnect();
233
+
234
+ // Definition drift is only checked for editable servers: the paired
235
+ // refresh writes to the resource, so read-only viewers (e.g. anyone
236
+ // browsing another org's marketplace row) have nothing to act on.
237
+ const { drift: definitionDrift } = useMcpServerDefinitionDrift(
238
+ editable ? (mcpServer ?? null) : null,
239
+ );
240
+ const [isRefreshingDefinition, setIsRefreshingDefinition] = useState(false);
241
+ const handleDefinitionRefresh = useCallback(async () => {
242
+ if (!mcpServer?.metadata?.id || !definitionDrift) return;
243
+ setIsRefreshingDefinition(true);
244
+ try {
245
+ const updated = await updateMcpServer(
246
+ buildRefreshInput(mcpServer, definitionDrift.template),
247
+ );
248
+ onResourceUpdated?.(updated);
249
+ // The update RPC does not re-run discovery (only apply does), so
250
+ // reconnect explicitly — the refreshed transport/auth configuration
251
+ // is exactly what discovery needs to be retried against.
252
+ const envKeys = Object.keys(updated.spec?.env ?? {});
253
+ await connection.connect(
254
+ updated.metadata!.id,
255
+ activeOrg ?? org,
256
+ undefined,
257
+ envKeys,
258
+ );
259
+ } catch {
260
+ // Update errors surface through useUpdateMcpServer's error state;
261
+ // a failed re-discovery lands in connection.error next to the
262
+ // Connect button. Either way the page stays usable.
263
+ } finally {
264
+ setIsRefreshingDefinition(false);
265
+ refetch();
266
+ }
267
+ }, [
268
+ mcpServer,
269
+ definitionDrift,
270
+ updateMcpServer,
271
+ onResourceUpdated,
272
+ connection,
273
+ activeOrg,
274
+ org,
275
+ refetch,
276
+ ]);
229
277
  const disconnectOAuth = useDisconnectOAuth();
230
278
  const orgOAuthApp = useOrgOAuthApp(
231
279
  mcpServer?.metadata?.id ?? null,
@@ -235,7 +283,6 @@ export function McpServerDetailView({
235
283
  const [showCredentialForm, setShowCredentialForm] = useState(defaultShowCredentialForm);
236
284
  const [showByoaForm, setShowByoaForm] = useState(false);
237
285
  const [capabilityTab, setCapabilityTab] = useState<CapabilityTab>(defaultCapabilityTab);
238
- const byoaDialogRef = useRef<HTMLDialogElement>(null);
239
286
 
240
287
  const onResourceLoadRef = useRef(onResourceLoad);
241
288
  onResourceLoadRef.current = onResourceLoad;
@@ -341,20 +388,9 @@ export function McpServerDetailView({
341
388
  }
342
389
  }, [mcpServer, disconnectOAuth, credentials, refetch, activeOrg, org]);
343
390
 
344
- // BYOA dialog lifecycle — native <dialog> toggle
345
- useEffect(() => {
346
- const dialog = byoaDialogRef.current;
347
- if (!dialog) return;
348
- if (showByoaForm && !dialog.open) {
349
- dialog.showModal();
350
- } else if (!showByoaForm && dialog.open) {
351
- dialog.close();
352
- }
353
- }, [showByoaForm]);
354
-
355
- const handleByoaDialogCancel = useCallback(
356
- (e: React.SyntheticEvent) => {
357
- e.preventDefault();
391
+ const handleByoaOpenChange = useCallback(
392
+ (nextOpen: boolean) => {
393
+ if (nextOpen) return;
358
394
  setShowByoaForm(false);
359
395
  orgOAuthApp.clearErrors();
360
396
  },
@@ -588,6 +624,12 @@ export function McpServerDetailView({
588
624
  {/* scrollTarget: guided tours/demos bring the connect flow into view
589
625
  (see IdentityTransportStep's "mcp-transport" for the convention). */}
590
626
  <Section title="Connection" scrollTarget="mcp-connection">
627
+ <DefinitionDriftNotice
628
+ drift={definitionDrift}
629
+ onRefresh={handleDefinitionRefresh}
630
+ isRefreshing={isRefreshingDefinition}
631
+ className="stg:mb-3"
632
+ />
591
633
  <StdioSandboxNotice serverType={spec?.serverType} className="stg:mb-3" />
592
634
  <OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="stg:mb-3" />
593
635
  <ConnectBar
@@ -653,14 +695,13 @@ export function McpServerDetailView({
653
695
  )}
654
696
  </Section>
655
697
 
656
- {/* BYOA dialog — native <dialog> for zero-dependency modal behavior */}
657
- <dialog
658
- ref={byoaDialogRef}
659
- onCancel={handleByoaDialogCancel}
660
- className={cn(
661
- "stg:m-auto stg:w-full stg:max-w-md stg:rounded-lg stg:border stg:border-border stg:bg-background stg:p-6 stg:shadow-lg",
662
- "stg:backdrop:bg-black/50",
663
- )}
698
+ {/* BYOA dialog */}
699
+ <DialogShell
700
+ open={showByoaForm}
701
+ onOpenChange={handleByoaOpenChange}
702
+ width="md"
703
+ className="stg:p-6"
704
+ aria-label="Use your own OAuth app"
664
705
  >
665
706
  <h3 className="stg:mb-4 stg:text-base stg:font-semibold stg:text-foreground">
666
707
  Use your own OAuth app
@@ -676,7 +717,7 @@ export function McpServerDetailView({
676
717
  isSubmitting={orgOAuthApp.isSetting}
677
718
  error={orgOAuthApp.setError}
678
719
  />
679
- </dialog>
720
+ </DialogShell>
680
721
 
681
722
  <Section title="Capabilities" scrollTarget="mcp-capabilities">
682
723
  <Tabs
@@ -710,7 +751,7 @@ export function McpServerDetailView({
710
751
  </Section>
711
752
 
712
753
  {(editable || (spec && spec.tags.length > 0)) && (
713
- <TagsSection tags={spec?.tags ?? []} editable={editable} isSaving={isUpdating} saveMcpField={saveMcpField} />
754
+ <TagsSection tags={spec?.tags ?? []} editable={editable} />
714
755
  )}
715
756
  </ResourceDetailShell>
716
757
  {access.dialog}
@@ -1836,34 +1877,13 @@ function EnvSection({
1836
1877
  function TagsSection({
1837
1878
  tags,
1838
1879
  editable,
1839
- isSaving,
1840
- saveMcpField,
1841
1880
  }: {
1842
1881
  readonly tags: readonly string[];
1843
1882
  readonly editable?: boolean;
1844
- readonly isSaving?: boolean;
1845
- readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
1846
- field: K,
1847
- value: import("@stigmer/sdk").McpServerInput[K],
1848
- ) => Promise<boolean>;
1849
1883
  }) {
1850
- const tagRows: KeyValueRow[] = useMemo(
1851
- () => tags.map((t) => ({ key: t, value: "" })),
1852
- [tags],
1853
- );
1854
-
1855
- const handleTagsSave = useCallback(
1856
- async (rows: KeyValueRow[]) => {
1857
- if (!saveMcpField) return false;
1858
- // Tags are stored as string[] on the spec but not directly on McpServerInput.
1859
- // For now, save them through the full input by modifying the spec.
1860
- // Tags don't have a direct field on McpServerInput, so we handle this at
1861
- // a higher level if needed. For now, show read-only in edit mode.
1862
- return false;
1863
- },
1864
- [saveMcpField],
1865
- );
1866
-
1884
+ // Display-only by design: tags are curated marketplace categorization,
1885
+ // not per-connection state. (McpServerInput does carry `tags`, so an
1886
+ // editing affordance is unblocked if the product ever wants one.)
1867
1887
  return (
1868
1888
  <Section title="Tags" count={tags.length}>
1869
1889
  <div className="stg:flex stg:flex-wrap stg:gap-1.5 stg:p-3">
@@ -3,6 +3,7 @@
3
3
  import { useCallback, useId, useState } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
5
  import { getUserMessage } from "@stigmer/sdk";
6
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
6
7
 
7
8
  /** Props for {@link OAuthAppForm}. */
8
9
  export interface OAuthAppFormProps {
@@ -214,7 +215,7 @@ export function OAuthAppForm({
214
215
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
215
216
  )}
216
217
  >
217
- {isSubmitting && <SpinnerIcon />}
218
+ {isSubmitting && <SpinnerIcon size={12} />}
218
219
  Save
219
220
  </button>
220
221
  </div>
@@ -285,20 +286,3 @@ function EyeOffIcon() {
285
286
  );
286
287
  }
287
288
 
288
- function SpinnerIcon() {
289
- return (
290
- <svg
291
- width="12"
292
- height="12"
293
- viewBox="0 0 16 16"
294
- fill="none"
295
- stroke="currentColor"
296
- strokeWidth="2"
297
- strokeLinecap="round"
298
- className="stg:animate-spin"
299
- aria-hidden="true"
300
- >
301
- <path d="M8 2a6 6 0 1 0 6 6" />
302
- </svg>
303
- );
304
- }
@@ -0,0 +1,57 @@
1
+ import { describe, it, expect, vi, afterEach } from "vitest";
2
+ import { render, screen, cleanup } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { samples } from "../../test/samples";
5
+ import { DefinitionDriftNotice } from "../DefinitionDriftNotice";
6
+ import type { McpServerDefinitionDrift } from "../useMcpServerDefinitionDrift";
7
+
8
+ afterEach(cleanup);
9
+
10
+ function drift(): McpServerDefinitionDrift {
11
+ return {
12
+ template: samples.mcpServer({ name: "Monday", org: "stigmer", slug: "monday" }),
13
+ changedFields: ["headers", "authentication"],
14
+ };
15
+ }
16
+
17
+ describe("DefinitionDriftNotice", () => {
18
+ it("renders null when there is no drift", () => {
19
+ const { container } = render(
20
+ <DefinitionDriftNotice drift={null} onRefresh={() => {}} isRefreshing={false} />,
21
+ );
22
+ expect(container.firstChild).toBeNull();
23
+ });
24
+
25
+ it("says the configuration DIFFERS (never 'was updated') and names the fields", () => {
26
+ render(
27
+ <DefinitionDriftNotice drift={drift()} onRefresh={() => {}} isRefreshing={false} />,
28
+ );
29
+ const notice = screen.getByRole("status");
30
+ // Honest copy: slug-matching is a heuristic, so the notice must state
31
+ // a verifiable present-tense fact, not invent an update history.
32
+ expect(notice.textContent).toContain("differs from the current marketplace definition");
33
+ expect(notice.textContent).not.toContain("was updated");
34
+ expect(notice.textContent).toContain("request headers, authentication");
35
+ // The refresh promise: what survives.
36
+ expect(notice.textContent).toContain("enabled tools and approval pins are kept");
37
+ });
38
+
39
+ it("fires onRefresh from the action button", async () => {
40
+ const onRefresh = vi.fn();
41
+ render(
42
+ <DefinitionDriftNotice drift={drift()} onRefresh={onRefresh} isRefreshing={false} />,
43
+ );
44
+ await userEvent.click(screen.getByRole("button", { name: "Refresh configuration" }));
45
+ expect(onRefresh).toHaveBeenCalledTimes(1);
46
+ });
47
+
48
+ it("disables the button and shows progress while refreshing", () => {
49
+ render(
50
+ <DefinitionDriftNotice drift={drift()} onRefresh={() => {}} isRefreshing />,
51
+ );
52
+ const button = screen.getByRole<HTMLButtonElement>("button", {
53
+ name: "Refreshing…",
54
+ });
55
+ expect(button.disabled).toBe(true);
56
+ });
57
+ });