@stigmer/react 3.10.0 → 3.11.0

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 (1286) hide show
  1. package/access/ManageAccessButton.js +1 -1
  2. package/access/ManageAccessButton.js.map +1 -1
  3. package/access/ManageAccessDialog.js +3 -3
  4. package/access/ManageAccessDialog.js.map +1 -1
  5. package/action-menu/ActionMenu.js +3 -3
  6. package/action-menu/ActionMenu.js.map +1 -1
  7. package/activity/useRecentActivity.d.ts +6 -1
  8. package/activity/useRecentActivity.d.ts.map +1 -1
  9. package/activity/useRecentActivity.js +6 -1
  10. package/activity/useRecentActivity.js.map +1 -1
  11. package/agent/AgentDetailView.js +21 -21
  12. package/agent/AgentDetailView.js.map +1 -1
  13. package/agent/AgentPicker.js +8 -8
  14. package/agent/AgentPicker.js.map +1 -1
  15. package/agent/steps/CapabilitiesStep.js +3 -3
  16. package/agent/steps/CapabilitiesStep.js.map +1 -1
  17. package/agent/steps/IdentityStep.js +6 -6
  18. package/agent/steps/IdentityStep.js.map +1 -1
  19. package/agent/steps/ReviewStep.js +3 -3
  20. package/agent/steps/ReviewStep.js.map +1 -1
  21. package/agent-instance/AgentInstanceDetailPanel.js +2 -2
  22. package/agent-instance/AgentInstanceDetailPanel.js.map +1 -1
  23. package/agent-instance/AgentInstanceList.js +4 -4
  24. package/agent-instance/AgentInstanceList.js.map +1 -1
  25. package/agent-instance/CreateAgentInstanceDialog.js +1 -1
  26. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  27. package/api-key/ApiKeyCreatedAlert.js +1 -1
  28. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  29. package/api-key/ApiKeyListPanel.js +9 -9
  30. package/api-key/ApiKeyListPanel.js.map +1 -1
  31. package/api-key/CreateApiKeyForm.js +5 -5
  32. package/api-key/CreateApiKeyForm.js.map +1 -1
  33. package/attachment/AttachmentChipList.js +12 -12
  34. package/attachment/AttachmentChipList.js.map +1 -1
  35. package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
  36. package/attachment/AttachmentImageLightbox.js +1 -1
  37. package/attachment/AttachmentImageLightbox.js.map +1 -1
  38. package/attachment/attachment-utils.d.ts +8 -5
  39. package/attachment/attachment-utils.d.ts.map +1 -1
  40. package/attachment/attachment-utils.js +8 -5
  41. package/attachment/attachment-utils.js.map +1 -1
  42. package/billing/AutoRechargeCard.js +2 -2
  43. package/billing/AutoRechargeCard.js.map +1 -1
  44. package/billing/BillingSection.js +6 -6
  45. package/billing/BillingSection.js.map +1 -1
  46. package/billing/CreditBalanceCard.js +4 -4
  47. package/billing/CreditBalanceCard.js.map +1 -1
  48. package/billing/CreditLedgerTable.js +13 -13
  49. package/billing/CreditLedgerTable.js.map +1 -1
  50. package/billing/CreditPackGrid.js +2 -2
  51. package/billing/CreditPackGrid.js.map +1 -1
  52. package/billing/LowBalanceBanner.js +4 -4
  53. package/billing/LowBalanceBanner.js.map +1 -1
  54. package/billing/PaymentMethodCard.js +2 -2
  55. package/billing/PaymentMethodCard.js.map +1 -1
  56. package/button/Button.js +7 -7
  57. package/button/Button.js.map +1 -1
  58. package/channel/AgentChannelsPanel.js +12 -12
  59. package/channel/AgentChannelsPanel.js.map +1 -1
  60. package/channel/ChannelConversationsDialog.js +6 -6
  61. package/channel/ChannelConversationsDialog.js.map +1 -1
  62. package/channel/ChannelCredentialsDialog.js +2 -2
  63. package/channel/ChannelCredentialsDialog.js.map +1 -1
  64. package/channel/ChannelTemplatesDialog.js +13 -13
  65. package/channel/ChannelTemplatesDialog.js.map +1 -1
  66. package/channel/ChannelToolCredentials.js +3 -3
  67. package/channel/ChannelToolCredentials.js.map +1 -1
  68. package/channel/ConnectSlackDialog.js +13 -13
  69. package/channel/ConnectSlackDialog.js.map +1 -1
  70. package/channel/ConnectWhatsAppDialog.js +8 -8
  71. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  72. package/channel/connect/ServingAppSection.js +5 -5
  73. package/channel/connect/ServingAppSection.js.map +1 -1
  74. package/channel/connect/ToolCredentialsSection.js +1 -1
  75. package/channel/connect/ToolCredentialsSection.js.map +1 -1
  76. package/channel/connect/VerbatimRefusal.js +1 -1
  77. package/channel/connect/VerbatimRefusal.js.map +1 -1
  78. package/channel/connect/icons.js +1 -1
  79. package/channel/connect/icons.js.map +1 -1
  80. package/channel-app/ChannelAppDetailPanel.js +3 -3
  81. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  82. package/channel-app/ChannelAppListPanel.js +5 -5
  83. package/channel-app/ChannelAppListPanel.js.map +1 -1
  84. package/channel-app/CreateChannelAppForm.js +6 -6
  85. package/channel-app/CreateChannelAppForm.js.map +1 -1
  86. package/channel-app/internal.js +7 -7
  87. package/channel-app/internal.js.map +1 -1
  88. package/composer/ComposerToolbar.js +4 -4
  89. package/composer/ComposerToolbar.js.map +1 -1
  90. package/composer/ConfigureMenu.js +4 -4
  91. package/composer/ConfigureMenu.js.map +1 -1
  92. package/composer/ContextChip.js +4 -4
  93. package/composer/ContextChip.js.map +1 -1
  94. package/composer/ContextPopover.js +4 -4
  95. package/composer/ContextPopover.js.map +1 -1
  96. package/composer/InteractionModePicker.js +5 -5
  97. package/composer/InteractionModePicker.js.map +1 -1
  98. package/composer/SessionComposer.js +8 -8
  99. package/composer/SessionComposer.js.map +1 -1
  100. package/composer/icons.js +3 -3
  101. package/composer/icons.js.map +1 -1
  102. package/conversation/ConversationAttentionBanner.js +2 -2
  103. package/conversation/ConversationAttentionBanner.js.map +1 -1
  104. package/conversation/ConversationComposer.js +2 -2
  105. package/conversation/ConversationComposer.js.map +1 -1
  106. package/conversation/ConversationControlBanner.js +5 -5
  107. package/conversation/ConversationControlBanner.js.map +1 -1
  108. package/conversation/ConversationListPane.js +12 -12
  109. package/conversation/ConversationListPane.js.map +1 -1
  110. package/conversation/ConversationMediaAttachment.js +4 -4
  111. package/conversation/ConversationMediaAttachment.js.map +1 -1
  112. package/conversation/ConversationTimelineView.js +12 -12
  113. package/conversation/ConversationTimelineView.js.map +1 -1
  114. package/conversation/ConversationsWorkbench.js +3 -3
  115. package/conversation/ConversationsWorkbench.js.map +1 -1
  116. package/cursor-accounts/CursorAccountEditor.js +1 -1
  117. package/cursor-accounts/CursorAccountEditor.js.map +1 -1
  118. package/cursor-accounts/CursorAccountsAccessNotice.js +1 -1
  119. package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -1
  120. package/cursor-accounts/CursorAccountsConsole.js +9 -9
  121. package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
  122. package/cursor-accounts/MemberCoverageTable.js +7 -7
  123. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  124. package/cursor-accounts/MemberKeysPanel.js +3 -3
  125. package/cursor-accounts/MemberKeysPanel.js.map +1 -1
  126. package/cursor-accounts/badges.js +1 -1
  127. package/cursor-accounts/badges.js.map +1 -1
  128. package/dashboard/DashboardFailedRuns.js +4 -4
  129. package/dashboard/DashboardFailedRuns.js.map +1 -1
  130. package/dashboard/DashboardKPICards.js +7 -7
  131. package/dashboard/DashboardKPICards.js.map +1 -1
  132. package/dashboard/OperationalDashboard.js +1 -1
  133. package/dashboard/OperationalDashboard.js.map +1 -1
  134. package/datastore/CollectionRecordsBrowser.js +10 -10
  135. package/datastore/CollectionRecordsBrowser.js.map +1 -1
  136. package/datastore/CollectionSchemaView.js +4 -4
  137. package/datastore/CollectionSchemaView.js.map +1 -1
  138. package/datastore/DatastoreDetailView.js +4 -4
  139. package/datastore/DatastoreDetailView.js.map +1 -1
  140. package/datastore/DatastoreSyncReport.js +1 -1
  141. package/datastore/DatastoreSyncReport.js.map +1 -1
  142. package/datastore/DeleteDatastoreDialog.js +1 -1
  143. package/datastore/DeleteDatastoreDialog.js.map +1 -1
  144. package/datastore/FieldValueControl.js +2 -2
  145. package/datastore/FieldValueControl.js.map +1 -1
  146. package/datastore/RecordFilterBuilder.js +4 -4
  147. package/datastore/RecordFilterBuilder.js.map +1 -1
  148. package/datastore/RecordFormPanel.js +5 -5
  149. package/datastore/RecordFormPanel.js.map +1 -1
  150. package/dependency-graph/DependencyGraph.js +1 -1
  151. package/dependency-graph/DependencyGraph.js.map +1 -1
  152. package/dependency-graph/DependencyTreeNode.js +8 -8
  153. package/dependency-graph/DependencyTreeNode.js.map +1 -1
  154. package/empty-state/EmptyState.js +3 -3
  155. package/empty-state/EmptyState.js.map +1 -1
  156. package/empty-state/useEmptyState.js +1 -1
  157. package/empty-state/useEmptyState.js.map +1 -1
  158. package/environment/CreateEnvironmentForm.js +2 -2
  159. package/environment/CreateEnvironmentForm.js.map +1 -1
  160. package/environment/EnvVarForm.js +4 -4
  161. package/environment/EnvVarForm.js.map +1 -1
  162. package/environment/EnvironmentListPanel.js +9 -9
  163. package/environment/EnvironmentListPanel.js.map +1 -1
  164. package/environment/EnvironmentPicker.js +4 -4
  165. package/environment/EnvironmentPicker.js.map +1 -1
  166. package/environment/EnvironmentVariableEditor.js +17 -17
  167. package/environment/EnvironmentVariableEditor.js.map +1 -1
  168. package/error/ErrorMessage.js +1 -1
  169. package/error/ErrorMessage.js.map +1 -1
  170. package/error/SecretFlowErrorGuide.js +1 -1
  171. package/error/SecretFlowErrorGuide.js.map +1 -1
  172. package/execution/ApprovalCard.js +8 -8
  173. package/execution/ApprovalCard.js.map +1 -1
  174. package/execution/ArtifactApplyButton.js +4 -4
  175. package/execution/ArtifactApplyButton.js.map +1 -1
  176. package/execution/ArtifactContentBody.js +3 -3
  177. package/execution/ArtifactContentBody.js.map +1 -1
  178. package/execution/ArtifactContentRenderer.js +19 -19
  179. package/execution/ArtifactContentRenderer.js.map +1 -1
  180. package/execution/ArtifactDocument.js +10 -10
  181. package/execution/ArtifactDocument.js.map +1 -1
  182. package/execution/ArtifactFileContent.js +4 -4
  183. package/execution/ArtifactFileContent.js.map +1 -1
  184. package/execution/ArtifactPreviewModal.js +11 -11
  185. package/execution/ArtifactPreviewModal.js.map +1 -1
  186. package/execution/ArtifactRowView.js +2 -2
  187. package/execution/ArtifactRowView.js.map +1 -1
  188. package/execution/ArtifactsWidget.js +1 -1
  189. package/execution/ArtifactsWidget.js.map +1 -1
  190. package/execution/ContextGauge.js +9 -9
  191. package/execution/ContextGauge.js.map +1 -1
  192. package/execution/EmptyChangeNotice.js +1 -1
  193. package/execution/EmptyChangeNotice.js.map +1 -1
  194. package/execution/ExecutionPhaseBadge.js +10 -10
  195. package/execution/ExecutionPhaseBadge.js.map +1 -1
  196. package/execution/ExecutionProgress.js +1 -1
  197. package/execution/ExecutionProgress.js.map +1 -1
  198. package/execution/FileChangeProgressBar.js +3 -3
  199. package/execution/FileChangeProgressBar.js.map +1 -1
  200. package/execution/FileChangesView.js +5 -5
  201. package/execution/FileChangesView.js.map +1 -1
  202. package/execution/FilePathLink.js +6 -6
  203. package/execution/FilePathLink.js.map +1 -1
  204. package/execution/FileReviewAtoms.js +7 -7
  205. package/execution/FileReviewAtoms.js.map +1 -1
  206. package/execution/FileReviewCard.js +18 -18
  207. package/execution/FileReviewCard.js.map +1 -1
  208. package/execution/FileReviewDock.js +1 -1
  209. package/execution/FileReviewDock.js.map +1 -1
  210. package/execution/FollowUpInput.js +3 -3
  211. package/execution/FollowUpInput.js.map +1 -1
  212. package/execution/InteractionModeBadge.js +1 -1
  213. package/execution/InteractionModeBadge.js.map +1 -1
  214. package/execution/McpToolDetail.js +12 -12
  215. package/execution/McpToolDetail.js.map +1 -1
  216. package/execution/MessageAttachments.js +8 -8
  217. package/execution/MessageAttachments.js.map +1 -1
  218. package/execution/MessageEntry.js +8 -8
  219. package/execution/MessageEntry.js.map +1 -1
  220. package/execution/MessageThread.js +12 -12
  221. package/execution/MessageThread.js.map +1 -1
  222. package/execution/PlanArtifactCard.js +8 -8
  223. package/execution/PlanArtifactCard.js.map +1 -1
  224. package/execution/PlanCompletionCard.js +2 -2
  225. package/execution/PlanCompletionCard.js.map +1 -1
  226. package/execution/PlanDocumentMessage.js +2 -2
  227. package/execution/PlanDocumentMessage.js.map +1 -1
  228. package/execution/PlanStreamingCard.js +3 -3
  229. package/execution/PlanStreamingCard.js.map +1 -1
  230. package/execution/ResultView.js +17 -17
  231. package/execution/ResultView.js.map +1 -1
  232. package/execution/SessionVariablesInput.js +6 -6
  233. package/execution/SessionVariablesInput.js.map +1 -1
  234. package/execution/SetupProgress.js +2 -2
  235. package/execution/SetupProgress.js.map +1 -1
  236. package/execution/SubAgentSection.js +19 -19
  237. package/execution/SubAgentSection.js.map +1 -1
  238. package/execution/SummarizationBadge.js +3 -3
  239. package/execution/SummarizationBadge.js.map +1 -1
  240. package/execution/SummarizationCard.js +2 -2
  241. package/execution/SummarizationCard.js.map +1 -1
  242. package/execution/TerminalSession.js +2 -2
  243. package/execution/TerminalSession.js.map +1 -1
  244. package/execution/ThreadSkeleton.js +1 -1
  245. package/execution/ThreadSkeleton.js.map +1 -1
  246. package/execution/TodoCard.js +3 -3
  247. package/execution/TodoCard.js.map +1 -1
  248. package/execution/TodoList.js +8 -8
  249. package/execution/TodoList.js.map +1 -1
  250. package/execution/ToolArgsView.js +4 -4
  251. package/execution/ToolArgsView.js.map +1 -1
  252. package/execution/ToolCallDetail.js +4 -4
  253. package/execution/ToolCallDetail.js.map +1 -1
  254. package/execution/ToolCallGroup.js +1 -1
  255. package/execution/ToolCallGroup.js.map +1 -1
  256. package/execution/ToolCallItem.js +16 -16
  257. package/execution/ToolCallItem.js.map +1 -1
  258. package/execution/ToolRunGroup.js +9 -9
  259. package/execution/ToolRunGroup.js.map +1 -1
  260. package/execution/UsageWidget.js +3 -3
  261. package/execution/UsageWidget.js.map +1 -1
  262. package/execution/WriteBackCard.js +16 -16
  263. package/execution/WriteBackCard.js.map +1 -1
  264. package/execution/WriteBacksWidget.js +1 -1
  265. package/execution/WriteBacksWidget.js.map +1 -1
  266. package/execution/tool-rendering-primitives.js +5 -5
  267. package/execution/tool-rendering-primitives.js.map +1 -1
  268. package/feedback/StigmerToaster.d.ts.map +1 -1
  269. package/feedback/StigmerToaster.js +9 -5
  270. package/feedback/StigmerToaster.js.map +1 -1
  271. package/file-reference/FileReferenceChipList.js +3 -3
  272. package/file-reference/FileReferenceChipList.js.map +1 -1
  273. package/github/GitHubRepoPicker.js +26 -26
  274. package/github/GitHubRepoPicker.js.map +1 -1
  275. package/iam-policy/GrantAccessForm.js +2 -2
  276. package/iam-policy/GrantAccessForm.js.map +1 -1
  277. package/iam-policy/OrgMembersPanel.js +11 -11
  278. package/iam-policy/OrgMembersPanel.js.map +1 -1
  279. package/iam-policy/PeopleWithAccess.js +4 -4
  280. package/iam-policy/PeopleWithAccess.js.map +1 -1
  281. package/iam-policy/PrincipalPicker.js +6 -6
  282. package/iam-policy/PrincipalPicker.js.map +1 -1
  283. package/iam-policy/ProviderBadge.js +1 -1
  284. package/iam-policy/ProviderBadge.js.map +1 -1
  285. package/iam-policy/RoleSelector.js +4 -4
  286. package/iam-policy/RoleSelector.js.map +1 -1
  287. package/iam-policy/SharePanel.js +1 -1
  288. package/iam-policy/SharePanel.js.map +1 -1
  289. package/identity-provider/CreateIdentityProviderForm.js +6 -6
  290. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  291. package/identity-provider/IdentityProviderDetailPanel.js +11 -11
  292. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  293. package/identity-provider/IdentityProviderListPanel.js +8 -8
  294. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  295. package/identity-provider/IdentityProviderWizard.js +16 -16
  296. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  297. package/identity-provider/ProviderPicker.js +11 -11
  298. package/identity-provider/ProviderPicker.js.map +1 -1
  299. package/identity-provider/SsoLoginPrompt.js +7 -7
  300. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  301. package/index.d.ts +1 -1
  302. package/index.d.ts.map +1 -1
  303. package/index.js +1 -1
  304. package/index.js.map +1 -1
  305. package/inline-edit/InlineEditImage.js +5 -5
  306. package/inline-edit/InlineEditImage.js.map +1 -1
  307. package/inline-edit/InlineEditKeyValue.js +3 -3
  308. package/inline-edit/InlineEditKeyValue.js.map +1 -1
  309. package/inline-edit/InlineEditResourceList.js +8 -8
  310. package/inline-edit/InlineEditResourceList.js.map +1 -1
  311. package/inline-edit/InlineEditSelect.js +8 -8
  312. package/inline-edit/InlineEditSelect.js.map +1 -1
  313. package/inline-edit/InlineEditText.js +6 -6
  314. package/inline-edit/InlineEditText.js.map +1 -1
  315. package/inline-edit/InlineEditTextarea.js +4 -4
  316. package/inline-edit/InlineEditTextarea.js.map +1 -1
  317. package/internal/ApprovalPeekBar.js +3 -3
  318. package/internal/ApprovalPeekBar.js.map +1 -1
  319. package/internal/BoundedContent.d.ts +1 -1
  320. package/internal/BoundedContent.d.ts.map +1 -1
  321. package/internal/BoundedContent.js +2 -2
  322. package/internal/BoundedContent.js.map +1 -1
  323. package/internal/CloudFeatureNotice.js +1 -1
  324. package/internal/CloudFeatureNotice.js.map +1 -1
  325. package/internal/DecisionButton.js +6 -6
  326. package/internal/DecisionButton.js.map +1 -1
  327. package/internal/InCardDecisionError.js +1 -1
  328. package/internal/InCardDecisionError.js.map +1 -1
  329. package/internal/JumpToLatestButton.js +3 -3
  330. package/internal/JumpToLatestButton.js.map +1 -1
  331. package/internal/MermaidDiagram.js +2 -2
  332. package/internal/MermaidDiagram.js.map +1 -1
  333. package/internal/Pagination.js +2 -2
  334. package/internal/Pagination.js.map +1 -1
  335. package/internal/ResizableSplit.d.ts +28 -6
  336. package/internal/ResizableSplit.d.ts.map +1 -1
  337. package/internal/ResizableSplit.js +18 -4
  338. package/internal/ResizableSplit.js.map +1 -1
  339. package/internal/RevealToggle.js +2 -2
  340. package/internal/RevealToggle.js.map +1 -1
  341. package/internal/ScrollFade.js +2 -2
  342. package/internal/ScrollFade.js.map +1 -1
  343. package/internal/VirtualizedThread.js +2 -2
  344. package/internal/VirtualizedThread.js.map +1 -1
  345. package/internal/file-icons/index.js +2 -2
  346. package/internal/file-icons/index.js.map +1 -1
  347. package/internal/file-tree/FileTreeNode.js +3 -3
  348. package/internal/file-tree/FileTreeNode.js.map +1 -1
  349. package/internal/form-primitives.d.ts +12 -10
  350. package/internal/form-primitives.d.ts.map +1 -1
  351. package/internal/form-primitives.js +14 -12
  352. package/internal/form-primitives.js.map +1 -1
  353. package/internal/markdown-components.js +23 -23
  354. package/internal/markdown-components.js.map +1 -1
  355. package/internal/menu.js +5 -5
  356. package/internal/menu.js.map +1 -1
  357. package/internal/scroll-area.js +1 -1
  358. package/internal/scroll-area.js.map +1 -1
  359. package/internal/thread-card/ThreadCardShell.js +7 -7
  360. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  361. package/internal/thread-card/glyphs.js +2 -2
  362. package/internal/thread-card/glyphs.js.map +1 -1
  363. package/internal/tooltip.d.ts.map +1 -1
  364. package/internal/tooltip.js +4 -6
  365. package/internal/tooltip.js.map +1 -1
  366. package/invitation/InvitationCreatedAlert.js +1 -1
  367. package/invitation/InvitationCreatedAlert.js.map +1 -1
  368. package/invitation/InvitationManager.js +23 -23
  369. package/invitation/InvitationManager.js.map +1 -1
  370. package/invitation/InvitationRedemption.js +12 -12
  371. package/invitation/InvitationRedemption.js.map +1 -1
  372. package/library/ResourceCountCard.js +4 -4
  373. package/library/ResourceCountCard.js.map +1 -1
  374. package/library/ScopeToggle.js +4 -4
  375. package/library/ScopeToggle.js.map +1 -1
  376. package/library/VisibilityOptionRow.d.ts +1 -1
  377. package/library/VisibilityOptionRow.d.ts.map +1 -1
  378. package/library/VisibilityOptionRow.js +22 -22
  379. package/library/VisibilityOptionRow.js.map +1 -1
  380. package/library/VisibilitySelector.js +5 -5
  381. package/library/VisibilitySelector.js.map +1 -1
  382. package/manifest/ApplyManifestDialog.js +6 -6
  383. package/manifest/ApplyManifestDialog.js.map +1 -1
  384. package/manifest/EditResourceYamlDialog.js +2 -2
  385. package/manifest/EditResourceYamlDialog.js.map +1 -1
  386. package/manifest/RedactedSecretsNotice.js +1 -1
  387. package/manifest/RedactedSecretsNotice.js.map +1 -1
  388. package/manifest/YamlEditor.js +1 -1
  389. package/manifest/YamlEditor.js.map +1 -1
  390. package/mcp-server/McpServerConfigPanel.js +22 -22
  391. package/mcp-server/McpServerConfigPanel.js.map +1 -1
  392. package/mcp-server/McpServerConnectDialog.js +43 -17
  393. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  394. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  395. package/mcp-server/McpServerDetailView.js +112 -63
  396. package/mcp-server/McpServerDetailView.js.map +1 -1
  397. package/mcp-server/McpServerPicker.js +16 -16
  398. package/mcp-server/McpServerPicker.js.map +1 -1
  399. package/mcp-server/McpToolSelector.js +4 -4
  400. package/mcp-server/McpToolSelector.js.map +1 -1
  401. package/mcp-server/OAuthAppForm.js +2 -2
  402. package/mcp-server/OAuthAppForm.js.map +1 -1
  403. package/mcp-server/OAuthCallbackHandler.js +4 -4
  404. package/mcp-server/OAuthCallbackHandler.js.map +1 -1
  405. package/mcp-server/OAuthRequiredNotice.js +1 -1
  406. package/mcp-server/OAuthRequiredNotice.js.map +1 -1
  407. package/mcp-server/StdioSandboxNotice.js +1 -1
  408. package/mcp-server/StdioSandboxNotice.js.map +1 -1
  409. package/mcp-server/index.d.ts +1 -1
  410. package/mcp-server/index.d.ts.map +1 -1
  411. package/mcp-server/index.js +1 -1
  412. package/mcp-server/index.js.map +1 -1
  413. package/mcp-server/steps/EnvironmentAuthStep.js +4 -4
  414. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  415. package/mcp-server/steps/IdentityTransportStep.js +8 -8
  416. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  417. package/mcp-server/steps/ReviewStep.js +3 -3
  418. package/mcp-server/steps/ReviewStep.js.map +1 -1
  419. package/mcp-server/useMcpServerOAuthConnect.d.ts +29 -0
  420. package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
  421. package/mcp-server/useMcpServerOAuthConnect.js +49 -10
  422. package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
  423. package/models/HarnessSelector.js +8 -8
  424. package/models/HarnessSelector.js.map +1 -1
  425. package/models/ModelSelector.js +11 -11
  426. package/models/ModelSelector.js.map +1 -1
  427. package/oauth-app/CreateOAuthAppForm.js +4 -4
  428. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  429. package/oauth-app/OAuthAppDetailPanel.js +8 -8
  430. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  431. package/oauth-app/OAuthAppListPanel.js +6 -6
  432. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  433. package/organization/CreateOrganizationForm.js +4 -4
  434. package/organization/CreateOrganizationForm.js.map +1 -1
  435. package/organization/OrgProfilePanel.js +10 -10
  436. package/organization/OrgProfilePanel.js.map +1 -1
  437. package/organization/OrgSwitcher.js +5 -5
  438. package/organization/OrgSwitcher.js.map +1 -1
  439. package/package.json +4 -4
  440. package/platform-client/CreatePlatformClientForm.js +5 -5
  441. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  442. package/platform-client/PlatformClientDetailPanel.js +8 -8
  443. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  444. package/platform-client/PlatformClientListPanel.js +10 -10
  445. package/platform-client/PlatformClientListPanel.js.map +1 -1
  446. package/platform-client/PlatformClientSecretAlert.js +2 -2
  447. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  448. package/portal-container.d.ts +34 -9
  449. package/portal-container.d.ts.map +1 -1
  450. package/portal-container.js +33 -8
  451. package/portal-container.js.map +1 -1
  452. package/pricing-governance/BaselineEditor.js +5 -5
  453. package/pricing-governance/BaselineEditor.js.map +1 -1
  454. package/pricing-governance/ModelCatalogPanel.js +5 -5
  455. package/pricing-governance/ModelCatalogPanel.js.map +1 -1
  456. package/pricing-governance/ModelGovernanceDetail.js +7 -7
  457. package/pricing-governance/ModelGovernanceDetail.js.map +1 -1
  458. package/pricing-governance/OperatorAccessNotice.js +1 -1
  459. package/pricing-governance/OperatorAccessNotice.js.map +1 -1
  460. package/pricing-governance/PricingGovernanceConsole.js +8 -8
  461. package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
  462. package/pricing-governance/PricingGovernancePanel.js +4 -4
  463. package/pricing-governance/PricingGovernancePanel.js.map +1 -1
  464. package/pricing-governance/RetireConfirm.js +1 -1
  465. package/pricing-governance/RetireConfirm.js.map +1 -1
  466. package/pricing-governance/governance-primitives.js +6 -6
  467. package/pricing-governance/governance-primitives.js.map +1 -1
  468. package/resource-creation/CreationPicker.js +7 -7
  469. package/resource-creation/CreationPicker.js.map +1 -1
  470. package/resource-creation/StepIndicator.js +4 -4
  471. package/resource-creation/StepIndicator.js.map +1 -1
  472. package/resource-creation/TemplateCard.js +15 -15
  473. package/resource-creation/TemplateCard.js.map +1 -1
  474. package/resource-creation/TemplateGallery.js +5 -5
  475. package/resource-creation/TemplateGallery.js.map +1 -1
  476. package/resource-creation/WizardNav.js +2 -2
  477. package/resource-creation/WizardNav.js.map +1 -1
  478. package/resource-creation/WizardShell.js +2 -2
  479. package/resource-creation/WizardShell.js.map +1 -1
  480. package/resource-detail/ConfirmDialog.js +3 -3
  481. package/resource-detail/ConfirmDialog.js.map +1 -1
  482. package/resource-detail/ResourceActionBar.js +2 -2
  483. package/resource-detail/ResourceActionBar.js.map +1 -1
  484. package/resource-detail/ResourceDetailShell.js +3 -3
  485. package/resource-detail/ResourceDetailShell.js.map +1 -1
  486. package/resource-detail/Section.js +1 -1
  487. package/resource-detail/Section.js.map +1 -1
  488. package/resource-workbench/components/BulkActionBar.js +4 -4
  489. package/resource-workbench/components/BulkActionBar.js.map +1 -1
  490. package/resource-workbench/components/ColumnHeader.js +3 -3
  491. package/resource-workbench/components/ColumnHeader.js.map +1 -1
  492. package/resource-workbench/components/FilterBar.js +3 -3
  493. package/resource-workbench/components/FilterBar.js.map +1 -1
  494. package/resource-workbench/components/ResourceAvatar.js +18 -18
  495. package/resource-workbench/components/ResourceAvatar.js.map +1 -1
  496. package/resource-workbench/components/ResourceCards.js +2 -2
  497. package/resource-workbench/components/ResourceCards.js.map +1 -1
  498. package/resource-workbench/components/ResourceInspector.js +1 -1
  499. package/resource-workbench/components/ResourceInspector.js.map +1 -1
  500. package/resource-workbench/components/ResourceList.js +2 -2
  501. package/resource-workbench/components/ResourceList.js.map +1 -1
  502. package/resource-workbench/components/ResourceTable.js +5 -5
  503. package/resource-workbench/components/ResourceTable.js.map +1 -1
  504. package/resource-workbench/components/ResourceWorkbench.js +11 -11
  505. package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
  506. package/resource-workbench/components/SelectionCheckbox.js +1 -1
  507. package/resource-workbench/components/SelectionCheckbox.js.map +1 -1
  508. package/resource-workbench/components/StatusBadge.js +16 -16
  509. package/resource-workbench/components/StatusBadge.js.map +1 -1
  510. package/resource-workbench/components/ViewSwitcher.js +4 -4
  511. package/resource-workbench/components/ViewSwitcher.js.map +1 -1
  512. package/schedule/CadenceField.js +14 -14
  513. package/schedule/CadenceField.js.map +1 -1
  514. package/schedule/ScheduleDetailView.js +39 -39
  515. package/schedule/ScheduleDetailView.js.map +1 -1
  516. package/schedule/ScheduleForm.js +9 -9
  517. package/schedule/ScheduleForm.js.map +1 -1
  518. package/schedule/ScheduleRowActions.js +1 -1
  519. package/schedule/ScheduleRowActions.js.map +1 -1
  520. package/schedule/ScheduleRunsTable.js +17 -17
  521. package/schedule/ScheduleRunsTable.js.map +1 -1
  522. package/schedule/TimeZoneField.js +5 -5
  523. package/schedule/TimeZoneField.js.map +1 -1
  524. package/schedule/scheduleColumns.js +5 -5
  525. package/schedule/scheduleColumns.js.map +1 -1
  526. package/session/NewSessionViewer.js +3 -3
  527. package/session/NewSessionViewer.js.map +1 -1
  528. package/session/PlanEditor.js +9 -9
  529. package/session/PlanEditor.js.map +1 -1
  530. package/session/PlanStreamingDocument.js +2 -2
  531. package/session/PlanStreamingDocument.js.map +1 -1
  532. package/session/SessionViewer.js +21 -21
  533. package/session/SessionViewer.js.map +1 -1
  534. package/session/SessionViewerLayout.d.ts +11 -8
  535. package/session/SessionViewerLayout.d.ts.map +1 -1
  536. package/session/SessionViewerLayout.js +1 -1
  537. package/session/SessionViewerLayout.js.map +1 -1
  538. package/session/facets/ArtifactsTab.js +2 -2
  539. package/session/facets/ArtifactsTab.js.map +1 -1
  540. package/session/facets/ChangesTab.js +3 -3
  541. package/session/facets/ChangesTab.js.map +1 -1
  542. package/session/facets/SetupTab.js +11 -11
  543. package/session/facets/SetupTab.js.map +1 -1
  544. package/session/facets/UsageTab.js +1 -1
  545. package/session/facets/UsageTab.js.map +1 -1
  546. package/settings/ApiKeysSection.js +1 -1
  547. package/settings/ApiKeysSection.js.map +1 -1
  548. package/settings/ChannelAppsSection.js +1 -1
  549. package/settings/ChannelAppsSection.js.map +1 -1
  550. package/settings/EnvironmentsSection.js +4 -4
  551. package/settings/EnvironmentsSection.js.map +1 -1
  552. package/settings/IdentityProvidersSection.js +1 -1
  553. package/settings/IdentityProvidersSection.js.map +1 -1
  554. package/settings/InvitationsSection.js +1 -1
  555. package/settings/InvitationsSection.js.map +1 -1
  556. package/settings/MembersSection.js +1 -1
  557. package/settings/MembersSection.js.map +1 -1
  558. package/settings/OAuthAppsSection.js +1 -1
  559. package/settings/OAuthAppsSection.js.map +1 -1
  560. package/settings/OrgProfileSection.js +1 -1
  561. package/settings/OrgProfileSection.js.map +1 -1
  562. package/settings/PlatformClientsSection.js +1 -1
  563. package/settings/PlatformClientsSection.js.map +1 -1
  564. package/settings/UsageSection.js +1 -1
  565. package/settings/UsageSection.js.map +1 -1
  566. package/sharing/AgentShareList.js +5 -5
  567. package/sharing/AgentShareList.js.map +1 -1
  568. package/sharing/ShareAgentDialog.js +30 -30
  569. package/sharing/ShareAgentDialog.js.map +1 -1
  570. package/sharing/SharedAgentChat.js +6 -6
  571. package/sharing/SharedAgentChat.js.map +1 -1
  572. package/sidebar/SettingsSidebar.js +5 -5
  573. package/sidebar/SettingsSidebar.js.map +1 -1
  574. package/sidebar/WorkspaceSidebar.js +13 -13
  575. package/sidebar/WorkspaceSidebar.js.map +1 -1
  576. package/sidebar/chrome.js +5 -5
  577. package/sidebar/chrome.js.map +1 -1
  578. package/skill/SkillDetailView.js +13 -13
  579. package/skill/SkillDetailView.js.map +1 -1
  580. package/skill/SkillDiffDialog.js +2 -2
  581. package/skill/SkillDiffDialog.js.map +1 -1
  582. package/skill/SkillFileBrowser.js +4 -4
  583. package/skill/SkillFileBrowser.js.map +1 -1
  584. package/skill/SkillPicker.js +10 -10
  585. package/skill/SkillPicker.js.map +1 -1
  586. package/skill/SkillUploader.js +8 -8
  587. package/skill/SkillUploader.js.map +1 -1
  588. package/src/__tests__/helpers/compile-sdk-styles.ts +33 -0
  589. package/src/__tests__/portal-container.test.tsx +97 -0
  590. package/src/__tests__/preflight-parity.layout.test.tsx +156 -0
  591. package/src/__tests__/scope-unprefixed.test.ts +86 -0
  592. package/src/__tests__/styles-border-layer-invariant.test.ts +86 -58
  593. package/src/__tests__/styles-dist-isolation.test.ts +195 -0
  594. package/src/__tests__/styles-host-isolation.layout.test.tsx +204 -0
  595. package/src/access/ManageAccessButton.tsx +3 -3
  596. package/src/access/ManageAccessDialog.tsx +19 -19
  597. package/src/action-menu/ActionMenu.tsx +8 -8
  598. package/src/activity/useRecentActivity.ts +6 -1
  599. package/src/agent/AgentDetailView.tsx +112 -112
  600. package/src/agent/AgentPicker.tsx +26 -26
  601. package/src/agent/steps/CapabilitiesStep.tsx +36 -36
  602. package/src/agent/steps/IdentityStep.tsx +45 -45
  603. package/src/agent/steps/ReviewStep.tsx +18 -18
  604. package/src/agent-instance/AgentInstanceDetailPanel.tsx +45 -45
  605. package/src/agent-instance/AgentInstanceList.tsx +36 -36
  606. package/src/agent-instance/CreateAgentInstanceDialog.tsx +35 -35
  607. package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +0 -6
  608. package/src/api-key/ApiKeyCreatedAlert.tsx +15 -15
  609. package/src/api-key/ApiKeyListPanel.tsx +28 -28
  610. package/src/api-key/CreateApiKeyForm.tsx +25 -25
  611. package/src/attachment/AttachmentChipList.tsx +23 -23
  612. package/src/attachment/AttachmentImageLightbox.tsx +9 -11
  613. package/src/attachment/__tests__/AttachmentChipList.test.tsx +1 -1
  614. package/src/attachment/attachment-utils.ts +8 -5
  615. package/src/billing/AutoRechargeCard.tsx +26 -26
  616. package/src/billing/BillingSection.tsx +14 -14
  617. package/src/billing/CreditBalanceCard.tsx +7 -7
  618. package/src/billing/CreditLedgerTable.tsx +27 -27
  619. package/src/billing/CreditPackGrid.tsx +13 -13
  620. package/src/billing/LowBalanceBanner.tsx +6 -6
  621. package/src/billing/PaymentMethodCard.tsx +13 -13
  622. package/src/button/Button.tsx +10 -10
  623. package/src/button/__tests__/Button.test.tsx +9 -9
  624. package/src/channel/AgentChannelsPanel.tsx +33 -33
  625. package/src/channel/ChannelConversationsDialog.tsx +21 -21
  626. package/src/channel/ChannelCredentialsDialog.tsx +13 -13
  627. package/src/channel/ChannelTemplatesDialog.tsx +34 -34
  628. package/src/channel/ChannelToolCredentials.tsx +5 -5
  629. package/src/channel/ConnectSlackDialog.tsx +48 -48
  630. package/src/channel/ConnectWhatsAppDialog.tsx +42 -42
  631. package/src/channel/__tests__/AgentChannelsPanel.test.tsx +4 -9
  632. package/src/channel/connect/ServingAppSection.tsx +14 -14
  633. package/src/channel/connect/ToolCredentialsSection.tsx +5 -5
  634. package/src/channel/connect/VerbatimRefusal.tsx +1 -1
  635. package/src/channel/connect/icons.tsx +1 -1
  636. package/src/channel-app/ChannelAppDetailPanel.tsx +44 -44
  637. package/src/channel-app/ChannelAppListPanel.tsx +15 -15
  638. package/src/channel-app/CreateChannelAppForm.tsx +37 -37
  639. package/src/channel-app/internal.tsx +21 -21
  640. package/src/composer/ComposerToolbar.tsx +15 -15
  641. package/src/composer/ConfigureMenu.tsx +22 -22
  642. package/src/composer/ContextChip.tsx +12 -12
  643. package/src/composer/ContextPopover.tsx +8 -8
  644. package/src/composer/InteractionModePicker.tsx +14 -14
  645. package/src/composer/SessionComposer.tsx +24 -24
  646. package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +16 -15
  647. package/src/composer/__tests__/SessionComposer-serviceTier.test.tsx +2 -7
  648. package/src/composer/icons.tsx +5 -5
  649. package/src/conversation/ConversationAttentionBanner.tsx +6 -6
  650. package/src/conversation/ConversationComposer.tsx +13 -13
  651. package/src/conversation/ConversationControlBanner.tsx +11 -11
  652. package/src/conversation/ConversationListPane.tsx +38 -38
  653. package/src/conversation/ConversationMediaAttachment.tsx +13 -13
  654. package/src/conversation/ConversationTimelineView.tsx +45 -45
  655. package/src/conversation/ConversationsWorkbench.tsx +10 -10
  656. package/src/conversation/__tests__/ConversationComposer.test.tsx +1 -1
  657. package/src/cursor-accounts/CursorAccountEditor.tsx +13 -13
  658. package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +3 -3
  659. package/src/cursor-accounts/CursorAccountsConsole.tsx +35 -35
  660. package/src/cursor-accounts/MemberCoverageTable.tsx +29 -29
  661. package/src/cursor-accounts/MemberKeysPanel.tsx +17 -17
  662. package/src/cursor-accounts/badges.tsx +4 -4
  663. package/src/dashboard/DashboardFailedRuns.tsx +17 -17
  664. package/src/dashboard/DashboardKPICards.tsx +12 -12
  665. package/src/dashboard/OperationalDashboard.tsx +2 -2
  666. package/src/datastore/CollectionRecordsBrowser.tsx +35 -35
  667. package/src/datastore/CollectionSchemaView.tsx +43 -43
  668. package/src/datastore/DatastoreDetailView.tsx +18 -18
  669. package/src/datastore/DatastoreSyncReport.tsx +13 -13
  670. package/src/datastore/DeleteDatastoreDialog.tsx +21 -21
  671. package/src/datastore/FieldValueControl.tsx +7 -7
  672. package/src/datastore/RecordFilterBuilder.tsx +35 -35
  673. package/src/datastore/RecordFormPanel.tsx +35 -35
  674. package/src/dependency-graph/DependencyGraph.tsx +6 -6
  675. package/src/dependency-graph/DependencyTreeNode.tsx +21 -21
  676. package/src/empty-state/EmptyState.tsx +7 -7
  677. package/src/empty-state/useEmptyState.ts +1 -1
  678. package/src/environment/CreateEnvironmentForm.tsx +24 -24
  679. package/src/environment/EnvVarForm.tsx +40 -40
  680. package/src/environment/EnvironmentListPanel.tsx +19 -19
  681. package/src/environment/EnvironmentPicker.tsx +22 -22
  682. package/src/environment/EnvironmentVariableEditor.tsx +53 -53
  683. package/src/error/ErrorMessage.tsx +22 -22
  684. package/src/error/SecretFlowErrorGuide.tsx +19 -19
  685. package/src/execution/ApprovalCard.tsx +19 -19
  686. package/src/execution/ArtifactApplyButton.tsx +7 -7
  687. package/src/execution/ArtifactContentBody.tsx +11 -11
  688. package/src/execution/ArtifactContentRenderer.tsx +29 -29
  689. package/src/execution/ArtifactDocument.tsx +22 -22
  690. package/src/execution/ArtifactFileContent.tsx +6 -6
  691. package/src/execution/ArtifactPreviewModal.tsx +33 -33
  692. package/src/execution/ArtifactRowView.tsx +13 -13
  693. package/src/execution/ArtifactsWidget.tsx +4 -4
  694. package/src/execution/ContextGauge.tsx +24 -24
  695. package/src/execution/EmptyChangeNotice.tsx +1 -1
  696. package/src/execution/ExecutionPhaseBadge.tsx +12 -12
  697. package/src/execution/ExecutionProgress.tsx +2 -2
  698. package/src/execution/FileChangeProgressBar.tsx +9 -9
  699. package/src/execution/FileChangesView.tsx +12 -12
  700. package/src/execution/FilePathLink.tsx +10 -10
  701. package/src/execution/FileReviewAtoms.tsx +9 -9
  702. package/src/execution/FileReviewCard.tsx +37 -37
  703. package/src/execution/FileReviewDock.tsx +2 -2
  704. package/src/execution/FollowUpInput.tsx +9 -9
  705. package/src/execution/InteractionModeBadge.tsx +2 -2
  706. package/src/execution/McpToolDetail.tsx +28 -28
  707. package/src/execution/MessageAttachments.tsx +16 -16
  708. package/src/execution/MessageEntry.tsx +23 -23
  709. package/src/execution/MessageThread.tsx +28 -28
  710. package/src/execution/PlanArtifactCard.tsx +22 -22
  711. package/src/execution/PlanCompletionCard.tsx +10 -10
  712. package/src/execution/PlanDocumentMessage.tsx +6 -6
  713. package/src/execution/PlanStreamingCard.tsx +11 -11
  714. package/src/execution/ResultView.tsx +44 -44
  715. package/src/execution/SessionVariablesInput.tsx +38 -38
  716. package/src/execution/SetupProgress.tsx +5 -5
  717. package/src/execution/SubAgentSection.tsx +42 -42
  718. package/src/execution/SummarizationBadge.tsx +15 -15
  719. package/src/execution/SummarizationCard.tsx +11 -11
  720. package/src/execution/TerminalSession.tsx +7 -7
  721. package/src/execution/ThreadSkeleton.tsx +10 -10
  722. package/src/execution/TodoCard.tsx +11 -11
  723. package/src/execution/TodoList.tsx +13 -13
  724. package/src/execution/ToolArgsView.tsx +8 -8
  725. package/src/execution/ToolCallDetail.tsx +7 -7
  726. package/src/execution/ToolCallGroup.tsx +1 -1
  727. package/src/execution/ToolCallItem.tsx +28 -28
  728. package/src/execution/ToolRunGroup.tsx +16 -16
  729. package/src/execution/UsageWidget.tsx +12 -12
  730. package/src/execution/WriteBackCard.tsx +30 -30
  731. package/src/execution/WriteBacksWidget.tsx +4 -4
  732. package/src/execution/__tests__/ApprovalCard.test.tsx +12 -12
  733. package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +3 -3
  734. package/src/execution/__tests__/FileChangesView.test.tsx +2 -2
  735. package/src/execution/__tests__/FilePathLink.test.tsx +1 -1
  736. package/src/execution/__tests__/FileReviewDock.test.tsx +1 -1
  737. package/src/execution/__tests__/MessageEntry-attachments.test.tsx +2 -2
  738. package/src/execution/__tests__/MessageThread.test.tsx +1 -1
  739. package/src/execution/__tests__/TerminalSession.test.tsx +1 -1
  740. package/src/execution/__tests__/ToolCallDetail.test.tsx +1 -1
  741. package/src/execution/__tests__/ToolCallGroup.test.tsx +4 -4
  742. package/src/execution/__tests__/ToolCallItem.test.tsx +9 -9
  743. package/src/execution/__tests__/ToolRunGroup.test.tsx +6 -6
  744. package/src/execution/__tests__/WriteBackCard.test.tsx +4 -4
  745. package/src/execution/__tests__/message-entry.test.tsx +8 -8
  746. package/src/execution/__tests__/thread-memoization.test.ts +2 -2
  747. package/src/execution/__tests__/thread-skeleton.test.tsx +1 -1
  748. package/src/execution/__tests__/virtualized-thread.test.tsx +1 -1
  749. package/src/execution/tool-rendering-primitives.tsx +12 -12
  750. package/src/feedback/StigmerToaster.tsx +8 -5
  751. package/src/file-reference/FileReferenceChipList.tsx +5 -5
  752. package/src/github/GitHubRepoPicker.tsx +60 -60
  753. package/src/iam-policy/GrantAccessForm.tsx +11 -11
  754. package/src/iam-policy/OrgMembersPanel.tsx +48 -48
  755. package/src/iam-policy/PeopleWithAccess.tsx +23 -23
  756. package/src/iam-policy/PrincipalPicker.tsx +34 -34
  757. package/src/iam-policy/ProviderBadge.tsx +2 -2
  758. package/src/iam-policy/RoleSelector.tsx +9 -9
  759. package/src/iam-policy/SharePanel.tsx +5 -5
  760. package/src/identity-provider/CreateIdentityProviderForm.tsx +47 -47
  761. package/src/identity-provider/IdentityProviderDetailPanel.tsx +73 -73
  762. package/src/identity-provider/IdentityProviderListPanel.tsx +33 -33
  763. package/src/identity-provider/IdentityProviderWizard.tsx +72 -72
  764. package/src/identity-provider/ProviderPicker.tsx +17 -17
  765. package/src/identity-provider/SsoLoginPrompt.tsx +39 -39
  766. package/src/index.ts +1 -0
  767. package/src/inline-edit/InlineEditImage.tsx +26 -26
  768. package/src/inline-edit/InlineEditKeyValue.tsx +44 -44
  769. package/src/inline-edit/InlineEditResourceList.tsx +48 -48
  770. package/src/inline-edit/InlineEditSelect.tsx +22 -22
  771. package/src/inline-edit/InlineEditText.tsx +29 -29
  772. package/src/inline-edit/InlineEditTextarea.tsx +27 -27
  773. package/src/internal/ApprovalPeekBar.tsx +9 -9
  774. package/src/internal/BoundedContent.tsx +3 -3
  775. package/src/internal/CloudFeatureNotice.tsx +3 -3
  776. package/src/internal/DecisionButton.tsx +10 -10
  777. package/src/internal/InCardDecisionError.tsx +1 -1
  778. package/src/internal/JumpToLatestButton.tsx +9 -9
  779. package/src/internal/MermaidDiagram.tsx +5 -5
  780. package/src/internal/Pagination.tsx +5 -5
  781. package/src/internal/ResizableSplit.tsx +61 -20
  782. package/src/internal/RevealToggle.tsx +5 -5
  783. package/src/internal/ScrollFade.tsx +2 -2
  784. package/src/internal/VirtualizedThread.tsx +6 -6
  785. package/src/internal/__tests__/BoundedContent.test.tsx +1 -1
  786. package/src/internal/__tests__/DecisionButton.test.tsx +14 -14
  787. package/src/internal/__tests__/ResizableSplit.layout.test.tsx +136 -0
  788. package/src/internal/__tests__/ResizableSplit.test.tsx +49 -2
  789. package/src/internal/__tests__/ThreadCardShell.test.tsx +4 -4
  790. package/src/internal/__tests__/markdown-components.test.tsx +2 -2
  791. package/src/internal/__tests__/thread-animation.test.tsx +6 -6
  792. package/src/internal/file-icons/index.tsx +2 -2
  793. package/src/internal/file-tree/FileTreeNode.tsx +9 -9
  794. package/src/internal/file-tree/__tests__/FileTreeNode-explorer.test.tsx +1 -1
  795. package/src/internal/form-primitives.tsx +18 -16
  796. package/src/internal/markdown-components.tsx +24 -24
  797. package/src/internal/menu.tsx +18 -18
  798. package/src/internal/scroll-area.tsx +6 -6
  799. package/src/internal/thread-card/ThreadCardShell.tsx +10 -10
  800. package/src/internal/thread-card/glyphs.tsx +3 -3
  801. package/src/internal/tooltip.tsx +9 -11
  802. package/src/invitation/InvitationCreatedAlert.tsx +15 -15
  803. package/src/invitation/InvitationManager.tsx +79 -79
  804. package/src/invitation/InvitationRedemption.tsx +49 -49
  805. package/src/library/ResourceCountCard.tsx +7 -7
  806. package/src/library/ScopeToggle.tsx +7 -7
  807. package/src/library/VisibilityOptionRow.tsx +30 -30
  808. package/src/library/VisibilitySelector.tsx +19 -19
  809. package/src/library/__tests__/VisibilitySelector.test.tsx +0 -6
  810. package/src/manifest/ApplyManifestDialog.tsx +36 -36
  811. package/src/manifest/EditResourceYamlDialog.tsx +32 -32
  812. package/src/manifest/RedactedSecretsNotice.tsx +2 -2
  813. package/src/manifest/YamlEditor.tsx +1 -1
  814. package/src/mcp-server/McpServerConfigPanel.tsx +70 -70
  815. package/src/mcp-server/McpServerConnectDialog.tsx +80 -53
  816. package/src/mcp-server/McpServerDetailView.tsx +325 -224
  817. package/src/mcp-server/McpServerPicker.tsx +50 -50
  818. package/src/mcp-server/McpToolSelector.tsx +26 -26
  819. package/src/mcp-server/OAuthAppForm.tsx +32 -32
  820. package/src/mcp-server/OAuthCallbackHandler.tsx +11 -11
  821. package/src/mcp-server/OAuthRequiredNotice.tsx +3 -3
  822. package/src/mcp-server/StdioSandboxNotice.tsx +3 -3
  823. package/src/mcp-server/__tests__/McpServerDetailView.test.tsx +162 -7
  824. package/src/mcp-server/__tests__/useMcpServerOAuthConnect.test.tsx +159 -0
  825. package/src/mcp-server/index.ts +4 -1
  826. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +71 -71
  827. package/src/mcp-server/steps/IdentityTransportStep.tsx +94 -94
  828. package/src/mcp-server/steps/ReviewStep.tsx +17 -17
  829. package/src/mcp-server/useMcpServerOAuthConnect.ts +65 -10
  830. package/src/models/HarnessSelector.tsx +8 -8
  831. package/src/models/ModelSelector.tsx +58 -58
  832. package/src/models/__tests__/ModelSelector-serviceTier.test.tsx +2 -7
  833. package/src/oauth-app/CreateOAuthAppForm.tsx +28 -28
  834. package/src/oauth-app/OAuthAppDetailPanel.tsx +51 -51
  835. package/src/oauth-app/OAuthAppListPanel.tsx +14 -14
  836. package/src/organization/CreateOrganizationForm.tsx +37 -37
  837. package/src/organization/OrgProfilePanel.tsx +65 -65
  838. package/src/organization/OrgSwitcher.tsx +33 -33
  839. package/src/platform-client/CreatePlatformClientForm.tsx +59 -59
  840. package/src/platform-client/PlatformClientDetailPanel.tsx +107 -107
  841. package/src/platform-client/PlatformClientListPanel.tsx +38 -38
  842. package/src/platform-client/PlatformClientSecretAlert.tsx +18 -18
  843. package/src/portal-container.ts +36 -9
  844. package/src/pricing-governance/BaselineEditor.tsx +29 -29
  845. package/src/pricing-governance/ModelCatalogPanel.tsx +28 -28
  846. package/src/pricing-governance/ModelGovernanceDetail.tsx +35 -35
  847. package/src/pricing-governance/OperatorAccessNotice.tsx +3 -3
  848. package/src/pricing-governance/PricingGovernanceConsole.tsx +31 -31
  849. package/src/pricing-governance/PricingGovernancePanel.tsx +19 -19
  850. package/src/pricing-governance/RetireConfirm.tsx +7 -7
  851. package/src/pricing-governance/governance-primitives.tsx +12 -12
  852. package/src/resource-creation/CreationPicker.tsx +23 -23
  853. package/src/resource-creation/StepIndicator.tsx +17 -17
  854. package/src/resource-creation/TemplateCard.tsx +23 -23
  855. package/src/resource-creation/TemplateGallery.tsx +13 -13
  856. package/src/resource-creation/WizardNav.tsx +19 -19
  857. package/src/resource-creation/WizardShell.tsx +7 -7
  858. package/src/resource-detail/ConfirmDialog.tsx +16 -16
  859. package/src/resource-detail/ResourceActionBar.tsx +6 -6
  860. package/src/resource-detail/ResourceDetailShell.tsx +14 -14
  861. package/src/resource-detail/Section.tsx +10 -10
  862. package/src/resource-workbench/components/BulkActionBar.tsx +13 -13
  863. package/src/resource-workbench/components/ColumnHeader.tsx +9 -9
  864. package/src/resource-workbench/components/FilterBar.tsx +9 -9
  865. package/src/resource-workbench/components/ResourceAvatar.tsx +19 -19
  866. package/src/resource-workbench/components/ResourceCards.tsx +8 -8
  867. package/src/resource-workbench/components/ResourceInspector.tsx +8 -8
  868. package/src/resource-workbench/components/ResourceList.tsx +7 -7
  869. package/src/resource-workbench/components/ResourceTable.tsx +12 -12
  870. package/src/resource-workbench/components/ResourceWorkbench.tsx +42 -42
  871. package/src/resource-workbench/components/SelectionCheckbox.tsx +2 -2
  872. package/src/resource-workbench/components/StatusBadge.tsx +17 -17
  873. package/src/resource-workbench/components/ViewSwitcher.tsx +7 -7
  874. package/src/schedule/CadenceField.tsx +36 -36
  875. package/src/schedule/ScheduleDetailView.tsx +105 -105
  876. package/src/schedule/ScheduleForm.tsx +49 -49
  877. package/src/schedule/ScheduleRowActions.tsx +4 -4
  878. package/src/schedule/ScheduleRunsTable.tsx +43 -43
  879. package/src/schedule/TimeZoneField.tsx +12 -12
  880. package/src/schedule/__tests__/scheduleCreation.test.tsx +0 -7
  881. package/src/schedule/scheduleColumns.tsx +7 -7
  882. package/src/session/NewSessionViewer.tsx +5 -5
  883. package/src/session/PlanEditor.tsx +37 -37
  884. package/src/session/PlanStreamingDocument.tsx +8 -8
  885. package/src/session/SessionViewer.tsx +48 -48
  886. package/src/session/SessionViewerLayout.tsx +14 -11
  887. package/src/session/__tests__/NewSessionViewer.test.tsx +4 -4
  888. package/src/session/__tests__/PlanEditor.test.tsx +2 -2
  889. package/src/session/__tests__/SessionViewerLayout.test.tsx +20 -8
  890. package/src/session/facets/ArtifactsTab.tsx +3 -3
  891. package/src/session/facets/ChangesTab.tsx +5 -5
  892. package/src/session/facets/SetupTab.tsx +26 -26
  893. package/src/session/facets/UsageTab.tsx +2 -2
  894. package/src/settings/ApiKeysSection.tsx +6 -6
  895. package/src/settings/ChannelAppsSection.tsx +6 -6
  896. package/src/settings/EnvironmentsSection.tsx +15 -15
  897. package/src/settings/IdentityProvidersSection.tsx +7 -7
  898. package/src/settings/InvitationsSection.tsx +4 -4
  899. package/src/settings/MembersSection.tsx +5 -5
  900. package/src/settings/OAuthAppsSection.tsx +6 -6
  901. package/src/settings/OrgProfileSection.tsx +3 -3
  902. package/src/settings/PlatformClientsSection.tsx +7 -7
  903. package/src/settings/UsageSection.tsx +3 -3
  904. package/src/sharing/AgentShareList.tsx +39 -39
  905. package/src/sharing/ShareAgentDialog.tsx +149 -149
  906. package/src/sharing/SharedAgentChat.tsx +24 -24
  907. package/src/sharing/__tests__/AgentShareList.test.tsx +0 -7
  908. package/src/sidebar/SettingsSidebar.tsx +7 -7
  909. package/src/sidebar/WorkspaceSidebar.tsx +25 -25
  910. package/src/sidebar/__tests__/SettingsSidebar.test.tsx +3 -7
  911. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -11
  912. package/src/sidebar/chrome.tsx +16 -16
  913. package/src/skill/SkillDetailView.tsx +54 -54
  914. package/src/skill/SkillDiffDialog.tsx +25 -25
  915. package/src/skill/SkillFileBrowser.tsx +22 -22
  916. package/src/skill/SkillPicker.tsx +28 -28
  917. package/src/skill/SkillUploader.tsx +67 -67
  918. package/src/styles.css +136 -15
  919. package/src/switch/Switch.tsx +9 -9
  920. package/src/switch/__tests__/Switch.test.tsx +3 -3
  921. package/src/tabs/Tabs.tsx +11 -11
  922. package/src/usage/AgentBreakdownList.tsx +18 -18
  923. package/src/usage/CreditRunwayIndicator.tsx +4 -4
  924. package/src/usage/ExportButton.tsx +8 -8
  925. package/src/usage/HarnessSplitCard.tsx +14 -14
  926. package/src/usage/OrgUsagePanel.tsx +71 -71
  927. package/src/user/UserMenu.tsx +13 -13
  928. package/src/version-history/DiffFileList.tsx +13 -13
  929. package/src/version-history/DiffSummary.tsx +3 -3
  930. package/src/version-history/DiffViewer.tsx +14 -14
  931. package/src/version-history/MultiFileDiffView.tsx +6 -6
  932. package/src/version-history/UnifiedDiffView.tsx +4 -4
  933. package/src/version-history/VersionTimeline.tsx +21 -21
  934. package/src/version-history/VersionTimelineEntry.tsx +28 -28
  935. package/src/version-history/__tests__/UnifiedDiffView.test.tsx +2 -2
  936. package/src/workflow/ApprovalFormBuilder.tsx +48 -48
  937. package/src/workflow/BranchConditionBuilder.tsx +21 -21
  938. package/src/workflow/CanvasContextMenu.tsx +10 -10
  939. package/src/workflow/CanvasTransitionEdge.tsx +16 -16
  940. package/src/workflow/CostByWorkflowChart.tsx +18 -18
  941. package/src/workflow/ExecutionActiveTaskIndicator.tsx +13 -13
  942. package/src/workflow/ExecutionSummaryWidget.tsx +29 -29
  943. package/src/workflow/ExecutionTrendChart.tsx +25 -25
  944. package/src/workflow/FailedRunsWidget.tsx +14 -14
  945. package/src/workflow/PendingApprovalsWidget.tsx +19 -19
  946. package/src/workflow/TaskConfigForm.tsx +32 -32
  947. package/src/workflow/TaskPickerPopover.tsx +22 -22
  948. package/src/workflow/ViewYamlDialog.tsx +12 -12
  949. package/src/workflow/WorkflowAgentCallTranscript.tsx +15 -15
  950. package/src/workflow/WorkflowApprovalList.tsx +3 -3
  951. package/src/workflow/WorkflowArchitectDialog.tsx +80 -80
  952. package/src/workflow/WorkflowArtifactDocument.tsx +17 -17
  953. package/src/workflow/WorkflowCanvasEditor.tsx +22 -22
  954. package/src/workflow/WorkflowCanvasInner.tsx +3 -3
  955. package/src/workflow/WorkflowCodePreviewGraph.tsx +2 -2
  956. package/src/workflow/WorkflowDashboard.tsx +2 -2
  957. package/src/workflow/WorkflowDetailView.tsx +50 -50
  958. package/src/workflow/WorkflowDiffGraph.tsx +5 -5
  959. package/src/workflow/WorkflowEditorView.tsx +58 -58
  960. package/src/workflow/WorkflowExecutionGraph.tsx +15 -15
  961. package/src/workflow/WorkflowExecutionHeader.tsx +14 -14
  962. package/src/workflow/WorkflowExecutionPhaseBadge.tsx +11 -11
  963. package/src/workflow/WorkflowExecutionViewer.tsx +39 -39
  964. package/src/workflow/WorkflowExplainDialog.tsx +30 -30
  965. package/src/workflow/WorkflowFileReviewList.tsx +3 -3
  966. package/src/workflow/WorkflowGraphFullscreenDialog.tsx +11 -11
  967. package/src/workflow/WorkflowNode.tsx +2 -2
  968. package/src/workflow/WorkflowNodePopover.tsx +15 -15
  969. package/src/workflow/WorkflowOverviewGraph.tsx +9 -9
  970. package/src/workflow/WorkflowOverviewSummary.tsx +12 -12
  971. package/src/workflow/WorkflowRefinePanel.tsx +49 -49
  972. package/src/workflow/WorkflowRepairCard.tsx +53 -53
  973. package/src/workflow/WorkflowRunDialog.tsx +20 -20
  974. package/src/workflow/WorkflowRunForm.tsx +19 -19
  975. package/src/workflow/WorkflowTaskApprovalCard.tsx +19 -19
  976. package/src/workflow/WorkflowTaskApprovalSummary.tsx +23 -23
  977. package/src/workflow/WorkflowTaskList.tsx +11 -11
  978. package/src/workflow/WorkflowTaskPalette.tsx +23 -23
  979. package/src/workflow/WorkflowTaskReviewGate.tsx +10 -10
  980. package/src/workflow/WorkflowVersionBadge.tsx +7 -7
  981. package/src/workflow/WorkflowVersionDiffViewer.tsx +24 -24
  982. package/src/workflow/WorkflowVersionTimeline.tsx +32 -32
  983. package/src/workflow/WorkflowVersionsTab.tsx +7 -7
  984. package/src/workflow/__tests__/WorkflowAgentCallTranscript.test.tsx +2 -2
  985. package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +6 -6
  986. package/src/workflow/__tests__/WorkflowTaskApprovalCard.test.tsx +15 -15
  987. package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
  988. package/src/workflow/__tests__/node-shell.test.ts +2 -0
  989. package/src/workflow/__tests__/task-type-visual-registry.test.ts +2 -0
  990. package/src/workflow/diff/DiffSummaryBar.tsx +5 -5
  991. package/src/workflow/execution-comparison/ComparisonSummaryCards.tsx +11 -11
  992. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -20
  993. package/src/workflow/execution-comparison/ExecutionComparisonView.tsx +16 -16
  994. package/src/workflow/execution-comparison/TaskComparisonTable.tsx +44 -44
  995. package/src/workflow/execution-history/ExecutionFilterBar.tsx +12 -12
  996. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +25 -25
  997. package/src/workflow/execution-history/FailureAnalysisPanel.tsx +18 -18
  998. package/src/workflow/execution-history/HealthMetricsStrip.tsx +16 -16
  999. package/src/workflow/execution-history/WorkflowExecutionHistory.tsx +1 -1
  1000. package/src/workflow/facets/WorkflowArtifactsTab.tsx +3 -3
  1001. package/src/workflow/facets/WorkflowChangesTab.tsx +8 -8
  1002. package/src/workflow/facets/WorkflowUsageTab.tsx +24 -24
  1003. package/src/workflow/inspector/EdgeInspector.tsx +14 -14
  1004. package/src/workflow/inspector/InspectorHeader.tsx +18 -18
  1005. package/src/workflow/inspector/InspectorShell.tsx +6 -6
  1006. package/src/workflow/inspector/NestedTaskList.tsx +11 -11
  1007. package/src/workflow/inspector/SentinelInspector.tsx +3 -3
  1008. package/src/workflow/inspector/WorkflowSummaryPanel.tsx +33 -33
  1009. package/src/workflow/inspector/forms/AgentCallForm.tsx +48 -48
  1010. package/src/workflow/inspector/forms/HttpCallForm.tsx +22 -22
  1011. package/src/workflow/inspector/tabs/AdvancedTab.tsx +12 -12
  1012. package/src/workflow/inspector/tabs/BranchesTab.tsx +36 -36
  1013. package/src/workflow/inspector/tabs/CatchTab.tsx +23 -23
  1014. package/src/workflow/inspector/tabs/ConfigureTab.tsx +3 -3
  1015. package/src/workflow/inspector/tabs/DataTab.tsx +6 -6
  1016. package/src/workflow/inspector/tabs/DocsTab.tsx +11 -11
  1017. package/src/workflow/inspector/tabs/IterationTab.tsx +25 -25
  1018. package/src/workflow/inspector/tabs/RuntimeTab.tsx +16 -16
  1019. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +35 -35
  1020. package/src/workflow/instance/RunVisibilityControl.tsx +10 -10
  1021. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +45 -45
  1022. package/src/workflow/instance/WorkflowInstanceList.tsx +32 -32
  1023. package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +0 -6
  1024. package/src/workflow/node-shell/BranchBadge.tsx +9 -9
  1025. package/src/workflow/node-shell/DiffBadge.tsx +4 -4
  1026. package/src/workflow/node-shell/ExecutionBadge.tsx +17 -17
  1027. package/src/workflow/node-shell/NodeActions.tsx +15 -15
  1028. package/src/workflow/node-shell/NodeContent.tsx +9 -9
  1029. package/src/workflow/node-shell/NodeHandles.tsx +5 -5
  1030. package/src/workflow/node-shell/NodeShell.tsx +27 -27
  1031. package/src/workflow/picker/BranchAddPopover.tsx +16 -16
  1032. package/src/workflow/task-detail/StructuredDataViewer.tsx +34 -34
  1033. package/src/workflow/templates/WorkflowTemplateCard.tsx +32 -32
  1034. package/src/workflow/templates/WorkflowTemplateGallery.tsx +13 -13
  1035. package/src/workflow/templates/WorkflowTemplatePreview.tsx +29 -29
  1036. package/src/workflow/thread/WorkflowTaskThread.tsx +36 -36
  1037. package/src/workspace/EditorTabs.tsx +8 -8
  1038. package/src/workspace/ExplorerTree.tsx +17 -17
  1039. package/src/workspace/FileViewer.tsx +38 -38
  1040. package/src/workspace/PanelChip.tsx +4 -4
  1041. package/src/workspace/WorkspaceContentSearch.tsx +26 -26
  1042. package/src/workspace/WorkspaceEditor.tsx +44 -44
  1043. package/src/workspace/WorkspaceFileSearch.tsx +22 -22
  1044. package/src/workspace/WorkspaceSummary.tsx +6 -6
  1045. package/src/workspace/WorkspaceSurface.tsx +42 -42
  1046. package/src/workspace/__tests__/FileViewer.test.tsx +1 -1
  1047. package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +5 -5
  1048. package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +3 -3
  1049. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +6 -6
  1050. package/styles.css +1 -1
  1051. package/switch/Switch.js +2 -2
  1052. package/switch/Switch.js.map +1 -1
  1053. package/tabs/Tabs.js +7 -7
  1054. package/tabs/Tabs.js.map +1 -1
  1055. package/usage/AgentBreakdownList.js +4 -4
  1056. package/usage/AgentBreakdownList.js.map +1 -1
  1057. package/usage/CreditRunwayIndicator.js +1 -1
  1058. package/usage/CreditRunwayIndicator.js.map +1 -1
  1059. package/usage/ExportButton.js +2 -2
  1060. package/usage/ExportButton.js.map +1 -1
  1061. package/usage/HarnessSplitCard.js +6 -6
  1062. package/usage/HarnessSplitCard.js.map +1 -1
  1063. package/usage/OrgUsagePanel.js +15 -15
  1064. package/usage/OrgUsagePanel.js.map +1 -1
  1065. package/user/UserMenu.js +3 -3
  1066. package/user/UserMenu.js.map +1 -1
  1067. package/version-history/DiffFileList.js +8 -8
  1068. package/version-history/DiffFileList.js.map +1 -1
  1069. package/version-history/DiffSummary.js +1 -1
  1070. package/version-history/DiffSummary.js.map +1 -1
  1071. package/version-history/DiffViewer.js +11 -11
  1072. package/version-history/DiffViewer.js.map +1 -1
  1073. package/version-history/MultiFileDiffView.js +2 -2
  1074. package/version-history/MultiFileDiffView.js.map +1 -1
  1075. package/version-history/UnifiedDiffView.js +1 -1
  1076. package/version-history/UnifiedDiffView.js.map +1 -1
  1077. package/version-history/VersionTimeline.js +4 -4
  1078. package/version-history/VersionTimeline.js.map +1 -1
  1079. package/version-history/VersionTimelineEntry.js +9 -9
  1080. package/version-history/VersionTimelineEntry.js.map +1 -1
  1081. package/workflow/ApprovalFormBuilder.js +15 -15
  1082. package/workflow/ApprovalFormBuilder.js.map +1 -1
  1083. package/workflow/BranchConditionBuilder.js +8 -8
  1084. package/workflow/BranchConditionBuilder.js.map +1 -1
  1085. package/workflow/CanvasContextMenu.js +6 -6
  1086. package/workflow/CanvasContextMenu.js.map +1 -1
  1087. package/workflow/CanvasTransitionEdge.js +11 -11
  1088. package/workflow/CanvasTransitionEdge.js.map +1 -1
  1089. package/workflow/CostByWorkflowChart.js +4 -4
  1090. package/workflow/CostByWorkflowChart.js.map +1 -1
  1091. package/workflow/ExecutionActiveTaskIndicator.js +8 -8
  1092. package/workflow/ExecutionActiveTaskIndicator.js.map +1 -1
  1093. package/workflow/ExecutionSummaryWidget.js +15 -15
  1094. package/workflow/ExecutionSummaryWidget.js.map +1 -1
  1095. package/workflow/ExecutionTrendChart.js +10 -10
  1096. package/workflow/ExecutionTrendChart.js.map +1 -1
  1097. package/workflow/FailedRunsWidget.js +3 -3
  1098. package/workflow/FailedRunsWidget.js.map +1 -1
  1099. package/workflow/PendingApprovalsWidget.js +3 -3
  1100. package/workflow/PendingApprovalsWidget.js.map +1 -1
  1101. package/workflow/TaskConfigForm.js +12 -12
  1102. package/workflow/TaskConfigForm.js.map +1 -1
  1103. package/workflow/TaskPickerPopover.js +5 -5
  1104. package/workflow/TaskPickerPopover.js.map +1 -1
  1105. package/workflow/ViewYamlDialog.js +2 -2
  1106. package/workflow/ViewYamlDialog.js.map +1 -1
  1107. package/workflow/WorkflowAgentCallTranscript.js +2 -2
  1108. package/workflow/WorkflowAgentCallTranscript.js.map +1 -1
  1109. package/workflow/WorkflowApprovalList.js +2 -2
  1110. package/workflow/WorkflowApprovalList.js.map +1 -1
  1111. package/workflow/WorkflowArchitectDialog.js +9 -9
  1112. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  1113. package/workflow/WorkflowArtifactDocument.js +7 -7
  1114. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  1115. package/workflow/WorkflowCanvasEditor.js +6 -6
  1116. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  1117. package/workflow/WorkflowCanvasInner.js +1 -1
  1118. package/workflow/WorkflowCanvasInner.js.map +1 -1
  1119. package/workflow/WorkflowCodePreviewGraph.js +2 -2
  1120. package/workflow/WorkflowCodePreviewGraph.js.map +1 -1
  1121. package/workflow/WorkflowDashboard.js +1 -1
  1122. package/workflow/WorkflowDashboard.js.map +1 -1
  1123. package/workflow/WorkflowDetailView.js +15 -15
  1124. package/workflow/WorkflowDetailView.js.map +1 -1
  1125. package/workflow/WorkflowDiffGraph.js +3 -3
  1126. package/workflow/WorkflowDiffGraph.js.map +1 -1
  1127. package/workflow/WorkflowEditorView.js +13 -13
  1128. package/workflow/WorkflowEditorView.js.map +1 -1
  1129. package/workflow/WorkflowExecutionGraph.js +6 -6
  1130. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  1131. package/workflow/WorkflowExecutionHeader.js +4 -4
  1132. package/workflow/WorkflowExecutionHeader.js.map +1 -1
  1133. package/workflow/WorkflowExecutionPhaseBadge.js +9 -9
  1134. package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -1
  1135. package/workflow/WorkflowExecutionViewer.js +16 -16
  1136. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  1137. package/workflow/WorkflowExplainDialog.js +2 -2
  1138. package/workflow/WorkflowExplainDialog.js.map +1 -1
  1139. package/workflow/WorkflowFileReviewList.js +2 -2
  1140. package/workflow/WorkflowFileReviewList.js.map +1 -1
  1141. package/workflow/WorkflowGraphFullscreenDialog.js +1 -1
  1142. package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
  1143. package/workflow/WorkflowNode.js +1 -1
  1144. package/workflow/WorkflowNode.js.map +1 -1
  1145. package/workflow/WorkflowNodePopover.js +2 -2
  1146. package/workflow/WorkflowNodePopover.js.map +1 -1
  1147. package/workflow/WorkflowOverviewGraph.js +4 -4
  1148. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  1149. package/workflow/WorkflowOverviewSummary.js +8 -8
  1150. package/workflow/WorkflowOverviewSummary.js.map +1 -1
  1151. package/workflow/WorkflowRefinePanel.js +5 -5
  1152. package/workflow/WorkflowRefinePanel.js.map +1 -1
  1153. package/workflow/WorkflowRepairCard.js +5 -5
  1154. package/workflow/WorkflowRepairCard.js.map +1 -1
  1155. package/workflow/WorkflowRunDialog.js +2 -2
  1156. package/workflow/WorkflowRunDialog.js.map +1 -1
  1157. package/workflow/WorkflowRunForm.js +10 -10
  1158. package/workflow/WorkflowRunForm.js.map +1 -1
  1159. package/workflow/WorkflowTaskApprovalCard.js +1 -1
  1160. package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
  1161. package/workflow/WorkflowTaskApprovalSummary.js +8 -8
  1162. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  1163. package/workflow/WorkflowTaskList.js +4 -4
  1164. package/workflow/WorkflowTaskList.js.map +1 -1
  1165. package/workflow/WorkflowTaskPalette.js +5 -5
  1166. package/workflow/WorkflowTaskPalette.js.map +1 -1
  1167. package/workflow/WorkflowTaskReviewGate.js +3 -3
  1168. package/workflow/WorkflowTaskReviewGate.js.map +1 -1
  1169. package/workflow/WorkflowVersionBadge.js +1 -1
  1170. package/workflow/WorkflowVersionBadge.js.map +1 -1
  1171. package/workflow/WorkflowVersionDiffViewer.js +12 -12
  1172. package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
  1173. package/workflow/WorkflowVersionTimeline.js +7 -7
  1174. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  1175. package/workflow/WorkflowVersionsTab.js +1 -1
  1176. package/workflow/WorkflowVersionsTab.js.map +1 -1
  1177. package/workflow/diff/DiffSummaryBar.js +2 -2
  1178. package/workflow/diff/DiffSummaryBar.js.map +1 -1
  1179. package/workflow/execution-comparison/ComparisonSummaryCards.js +1 -1
  1180. package/workflow/execution-comparison/ComparisonSummaryCards.js.map +1 -1
  1181. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -7
  1182. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  1183. package/workflow/execution-comparison/ExecutionComparisonView.js +4 -4
  1184. package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
  1185. package/workflow/execution-comparison/TaskComparisonTable.js +22 -22
  1186. package/workflow/execution-comparison/TaskComparisonTable.js.map +1 -1
  1187. package/workflow/execution-history/ExecutionFilterBar.js +5 -5
  1188. package/workflow/execution-history/ExecutionFilterBar.js.map +1 -1
  1189. package/workflow/execution-history/ExecutionHistoryTable.js +11 -11
  1190. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  1191. package/workflow/execution-history/FailureAnalysisPanel.js +4 -4
  1192. package/workflow/execution-history/FailureAnalysisPanel.js.map +1 -1
  1193. package/workflow/execution-history/HealthMetricsStrip.js +8 -8
  1194. package/workflow/execution-history/HealthMetricsStrip.js.map +1 -1
  1195. package/workflow/execution-history/WorkflowExecutionHistory.js +1 -1
  1196. package/workflow/execution-history/WorkflowExecutionHistory.js.map +1 -1
  1197. package/workflow/facets/WorkflowArtifactsTab.js +2 -2
  1198. package/workflow/facets/WorkflowArtifactsTab.js.map +1 -1
  1199. package/workflow/facets/WorkflowChangesTab.js +5 -5
  1200. package/workflow/facets/WorkflowChangesTab.js.map +1 -1
  1201. package/workflow/facets/WorkflowUsageTab.js +6 -6
  1202. package/workflow/facets/WorkflowUsageTab.js.map +1 -1
  1203. package/workflow/inspector/EdgeInspector.js +1 -1
  1204. package/workflow/inspector/EdgeInspector.js.map +1 -1
  1205. package/workflow/inspector/InspectorHeader.js +7 -7
  1206. package/workflow/inspector/InspectorHeader.js.map +1 -1
  1207. package/workflow/inspector/InspectorShell.js +2 -2
  1208. package/workflow/inspector/InspectorShell.js.map +1 -1
  1209. package/workflow/inspector/NestedTaskList.js +2 -2
  1210. package/workflow/inspector/NestedTaskList.js.map +1 -1
  1211. package/workflow/inspector/SentinelInspector.js +1 -1
  1212. package/workflow/inspector/SentinelInspector.js.map +1 -1
  1213. package/workflow/inspector/WorkflowSummaryPanel.js +5 -5
  1214. package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
  1215. package/workflow/inspector/forms/AgentCallForm.js +9 -9
  1216. package/workflow/inspector/forms/AgentCallForm.js.map +1 -1
  1217. package/workflow/inspector/forms/HttpCallForm.js +4 -4
  1218. package/workflow/inspector/forms/HttpCallForm.js.map +1 -1
  1219. package/workflow/inspector/tabs/AdvancedTab.js +2 -2
  1220. package/workflow/inspector/tabs/AdvancedTab.js.map +1 -1
  1221. package/workflow/inspector/tabs/BranchesTab.js +6 -6
  1222. package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
  1223. package/workflow/inspector/tabs/CatchTab.js +2 -2
  1224. package/workflow/inspector/tabs/CatchTab.js.map +1 -1
  1225. package/workflow/inspector/tabs/ConfigureTab.js +3 -3
  1226. package/workflow/inspector/tabs/ConfigureTab.js.map +1 -1
  1227. package/workflow/inspector/tabs/DataTab.js +1 -1
  1228. package/workflow/inspector/tabs/DataTab.js.map +1 -1
  1229. package/workflow/inspector/tabs/DocsTab.js +1 -1
  1230. package/workflow/inspector/tabs/DocsTab.js.map +1 -1
  1231. package/workflow/inspector/tabs/IterationTab.js +3 -3
  1232. package/workflow/inspector/tabs/IterationTab.js.map +1 -1
  1233. package/workflow/inspector/tabs/RuntimeTab.js +9 -9
  1234. package/workflow/inspector/tabs/RuntimeTab.js.map +1 -1
  1235. package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
  1236. package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
  1237. package/workflow/instance/RunVisibilityControl.js +5 -5
  1238. package/workflow/instance/RunVisibilityControl.js.map +1 -1
  1239. package/workflow/instance/WorkflowInstanceDetailPanel.js +2 -2
  1240. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  1241. package/workflow/instance/WorkflowInstanceList.js +4 -4
  1242. package/workflow/instance/WorkflowInstanceList.js.map +1 -1
  1243. package/workflow/node-shell/BranchBadge.js +3 -3
  1244. package/workflow/node-shell/BranchBadge.js.map +1 -1
  1245. package/workflow/node-shell/DiffBadge.js +4 -4
  1246. package/workflow/node-shell/DiffBadge.js.map +1 -1
  1247. package/workflow/node-shell/ExecutionBadge.js +10 -10
  1248. package/workflow/node-shell/ExecutionBadge.js.map +1 -1
  1249. package/workflow/node-shell/NodeActions.js +3 -3
  1250. package/workflow/node-shell/NodeActions.js.map +1 -1
  1251. package/workflow/node-shell/NodeContent.js +5 -5
  1252. package/workflow/node-shell/NodeContent.js.map +1 -1
  1253. package/workflow/node-shell/NodeHandles.js +5 -5
  1254. package/workflow/node-shell/NodeHandles.js.map +1 -1
  1255. package/workflow/node-shell/NodeShell.js +14 -14
  1256. package/workflow/node-shell/NodeShell.js.map +1 -1
  1257. package/workflow/picker/BranchAddPopover.js +2 -2
  1258. package/workflow/picker/BranchAddPopover.js.map +1 -1
  1259. package/workflow/task-detail/StructuredDataViewer.js +12 -12
  1260. package/workflow/task-detail/StructuredDataViewer.js.map +1 -1
  1261. package/workflow/templates/WorkflowTemplateCard.js +17 -17
  1262. package/workflow/templates/WorkflowTemplateCard.js.map +1 -1
  1263. package/workflow/templates/WorkflowTemplateGallery.js +5 -5
  1264. package/workflow/templates/WorkflowTemplateGallery.js.map +1 -1
  1265. package/workflow/templates/WorkflowTemplatePreview.js +5 -5
  1266. package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
  1267. package/workflow/thread/WorkflowTaskThread.js +16 -16
  1268. package/workflow/thread/WorkflowTaskThread.js.map +1 -1
  1269. package/workspace/EditorTabs.js +5 -5
  1270. package/workspace/EditorTabs.js.map +1 -1
  1271. package/workspace/ExplorerTree.js +6 -6
  1272. package/workspace/ExplorerTree.js.map +1 -1
  1273. package/workspace/FileViewer.js +20 -20
  1274. package/workspace/FileViewer.js.map +1 -1
  1275. package/workspace/PanelChip.js +1 -1
  1276. package/workspace/PanelChip.js.map +1 -1
  1277. package/workspace/WorkspaceContentSearch.js +11 -11
  1278. package/workspace/WorkspaceContentSearch.js.map +1 -1
  1279. package/workspace/WorkspaceEditor.js +10 -10
  1280. package/workspace/WorkspaceEditor.js.map +1 -1
  1281. package/workspace/WorkspaceFileSearch.js +9 -9
  1282. package/workspace/WorkspaceFileSearch.js.map +1 -1
  1283. package/workspace/WorkspaceSummary.js +3 -3
  1284. package/workspace/WorkspaceSummary.js.map +1 -1
  1285. package/workspace/WorkspaceSurface.js +22 -22
  1286. package/workspace/WorkspaceSurface.js.map +1 -1
@@ -19,7 +19,10 @@ import { useUpdateMcpServer } from "./useUpdateMcpServer.js";
19
19
  import { mcpServerToInput } from "./internal/mcpServerToInput.js";
20
20
  import { useMcpServerConnect } from "./useMcpServerConnect.js";
21
21
  import { useMcpServerCredentials } from "./useMcpServerCredentials.js";
22
- import { useMcpServerOAuthConnect } from "./useMcpServerOAuthConnect.js";
22
+ import {
23
+ useMcpServerOAuthConnect,
24
+ getOAuthConnectErrorMessage,
25
+ } from "./useMcpServerOAuthConnect.js";
23
26
  import type { OAuthConnectPhase } from "./useMcpServerOAuthConnect.js";
24
27
  import { StdioSandboxNotice } from "./StdioSandboxNotice.js";
25
28
  import { OAuthRequiredNotice } from "./OAuthRequiredNotice.js";
@@ -250,23 +253,38 @@ export function McpServerDetailView({
250
253
  credentials.refetch();
251
254
  refetch();
252
255
  } catch {
253
- // error state is managed by the oauth hook
256
+ // Error state is managed by the oauth hook — but refetch anyway:
257
+ // completeOAuthConnect persists the grant BEFORE the chained
258
+ // discovery runs, so a discovery-leg failure still changed server
259
+ // state. Without this, stale isOAuthConnected=false makes the next
260
+ // Connect click relaunch the popup instead of retrying discovery
261
+ // (stigmer/stigmer#229).
262
+ credentials.refetch();
263
+ refetch();
254
264
  }
255
265
  }, [mcpServer, oauth, credentials, refetch]);
256
266
 
267
+ // A failure in the "connecting" phase proves sign-in already succeeded —
268
+ // the grant exists server-side even while the grant-status refetch is
269
+ // still in flight. Retry bare discovery; never relaunch the popup and
270
+ // never demand credentials the flow already has.
271
+ const isDiscoveryRetry =
272
+ credentials.authMode === "oauth" && oauth.failedPhase === "connecting";
273
+
257
274
  const handleConnectClick = useCallback(async () => {
258
275
  if (!mcpServer?.metadata?.id) return;
259
276
 
260
277
  if (
261
278
  credentials.authMode === "oauth" &&
262
279
  !credentials.isOAuthConnected &&
263
- !credentials.manualOverride
280
+ !credentials.manualOverride &&
281
+ !isDiscoveryRetry
264
282
  ) {
265
283
  handleOAuthSignIn();
266
284
  return;
267
285
  }
268
286
 
269
- if (!credentials.isReady) {
287
+ if (!credentials.isReady && !isDiscoveryRetry) {
270
288
  setShowCredentialForm(true);
271
289
  return;
272
290
  }
@@ -274,11 +292,15 @@ export function McpServerDetailView({
274
292
  const envKeys = Object.keys(mcpServer.spec?.env ?? {});
275
293
  try {
276
294
  await connection.connect(mcpServer.metadata.id, activeOrg ?? org, undefined, envKeys);
295
+ // Discovery succeeded — retire the OAuth chain's stale
296
+ // discovery-failure error so the banner doesn't outlive the state
297
+ // it described.
298
+ oauth.clearError();
277
299
  refetch();
278
300
  } catch {
279
301
  // error state is managed by the hook
280
302
  }
281
- }, [mcpServer, credentials.authMode, credentials.isOAuthConnected, credentials.manualOverride, credentials.isReady, connection, refetch, handleOAuthSignIn]);
303
+ }, [mcpServer, credentials.authMode, credentials.isOAuthConnected, credentials.manualOverride, credentials.isReady, isDiscoveryRetry, connection, oauth.clearError, refetch, handleOAuthSignIn, activeOrg, org]);
282
304
 
283
305
  const handleCredentialSubmit = useCallback(
284
306
  async (
@@ -367,6 +389,20 @@ export function McpServerDetailView({
367
389
  const resourceTemplates = capabilities?.resourceTemplates ?? [];
368
390
  const hasDiscoveredTools = tools.length > 0;
369
391
 
392
+ // "Signed in but never discovered" (stigmer/stigmer#229): the OAuth flow
393
+ // persists the grant in completeOAuthConnect BEFORE the chained discovery
394
+ // runs, so a failed/interrupted discovery leg leaves a healthy grant with
395
+ // empty discovered_capabilities. Both inputs are server truth, so this
396
+ // derivation survives reloads and self-heals once discovery lands (even
397
+ // when the workflow outlives the browser's RPC). Token-expired grants are
398
+ // excluded — re-auth, not discovery, is their next step.
399
+ const isOAuthStranded =
400
+ credentials.authMode === "oauth" &&
401
+ credentials.isOAuthConnected &&
402
+ credentials.connectionHealth !==
403
+ OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_TOKEN_EXPIRED &&
404
+ !hasDiscoveredTools;
405
+
370
406
  const capabilityTabs: TabItem[] = useMemo(() => {
371
407
  const items: TabItem[] = [
372
408
  { id: "tools", label: "Tools", badge: tools.length },
@@ -383,6 +419,14 @@ export function McpServerDetailView({
383
419
  }, [tools.length, totalPolicyCount, resourceTemplates.length]);
384
420
 
385
421
  const combinedError = connection.error ?? oauth.error;
422
+ // OAuth-chain errors compose through the phase-aware helper so a
423
+ // discovery-leg failure reads "signed in, but discovery failed" instead
424
+ // of masquerading as a failed sign-in.
425
+ const combinedErrorMessage = connection.error
426
+ ? getUserMessage(connection.error)
427
+ : oauth.error
428
+ ? getOAuthConnectErrorMessage(oauth.error, oauth.failedPhase)
429
+ : null;
386
430
  const combinedClearError = useCallback(() => {
387
431
  connection.clearError();
388
432
  oauth.clearError();
@@ -444,10 +488,10 @@ export function McpServerDetailView({
444
488
  value={spec?.iconUrl ?? ""}
445
489
  onSave={(v) => saveMcpField("iconUrl", v || undefined)}
446
490
  isSaving={isUpdating}
447
- fallback={<McpServerIcon className="size-6 text-muted-foreground" />}
491
+ fallback={<McpServerIcon className="stg:size-6 stg:text-muted-foreground" />}
448
492
  size="md"
449
493
  />
450
- ) : spec?.iconUrl ? undefined : <McpServerIcon className="size-6 text-muted-foreground" />,
494
+ ) : spec?.iconUrl ? undefined : <McpServerIcon className="stg:size-6 stg:text-muted-foreground" />,
451
495
  iconUrl: editable ? undefined : spec?.iconUrl || undefined,
452
496
  createdAt: specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null,
453
497
  updatedAt: specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null,
@@ -499,7 +543,7 @@ export function McpServerDetailView({
499
543
  {(editable || spec?.description) && (
500
544
  <Section title="Description">
501
545
  {editable && saveMcpField ? (
502
- <div className="max-h-20 overflow-y-auto p-3">
546
+ <div className="stg:max-h-20 stg:overflow-y-auto stg:p-3">
503
547
  <InlineEditTextarea
504
548
  value={spec?.description || ""}
505
549
  onSave={(v) => saveMcpField("description", v || undefined)}
@@ -509,8 +553,8 @@ export function McpServerDetailView({
509
553
  />
510
554
  </div>
511
555
  ) : (
512
- <div className="p-3">
513
- <pre className="whitespace-pre-wrap break-words text-sm text-foreground font-sans">
556
+ <div className="stg:p-3">
557
+ <pre className="stg:whitespace-pre-wrap stg:break-words stg:text-sm stg:text-foreground stg:font-sans">
514
558
  {spec?.description}
515
559
  </pre>
516
560
  </div>
@@ -542,15 +586,17 @@ export function McpServerDetailView({
542
586
  {/* scrollTarget: guided tours/demos bring the connect flow into view
543
587
  (see IdentityTransportStep's "mcp-transport" for the convention). */}
544
588
  <Section title="Connection" scrollTarget="mcp-connection">
545
- <StdioSandboxNotice serverType={spec?.serverType} className="mb-3" />
546
- <OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="mb-3" />
589
+ <StdioSandboxNotice serverType={spec?.serverType} className="stg:mb-3" />
590
+ <OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="stg:mb-3" />
547
591
  <ConnectBar
548
592
  manualEntrySupported={credentials.manualEntrySupported}
549
593
  isConnecting={connection.isConnecting || oauth.isInProgress}
550
594
  connectionError={combinedError}
595
+ connectionErrorMessage={combinedErrorMessage}
551
596
  onConnect={handleConnectClick}
552
597
  onClearConnectionError={combinedClearError}
553
598
  hasDiscoveredTools={hasDiscoveredTools}
599
+ isOAuthStranded={isOAuthStranded}
554
600
  credentialsLoading={credentials.isLoading}
555
601
  oauthPhase={oauth.phase}
556
602
  authMode={credentials.authMode}
@@ -588,7 +634,7 @@ export function McpServerDetailView({
588
634
 
589
635
  {showCredentialForm && credentials.missingVariables.length > 0 && (
590
636
  <div
591
- className="border-b border-border p-4"
637
+ className="stg:border-b stg:border-border stg:p-4"
592
638
  data-cursor-target="credential-form"
593
639
  >
594
640
  <EnvVarForm
@@ -599,7 +645,7 @@ export function McpServerDetailView({
599
645
  onCancel={() => setShowCredentialForm(false)}
600
646
  isSubmitting={credentials.isSaving}
601
647
  poolValues={credentialPoolValues}
602
- className="w-full max-w-md"
648
+ className="stg:w-full stg:max-w-md"
603
649
  />
604
650
  </div>
605
651
  )}
@@ -610,11 +656,11 @@ export function McpServerDetailView({
610
656
  ref={byoaDialogRef}
611
657
  onCancel={handleByoaDialogCancel}
612
658
  className={cn(
613
- "m-auto w-full max-w-md rounded-lg border border-border bg-background p-6 shadow-lg",
614
- "backdrop:bg-black/50",
659
+ "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",
660
+ "stg:backdrop:bg-black/50",
615
661
  )}
616
662
  >
617
- <h3 className="mb-4 text-base font-semibold text-foreground">
663
+ <h3 className="stg:mb-4 stg:text-base stg:font-semibold stg:text-foreground">
618
664
  Use your own OAuth app
619
665
  </h3>
620
666
  <OAuthAppForm
@@ -638,7 +684,12 @@ export function McpServerDetailView({
638
684
  aria-label="MCP server capabilities"
639
685
  >
640
686
  {capabilityTab === "tools" && (
641
- <ToolsTabContent tools={tools} />
687
+ <ToolsTabContent
688
+ tools={tools}
689
+ isOAuthStranded={isOAuthStranded}
690
+ onDiscover={handleConnectClick}
691
+ isDiscovering={connection.isConnecting || oauth.isInProgress}
692
+ />
642
693
  )}
643
694
 
644
695
  {capabilityTab === "policies" && (
@@ -646,6 +697,7 @@ export function McpServerDetailView({
646
697
  pinnedPolicies={pinnedPolicies}
647
698
  classifiedPolicies={classifiedPolicies}
648
699
  hasDiscoveredTools={hasDiscoveredTools}
700
+ isOAuthStranded={isOAuthStranded}
649
701
  />
650
702
  )}
651
703
 
@@ -675,34 +727,34 @@ function healthPillProps(
675
727
  ): { pillClass: string; dotClass: string; label: string } {
676
728
  if (isVendorApprovalPending) {
677
729
  return {
678
- pillClass: "bg-amber-500/10 text-amber-600 dark:text-amber-400",
679
- dotClass: "bg-amber-500",
730
+ pillClass: "stg:bg-amber-500/10 stg:text-amber-600 stg:dark:text-amber-400",
731
+ dotClass: "stg:bg-amber-500",
680
732
  label: "Pending approval",
681
733
  };
682
734
  }
683
735
  switch (health) {
684
736
  case OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_HEALTHY:
685
737
  return {
686
- pillClass: "bg-success/10 text-success",
687
- dotClass: "bg-success",
738
+ pillClass: "stg:bg-success/10 stg:text-success",
739
+ dotClass: "stg:bg-success",
688
740
  label: "Connected",
689
741
  };
690
742
  case OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_TOKEN_EXPIRED_REFRESHABLE:
691
743
  return {
692
- pillClass: "bg-amber-500/10 text-amber-600 dark:text-amber-400",
693
- dotClass: "bg-amber-500",
744
+ pillClass: "stg:bg-amber-500/10 stg:text-amber-600 stg:dark:text-amber-400",
745
+ dotClass: "stg:bg-amber-500",
694
746
  label: "Token expired",
695
747
  };
696
748
  case OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_TOKEN_EXPIRED:
697
749
  return {
698
- pillClass: "bg-destructive-subtle text-destructive",
699
- dotClass: "bg-destructive",
750
+ pillClass: "stg:bg-destructive-subtle stg:text-destructive",
751
+ dotClass: "stg:bg-destructive",
700
752
  label: "Re-auth needed",
701
753
  };
702
754
  default:
703
755
  return {
704
- pillClass: "bg-muted text-muted-foreground",
705
- dotClass: "bg-muted-foreground",
756
+ pillClass: "stg:bg-muted stg:text-muted-foreground",
757
+ dotClass: "stg:bg-muted-foreground",
706
758
  label: "Not connected",
707
759
  };
708
760
  }
@@ -740,9 +792,11 @@ type RemoveOrgAppPhase = "idle" | "confirming" | "removing";
740
792
  function ConnectBar({
741
793
  isConnecting,
742
794
  connectionError,
795
+ connectionErrorMessage,
743
796
  onConnect,
744
797
  onClearConnectionError,
745
798
  hasDiscoveredTools,
799
+ isOAuthStranded,
746
800
  credentialsLoading,
747
801
  oauthPhase,
748
802
  authMode,
@@ -774,9 +828,13 @@ function ConnectBar({
774
828
  }: {
775
829
  readonly isConnecting: boolean;
776
830
  readonly connectionError: Error | null;
831
+ /** Display copy for `connectionError`, pre-composed by the parent (phase-aware for OAuth-chain failures). */
832
+ readonly connectionErrorMessage: string | null;
777
833
  readonly onConnect: () => void;
778
834
  readonly onClearConnectionError: () => void;
779
835
  readonly hasDiscoveredTools: boolean;
836
+ /** OAuth grant is healthy but discovery never landed — see the derivation in the parent. */
837
+ readonly isOAuthStranded: boolean;
780
838
  readonly credentialsLoading: boolean;
781
839
  readonly oauthPhase: OAuthConnectPhase;
782
840
  readonly authMode: "manual" | "oauth";
@@ -832,19 +890,23 @@ function ConnectBar({
832
890
  if (isConnecting) return "Connecting...";
833
891
  if (isOrgOAuthApp && showOAuthPrimary) return "Sign in with your app";
834
892
  if (showOAuthPrimary || needsReAuth) return "Sign in to connect";
893
+ if (isOAuthStranded) return "Discover tools";
835
894
  if (hasDiscoveredTools) return "Reconnect";
836
895
  return "Connect";
837
896
  })();
838
897
 
839
898
  const buttonIcon = (() => {
840
899
  if (isOAuthBusy || isConnecting) return <Spinner />;
841
- if (showOAuthPrimary || needsReAuth) return <OAuthIcon className="size-3.5" />;
842
- if (hasDiscoveredTools) return <RefreshIcon className="size-3.5" />;
843
- return <ConnectIcon className="size-3.5" />;
900
+ if (showOAuthPrimary || needsReAuth) return <OAuthIcon className="stg:size-3.5" />;
901
+ if (hasDiscoveredTools) return <RefreshIcon className="stg:size-3.5" />;
902
+ return <ConnectIcon className="stg:size-3.5" />;
844
903
  })();
845
904
 
846
905
  const statusText = (() => {
847
906
  if (authMode === "oauth" && isOAuthConnected) {
907
+ // Stranded takes precedence over token health: "tokens refresh
908
+ // automatically" reads as all-done while the Tools tab is empty.
909
+ if (isOAuthStranded) return "Signed in \u2014 tools not discovered yet";
848
910
  const base = healthStatusText(connectionHealth, accessTokenExpiresAt, tokenLifetimeHint);
849
911
  return isOrgOAuthApp ? `${base} \u00B7 Using your OAuth app` : base;
850
912
  }
@@ -865,14 +927,14 @@ function ConnectBar({
865
927
  // Inline disconnect confirmation replaces the main bar content
866
928
  if (disconnectPhase === "confirming" || disconnectPhase === "disconnecting") {
867
929
  return (
868
- <div className="flex flex-col">
869
- <div className="flex items-center gap-2 px-3 py-2">
870
- <WarningIcon className="size-3.5 shrink-0 text-destructive" />
871
- <p className="flex-1 text-xs text-foreground">
872
- Remove OAuth credentials for <span className="font-medium">{serverName}</span>?
930
+ <div className="stg:flex stg:flex-col">
931
+ <div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:py-2">
932
+ <WarningIcon className="stg:size-3.5 stg:shrink-0 stg:text-destructive" />
933
+ <p className="stg:flex-1 stg:text-xs stg:text-foreground">
934
+ Remove OAuth credentials for <span className="stg:font-medium">{serverName}</span>?
873
935
  You can reconnect at any time.
874
936
  </p>
875
- <div className="flex shrink-0 items-center gap-1.5">
937
+ <div className="stg:flex stg:shrink-0 stg:items-center stg:gap-1.5">
876
938
  <button
877
939
  type="button"
878
940
  disabled={isDisconnecting}
@@ -886,9 +948,9 @@ function ConnectBar({
886
948
  }
887
949
  }}
888
950
  className={cn(
889
- "inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium",
890
- "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
891
- "disabled:pointer-events-none disabled:opacity-50",
951
+ "stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
952
+ "stg:bg-destructive stg:text-destructive-foreground stg:hover:bg-destructive-hover",
953
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
892
954
  )}
893
955
  >
894
956
  {isDisconnecting && <Spinner />}
@@ -902,9 +964,9 @@ function ConnectBar({
902
964
  onClearDisconnectError();
903
965
  }}
904
966
  className={cn(
905
- "inline-flex items-center rounded-md px-2.5 py-1 text-xs font-medium",
906
- "border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
907
- "disabled:pointer-events-none disabled:opacity-50",
967
+ "stg:inline-flex stg:items-center stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
968
+ "stg:border stg:border-border stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground",
969
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
908
970
  )}
909
971
  >
910
972
  Cancel
@@ -912,15 +974,15 @@ function ConnectBar({
912
974
  </div>
913
975
  </div>
914
976
  {disconnectError && (
915
- <div className="flex items-start gap-2 border-t border-destructive/20 bg-destructive-subtle px-3 py-2">
916
- <WarningIcon className="mt-0.5 size-3.5 shrink-0 text-destructive" />
917
- <p className="flex-1 text-xs text-destructive">
977
+ <div className="stg:flex stg:items-start stg:gap-2 stg:border-t stg:border-destructive/20 stg:bg-destructive-subtle stg:px-3 stg:py-2">
978
+ <WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-destructive" />
979
+ <p className="stg:flex-1 stg:text-xs stg:text-destructive">
918
980
  {getUserMessage(disconnectError)}
919
981
  </p>
920
982
  <button
921
983
  type="button"
922
984
  onClick={onClearDisconnectError}
923
- className="shrink-0 text-xs text-destructive-muted hover:text-destructive"
985
+ className="stg:shrink-0 stg:text-xs stg:text-destructive-muted stg:hover:text-destructive"
924
986
  aria-label="Dismiss error"
925
987
  >
926
988
  Dismiss
@@ -934,15 +996,15 @@ function ConnectBar({
934
996
  // Inline "remove custom app" confirmation
935
997
  if (removeOrgAppPhase === "confirming" || removeOrgAppPhase === "removing") {
936
998
  return (
937
- <div className="flex flex-col">
938
- <div className="flex items-center gap-2 px-3 py-2">
939
- <WarningIcon className="size-3.5 shrink-0 text-destructive" />
940
- <p className="flex-1 text-xs text-foreground">
999
+ <div className="stg:flex stg:flex-col">
1000
+ <div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:py-2">
1001
+ <WarningIcon className="stg:size-3.5 stg:shrink-0 stg:text-destructive" />
1002
+ <p className="stg:flex-1 stg:text-xs stg:text-foreground">
941
1003
  Remove your custom OAuth app for{" "}
942
- <span className="font-medium">{serverName}</span>? The server
1004
+ <span className="stg:font-medium">{serverName}</span>? The server
943
1005
  will revert to the platform&apos;s OAuth app.
944
1006
  </p>
945
- <div className="flex shrink-0 items-center gap-1.5">
1007
+ <div className="stg:flex stg:shrink-0 stg:items-center stg:gap-1.5">
946
1008
  <button
947
1009
  type="button"
948
1010
  disabled={isRemovingOrgApp}
@@ -956,9 +1018,9 @@ function ConnectBar({
956
1018
  }
957
1019
  }}
958
1020
  className={cn(
959
- "inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-xs font-medium",
960
- "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
961
- "disabled:pointer-events-none disabled:opacity-50",
1021
+ "stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
1022
+ "stg:bg-destructive stg:text-destructive-foreground stg:hover:bg-destructive-hover",
1023
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
962
1024
  )}
963
1025
  >
964
1026
  {isRemovingOrgApp && <Spinner />}
@@ -972,9 +1034,9 @@ function ConnectBar({
972
1034
  onClearRemoveOrgAppError();
973
1035
  }}
974
1036
  className={cn(
975
- "inline-flex items-center rounded-md px-2.5 py-1 text-xs font-medium",
976
- "border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
977
- "disabled:pointer-events-none disabled:opacity-50",
1037
+ "stg:inline-flex stg:items-center stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
1038
+ "stg:border stg:border-border stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground",
1039
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
978
1040
  )}
979
1041
  >
980
1042
  Cancel
@@ -982,15 +1044,15 @@ function ConnectBar({
982
1044
  </div>
983
1045
  </div>
984
1046
  {removeOrgAppError && (
985
- <div className="flex items-start gap-2 border-t border-destructive/20 bg-destructive-subtle px-3 py-2">
986
- <WarningIcon className="mt-0.5 size-3.5 shrink-0 text-destructive" />
987
- <p className="flex-1 text-xs text-destructive">
1047
+ <div className="stg:flex stg:items-start stg:gap-2 stg:border-t stg:border-destructive/20 stg:bg-destructive-subtle stg:px-3 stg:py-2">
1048
+ <WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-destructive" />
1049
+ <p className="stg:flex-1 stg:text-xs stg:text-destructive">
988
1050
  {getUserMessage(removeOrgAppError)}
989
1051
  </p>
990
1052
  <button
991
1053
  type="button"
992
1054
  onClick={onClearRemoveOrgAppError}
993
- className="shrink-0 text-xs text-destructive-muted hover:text-destructive"
1055
+ className="stg:shrink-0 stg:text-xs stg:text-destructive-muted stg:hover:text-destructive"
994
1056
  aria-label="Dismiss error"
995
1057
  >
996
1058
  Dismiss
@@ -1002,31 +1064,31 @@ function ConnectBar({
1002
1064
  }
1003
1065
 
1004
1066
  return (
1005
- <div className="flex flex-col">
1006
- <div className="flex items-center justify-between px-3 py-2">
1007
- <div className="flex items-center gap-2">
1067
+ <div className="stg:flex stg:flex-col">
1068
+ <div className="stg:flex stg:items-center stg:justify-between stg:px-3 stg:py-2">
1069
+ <div className="stg:flex stg:items-center stg:gap-2">
1008
1070
  {authMode === "oauth" && !manualOverride && (
1009
1071
  <span
1010
1072
  className={cn(
1011
- "inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-medium",
1073
+ "stg:inline-flex stg:items-center stg:gap-1.5 stg:rounded-full stg:px-2 stg:py-0.5 stg:text-[10px] stg:font-medium",
1012
1074
  pill.pillClass,
1013
1075
  )}
1014
1076
  >
1015
1077
  <span
1016
- className={cn("size-1.5 rounded-full", pill.dotClass)}
1078
+ className={cn("stg:size-1.5 stg:rounded-full", pill.dotClass)}
1017
1079
  aria-hidden="true"
1018
1080
  />
1019
1081
  {pill.label}
1020
1082
  </span>
1021
1083
  )}
1022
- <span className="text-xs text-muted-foreground">
1084
+ <span className="stg:text-xs stg:text-muted-foreground">
1023
1085
  {oauthSignInDisabled ? "OAuth sign-in is pending vendor approval" : statusText}
1024
1086
  </span>
1025
1087
  {showDisconnectLink && (
1026
1088
  <button
1027
1089
  type="button"
1028
1090
  onClick={() => setDisconnectPhase("confirming")}
1029
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1091
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1030
1092
  >
1031
1093
  Disconnect
1032
1094
  </button>
@@ -1035,7 +1097,7 @@ function ConnectBar({
1035
1097
  <button
1036
1098
  type="button"
1037
1099
  onClick={() => setRemoveOrgAppPhase("confirming")}
1038
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1100
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1039
1101
  >
1040
1102
  Remove custom app
1041
1103
  </button>
@@ -1047,11 +1109,11 @@ function ConnectBar({
1047
1109
  disabled={anyBusy || credentialsLoading || oauthSignInDisabled}
1048
1110
  data-cursor-target="connect-button"
1049
1111
  className={cn(
1050
- "inline-flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs font-medium",
1112
+ "stg:inline-flex stg:items-center stg:gap-1.5 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
1051
1113
  showOAuthPrimary || needsReAuth
1052
- ? "bg-primary text-primary-foreground hover:bg-primary-hover"
1053
- : "border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
1054
- "disabled:pointer-events-none disabled:opacity-50",
1114
+ ? "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover"
1115
+ : "stg:border stg:border-border stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground",
1116
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
1055
1117
  )}
1056
1118
  >
1057
1119
  {buttonIcon}
@@ -1060,11 +1122,11 @@ function ConnectBar({
1060
1122
  </div>
1061
1123
 
1062
1124
  {oauthPhase === "awaiting-callback" && (
1063
- <div className="flex items-center gap-3 border-t border-border px-3 py-1.5">
1125
+ <div className="stg:flex stg:items-center stg:gap-3 stg:border-t stg:border-border stg:px-3 stg:py-1.5">
1064
1126
  <button
1065
1127
  type="button"
1066
1128
  onClick={onCancelOAuth}
1067
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1129
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1068
1130
  >
1069
1131
  Cancel sign-in
1070
1132
  </button>
@@ -1073,9 +1135,9 @@ function ConnectBar({
1073
1135
 
1074
1136
  {/* Vendor approval blocked banner with BYOA CTA */}
1075
1137
  {oauthSignInDisabled && (
1076
- <div className="flex items-start gap-2 border-t border-amber-500/20 bg-amber-500/5 px-3 py-2">
1077
- <WarningIcon className="mt-0.5 size-3.5 shrink-0 text-amber-600 dark:text-amber-400" />
1078
- <div className="flex-1 text-xs text-amber-700 dark:text-amber-300">
1138
+ <div className="stg:flex stg:items-start stg:gap-2 stg:border-t stg:border-amber-500/20 stg:bg-amber-500/5 stg:px-3 stg:py-2">
1139
+ <WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-amber-600 stg:dark:text-amber-400" />
1140
+ <div className="stg:flex-1 stg:text-xs stg:text-amber-700 stg:dark:text-amber-300">
1079
1141
  <p>
1080
1142
  The platform&apos;s OAuth app is awaiting vendor approval.
1081
1143
  {canBringOwnApp
@@ -1087,7 +1149,7 @@ function ConnectBar({
1087
1149
  type="button"
1088
1150
  onClick={onBringOwnApp}
1089
1151
  data-cursor-target="byoa-cta-button"
1090
- className="mt-1.5 inline-flex items-center gap-1 rounded-md bg-amber-600 px-2.5 py-1 text-[11px] font-medium text-white hover:bg-amber-700 dark:bg-amber-500 dark:text-amber-950 dark:hover:bg-amber-400"
1152
+ className="stg:mt-1.5 stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:bg-amber-600 stg:px-2.5 stg:py-1 stg:text-[11px] stg:font-medium stg:text-white stg:hover:bg-amber-700 stg:dark:bg-amber-500 stg:dark:text-amber-950 stg:dark:hover:bg-amber-400"
1091
1153
  >
1092
1154
  Use your own OAuth app
1093
1155
  </button>
@@ -1097,10 +1159,10 @@ function ConnectBar({
1097
1159
  href={vendorApprovalDocsUrl}
1098
1160
  target="_blank"
1099
1161
  rel="noopener noreferrer"
1100
- className="mt-1 inline-flex items-center gap-1 underline decoration-amber-600/40 underline-offset-2 hover:decoration-amber-600 dark:decoration-amber-400/40 dark:hover:decoration-amber-400"
1162
+ className="stg:mt-1 stg:inline-flex stg:items-center stg:gap-1 stg:underline stg:decoration-amber-600/40 stg:underline-offset-2 stg:hover:decoration-amber-600 stg:dark:decoration-amber-400/40 stg:dark:hover:decoration-amber-400"
1101
1163
  >
1102
1164
  Learn how to bring your own token
1103
- <ExternalLinkIcon className="size-3 shrink-0" />
1165
+ <ExternalLinkIcon className="stg:size-3 stg:shrink-0" />
1104
1166
  </a>
1105
1167
  )}
1106
1168
  </div>
@@ -1112,12 +1174,12 @@ function ConnectBar({
1112
1174
  action bar renders. */}
1113
1175
  {authMode === "oauth" && !isOAuthConnected && !isOAuthBusy && !isConnecting &&
1114
1176
  (manualOverride || manualEntrySupported || canBringOwnApp) && (
1115
- <div className="flex items-center gap-3 border-t border-border px-3 py-1.5">
1177
+ <div className="stg:flex stg:items-center stg:gap-3 stg:border-t stg:border-border stg:px-3 stg:py-1.5">
1116
1178
  {manualOverride ? (
1117
1179
  <button
1118
1180
  type="button"
1119
1181
  onClick={onBackToOAuth}
1120
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1182
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1121
1183
  >
1122
1184
  {isVendorApprovalPending ? "Back to OAuth status" : "Sign in with OAuth instead"}
1123
1185
  </button>
@@ -1127,7 +1189,7 @@ function ConnectBar({
1127
1189
  <button
1128
1190
  type="button"
1129
1191
  onClick={onManualOverride}
1130
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1192
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1131
1193
  >
1132
1194
  Enter token manually
1133
1195
  </button>
@@ -1136,7 +1198,7 @@ function ConnectBar({
1136
1198
  <button
1137
1199
  type="button"
1138
1200
  onClick={onBringOwnApp}
1139
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1201
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1140
1202
  >
1141
1203
  Use your own OAuth app
1142
1204
  </button>
@@ -1148,14 +1210,14 @@ function ConnectBar({
1148
1210
 
1149
1211
  {connectionError && (
1150
1212
  <div
1151
- className="flex items-start gap-2 border-t border-destructive/20 bg-destructive-subtle px-3 py-2"
1213
+ className="stg:flex stg:items-start stg:gap-2 stg:border-t stg:border-destructive/20 stg:bg-destructive-subtle stg:px-3 stg:py-2"
1152
1214
  role="alert"
1153
1215
  >
1154
- <WarningIcon className="mt-0.5 size-3.5 shrink-0 text-destructive" />
1155
- <p className="flex-1 text-xs text-destructive">
1156
- {getUserMessage(connectionError)}
1216
+ <WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-destructive" />
1217
+ <p className="stg:flex-1 stg:text-xs stg:text-destructive">
1218
+ {connectionErrorMessage ?? getUserMessage(connectionError)}
1157
1219
  </p>
1158
- <div className="flex shrink-0 items-center gap-2">
1220
+ <div className="stg:flex stg:shrink-0 stg:items-center stg:gap-2">
1159
1221
  {isRetryableError(connectionError) && (
1160
1222
  <button
1161
1223
  type="button"
@@ -1163,7 +1225,7 @@ function ConnectBar({
1163
1225
  onClearConnectionError();
1164
1226
  onConnect();
1165
1227
  }}
1166
- className="text-xs font-medium text-destructive underline underline-offset-2 hover:no-underline"
1228
+ className="stg:text-xs stg:font-medium stg:text-destructive stg:underline stg:underline-offset-2 stg:hover:no-underline"
1167
1229
  >
1168
1230
  Try again
1169
1231
  </button>
@@ -1171,7 +1233,7 @@ function ConnectBar({
1171
1233
  <button
1172
1234
  type="button"
1173
1235
  onClick={onClearConnectionError}
1174
- className="text-xs text-destructive-muted hover:text-destructive"
1236
+ className="stg:text-xs stg:text-destructive-muted stg:hover:text-destructive"
1175
1237
  aria-label="Dismiss error"
1176
1238
  >
1177
1239
  Dismiss
@@ -1220,14 +1282,14 @@ function ValidationBanner({ message }: { readonly message: string }) {
1220
1282
  return (
1221
1283
  <div
1222
1284
  role="alert"
1223
- className="flex items-start gap-2.5 rounded-lg border border-destructive/30 bg-destructive-subtle px-4 py-3"
1285
+ className="stg:flex stg:items-start stg:gap-2.5 stg:rounded-lg stg:border stg:border-destructive/30 stg:bg-destructive-subtle stg:px-4 stg:py-3"
1224
1286
  >
1225
- <WarningIcon className="mt-0.5 size-4 shrink-0 text-destructive" />
1226
- <div className="min-w-0 flex-1">
1227
- <p className="text-sm font-medium text-destructive">
1287
+ <WarningIcon className="stg:mt-0.5 stg:size-4 stg:shrink-0 stg:text-destructive" />
1288
+ <div className="stg:min-w-0 stg:flex-1">
1289
+ <p className="stg:text-sm stg:font-medium stg:text-destructive">
1228
1290
  Invalid Configuration
1229
1291
  </p>
1230
- <p className="mt-0.5 text-xs text-destructive-muted">{message}</p>
1292
+ <p className="stg:mt-0.5 stg:text-xs stg:text-destructive-muted">{message}</p>
1231
1293
  </div>
1232
1294
  </div>
1233
1295
  );
@@ -1244,8 +1306,8 @@ function ValidationStateBadge({
1244
1306
  return (
1245
1307
  <>
1246
1308
  <Dot />
1247
- <span className="inline-flex items-center gap-1 text-emerald-600 dark:text-emerald-400">
1248
- <CheckIcon className="size-3" />
1309
+ <span className="stg:inline-flex stg:items-center stg:gap-1 stg:text-emerald-600 stg:dark:text-emerald-400">
1310
+ <CheckIcon className="stg:size-3" />
1249
1311
  Valid
1250
1312
  </span>
1251
1313
  </>
@@ -1254,7 +1316,7 @@ function ValidationStateBadge({
1254
1316
  return (
1255
1317
  <>
1256
1318
  <Dot />
1257
- <span className="text-destructive">Invalid</span>
1319
+ <span className="stg:text-destructive">Invalid</span>
1258
1320
  </>
1259
1321
  );
1260
1322
  default:
@@ -1352,9 +1414,9 @@ function ServerConfigSection({
1352
1414
 
1353
1415
  return (
1354
1416
  <Section title="Server Configuration">
1355
- <div className="flex flex-col gap-2 p-3">
1356
- <div className="flex items-baseline gap-2">
1357
- <span className="text-xs font-medium text-muted-foreground">
1417
+ <div className="stg:flex stg:flex-col stg:gap-2 stg:p-3">
1418
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1419
+ <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
1358
1420
  Type
1359
1421
  </span>
1360
1422
  {editable && saveMcpField ? (
@@ -1365,7 +1427,7 @@ function ServerConfigSection({
1365
1427
  isSaving={isSaving}
1366
1428
  />
1367
1429
  ) : (
1368
- <span className="rounded bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground">
1430
+ <span className="stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-mono stg:text-xs stg:font-medium stg:text-foreground">
1369
1431
  {serverType?.case ?? "none"}
1370
1432
  </span>
1371
1433
  )}
@@ -1373,8 +1435,8 @@ function ServerConfigSection({
1373
1435
 
1374
1436
  {serverType?.case === "stdio" && (
1375
1437
  <>
1376
- <div className="flex items-baseline gap-2">
1377
- <span className="text-xs font-medium text-muted-foreground">
1438
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1439
+ <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
1378
1440
  Command
1379
1441
  </span>
1380
1442
  {editable && saveMcpField ? (
@@ -1391,7 +1453,7 @@ function ServerConfigSection({
1391
1453
  placeholder="e.g. npx -y @modelcontextprotocol/server"
1392
1454
  />
1393
1455
  ) : (
1394
- <code className="font-mono text-sm text-foreground">
1456
+ <code className="stg:font-mono stg:text-sm stg:text-foreground">
1395
1457
  {serverType.value.command}
1396
1458
  {serverType.value.args.length > 0 &&
1397
1459
  ` ${serverType.value.args.join(" ")}`}
@@ -1399,8 +1461,8 @@ function ServerConfigSection({
1399
1461
  )}
1400
1462
  </div>
1401
1463
  {(editable || serverType.value.workingDir) && (
1402
- <div className="flex items-baseline gap-2">
1403
- <span className="text-xs font-medium text-muted-foreground">
1464
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1465
+ <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
1404
1466
  Working Dir
1405
1467
  </span>
1406
1468
  {editable && saveMcpField ? (
@@ -1417,7 +1479,7 @@ function ServerConfigSection({
1417
1479
  placeholder="/path/to/working/dir"
1418
1480
  />
1419
1481
  ) : (
1420
- <code className="font-mono text-xs text-foreground">
1482
+ <code className="stg:font-mono stg:text-xs stg:text-foreground">
1421
1483
  {serverType.value.workingDir}
1422
1484
  </code>
1423
1485
  )}
@@ -1428,8 +1490,8 @@ function ServerConfigSection({
1428
1490
 
1429
1491
  {serverType?.case === "http" && (
1430
1492
  <>
1431
- <div className="flex items-baseline gap-2">
1432
- <span className="text-xs font-medium text-muted-foreground">
1493
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1494
+ <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
1433
1495
  URL
1434
1496
  </span>
1435
1497
  {editable && saveMcpField ? (
@@ -1442,14 +1504,14 @@ function ServerConfigSection({
1442
1504
  placeholder="https://example.com/mcp"
1443
1505
  />
1444
1506
  ) : (
1445
- <code className="break-all font-mono text-sm text-foreground">
1507
+ <code className="stg:break-all stg:font-mono stg:text-sm stg:text-foreground">
1446
1508
  {serverType.value.url}
1447
1509
  </code>
1448
1510
  )}
1449
1511
  </div>
1450
1512
  {(editable || serverType.value.timeoutSeconds > 0) && (
1451
- <div className="flex items-baseline gap-2">
1452
- <span className="text-xs font-medium text-muted-foreground">
1513
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1514
+ <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
1453
1515
  Timeout
1454
1516
  </span>
1455
1517
  {editable && saveMcpField ? (
@@ -1469,7 +1531,7 @@ function ServerConfigSection({
1469
1531
  }}
1470
1532
  />
1471
1533
  ) : (
1472
- <span className="text-xs text-foreground">
1534
+ <span className="stg:text-xs stg:text-foreground">
1473
1535
  {serverType.value.timeoutSeconds}s
1474
1536
  </span>
1475
1537
  )}
@@ -1533,12 +1595,12 @@ function HttpKeyValueSubsection({
1533
1595
  readonly keyLabel: string;
1534
1596
  }) {
1535
1597
  return (
1536
- <div className="border-t border-border">
1537
- <div className="flex items-center justify-between px-3 py-2">
1538
- <div className="flex items-center gap-1.5">
1539
- <span className="text-xs font-medium text-muted-foreground">{title}</span>
1598
+ <div className="stg:border-t stg:border-border">
1599
+ <div className="stg:flex stg:items-center stg:justify-between stg:px-3 stg:py-2">
1600
+ <div className="stg:flex stg:items-center stg:gap-1.5">
1601
+ <span className="stg:text-xs stg:font-medium stg:text-muted-foreground">{title}</span>
1540
1602
  {count > 0 && (
1541
- <span className="inline-flex min-w-[1.25rem] items-center justify-center rounded-full bg-muted px-1 py-px text-[10px] font-medium leading-none text-muted-foreground">
1603
+ <span className="stg:inline-flex stg:min-w-[1.25rem] stg:items-center stg:justify-center stg:rounded-full stg:bg-muted stg:px-1 stg:py-px stg:text-[10px] stg:font-medium stg:leading-none stg:text-muted-foreground">
1542
1604
  {count}
1543
1605
  </span>
1544
1606
  )}
@@ -1547,7 +1609,7 @@ function HttpKeyValueSubsection({
1547
1609
  <button
1548
1610
  type="button"
1549
1611
  onClick={() => onEditingChange(!editing)}
1550
- className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
1612
+ className="stg:text-[11px] stg:text-muted-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:text-foreground stg:hover:decoration-foreground"
1551
1613
  >
1552
1614
  {editing ? "Done" : "Edit"}
1553
1615
  </button>
@@ -1565,13 +1627,13 @@ function HttpKeyValueSubsection({
1565
1627
  valueLabel="Value"
1566
1628
  />
1567
1629
  ) : (
1568
- <div className="flex flex-col divide-y divide-border">
1630
+ <div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
1569
1631
  {rows.map((row) => (
1570
- <div key={row.key} className="flex items-start gap-2 px-3 py-1.5">
1571
- <code className="shrink-0 font-mono text-xs font-medium text-foreground">
1632
+ <div key={row.key} className="stg:flex stg:items-start stg:gap-2 stg:px-3 stg:py-1.5">
1633
+ <code className="stg:shrink-0 stg:font-mono stg:text-xs stg:font-medium stg:text-foreground">
1572
1634
  {row.key}
1573
1635
  </code>
1574
- <span className="min-w-0 break-all font-mono text-xs text-muted-foreground">
1636
+ <span className="stg:min-w-0 stg:break-all stg:font-mono stg:text-xs stg:text-muted-foreground">
1575
1637
  {renderHeaderValue(row.value)}
1576
1638
  </span>
1577
1639
  </div>
@@ -1600,7 +1662,7 @@ function renderHeaderValue(value: string): React.ReactNode {
1600
1662
  parts.push(
1601
1663
  <span
1602
1664
  key={match.index}
1603
- className="inline-flex items-center gap-0.5 rounded bg-primary-subtle px-1 py-px text-[10px] font-medium text-primary"
1665
+ className="stg:inline-flex stg:items-center stg:gap-0.5 stg:rounded stg:bg-primary-subtle stg:px-1 stg:py-px stg:text-[10px] stg:font-medium stg:text-primary"
1604
1666
  title={`Resolved from environment variable: ${match[1]}`}
1605
1667
  >
1606
1668
  {match[0]}
@@ -1623,29 +1685,29 @@ function SourceSection({
1623
1685
  }) {
1624
1686
  return (
1625
1687
  <Section title="Source">
1626
- <div className="flex flex-col gap-2 p-3">
1688
+ <div className="stg:flex stg:flex-col stg:gap-2 stg:p-3">
1627
1689
  {spec.repositoryUrl && (
1628
- <div className="flex items-baseline gap-2">
1629
- <span className="shrink-0 text-xs font-medium text-muted-foreground">
1690
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1691
+ <span className="stg:shrink-0 stg:text-xs stg:font-medium stg:text-muted-foreground">
1630
1692
  Repository
1631
1693
  </span>
1632
1694
  <a
1633
1695
  href={spec.repositoryUrl}
1634
1696
  target="_blank"
1635
1697
  rel="noopener noreferrer"
1636
- className="inline-flex items-center gap-1 break-all font-mono text-xs text-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:decoration-foreground"
1698
+ className="stg:inline-flex stg:items-center stg:gap-1 stg:break-all stg:font-mono stg:text-xs stg:text-foreground stg:underline stg:decoration-muted-foreground/40 stg:underline-offset-2 stg:hover:decoration-foreground"
1637
1699
  >
1638
1700
  {spec.repositoryUrl}
1639
- <ExternalLinkIcon className="size-3 shrink-0" />
1701
+ <ExternalLinkIcon className="stg:size-3 stg:shrink-0" />
1640
1702
  </a>
1641
1703
  </div>
1642
1704
  )}
1643
1705
  {spec.githubStars > 0 && (
1644
- <div className="flex items-baseline gap-2">
1645
- <span className="shrink-0 text-xs font-medium text-muted-foreground">
1706
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1707
+ <span className="stg:shrink-0 stg:text-xs stg:font-medium stg:text-muted-foreground">
1646
1708
  Stars
1647
1709
  </span>
1648
- <span className="text-xs text-foreground">
1710
+ <span className="stg:text-xs stg:text-foreground">
1649
1711
  {spec.githubStars.toLocaleString()}
1650
1712
  </span>
1651
1713
  </div>
@@ -1663,19 +1725,19 @@ function ResourceTemplatesList({
1663
1725
  if (templates.length === 0) return null;
1664
1726
 
1665
1727
  return (
1666
- <div className="flex flex-col divide-y divide-border">
1728
+ <div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
1667
1729
  {templates.map((tpl) => (
1668
- <div key={tpl.uriTemplate || tpl.name} className="px-3 py-2.5">
1669
- <div className="flex items-baseline gap-2">
1670
- <span className="text-sm font-medium text-foreground">
1730
+ <div key={tpl.uriTemplate || tpl.name} className="stg:px-3 stg:py-2.5">
1731
+ <div className="stg:flex stg:items-baseline stg:gap-2">
1732
+ <span className="stg:text-sm stg:font-medium stg:text-foreground">
1671
1733
  {tpl.name}
1672
1734
  </span>
1673
- <code className="font-mono text-[10px] text-muted-foreground">
1735
+ <code className="stg:font-mono stg:text-[10px] stg:text-muted-foreground">
1674
1736
  {tpl.uriTemplate}
1675
1737
  </code>
1676
1738
  </div>
1677
1739
  {tpl.description && (
1678
- <p className="mt-0.5 text-xs text-muted-foreground">
1740
+ <p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
1679
1741
  {tpl.description}
1680
1742
  </p>
1681
1743
  )}
@@ -1752,29 +1814,29 @@ function EnvSection({
1752
1814
  keyLabel="Variable name"
1753
1815
  />
1754
1816
  ) : (
1755
- <div className="flex flex-col divide-y divide-border">
1817
+ <div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
1756
1818
  {entries.map(([name, env]) => {
1757
1819
  const isOAuthManaged = name === oauthTargetEnvVar;
1758
1820
  return (
1759
- <div key={name} className="flex items-start gap-3 px-3 py-2">
1760
- <code className="shrink-0 font-mono text-sm font-medium text-foreground">
1821
+ <div key={name} className="stg:flex stg:items-start stg:gap-3 stg:px-3 stg:py-2">
1822
+ <code className="stg:shrink-0 stg:font-mono stg:text-sm stg:font-medium stg:text-foreground">
1761
1823
  {name}
1762
1824
  </code>
1763
- <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
1825
+ <span className="stg:shrink-0 stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium stg:text-muted-foreground">
1764
1826
  {env.isSecret ? "secret" : "config"}
1765
1827
  </span>
1766
1828
  {isOAuthManaged && (
1767
- <span className="shrink-0 rounded bg-primary-subtle px-1.5 py-0.5 text-[10px] font-medium text-primary">
1829
+ <span className="stg:shrink-0 stg:rounded stg:bg-primary-subtle stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium stg:text-primary">
1768
1830
  oauth
1769
1831
  </span>
1770
1832
  )}
1771
1833
  {env.optional && (
1772
- <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground-subtle">
1834
+ <span className="stg:shrink-0 stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium stg:text-muted-foreground-subtle">
1773
1835
  optional
1774
1836
  </span>
1775
1837
  )}
1776
1838
  {env.description && (
1777
- <span className="text-xs text-muted-foreground">
1839
+ <span className="stg:text-xs stg:text-muted-foreground">
1778
1840
  {env.description}
1779
1841
  </span>
1780
1842
  )}
@@ -1820,17 +1882,17 @@ function TagsSection({
1820
1882
 
1821
1883
  return (
1822
1884
  <Section title="Tags" count={tags.length}>
1823
- <div className="flex flex-wrap gap-1.5 p-3">
1885
+ <div className="stg:flex stg:flex-wrap stg:gap-1.5 stg:p-3">
1824
1886
  {tags.map((tag) => (
1825
1887
  <span
1826
1888
  key={tag}
1827
- className="rounded-full bg-muted px-2.5 py-0.5 text-xs font-medium text-muted-foreground"
1889
+ className="stg:rounded-full stg:bg-muted stg:px-2.5 stg:py-0.5 stg:text-xs stg:font-medium stg:text-muted-foreground"
1828
1890
  >
1829
1891
  {tag}
1830
1892
  </span>
1831
1893
  ))}
1832
1894
  {editable && tags.length === 0 && (
1833
- <p className="text-xs text-muted-foreground italic">No tags</p>
1895
+ <p className="stg:text-xs stg:text-muted-foreground stg:italic">No tags</p>
1834
1896
  )}
1835
1897
  </div>
1836
1898
  </Section>
@@ -1843,8 +1905,17 @@ function TagsSection({
1843
1905
 
1844
1906
  function ToolsTabContent({
1845
1907
  tools,
1908
+ isOAuthStranded,
1909
+ onDiscover,
1910
+ isDiscovering,
1846
1911
  }: {
1847
1912
  readonly tools: readonly DiscoveredTool[];
1913
+ /** OAuth grant is healthy but discovery never landed — renders the recovery empty state. */
1914
+ readonly isOAuthStranded: boolean;
1915
+ /** Runs tool discovery (the parent's connect handler). */
1916
+ readonly onDiscover: () => void;
1917
+ /** `true` while a discovery attempt is in flight. */
1918
+ readonly isDiscovering: boolean;
1848
1919
  }) {
1849
1920
  const [search, setSearch] = useState("");
1850
1921
  const [expandedTool, setExpandedTool] = useState<string | null>(null);
@@ -1860,12 +1931,37 @@ function ToolsTabContent({
1860
1931
  }, [tools, search]);
1861
1932
 
1862
1933
  if (tools.length === 0) {
1934
+ // Two distinct empty states: "never connected" (informational) vs
1935
+ // "signed in but discovery never landed" (stigmer/stigmer#229) — the
1936
+ // latter must carry its own recovery action, because the user already
1937
+ // did the thing the informational copy asks for.
1863
1938
  return (
1864
- <div className="px-3 py-8 text-center">
1865
- <ConnectIcon className="mx-auto mb-2 size-6 text-muted-foreground-faint" />
1866
- <p className="text-xs text-muted-foreground">
1867
- Connect to this MCP server to discover its available tools.
1868
- </p>
1939
+ <div className="stg:px-3 stg:py-8 stg:text-center">
1940
+ <ConnectIcon className="stg:mx-auto stg:mb-2 stg:size-6 stg:text-muted-foreground-faint" />
1941
+ {isOAuthStranded ? (
1942
+ <>
1943
+ <p className="stg:text-xs stg:text-muted-foreground">
1944
+ Signed in, but tools haven&apos;t been discovered yet.
1945
+ </p>
1946
+ <button
1947
+ type="button"
1948
+ onClick={onDiscover}
1949
+ disabled={isDiscovering}
1950
+ className={cn(
1951
+ "stg:mt-3 stg:inline-flex stg:items-center stg:gap-1.5 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
1952
+ "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover",
1953
+ "stg:disabled:pointer-events-none stg:disabled:opacity-50",
1954
+ )}
1955
+ >
1956
+ {isDiscovering && <Spinner />}
1957
+ {isDiscovering ? "Discovering tools..." : "Discover tools"}
1958
+ </button>
1959
+ </>
1960
+ ) : (
1961
+ <p className="stg:text-xs stg:text-muted-foreground">
1962
+ Connect to this MCP server to discover its available tools.
1963
+ </p>
1964
+ )}
1869
1965
  </div>
1870
1966
  );
1871
1967
  }
@@ -1873,43 +1969,43 @@ function ToolsTabContent({
1873
1969
  const isFiltered = search.trim().length > 0;
1874
1970
 
1875
1971
  return (
1876
- <div className="flex flex-col">
1877
- <div className="flex items-center gap-2 px-3 pb-2">
1878
- <div className="relative flex-1">
1879
- <SearchIcon className="pointer-events-none absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" />
1972
+ <div className="stg:flex stg:flex-col">
1973
+ <div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:pb-2">
1974
+ <div className="stg:relative stg:flex-1">
1975
+ <SearchIcon className="stg:pointer-events-none stg:absolute stg:left-2 stg:top-1/2 stg:size-3.5 stg:-translate-y-1/2 stg:text-muted-foreground" />
1880
1976
  <input
1881
1977
  type="text"
1882
1978
  value={search}
1883
1979
  onChange={(e) => setSearch(e.target.value)}
1884
1980
  placeholder="Search tools…"
1885
1981
  aria-label="Search tools"
1886
- className="w-full rounded-md border border-border bg-background py-1.5 pl-7 pr-7 text-xs text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
1982
+ className="stg:w-full stg:rounded-md stg:border stg:border-border stg:bg-background stg:py-1.5 stg:pl-7 stg:pr-7 stg:text-xs stg:text-foreground stg:placeholder:text-muted-foreground stg:focus:outline-none stg:focus:ring-2 stg:focus:ring-ring"
1887
1983
  />
1888
1984
  {isFiltered && (
1889
1985
  <button
1890
1986
  type="button"
1891
1987
  onClick={() => setSearch("")}
1892
1988
  aria-label="Clear search"
1893
- className="absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground"
1989
+ className="stg:absolute stg:right-2 stg:top-1/2 stg:-translate-y-1/2 stg:text-muted-foreground stg:hover:text-foreground"
1894
1990
  >
1895
- <CloseIcon className="size-3" />
1991
+ <CloseIcon className="stg:size-3" />
1896
1992
  </button>
1897
1993
  )}
1898
1994
  </div>
1899
- <span className="shrink-0 text-[10px] text-muted-foreground">
1995
+ <span className="stg:shrink-0 stg:text-[10px] stg:text-muted-foreground">
1900
1996
  {isFiltered ? `${filtered.length} of ${tools.length}` : tools.length}
1901
1997
  </span>
1902
1998
  </div>
1903
1999
 
1904
2000
  {filtered.length === 0 ? (
1905
- <div className="px-3 py-6 text-center">
1906
- <p className="text-xs text-muted-foreground">
2001
+ <div className="stg:px-3 stg:py-6 stg:text-center">
2002
+ <p className="stg:text-xs stg:text-muted-foreground">
1907
2003
  No tools matching &ldquo;{search}&rdquo;
1908
2004
  </p>
1909
2005
  </div>
1910
2006
  ) : (
1911
- <div className="max-h-96 overflow-y-auto">
1912
- <div className="flex flex-col divide-y divide-border">
2007
+ <div className="stg:max-h-96 stg:overflow-y-auto">
2008
+ <div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
1913
2009
  {filtered.map((tool) => {
1914
2010
  const isExpanded = expandedTool === tool.name;
1915
2011
  const hasSchema =
@@ -1923,34 +2019,34 @@ function ToolsTabContent({
1923
2019
  onClick={() =>
1924
2020
  setExpandedTool(isExpanded ? null : tool.name)
1925
2021
  }
1926
- className="flex w-full items-start gap-2 px-3 py-2.5 text-left transition-colors hover:bg-muted-faint"
2022
+ className="stg:flex stg:w-full stg:items-start stg:gap-2 stg:px-3 stg:py-2.5 stg:text-left stg:transition-colors stg:hover:bg-muted-faint"
1927
2023
  aria-expanded={isExpanded}
1928
2024
  >
1929
2025
  <ChevronIcon
1930
2026
  className={cn(
1931
- "mt-0.5 size-3 shrink-0 text-muted-foreground transition-transform",
1932
- isExpanded && "rotate-90",
2027
+ "stg:mt-0.5 stg:size-3 stg:shrink-0 stg:text-muted-foreground stg:transition-transform",
2028
+ isExpanded && "stg:rotate-90",
1933
2029
  )}
1934
2030
  />
1935
- <div className="min-w-0 flex-1">
1936
- <code className="font-mono text-sm font-medium text-foreground">
2031
+ <div className="stg:min-w-0 stg:flex-1">
2032
+ <code className="stg:font-mono stg:text-sm stg:font-medium stg:text-foreground">
1937
2033
  {tool.name}
1938
2034
  </code>
1939
2035
  {tool.description && (
1940
- <p className="mt-0.5 text-xs text-muted-foreground">
2036
+ <p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
1941
2037
  {tool.description}
1942
2038
  </p>
1943
2039
  )}
1944
2040
  </div>
1945
2041
  {hasSchema && (
1946
- <span className="mt-0.5 shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
2042
+ <span className="stg:mt-0.5 stg:shrink-0 stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium stg:text-muted-foreground">
1947
2043
  schema
1948
2044
  </span>
1949
2045
  )}
1950
2046
  </button>
1951
2047
  {isExpanded && hasSchema && (
1952
- <div className="border-t border-border bg-muted-faint px-3 py-2">
1953
- <pre className="max-h-64 overflow-auto whitespace-pre-wrap break-words rounded border border-border bg-background p-2 font-mono text-[11px] text-foreground">
2048
+ <div className="stg:border-t stg:border-border stg:bg-muted-faint stg:px-3 stg:py-2">
2049
+ <pre className="stg:max-h-64 stg:overflow-auto stg:whitespace-pre-wrap stg:break-words stg:rounded stg:border stg:border-border stg:bg-background stg:p-2 stg:font-mono stg:text-[11px] stg:text-foreground">
1954
2050
  {JSON.stringify(tool.inputSchema, null, 2)}
1955
2051
  </pre>
1956
2052
  </div>
@@ -1969,10 +2065,13 @@ function PoliciesTabContent({
1969
2065
  pinnedPolicies,
1970
2066
  classifiedPolicies,
1971
2067
  hasDiscoveredTools,
2068
+ isOAuthStranded,
1972
2069
  }: {
1973
2070
  readonly pinnedPolicies: readonly ToolApprovalPolicy[];
1974
2071
  readonly classifiedPolicies: readonly ToolApprovalPolicy[];
1975
2072
  readonly hasDiscoveredTools: boolean;
2073
+ /** OAuth grant is healthy but discovery never landed — adjusts the empty-state copy. */
2074
+ readonly isOAuthStranded: boolean;
1976
2075
  }) {
1977
2076
  const [search, setSearch] = useState("");
1978
2077
 
@@ -2004,64 +2103,66 @@ function PoliciesTabContent({
2004
2103
 
2005
2104
  if (!hasAnyPolicies) {
2006
2105
  return (
2007
- <div className="px-3 py-8 text-center">
2008
- <ShieldIcon className="mx-auto mb-2 size-6 text-muted-foreground-faint" />
2009
- <p className="text-xs text-muted-foreground">
2106
+ <div className="stg:px-3 stg:py-8 stg:text-center">
2107
+ <ShieldIcon className="stg:mx-auto stg:mb-2 stg:size-6 stg:text-muted-foreground-faint" />
2108
+ <p className="stg:text-xs stg:text-muted-foreground">
2010
2109
  {hasDiscoveredTools
2011
2110
  ? "No approval policies yet. Reconnect to reclassify tools."
2012
- : "Connect to discover tools and auto-classify approval policies."}
2111
+ : isOAuthStranded
2112
+ ? "Signed in \u2014 discover tools to auto-classify approval policies."
2113
+ : "Connect to discover tools and auto-classify approval policies."}
2013
2114
  </p>
2014
2115
  </div>
2015
2116
  );
2016
2117
  }
2017
2118
 
2018
2119
  return (
2019
- <div className="flex flex-col">
2020
- <div className="flex items-center gap-2 px-3 pb-2">
2021
- <div className="relative flex-1">
2022
- <SearchIcon className="pointer-events-none absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground" />
2120
+ <div className="stg:flex stg:flex-col">
2121
+ <div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:pb-2">
2122
+ <div className="stg:relative stg:flex-1">
2123
+ <SearchIcon className="stg:pointer-events-none stg:absolute stg:left-2 stg:top-1/2 stg:size-3.5 stg:-translate-y-1/2 stg:text-muted-foreground" />
2023
2124
  <input
2024
2125
  type="text"
2025
2126
  value={search}
2026
2127
  onChange={(e) => setSearch(e.target.value)}
2027
2128
  placeholder="Search policies…"
2028
2129
  aria-label="Search policies"
2029
- className="w-full rounded-md border border-border bg-background py-1.5 pl-7 pr-7 text-xs text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
2130
+ className="stg:w-full stg:rounded-md stg:border stg:border-border stg:bg-background stg:py-1.5 stg:pl-7 stg:pr-7 stg:text-xs stg:text-foreground stg:placeholder:text-muted-foreground stg:focus:outline-none stg:focus:ring-2 stg:focus:ring-ring"
2030
2131
  />
2031
2132
  {isFiltered && (
2032
2133
  <button
2033
2134
  type="button"
2034
2135
  onClick={() => setSearch("")}
2035
2136
  aria-label="Clear search"
2036
- className="absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground"
2137
+ className="stg:absolute stg:right-2 stg:top-1/2 stg:-translate-y-1/2 stg:text-muted-foreground stg:hover:text-foreground"
2037
2138
  >
2038
- <CloseIcon className="size-3" />
2139
+ <CloseIcon className="stg:size-3" />
2039
2140
  </button>
2040
2141
  )}
2041
2142
  </div>
2042
- <span className="shrink-0 text-[10px] text-muted-foreground">
2143
+ <span className="stg:shrink-0 stg:text-[10px] stg:text-muted-foreground">
2043
2144
  {isFiltered ? `${filteredTotal} of ${totalCount}` : totalCount}
2044
2145
  </span>
2045
2146
  </div>
2046
2147
 
2047
2148
  {filteredTotal === 0 ? (
2048
- <div className="px-3 py-6 text-center">
2049
- <p className="text-xs text-muted-foreground">
2149
+ <div className="stg:px-3 stg:py-6 stg:text-center">
2150
+ <p className="stg:text-xs stg:text-muted-foreground">
2050
2151
  No policies matching &ldquo;{search}&rdquo;
2051
2152
  </p>
2052
2153
  </div>
2053
2154
  ) : (
2054
- <div className="max-h-96 overflow-y-auto">
2155
+ <div className="stg:max-h-96 stg:overflow-y-auto">
2055
2156
  {filteredPinned.length > 0 && (
2056
2157
  <PolicyGroup
2057
- icon={<PinIcon className="size-3.5" />}
2158
+ icon={<PinIcon className="stg:size-3.5" />}
2058
2159
  label="Pinned"
2059
2160
  policies={filteredPinned}
2060
2161
  />
2061
2162
  )}
2062
2163
  {filteredClassified.length > 0 && (
2063
2164
  <PolicyGroup
2064
- icon={<SparklesIcon className="size-3.5" />}
2165
+ icon={<SparklesIcon className="stg:size-3.5" />}
2065
2166
  label="Auto-classified"
2066
2167
  policies={filteredClassified}
2067
2168
  />
@@ -2082,30 +2183,30 @@ function PolicyGroup({
2082
2183
  readonly policies: readonly ToolApprovalPolicy[];
2083
2184
  }) {
2084
2185
  return (
2085
- <div className="flex flex-col">
2086
- <div className="flex items-center gap-1.5 border-b border-border bg-muted-faint px-3 py-1.5">
2087
- <span className="text-muted-foreground">{icon}</span>
2088
- <span className="text-[10px] font-medium uppercase tracking-wider text-muted-foreground">
2186
+ <div className="stg:flex stg:flex-col">
2187
+ <div className="stg:flex stg:items-center stg:gap-1.5 stg:border-b stg:border-border stg:bg-muted-faint stg:px-3 stg:py-1.5">
2188
+ <span className="stg:text-muted-foreground">{icon}</span>
2189
+ <span className="stg:text-[10px] stg:font-medium stg:uppercase stg:tracking-wider stg:text-muted-foreground">
2089
2190
  {label}
2090
2191
  </span>
2091
- <span className="text-[10px] text-muted-foreground">
2192
+ <span className="stg:text-[10px] stg:text-muted-foreground">
2092
2193
  ({policies.length})
2093
2194
  </span>
2094
2195
  </div>
2095
- <div className="flex flex-col divide-y divide-border">
2196
+ <div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
2096
2197
  {policies.map((policy) => (
2097
- <div key={policy.toolName} className="px-3 py-2.5">
2098
- <div className="flex items-baseline gap-2">
2099
- <code className="font-mono text-sm font-medium text-foreground">
2198
+ <div key={policy.toolName} className="stg:px-3 stg:py-2.5">
2199
+ <div className="stg:flex stg:items-baseline stg:gap-2">
2200
+ <code className="stg:font-mono stg:text-sm stg:font-medium stg:text-foreground">
2100
2201
  {policy.toolName}
2101
2202
  </code>
2102
- <span className="inline-flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-[10px] font-medium text-amber-600 dark:text-amber-400">
2103
- <ShieldIcon className="size-2.5" />
2203
+ <span className="stg:inline-flex stg:items-center stg:gap-1 stg:rounded stg:bg-amber-500/10 stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium stg:text-amber-600 stg:dark:text-amber-400">
2204
+ <ShieldIcon className="stg:size-2.5" />
2104
2205
  requires approval
2105
2206
  </span>
2106
2207
  </div>
2107
2208
  {policy.message && (
2108
- <p className="mt-0.5 text-xs text-muted-foreground">
2209
+ <p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
2109
2210
  {policy.message}
2110
2211
  </p>
2111
2212
  )}
@@ -2123,7 +2224,7 @@ function PolicyGroup({
2123
2224
 
2124
2225
  function Dot() {
2125
2226
  return (
2126
- <span className="shrink-0" aria-hidden="true">
2227
+ <span className="stg:shrink-0" aria-hidden="true">
2127
2228
  {"\u00B7"}
2128
2229
  </span>
2129
2230
  );
@@ -2136,23 +2237,23 @@ function Dot() {
2136
2237
  function LoadingSkeleton({ className }: { readonly className?: string }) {
2137
2238
  return (
2138
2239
  <div
2139
- className={cn("flex flex-col gap-6", className)}
2240
+ className={cn("stg:flex stg:flex-col stg:gap-6", className)}
2140
2241
  aria-busy="true"
2141
2242
  aria-label="Loading MCP server details"
2142
2243
  >
2143
- <div className="flex items-start gap-3">
2144
- <div className="mt-1 size-6 shrink-0 animate-pulse rounded bg-muted" />
2145
- <div className="flex-1 space-y-2">
2146
- <div className="h-5 w-48 animate-pulse rounded bg-muted" />
2147
- <div className="h-3 w-64 animate-pulse rounded bg-muted" />
2148
- <div className="h-4 w-full max-w-md animate-pulse rounded bg-muted" />
2244
+ <div className="stg:flex stg:items-start stg:gap-3">
2245
+ <div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
2246
+ <div className="stg:flex-1 stg:space-y-2">
2247
+ <div className="stg:h-5 stg:w-48 stg:animate-pulse stg:rounded stg:bg-muted" />
2248
+ <div className="stg:h-3 stg:w-64 stg:animate-pulse stg:rounded stg:bg-muted" />
2249
+ <div className="stg:h-4 stg:w-full stg:max-w-md stg:animate-pulse stg:rounded stg:bg-muted" />
2149
2250
  </div>
2150
2251
  </div>
2151
2252
  {[24, 48, 16, 12].map((h, i) => (
2152
- <div key={i} className="space-y-2">
2153
- <div className="h-3 w-28 animate-pulse rounded bg-muted" />
2253
+ <div key={i} className="stg:space-y-2">
2254
+ <div className="stg:h-3 stg:w-28 stg:animate-pulse stg:rounded stg:bg-muted" />
2154
2255
  <div
2155
- className="animate-pulse rounded-lg border border-border bg-muted-faint"
2256
+ className="stg:animate-pulse stg:rounded-lg stg:border stg:border-border stg:bg-muted-faint"
2156
2257
  style={{ height: `${h * 4}px` }}
2157
2258
  />
2158
2259
  </div>
@@ -2166,15 +2267,15 @@ function NotFoundState({ className }: { readonly className?: string }) {
2166
2267
  <div
2167
2268
  role="status"
2168
2269
  className={cn(
2169
- "flex flex-col items-center gap-2 py-12 text-center",
2270
+ "stg:flex stg:flex-col stg:items-center stg:gap-2 stg:py-12 stg:text-center",
2170
2271
  className,
2171
2272
  )}
2172
2273
  >
2173
- <McpServerIcon className="size-10 text-muted-foreground-faint" />
2174
- <p className="text-sm font-medium text-muted-foreground">
2274
+ <McpServerIcon className="stg:size-10 stg:text-muted-foreground-faint" />
2275
+ <p className="stg:text-sm stg:font-medium stg:text-muted-foreground">
2175
2276
  MCP Server not found
2176
2277
  </p>
2177
- <p className="text-xs text-muted-foreground-subtle">
2278
+ <p className="stg:text-xs stg:text-muted-foreground-subtle">
2178
2279
  This MCP server doesn&apos;t exist or you don&apos;t have access to it.
2179
2280
  </p>
2180
2281
  </div>
@@ -2448,7 +2549,7 @@ function Spinner() {
2448
2549
  stroke="currentColor"
2449
2550
  strokeWidth="2"
2450
2551
  strokeLinecap="round"
2451
- className="animate-spin"
2552
+ className="stg:animate-spin"
2452
2553
  aria-hidden="true"
2453
2554
  >
2454
2555
  <path d="M8 2a6 6 0 1 0 6 6" />