@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.
- package/access/ManageAccessButton.js +1 -1
- package/access/ManageAccessButton.js.map +1 -1
- package/access/ManageAccessDialog.js +3 -3
- package/access/ManageAccessDialog.js.map +1 -1
- package/action-menu/ActionMenu.js +3 -3
- package/action-menu/ActionMenu.js.map +1 -1
- package/activity/useRecentActivity.d.ts +6 -1
- package/activity/useRecentActivity.d.ts.map +1 -1
- package/activity/useRecentActivity.js +6 -1
- package/activity/useRecentActivity.js.map +1 -1
- package/agent/AgentDetailView.js +21 -21
- package/agent/AgentDetailView.js.map +1 -1
- package/agent/AgentPicker.js +8 -8
- package/agent/AgentPicker.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +3 -3
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.js +6 -6
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent/steps/ReviewStep.js +3 -3
- package/agent/steps/ReviewStep.js.map +1 -1
- package/agent-instance/AgentInstanceDetailPanel.js +2 -2
- package/agent-instance/AgentInstanceDetailPanel.js.map +1 -1
- package/agent-instance/AgentInstanceList.js +4 -4
- package/agent-instance/AgentInstanceList.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +1 -1
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.js +9 -9
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.js +5 -5
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/attachment/AttachmentChipList.js +12 -12
- package/attachment/AttachmentChipList.js.map +1 -1
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +1 -1
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/attachment/attachment-utils.d.ts +8 -5
- package/attachment/attachment-utils.d.ts.map +1 -1
- package/attachment/attachment-utils.js +8 -5
- package/attachment/attachment-utils.js.map +1 -1
- package/billing/AutoRechargeCard.js +2 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.js +6 -6
- package/billing/BillingSection.js.map +1 -1
- package/billing/CreditBalanceCard.js +4 -4
- package/billing/CreditBalanceCard.js.map +1 -1
- package/billing/CreditLedgerTable.js +13 -13
- package/billing/CreditLedgerTable.js.map +1 -1
- package/billing/CreditPackGrid.js +2 -2
- package/billing/CreditPackGrid.js.map +1 -1
- package/billing/LowBalanceBanner.js +4 -4
- package/billing/LowBalanceBanner.js.map +1 -1
- package/billing/PaymentMethodCard.js +2 -2
- package/billing/PaymentMethodCard.js.map +1 -1
- package/button/Button.js +7 -7
- package/button/Button.js.map +1 -1
- package/channel/AgentChannelsPanel.js +12 -12
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/ChannelConversationsDialog.js +6 -6
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.js +2 -2
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.js +13 -13
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ChannelToolCredentials.js +3 -3
- package/channel/ChannelToolCredentials.js.map +1 -1
- package/channel/ConnectSlackDialog.js +13 -13
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +8 -8
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/connect/ServingAppSection.js +5 -5
- package/channel/connect/ServingAppSection.js.map +1 -1
- package/channel/connect/ToolCredentialsSection.js +1 -1
- package/channel/connect/ToolCredentialsSection.js.map +1 -1
- package/channel/connect/VerbatimRefusal.js +1 -1
- package/channel/connect/VerbatimRefusal.js.map +1 -1
- package/channel/connect/icons.js +1 -1
- package/channel/connect/icons.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +3 -3
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/ChannelAppListPanel.js +5 -5
- package/channel-app/ChannelAppListPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.js +6 -6
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.js +7 -7
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +4 -4
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/ConfigureMenu.js +4 -4
- package/composer/ConfigureMenu.js.map +1 -1
- package/composer/ContextChip.js +4 -4
- package/composer/ContextChip.js.map +1 -1
- package/composer/ContextPopover.js +4 -4
- package/composer/ContextPopover.js.map +1 -1
- package/composer/InteractionModePicker.js +5 -5
- package/composer/InteractionModePicker.js.map +1 -1
- package/composer/SessionComposer.js +8 -8
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.js +3 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationAttentionBanner.js +2 -2
- package/conversation/ConversationAttentionBanner.js.map +1 -1
- package/conversation/ConversationComposer.js +2 -2
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationControlBanner.js +5 -5
- package/conversation/ConversationControlBanner.js.map +1 -1
- package/conversation/ConversationListPane.js +12 -12
- package/conversation/ConversationListPane.js.map +1 -1
- package/conversation/ConversationMediaAttachment.js +4 -4
- package/conversation/ConversationMediaAttachment.js.map +1 -1
- package/conversation/ConversationTimelineView.js +12 -12
- package/conversation/ConversationTimelineView.js.map +1 -1
- package/conversation/ConversationsWorkbench.js +3 -3
- package/conversation/ConversationsWorkbench.js.map +1 -1
- package/cursor-accounts/CursorAccountEditor.js +1 -1
- package/cursor-accounts/CursorAccountEditor.js.map +1 -1
- package/cursor-accounts/CursorAccountsAccessNotice.js +1 -1
- package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -1
- package/cursor-accounts/CursorAccountsConsole.js +9 -9
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +7 -7
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/cursor-accounts/MemberKeysPanel.js +3 -3
- package/cursor-accounts/MemberKeysPanel.js.map +1 -1
- package/cursor-accounts/badges.js +1 -1
- package/cursor-accounts/badges.js.map +1 -1
- package/dashboard/DashboardFailedRuns.js +4 -4
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/dashboard/DashboardKPICards.js +7 -7
- package/dashboard/DashboardKPICards.js.map +1 -1
- package/dashboard/OperationalDashboard.js +1 -1
- package/dashboard/OperationalDashboard.js.map +1 -1
- package/datastore/CollectionRecordsBrowser.js +10 -10
- package/datastore/CollectionRecordsBrowser.js.map +1 -1
- package/datastore/CollectionSchemaView.js +4 -4
- package/datastore/CollectionSchemaView.js.map +1 -1
- package/datastore/DatastoreDetailView.js +4 -4
- package/datastore/DatastoreDetailView.js.map +1 -1
- package/datastore/DatastoreSyncReport.js +1 -1
- package/datastore/DatastoreSyncReport.js.map +1 -1
- package/datastore/DeleteDatastoreDialog.js +1 -1
- package/datastore/DeleteDatastoreDialog.js.map +1 -1
- package/datastore/FieldValueControl.js +2 -2
- package/datastore/FieldValueControl.js.map +1 -1
- package/datastore/RecordFilterBuilder.js +4 -4
- package/datastore/RecordFilterBuilder.js.map +1 -1
- package/datastore/RecordFormPanel.js +5 -5
- package/datastore/RecordFormPanel.js.map +1 -1
- package/dependency-graph/DependencyGraph.js +1 -1
- package/dependency-graph/DependencyGraph.js.map +1 -1
- package/dependency-graph/DependencyTreeNode.js +8 -8
- package/dependency-graph/DependencyTreeNode.js.map +1 -1
- package/empty-state/EmptyState.js +3 -3
- package/empty-state/EmptyState.js.map +1 -1
- package/empty-state/useEmptyState.js +1 -1
- package/empty-state/useEmptyState.js.map +1 -1
- package/environment/CreateEnvironmentForm.js +2 -2
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.js +4 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentListPanel.js +9 -9
- package/environment/EnvironmentListPanel.js.map +1 -1
- package/environment/EnvironmentPicker.js +4 -4
- package/environment/EnvironmentPicker.js.map +1 -1
- package/environment/EnvironmentVariableEditor.js +17 -17
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/error/ErrorMessage.js +1 -1
- package/error/ErrorMessage.js.map +1 -1
- package/error/SecretFlowErrorGuide.js +1 -1
- package/error/SecretFlowErrorGuide.js.map +1 -1
- package/execution/ApprovalCard.js +8 -8
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ArtifactApplyButton.js +4 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ArtifactContentBody.js +3 -3
- package/execution/ArtifactContentBody.js.map +1 -1
- package/execution/ArtifactContentRenderer.js +19 -19
- package/execution/ArtifactContentRenderer.js.map +1 -1
- package/execution/ArtifactDocument.js +10 -10
- package/execution/ArtifactDocument.js.map +1 -1
- package/execution/ArtifactFileContent.js +4 -4
- package/execution/ArtifactFileContent.js.map +1 -1
- package/execution/ArtifactPreviewModal.js +11 -11
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/ArtifactRowView.js +2 -2
- package/execution/ArtifactRowView.js.map +1 -1
- package/execution/ArtifactsWidget.js +1 -1
- package/execution/ArtifactsWidget.js.map +1 -1
- package/execution/ContextGauge.js +9 -9
- package/execution/ContextGauge.js.map +1 -1
- package/execution/EmptyChangeNotice.js +1 -1
- package/execution/EmptyChangeNotice.js.map +1 -1
- package/execution/ExecutionPhaseBadge.js +10 -10
- package/execution/ExecutionPhaseBadge.js.map +1 -1
- package/execution/ExecutionProgress.js +1 -1
- package/execution/ExecutionProgress.js.map +1 -1
- package/execution/FileChangeProgressBar.js +3 -3
- package/execution/FileChangeProgressBar.js.map +1 -1
- package/execution/FileChangesView.js +5 -5
- package/execution/FileChangesView.js.map +1 -1
- package/execution/FilePathLink.js +6 -6
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewAtoms.js +7 -7
- package/execution/FileReviewAtoms.js.map +1 -1
- package/execution/FileReviewCard.js +18 -18
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FileReviewDock.js +1 -1
- package/execution/FileReviewDock.js.map +1 -1
- package/execution/FollowUpInput.js +3 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/InteractionModeBadge.js +1 -1
- package/execution/InteractionModeBadge.js.map +1 -1
- package/execution/McpToolDetail.js +12 -12
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/MessageAttachments.js +8 -8
- package/execution/MessageAttachments.js.map +1 -1
- package/execution/MessageEntry.js +8 -8
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.js +12 -12
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanArtifactCard.js +8 -8
- package/execution/PlanArtifactCard.js.map +1 -1
- package/execution/PlanCompletionCard.js +2 -2
- package/execution/PlanCompletionCard.js.map +1 -1
- package/execution/PlanDocumentMessage.js +2 -2
- package/execution/PlanDocumentMessage.js.map +1 -1
- package/execution/PlanStreamingCard.js +3 -3
- package/execution/PlanStreamingCard.js.map +1 -1
- package/execution/ResultView.js +17 -17
- package/execution/ResultView.js.map +1 -1
- package/execution/SessionVariablesInput.js +6 -6
- package/execution/SessionVariablesInput.js.map +1 -1
- package/execution/SetupProgress.js +2 -2
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.js +19 -19
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/SummarizationBadge.js +3 -3
- package/execution/SummarizationBadge.js.map +1 -1
- package/execution/SummarizationCard.js +2 -2
- package/execution/SummarizationCard.js.map +1 -1
- package/execution/TerminalSession.js +2 -2
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ThreadSkeleton.js +1 -1
- package/execution/ThreadSkeleton.js.map +1 -1
- package/execution/TodoCard.js +3 -3
- package/execution/TodoCard.js.map +1 -1
- package/execution/TodoList.js +8 -8
- package/execution/TodoList.js.map +1 -1
- package/execution/ToolArgsView.js +4 -4
- package/execution/ToolArgsView.js.map +1 -1
- package/execution/ToolCallDetail.js +4 -4
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallGroup.js +1 -1
- package/execution/ToolCallGroup.js.map +1 -1
- package/execution/ToolCallItem.js +16 -16
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.js +9 -9
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/UsageWidget.js +3 -3
- package/execution/UsageWidget.js.map +1 -1
- package/execution/WriteBackCard.js +16 -16
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/WriteBacksWidget.js +1 -1
- package/execution/WriteBacksWidget.js.map +1 -1
- package/execution/tool-rendering-primitives.js +5 -5
- package/execution/tool-rendering-primitives.js.map +1 -1
- package/feedback/StigmerToaster.d.ts.map +1 -1
- package/feedback/StigmerToaster.js +9 -5
- package/feedback/StigmerToaster.js.map +1 -1
- package/file-reference/FileReferenceChipList.js +3 -3
- package/file-reference/FileReferenceChipList.js.map +1 -1
- package/github/GitHubRepoPicker.js +26 -26
- package/github/GitHubRepoPicker.js.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -2
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.js +11 -11
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/PeopleWithAccess.js +4 -4
- package/iam-policy/PeopleWithAccess.js.map +1 -1
- package/iam-policy/PrincipalPicker.js +6 -6
- package/iam-policy/PrincipalPicker.js.map +1 -1
- package/iam-policy/ProviderBadge.js +1 -1
- package/iam-policy/ProviderBadge.js.map +1 -1
- package/iam-policy/RoleSelector.js +4 -4
- package/iam-policy/RoleSelector.js.map +1 -1
- package/iam-policy/SharePanel.js +1 -1
- package/iam-policy/SharePanel.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -6
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +11 -11
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +8 -8
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +16 -16
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/ProviderPicker.js +11 -11
- package/identity-provider/ProviderPicker.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +7 -7
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/inline-edit/InlineEditImage.js +5 -5
- package/inline-edit/InlineEditImage.js.map +1 -1
- package/inline-edit/InlineEditKeyValue.js +3 -3
- package/inline-edit/InlineEditKeyValue.js.map +1 -1
- package/inline-edit/InlineEditResourceList.js +8 -8
- package/inline-edit/InlineEditResourceList.js.map +1 -1
- package/inline-edit/InlineEditSelect.js +8 -8
- package/inline-edit/InlineEditSelect.js.map +1 -1
- package/inline-edit/InlineEditText.js +6 -6
- package/inline-edit/InlineEditText.js.map +1 -1
- package/inline-edit/InlineEditTextarea.js +4 -4
- package/inline-edit/InlineEditTextarea.js.map +1 -1
- package/internal/ApprovalPeekBar.js +3 -3
- package/internal/ApprovalPeekBar.js.map +1 -1
- package/internal/BoundedContent.d.ts +1 -1
- package/internal/BoundedContent.d.ts.map +1 -1
- package/internal/BoundedContent.js +2 -2
- package/internal/BoundedContent.js.map +1 -1
- package/internal/CloudFeatureNotice.js +1 -1
- package/internal/CloudFeatureNotice.js.map +1 -1
- package/internal/DecisionButton.js +6 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/InCardDecisionError.js +1 -1
- package/internal/InCardDecisionError.js.map +1 -1
- package/internal/JumpToLatestButton.js +3 -3
- package/internal/JumpToLatestButton.js.map +1 -1
- package/internal/MermaidDiagram.js +2 -2
- package/internal/MermaidDiagram.js.map +1 -1
- package/internal/Pagination.js +2 -2
- package/internal/Pagination.js.map +1 -1
- package/internal/ResizableSplit.d.ts +28 -6
- package/internal/ResizableSplit.d.ts.map +1 -1
- package/internal/ResizableSplit.js +18 -4
- package/internal/ResizableSplit.js.map +1 -1
- package/internal/RevealToggle.js +2 -2
- package/internal/RevealToggle.js.map +1 -1
- package/internal/ScrollFade.js +2 -2
- package/internal/ScrollFade.js.map +1 -1
- package/internal/VirtualizedThread.js +2 -2
- package/internal/VirtualizedThread.js.map +1 -1
- package/internal/file-icons/index.js +2 -2
- package/internal/file-icons/index.js.map +1 -1
- package/internal/file-tree/FileTreeNode.js +3 -3
- package/internal/file-tree/FileTreeNode.js.map +1 -1
- package/internal/form-primitives.d.ts +12 -10
- package/internal/form-primitives.d.ts.map +1 -1
- package/internal/form-primitives.js +14 -12
- package/internal/form-primitives.js.map +1 -1
- package/internal/markdown-components.js +23 -23
- package/internal/markdown-components.js.map +1 -1
- package/internal/menu.js +5 -5
- package/internal/menu.js.map +1 -1
- package/internal/scroll-area.js +1 -1
- package/internal/scroll-area.js.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +7 -7
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.js +2 -2
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/tooltip.d.ts.map +1 -1
- package/internal/tooltip.js +4 -6
- package/internal/tooltip.js.map +1 -1
- package/invitation/InvitationCreatedAlert.js +1 -1
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.js +23 -23
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.js +12 -12
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/ResourceCountCard.js +4 -4
- package/library/ResourceCountCard.js.map +1 -1
- package/library/ScopeToggle.js +4 -4
- package/library/ScopeToggle.js.map +1 -1
- package/library/VisibilityOptionRow.d.ts +1 -1
- package/library/VisibilityOptionRow.d.ts.map +1 -1
- package/library/VisibilityOptionRow.js +22 -22
- package/library/VisibilityOptionRow.js.map +1 -1
- package/library/VisibilitySelector.js +5 -5
- package/library/VisibilitySelector.js.map +1 -1
- package/manifest/ApplyManifestDialog.js +6 -6
- package/manifest/ApplyManifestDialog.js.map +1 -1
- package/manifest/EditResourceYamlDialog.js +2 -2
- package/manifest/EditResourceYamlDialog.js.map +1 -1
- package/manifest/RedactedSecretsNotice.js +1 -1
- package/manifest/RedactedSecretsNotice.js.map +1 -1
- package/manifest/YamlEditor.js +1 -1
- package/manifest/YamlEditor.js.map +1 -1
- package/mcp-server/McpServerConfigPanel.js +22 -22
- package/mcp-server/McpServerConfigPanel.js.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +43 -17
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +112 -63
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.js +16 -16
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/mcp-server/McpToolSelector.js +4 -4
- package/mcp-server/McpToolSelector.js.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -2
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/OAuthCallbackHandler.js +4 -4
- package/mcp-server/OAuthCallbackHandler.js.map +1 -1
- package/mcp-server/OAuthRequiredNotice.js +1 -1
- package/mcp-server/OAuthRequiredNotice.js.map +1 -1
- package/mcp-server/StdioSandboxNotice.js +1 -1
- package/mcp-server/StdioSandboxNotice.js.map +1 -1
- package/mcp-server/index.d.ts +1 -1
- package/mcp-server/index.d.ts.map +1 -1
- package/mcp-server/index.js +1 -1
- package/mcp-server/index.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +4 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +8 -8
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/steps/ReviewStep.js +3 -3
- package/mcp-server/steps/ReviewStep.js.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.d.ts +29 -0
- package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.js +49 -10
- package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
- package/models/HarnessSelector.js +8 -8
- package/models/HarnessSelector.js.map +1 -1
- package/models/ModelSelector.js +11 -11
- package/models/ModelSelector.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -4
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +8 -8
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/oauth-app/OAuthAppListPanel.js +6 -6
- package/oauth-app/OAuthAppListPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.js +4 -4
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.js +10 -10
- package/organization/OrgProfilePanel.js.map +1 -1
- package/organization/OrgSwitcher.js +5 -5
- package/organization/OrgSwitcher.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.js +5 -5
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +8 -8
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.js +10 -10
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +2 -2
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/portal-container.d.ts +34 -9
- package/portal-container.d.ts.map +1 -1
- package/portal-container.js +33 -8
- package/portal-container.js.map +1 -1
- package/pricing-governance/BaselineEditor.js +5 -5
- package/pricing-governance/BaselineEditor.js.map +1 -1
- package/pricing-governance/ModelCatalogPanel.js +5 -5
- package/pricing-governance/ModelCatalogPanel.js.map +1 -1
- package/pricing-governance/ModelGovernanceDetail.js +7 -7
- package/pricing-governance/ModelGovernanceDetail.js.map +1 -1
- package/pricing-governance/OperatorAccessNotice.js +1 -1
- package/pricing-governance/OperatorAccessNotice.js.map +1 -1
- package/pricing-governance/PricingGovernanceConsole.js +8 -8
- package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
- package/pricing-governance/PricingGovernancePanel.js +4 -4
- package/pricing-governance/PricingGovernancePanel.js.map +1 -1
- package/pricing-governance/RetireConfirm.js +1 -1
- package/pricing-governance/RetireConfirm.js.map +1 -1
- package/pricing-governance/governance-primitives.js +6 -6
- package/pricing-governance/governance-primitives.js.map +1 -1
- package/resource-creation/CreationPicker.js +7 -7
- package/resource-creation/CreationPicker.js.map +1 -1
- package/resource-creation/StepIndicator.js +4 -4
- package/resource-creation/StepIndicator.js.map +1 -1
- package/resource-creation/TemplateCard.js +15 -15
- package/resource-creation/TemplateCard.js.map +1 -1
- package/resource-creation/TemplateGallery.js +5 -5
- package/resource-creation/TemplateGallery.js.map +1 -1
- package/resource-creation/WizardNav.js +2 -2
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-creation/WizardShell.js +2 -2
- package/resource-creation/WizardShell.js.map +1 -1
- package/resource-detail/ConfirmDialog.js +3 -3
- package/resource-detail/ConfirmDialog.js.map +1 -1
- package/resource-detail/ResourceActionBar.js +2 -2
- package/resource-detail/ResourceActionBar.js.map +1 -1
- package/resource-detail/ResourceDetailShell.js +3 -3
- package/resource-detail/ResourceDetailShell.js.map +1 -1
- package/resource-detail/Section.js +1 -1
- package/resource-detail/Section.js.map +1 -1
- package/resource-workbench/components/BulkActionBar.js +4 -4
- package/resource-workbench/components/BulkActionBar.js.map +1 -1
- package/resource-workbench/components/ColumnHeader.js +3 -3
- package/resource-workbench/components/ColumnHeader.js.map +1 -1
- package/resource-workbench/components/FilterBar.js +3 -3
- package/resource-workbench/components/FilterBar.js.map +1 -1
- package/resource-workbench/components/ResourceAvatar.js +18 -18
- package/resource-workbench/components/ResourceAvatar.js.map +1 -1
- package/resource-workbench/components/ResourceCards.js +2 -2
- package/resource-workbench/components/ResourceCards.js.map +1 -1
- package/resource-workbench/components/ResourceInspector.js +1 -1
- package/resource-workbench/components/ResourceInspector.js.map +1 -1
- package/resource-workbench/components/ResourceList.js +2 -2
- package/resource-workbench/components/ResourceList.js.map +1 -1
- package/resource-workbench/components/ResourceTable.js +5 -5
- package/resource-workbench/components/ResourceTable.js.map +1 -1
- package/resource-workbench/components/ResourceWorkbench.js +11 -11
- package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
- package/resource-workbench/components/SelectionCheckbox.js +1 -1
- package/resource-workbench/components/SelectionCheckbox.js.map +1 -1
- package/resource-workbench/components/StatusBadge.js +16 -16
- package/resource-workbench/components/StatusBadge.js.map +1 -1
- package/resource-workbench/components/ViewSwitcher.js +4 -4
- package/resource-workbench/components/ViewSwitcher.js.map +1 -1
- package/schedule/CadenceField.js +14 -14
- package/schedule/CadenceField.js.map +1 -1
- package/schedule/ScheduleDetailView.js +39 -39
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.js +9 -9
- package/schedule/ScheduleForm.js.map +1 -1
- package/schedule/ScheduleRowActions.js +1 -1
- package/schedule/ScheduleRowActions.js.map +1 -1
- package/schedule/ScheduleRunsTable.js +17 -17
- package/schedule/ScheduleRunsTable.js.map +1 -1
- package/schedule/TimeZoneField.js +5 -5
- package/schedule/TimeZoneField.js.map +1 -1
- package/schedule/scheduleColumns.js +5 -5
- package/schedule/scheduleColumns.js.map +1 -1
- package/session/NewSessionViewer.js +3 -3
- package/session/NewSessionViewer.js.map +1 -1
- package/session/PlanEditor.js +9 -9
- package/session/PlanEditor.js.map +1 -1
- package/session/PlanStreamingDocument.js +2 -2
- package/session/PlanStreamingDocument.js.map +1 -1
- package/session/SessionViewer.js +21 -21
- package/session/SessionViewer.js.map +1 -1
- package/session/SessionViewerLayout.d.ts +11 -8
- package/session/SessionViewerLayout.d.ts.map +1 -1
- package/session/SessionViewerLayout.js +1 -1
- package/session/SessionViewerLayout.js.map +1 -1
- package/session/facets/ArtifactsTab.js +2 -2
- package/session/facets/ArtifactsTab.js.map +1 -1
- package/session/facets/ChangesTab.js +3 -3
- package/session/facets/ChangesTab.js.map +1 -1
- package/session/facets/SetupTab.js +11 -11
- package/session/facets/SetupTab.js.map +1 -1
- package/session/facets/UsageTab.js +1 -1
- package/session/facets/UsageTab.js.map +1 -1
- package/settings/ApiKeysSection.js +1 -1
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.js +1 -1
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +4 -4
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.js +1 -1
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.js +1 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.js +1 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.js +1 -1
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.js +1 -1
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.js +1 -1
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.js +1 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/AgentShareList.js +5 -5
- package/sharing/AgentShareList.js.map +1 -1
- package/sharing/ShareAgentDialog.js +30 -30
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sharing/SharedAgentChat.js +6 -6
- package/sharing/SharedAgentChat.js.map +1 -1
- package/sidebar/SettingsSidebar.js +5 -5
- package/sidebar/SettingsSidebar.js.map +1 -1
- package/sidebar/WorkspaceSidebar.js +13 -13
- package/sidebar/WorkspaceSidebar.js.map +1 -1
- package/sidebar/chrome.js +5 -5
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDetailView.js +13 -13
- package/skill/SkillDetailView.js.map +1 -1
- package/skill/SkillDiffDialog.js +2 -2
- package/skill/SkillDiffDialog.js.map +1 -1
- package/skill/SkillFileBrowser.js +4 -4
- package/skill/SkillFileBrowser.js.map +1 -1
- package/skill/SkillPicker.js +10 -10
- package/skill/SkillPicker.js.map +1 -1
- package/skill/SkillUploader.js +8 -8
- package/skill/SkillUploader.js.map +1 -1
- package/src/__tests__/helpers/compile-sdk-styles.ts +33 -0
- package/src/__tests__/portal-container.test.tsx +97 -0
- package/src/__tests__/preflight-parity.layout.test.tsx +156 -0
- package/src/__tests__/scope-unprefixed.test.ts +86 -0
- package/src/__tests__/styles-border-layer-invariant.test.ts +86 -58
- package/src/__tests__/styles-dist-isolation.test.ts +195 -0
- package/src/__tests__/styles-host-isolation.layout.test.tsx +204 -0
- package/src/access/ManageAccessButton.tsx +3 -3
- package/src/access/ManageAccessDialog.tsx +19 -19
- package/src/action-menu/ActionMenu.tsx +8 -8
- package/src/activity/useRecentActivity.ts +6 -1
- package/src/agent/AgentDetailView.tsx +112 -112
- package/src/agent/AgentPicker.tsx +26 -26
- package/src/agent/steps/CapabilitiesStep.tsx +36 -36
- package/src/agent/steps/IdentityStep.tsx +45 -45
- package/src/agent/steps/ReviewStep.tsx +18 -18
- package/src/agent-instance/AgentInstanceDetailPanel.tsx +45 -45
- package/src/agent-instance/AgentInstanceList.tsx +36 -36
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +35 -35
- package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +0 -6
- package/src/api-key/ApiKeyCreatedAlert.tsx +15 -15
- package/src/api-key/ApiKeyListPanel.tsx +28 -28
- package/src/api-key/CreateApiKeyForm.tsx +25 -25
- package/src/attachment/AttachmentChipList.tsx +23 -23
- package/src/attachment/AttachmentImageLightbox.tsx +9 -11
- package/src/attachment/__tests__/AttachmentChipList.test.tsx +1 -1
- package/src/attachment/attachment-utils.ts +8 -5
- package/src/billing/AutoRechargeCard.tsx +26 -26
- package/src/billing/BillingSection.tsx +14 -14
- package/src/billing/CreditBalanceCard.tsx +7 -7
- package/src/billing/CreditLedgerTable.tsx +27 -27
- package/src/billing/CreditPackGrid.tsx +13 -13
- package/src/billing/LowBalanceBanner.tsx +6 -6
- package/src/billing/PaymentMethodCard.tsx +13 -13
- package/src/button/Button.tsx +10 -10
- package/src/button/__tests__/Button.test.tsx +9 -9
- package/src/channel/AgentChannelsPanel.tsx +33 -33
- package/src/channel/ChannelConversationsDialog.tsx +21 -21
- package/src/channel/ChannelCredentialsDialog.tsx +13 -13
- package/src/channel/ChannelTemplatesDialog.tsx +34 -34
- package/src/channel/ChannelToolCredentials.tsx +5 -5
- package/src/channel/ConnectSlackDialog.tsx +48 -48
- package/src/channel/ConnectWhatsAppDialog.tsx +42 -42
- package/src/channel/__tests__/AgentChannelsPanel.test.tsx +4 -9
- package/src/channel/connect/ServingAppSection.tsx +14 -14
- package/src/channel/connect/ToolCredentialsSection.tsx +5 -5
- package/src/channel/connect/VerbatimRefusal.tsx +1 -1
- package/src/channel/connect/icons.tsx +1 -1
- package/src/channel-app/ChannelAppDetailPanel.tsx +44 -44
- package/src/channel-app/ChannelAppListPanel.tsx +15 -15
- package/src/channel-app/CreateChannelAppForm.tsx +37 -37
- package/src/channel-app/internal.tsx +21 -21
- package/src/composer/ComposerToolbar.tsx +15 -15
- package/src/composer/ConfigureMenu.tsx +22 -22
- package/src/composer/ContextChip.tsx +12 -12
- package/src/composer/ContextPopover.tsx +8 -8
- package/src/composer/InteractionModePicker.tsx +14 -14
- package/src/composer/SessionComposer.tsx +24 -24
- package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +16 -15
- package/src/composer/__tests__/SessionComposer-serviceTier.test.tsx +2 -7
- package/src/composer/icons.tsx +5 -5
- package/src/conversation/ConversationAttentionBanner.tsx +6 -6
- package/src/conversation/ConversationComposer.tsx +13 -13
- package/src/conversation/ConversationControlBanner.tsx +11 -11
- package/src/conversation/ConversationListPane.tsx +38 -38
- package/src/conversation/ConversationMediaAttachment.tsx +13 -13
- package/src/conversation/ConversationTimelineView.tsx +45 -45
- package/src/conversation/ConversationsWorkbench.tsx +10 -10
- package/src/conversation/__tests__/ConversationComposer.test.tsx +1 -1
- package/src/cursor-accounts/CursorAccountEditor.tsx +13 -13
- package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +3 -3
- package/src/cursor-accounts/CursorAccountsConsole.tsx +35 -35
- package/src/cursor-accounts/MemberCoverageTable.tsx +29 -29
- package/src/cursor-accounts/MemberKeysPanel.tsx +17 -17
- package/src/cursor-accounts/badges.tsx +4 -4
- package/src/dashboard/DashboardFailedRuns.tsx +17 -17
- package/src/dashboard/DashboardKPICards.tsx +12 -12
- package/src/dashboard/OperationalDashboard.tsx +2 -2
- package/src/datastore/CollectionRecordsBrowser.tsx +35 -35
- package/src/datastore/CollectionSchemaView.tsx +43 -43
- package/src/datastore/DatastoreDetailView.tsx +18 -18
- package/src/datastore/DatastoreSyncReport.tsx +13 -13
- package/src/datastore/DeleteDatastoreDialog.tsx +21 -21
- package/src/datastore/FieldValueControl.tsx +7 -7
- package/src/datastore/RecordFilterBuilder.tsx +35 -35
- package/src/datastore/RecordFormPanel.tsx +35 -35
- package/src/dependency-graph/DependencyGraph.tsx +6 -6
- package/src/dependency-graph/DependencyTreeNode.tsx +21 -21
- package/src/empty-state/EmptyState.tsx +7 -7
- package/src/empty-state/useEmptyState.ts +1 -1
- package/src/environment/CreateEnvironmentForm.tsx +24 -24
- package/src/environment/EnvVarForm.tsx +40 -40
- package/src/environment/EnvironmentListPanel.tsx +19 -19
- package/src/environment/EnvironmentPicker.tsx +22 -22
- package/src/environment/EnvironmentVariableEditor.tsx +53 -53
- package/src/error/ErrorMessage.tsx +22 -22
- package/src/error/SecretFlowErrorGuide.tsx +19 -19
- package/src/execution/ApprovalCard.tsx +19 -19
- package/src/execution/ArtifactApplyButton.tsx +7 -7
- package/src/execution/ArtifactContentBody.tsx +11 -11
- package/src/execution/ArtifactContentRenderer.tsx +29 -29
- package/src/execution/ArtifactDocument.tsx +22 -22
- package/src/execution/ArtifactFileContent.tsx +6 -6
- package/src/execution/ArtifactPreviewModal.tsx +33 -33
- package/src/execution/ArtifactRowView.tsx +13 -13
- package/src/execution/ArtifactsWidget.tsx +4 -4
- package/src/execution/ContextGauge.tsx +24 -24
- package/src/execution/EmptyChangeNotice.tsx +1 -1
- package/src/execution/ExecutionPhaseBadge.tsx +12 -12
- package/src/execution/ExecutionProgress.tsx +2 -2
- package/src/execution/FileChangeProgressBar.tsx +9 -9
- package/src/execution/FileChangesView.tsx +12 -12
- package/src/execution/FilePathLink.tsx +10 -10
- package/src/execution/FileReviewAtoms.tsx +9 -9
- package/src/execution/FileReviewCard.tsx +37 -37
- package/src/execution/FileReviewDock.tsx +2 -2
- package/src/execution/FollowUpInput.tsx +9 -9
- package/src/execution/InteractionModeBadge.tsx +2 -2
- package/src/execution/McpToolDetail.tsx +28 -28
- package/src/execution/MessageAttachments.tsx +16 -16
- package/src/execution/MessageEntry.tsx +23 -23
- package/src/execution/MessageThread.tsx +28 -28
- package/src/execution/PlanArtifactCard.tsx +22 -22
- package/src/execution/PlanCompletionCard.tsx +10 -10
- package/src/execution/PlanDocumentMessage.tsx +6 -6
- package/src/execution/PlanStreamingCard.tsx +11 -11
- package/src/execution/ResultView.tsx +44 -44
- package/src/execution/SessionVariablesInput.tsx +38 -38
- package/src/execution/SetupProgress.tsx +5 -5
- package/src/execution/SubAgentSection.tsx +42 -42
- package/src/execution/SummarizationBadge.tsx +15 -15
- package/src/execution/SummarizationCard.tsx +11 -11
- package/src/execution/TerminalSession.tsx +7 -7
- package/src/execution/ThreadSkeleton.tsx +10 -10
- package/src/execution/TodoCard.tsx +11 -11
- package/src/execution/TodoList.tsx +13 -13
- package/src/execution/ToolArgsView.tsx +8 -8
- package/src/execution/ToolCallDetail.tsx +7 -7
- package/src/execution/ToolCallGroup.tsx +1 -1
- package/src/execution/ToolCallItem.tsx +28 -28
- package/src/execution/ToolRunGroup.tsx +16 -16
- package/src/execution/UsageWidget.tsx +12 -12
- package/src/execution/WriteBackCard.tsx +30 -30
- package/src/execution/WriteBacksWidget.tsx +4 -4
- package/src/execution/__tests__/ApprovalCard.test.tsx +12 -12
- package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +3 -3
- package/src/execution/__tests__/FileChangesView.test.tsx +2 -2
- package/src/execution/__tests__/FilePathLink.test.tsx +1 -1
- package/src/execution/__tests__/FileReviewDock.test.tsx +1 -1
- package/src/execution/__tests__/MessageEntry-attachments.test.tsx +2 -2
- package/src/execution/__tests__/MessageThread.test.tsx +1 -1
- package/src/execution/__tests__/TerminalSession.test.tsx +1 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +1 -1
- package/src/execution/__tests__/ToolCallGroup.test.tsx +4 -4
- package/src/execution/__tests__/ToolCallItem.test.tsx +9 -9
- package/src/execution/__tests__/ToolRunGroup.test.tsx +6 -6
- package/src/execution/__tests__/WriteBackCard.test.tsx +4 -4
- package/src/execution/__tests__/message-entry.test.tsx +8 -8
- package/src/execution/__tests__/thread-memoization.test.ts +2 -2
- package/src/execution/__tests__/thread-skeleton.test.tsx +1 -1
- package/src/execution/__tests__/virtualized-thread.test.tsx +1 -1
- package/src/execution/tool-rendering-primitives.tsx +12 -12
- package/src/feedback/StigmerToaster.tsx +8 -5
- package/src/file-reference/FileReferenceChipList.tsx +5 -5
- package/src/github/GitHubRepoPicker.tsx +60 -60
- package/src/iam-policy/GrantAccessForm.tsx +11 -11
- package/src/iam-policy/OrgMembersPanel.tsx +48 -48
- package/src/iam-policy/PeopleWithAccess.tsx +23 -23
- package/src/iam-policy/PrincipalPicker.tsx +34 -34
- package/src/iam-policy/ProviderBadge.tsx +2 -2
- package/src/iam-policy/RoleSelector.tsx +9 -9
- package/src/iam-policy/SharePanel.tsx +5 -5
- package/src/identity-provider/CreateIdentityProviderForm.tsx +47 -47
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +73 -73
- package/src/identity-provider/IdentityProviderListPanel.tsx +33 -33
- package/src/identity-provider/IdentityProviderWizard.tsx +72 -72
- package/src/identity-provider/ProviderPicker.tsx +17 -17
- package/src/identity-provider/SsoLoginPrompt.tsx +39 -39
- package/src/index.ts +1 -0
- package/src/inline-edit/InlineEditImage.tsx +26 -26
- package/src/inline-edit/InlineEditKeyValue.tsx +44 -44
- package/src/inline-edit/InlineEditResourceList.tsx +48 -48
- package/src/inline-edit/InlineEditSelect.tsx +22 -22
- package/src/inline-edit/InlineEditText.tsx +29 -29
- package/src/inline-edit/InlineEditTextarea.tsx +27 -27
- package/src/internal/ApprovalPeekBar.tsx +9 -9
- package/src/internal/BoundedContent.tsx +3 -3
- package/src/internal/CloudFeatureNotice.tsx +3 -3
- package/src/internal/DecisionButton.tsx +10 -10
- package/src/internal/InCardDecisionError.tsx +1 -1
- package/src/internal/JumpToLatestButton.tsx +9 -9
- package/src/internal/MermaidDiagram.tsx +5 -5
- package/src/internal/Pagination.tsx +5 -5
- package/src/internal/ResizableSplit.tsx +61 -20
- package/src/internal/RevealToggle.tsx +5 -5
- package/src/internal/ScrollFade.tsx +2 -2
- package/src/internal/VirtualizedThread.tsx +6 -6
- package/src/internal/__tests__/BoundedContent.test.tsx +1 -1
- package/src/internal/__tests__/DecisionButton.test.tsx +14 -14
- package/src/internal/__tests__/ResizableSplit.layout.test.tsx +136 -0
- package/src/internal/__tests__/ResizableSplit.test.tsx +49 -2
- package/src/internal/__tests__/ThreadCardShell.test.tsx +4 -4
- package/src/internal/__tests__/markdown-components.test.tsx +2 -2
- package/src/internal/__tests__/thread-animation.test.tsx +6 -6
- package/src/internal/file-icons/index.tsx +2 -2
- package/src/internal/file-tree/FileTreeNode.tsx +9 -9
- package/src/internal/file-tree/__tests__/FileTreeNode-explorer.test.tsx +1 -1
- package/src/internal/form-primitives.tsx +18 -16
- package/src/internal/markdown-components.tsx +24 -24
- package/src/internal/menu.tsx +18 -18
- package/src/internal/scroll-area.tsx +6 -6
- package/src/internal/thread-card/ThreadCardShell.tsx +10 -10
- package/src/internal/thread-card/glyphs.tsx +3 -3
- package/src/internal/tooltip.tsx +9 -11
- package/src/invitation/InvitationCreatedAlert.tsx +15 -15
- package/src/invitation/InvitationManager.tsx +79 -79
- package/src/invitation/InvitationRedemption.tsx +49 -49
- package/src/library/ResourceCountCard.tsx +7 -7
- package/src/library/ScopeToggle.tsx +7 -7
- package/src/library/VisibilityOptionRow.tsx +30 -30
- package/src/library/VisibilitySelector.tsx +19 -19
- package/src/library/__tests__/VisibilitySelector.test.tsx +0 -6
- package/src/manifest/ApplyManifestDialog.tsx +36 -36
- package/src/manifest/EditResourceYamlDialog.tsx +32 -32
- package/src/manifest/RedactedSecretsNotice.tsx +2 -2
- package/src/manifest/YamlEditor.tsx +1 -1
- package/src/mcp-server/McpServerConfigPanel.tsx +70 -70
- package/src/mcp-server/McpServerConnectDialog.tsx +80 -53
- package/src/mcp-server/McpServerDetailView.tsx +325 -224
- package/src/mcp-server/McpServerPicker.tsx +50 -50
- package/src/mcp-server/McpToolSelector.tsx +26 -26
- package/src/mcp-server/OAuthAppForm.tsx +32 -32
- package/src/mcp-server/OAuthCallbackHandler.tsx +11 -11
- package/src/mcp-server/OAuthRequiredNotice.tsx +3 -3
- package/src/mcp-server/StdioSandboxNotice.tsx +3 -3
- package/src/mcp-server/__tests__/McpServerDetailView.test.tsx +162 -7
- package/src/mcp-server/__tests__/useMcpServerOAuthConnect.test.tsx +159 -0
- package/src/mcp-server/index.ts +4 -1
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +71 -71
- package/src/mcp-server/steps/IdentityTransportStep.tsx +94 -94
- package/src/mcp-server/steps/ReviewStep.tsx +17 -17
- package/src/mcp-server/useMcpServerOAuthConnect.ts +65 -10
- package/src/models/HarnessSelector.tsx +8 -8
- package/src/models/ModelSelector.tsx +58 -58
- package/src/models/__tests__/ModelSelector-serviceTier.test.tsx +2 -7
- package/src/oauth-app/CreateOAuthAppForm.tsx +28 -28
- package/src/oauth-app/OAuthAppDetailPanel.tsx +51 -51
- package/src/oauth-app/OAuthAppListPanel.tsx +14 -14
- package/src/organization/CreateOrganizationForm.tsx +37 -37
- package/src/organization/OrgProfilePanel.tsx +65 -65
- package/src/organization/OrgSwitcher.tsx +33 -33
- package/src/platform-client/CreatePlatformClientForm.tsx +59 -59
- package/src/platform-client/PlatformClientDetailPanel.tsx +107 -107
- package/src/platform-client/PlatformClientListPanel.tsx +38 -38
- package/src/platform-client/PlatformClientSecretAlert.tsx +18 -18
- package/src/portal-container.ts +36 -9
- package/src/pricing-governance/BaselineEditor.tsx +29 -29
- package/src/pricing-governance/ModelCatalogPanel.tsx +28 -28
- package/src/pricing-governance/ModelGovernanceDetail.tsx +35 -35
- package/src/pricing-governance/OperatorAccessNotice.tsx +3 -3
- package/src/pricing-governance/PricingGovernanceConsole.tsx +31 -31
- package/src/pricing-governance/PricingGovernancePanel.tsx +19 -19
- package/src/pricing-governance/RetireConfirm.tsx +7 -7
- package/src/pricing-governance/governance-primitives.tsx +12 -12
- package/src/resource-creation/CreationPicker.tsx +23 -23
- package/src/resource-creation/StepIndicator.tsx +17 -17
- package/src/resource-creation/TemplateCard.tsx +23 -23
- package/src/resource-creation/TemplateGallery.tsx +13 -13
- package/src/resource-creation/WizardNav.tsx +19 -19
- package/src/resource-creation/WizardShell.tsx +7 -7
- package/src/resource-detail/ConfirmDialog.tsx +16 -16
- package/src/resource-detail/ResourceActionBar.tsx +6 -6
- package/src/resource-detail/ResourceDetailShell.tsx +14 -14
- package/src/resource-detail/Section.tsx +10 -10
- package/src/resource-workbench/components/BulkActionBar.tsx +13 -13
- package/src/resource-workbench/components/ColumnHeader.tsx +9 -9
- package/src/resource-workbench/components/FilterBar.tsx +9 -9
- package/src/resource-workbench/components/ResourceAvatar.tsx +19 -19
- package/src/resource-workbench/components/ResourceCards.tsx +8 -8
- package/src/resource-workbench/components/ResourceInspector.tsx +8 -8
- package/src/resource-workbench/components/ResourceList.tsx +7 -7
- package/src/resource-workbench/components/ResourceTable.tsx +12 -12
- package/src/resource-workbench/components/ResourceWorkbench.tsx +42 -42
- package/src/resource-workbench/components/SelectionCheckbox.tsx +2 -2
- package/src/resource-workbench/components/StatusBadge.tsx +17 -17
- package/src/resource-workbench/components/ViewSwitcher.tsx +7 -7
- package/src/schedule/CadenceField.tsx +36 -36
- package/src/schedule/ScheduleDetailView.tsx +105 -105
- package/src/schedule/ScheduleForm.tsx +49 -49
- package/src/schedule/ScheduleRowActions.tsx +4 -4
- package/src/schedule/ScheduleRunsTable.tsx +43 -43
- package/src/schedule/TimeZoneField.tsx +12 -12
- package/src/schedule/__tests__/scheduleCreation.test.tsx +0 -7
- package/src/schedule/scheduleColumns.tsx +7 -7
- package/src/session/NewSessionViewer.tsx +5 -5
- package/src/session/PlanEditor.tsx +37 -37
- package/src/session/PlanStreamingDocument.tsx +8 -8
- package/src/session/SessionViewer.tsx +48 -48
- package/src/session/SessionViewerLayout.tsx +14 -11
- package/src/session/__tests__/NewSessionViewer.test.tsx +4 -4
- package/src/session/__tests__/PlanEditor.test.tsx +2 -2
- package/src/session/__tests__/SessionViewerLayout.test.tsx +20 -8
- package/src/session/facets/ArtifactsTab.tsx +3 -3
- package/src/session/facets/ChangesTab.tsx +5 -5
- package/src/session/facets/SetupTab.tsx +26 -26
- package/src/session/facets/UsageTab.tsx +2 -2
- package/src/settings/ApiKeysSection.tsx +6 -6
- package/src/settings/ChannelAppsSection.tsx +6 -6
- package/src/settings/EnvironmentsSection.tsx +15 -15
- package/src/settings/IdentityProvidersSection.tsx +7 -7
- package/src/settings/InvitationsSection.tsx +4 -4
- package/src/settings/MembersSection.tsx +5 -5
- package/src/settings/OAuthAppsSection.tsx +6 -6
- package/src/settings/OrgProfileSection.tsx +3 -3
- package/src/settings/PlatformClientsSection.tsx +7 -7
- package/src/settings/UsageSection.tsx +3 -3
- package/src/sharing/AgentShareList.tsx +39 -39
- package/src/sharing/ShareAgentDialog.tsx +149 -149
- package/src/sharing/SharedAgentChat.tsx +24 -24
- package/src/sharing/__tests__/AgentShareList.test.tsx +0 -7
- package/src/sidebar/SettingsSidebar.tsx +7 -7
- package/src/sidebar/WorkspaceSidebar.tsx +25 -25
- package/src/sidebar/__tests__/SettingsSidebar.test.tsx +3 -7
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -11
- package/src/sidebar/chrome.tsx +16 -16
- package/src/skill/SkillDetailView.tsx +54 -54
- package/src/skill/SkillDiffDialog.tsx +25 -25
- package/src/skill/SkillFileBrowser.tsx +22 -22
- package/src/skill/SkillPicker.tsx +28 -28
- package/src/skill/SkillUploader.tsx +67 -67
- package/src/styles.css +136 -15
- package/src/switch/Switch.tsx +9 -9
- package/src/switch/__tests__/Switch.test.tsx +3 -3
- package/src/tabs/Tabs.tsx +11 -11
- package/src/usage/AgentBreakdownList.tsx +18 -18
- package/src/usage/CreditRunwayIndicator.tsx +4 -4
- package/src/usage/ExportButton.tsx +8 -8
- package/src/usage/HarnessSplitCard.tsx +14 -14
- package/src/usage/OrgUsagePanel.tsx +71 -71
- package/src/user/UserMenu.tsx +13 -13
- package/src/version-history/DiffFileList.tsx +13 -13
- package/src/version-history/DiffSummary.tsx +3 -3
- package/src/version-history/DiffViewer.tsx +14 -14
- package/src/version-history/MultiFileDiffView.tsx +6 -6
- package/src/version-history/UnifiedDiffView.tsx +4 -4
- package/src/version-history/VersionTimeline.tsx +21 -21
- package/src/version-history/VersionTimelineEntry.tsx +28 -28
- package/src/version-history/__tests__/UnifiedDiffView.test.tsx +2 -2
- package/src/workflow/ApprovalFormBuilder.tsx +48 -48
- package/src/workflow/BranchConditionBuilder.tsx +21 -21
- package/src/workflow/CanvasContextMenu.tsx +10 -10
- package/src/workflow/CanvasTransitionEdge.tsx +16 -16
- package/src/workflow/CostByWorkflowChart.tsx +18 -18
- package/src/workflow/ExecutionActiveTaskIndicator.tsx +13 -13
- package/src/workflow/ExecutionSummaryWidget.tsx +29 -29
- package/src/workflow/ExecutionTrendChart.tsx +25 -25
- package/src/workflow/FailedRunsWidget.tsx +14 -14
- package/src/workflow/PendingApprovalsWidget.tsx +19 -19
- package/src/workflow/TaskConfigForm.tsx +32 -32
- package/src/workflow/TaskPickerPopover.tsx +22 -22
- package/src/workflow/ViewYamlDialog.tsx +12 -12
- package/src/workflow/WorkflowAgentCallTranscript.tsx +15 -15
- package/src/workflow/WorkflowApprovalList.tsx +3 -3
- package/src/workflow/WorkflowArchitectDialog.tsx +80 -80
- package/src/workflow/WorkflowArtifactDocument.tsx +17 -17
- package/src/workflow/WorkflowCanvasEditor.tsx +22 -22
- package/src/workflow/WorkflowCanvasInner.tsx +3 -3
- package/src/workflow/WorkflowCodePreviewGraph.tsx +2 -2
- package/src/workflow/WorkflowDashboard.tsx +2 -2
- package/src/workflow/WorkflowDetailView.tsx +50 -50
- package/src/workflow/WorkflowDiffGraph.tsx +5 -5
- package/src/workflow/WorkflowEditorView.tsx +58 -58
- package/src/workflow/WorkflowExecutionGraph.tsx +15 -15
- package/src/workflow/WorkflowExecutionHeader.tsx +14 -14
- package/src/workflow/WorkflowExecutionPhaseBadge.tsx +11 -11
- package/src/workflow/WorkflowExecutionViewer.tsx +39 -39
- package/src/workflow/WorkflowExplainDialog.tsx +30 -30
- package/src/workflow/WorkflowFileReviewList.tsx +3 -3
- package/src/workflow/WorkflowGraphFullscreenDialog.tsx +11 -11
- package/src/workflow/WorkflowNode.tsx +2 -2
- package/src/workflow/WorkflowNodePopover.tsx +15 -15
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -9
- package/src/workflow/WorkflowOverviewSummary.tsx +12 -12
- package/src/workflow/WorkflowRefinePanel.tsx +49 -49
- package/src/workflow/WorkflowRepairCard.tsx +53 -53
- package/src/workflow/WorkflowRunDialog.tsx +20 -20
- package/src/workflow/WorkflowRunForm.tsx +19 -19
- package/src/workflow/WorkflowTaskApprovalCard.tsx +19 -19
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +23 -23
- package/src/workflow/WorkflowTaskList.tsx +11 -11
- package/src/workflow/WorkflowTaskPalette.tsx +23 -23
- package/src/workflow/WorkflowTaskReviewGate.tsx +10 -10
- package/src/workflow/WorkflowVersionBadge.tsx +7 -7
- package/src/workflow/WorkflowVersionDiffViewer.tsx +24 -24
- package/src/workflow/WorkflowVersionTimeline.tsx +32 -32
- package/src/workflow/WorkflowVersionsTab.tsx +7 -7
- package/src/workflow/__tests__/WorkflowAgentCallTranscript.test.tsx +2 -2
- package/src/workflow/__tests__/WorkflowExecutionViewer.reconciliation.test.tsx +6 -6
- package/src/workflow/__tests__/WorkflowTaskApprovalCard.test.tsx +15 -15
- package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +1 -1
- package/src/workflow/__tests__/node-shell.test.ts +2 -0
- package/src/workflow/__tests__/task-type-visual-registry.test.ts +2 -0
- package/src/workflow/diff/DiffSummaryBar.tsx +5 -5
- package/src/workflow/execution-comparison/ComparisonSummaryCards.tsx +11 -11
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -20
- package/src/workflow/execution-comparison/ExecutionComparisonView.tsx +16 -16
- package/src/workflow/execution-comparison/TaskComparisonTable.tsx +44 -44
- package/src/workflow/execution-history/ExecutionFilterBar.tsx +12 -12
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +25 -25
- package/src/workflow/execution-history/FailureAnalysisPanel.tsx +18 -18
- package/src/workflow/execution-history/HealthMetricsStrip.tsx +16 -16
- package/src/workflow/execution-history/WorkflowExecutionHistory.tsx +1 -1
- package/src/workflow/facets/WorkflowArtifactsTab.tsx +3 -3
- package/src/workflow/facets/WorkflowChangesTab.tsx +8 -8
- package/src/workflow/facets/WorkflowUsageTab.tsx +24 -24
- package/src/workflow/inspector/EdgeInspector.tsx +14 -14
- package/src/workflow/inspector/InspectorHeader.tsx +18 -18
- package/src/workflow/inspector/InspectorShell.tsx +6 -6
- package/src/workflow/inspector/NestedTaskList.tsx +11 -11
- package/src/workflow/inspector/SentinelInspector.tsx +3 -3
- package/src/workflow/inspector/WorkflowSummaryPanel.tsx +33 -33
- package/src/workflow/inspector/forms/AgentCallForm.tsx +48 -48
- package/src/workflow/inspector/forms/HttpCallForm.tsx +22 -22
- package/src/workflow/inspector/tabs/AdvancedTab.tsx +12 -12
- package/src/workflow/inspector/tabs/BranchesTab.tsx +36 -36
- package/src/workflow/inspector/tabs/CatchTab.tsx +23 -23
- package/src/workflow/inspector/tabs/ConfigureTab.tsx +3 -3
- package/src/workflow/inspector/tabs/DataTab.tsx +6 -6
- package/src/workflow/inspector/tabs/DocsTab.tsx +11 -11
- package/src/workflow/inspector/tabs/IterationTab.tsx +25 -25
- package/src/workflow/inspector/tabs/RuntimeTab.tsx +16 -16
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +35 -35
- package/src/workflow/instance/RunVisibilityControl.tsx +10 -10
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +45 -45
- package/src/workflow/instance/WorkflowInstanceList.tsx +32 -32
- package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +0 -6
- package/src/workflow/node-shell/BranchBadge.tsx +9 -9
- package/src/workflow/node-shell/DiffBadge.tsx +4 -4
- package/src/workflow/node-shell/ExecutionBadge.tsx +17 -17
- package/src/workflow/node-shell/NodeActions.tsx +15 -15
- package/src/workflow/node-shell/NodeContent.tsx +9 -9
- package/src/workflow/node-shell/NodeHandles.tsx +5 -5
- package/src/workflow/node-shell/NodeShell.tsx +27 -27
- package/src/workflow/picker/BranchAddPopover.tsx +16 -16
- package/src/workflow/task-detail/StructuredDataViewer.tsx +34 -34
- package/src/workflow/templates/WorkflowTemplateCard.tsx +32 -32
- package/src/workflow/templates/WorkflowTemplateGallery.tsx +13 -13
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +29 -29
- package/src/workflow/thread/WorkflowTaskThread.tsx +36 -36
- package/src/workspace/EditorTabs.tsx +8 -8
- package/src/workspace/ExplorerTree.tsx +17 -17
- package/src/workspace/FileViewer.tsx +38 -38
- package/src/workspace/PanelChip.tsx +4 -4
- package/src/workspace/WorkspaceContentSearch.tsx +26 -26
- package/src/workspace/WorkspaceEditor.tsx +44 -44
- package/src/workspace/WorkspaceFileSearch.tsx +22 -22
- package/src/workspace/WorkspaceSummary.tsx +6 -6
- package/src/workspace/WorkspaceSurface.tsx +42 -42
- package/src/workspace/__tests__/FileViewer.test.tsx +1 -1
- package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +5 -5
- package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +3 -3
- package/src/workspace/__tests__/WorkspaceSurface.test.tsx +6 -6
- package/styles.css +1 -1
- package/switch/Switch.js +2 -2
- package/switch/Switch.js.map +1 -1
- package/tabs/Tabs.js +7 -7
- package/tabs/Tabs.js.map +1 -1
- package/usage/AgentBreakdownList.js +4 -4
- package/usage/AgentBreakdownList.js.map +1 -1
- package/usage/CreditRunwayIndicator.js +1 -1
- package/usage/CreditRunwayIndicator.js.map +1 -1
- package/usage/ExportButton.js +2 -2
- package/usage/ExportButton.js.map +1 -1
- package/usage/HarnessSplitCard.js +6 -6
- package/usage/HarnessSplitCard.js.map +1 -1
- package/usage/OrgUsagePanel.js +15 -15
- package/usage/OrgUsagePanel.js.map +1 -1
- package/user/UserMenu.js +3 -3
- package/user/UserMenu.js.map +1 -1
- package/version-history/DiffFileList.js +8 -8
- package/version-history/DiffFileList.js.map +1 -1
- package/version-history/DiffSummary.js +1 -1
- package/version-history/DiffSummary.js.map +1 -1
- package/version-history/DiffViewer.js +11 -11
- package/version-history/DiffViewer.js.map +1 -1
- package/version-history/MultiFileDiffView.js +2 -2
- package/version-history/MultiFileDiffView.js.map +1 -1
- package/version-history/UnifiedDiffView.js +1 -1
- package/version-history/UnifiedDiffView.js.map +1 -1
- package/version-history/VersionTimeline.js +4 -4
- package/version-history/VersionTimeline.js.map +1 -1
- package/version-history/VersionTimelineEntry.js +9 -9
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/ApprovalFormBuilder.js +15 -15
- package/workflow/ApprovalFormBuilder.js.map +1 -1
- package/workflow/BranchConditionBuilder.js +8 -8
- package/workflow/BranchConditionBuilder.js.map +1 -1
- package/workflow/CanvasContextMenu.js +6 -6
- package/workflow/CanvasContextMenu.js.map +1 -1
- package/workflow/CanvasTransitionEdge.js +11 -11
- package/workflow/CanvasTransitionEdge.js.map +1 -1
- package/workflow/CostByWorkflowChart.js +4 -4
- package/workflow/CostByWorkflowChart.js.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.js +8 -8
- package/workflow/ExecutionActiveTaskIndicator.js.map +1 -1
- package/workflow/ExecutionSummaryWidget.js +15 -15
- package/workflow/ExecutionSummaryWidget.js.map +1 -1
- package/workflow/ExecutionTrendChart.js +10 -10
- package/workflow/ExecutionTrendChart.js.map +1 -1
- package/workflow/FailedRunsWidget.js +3 -3
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.js +3 -3
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/TaskConfigForm.js +12 -12
- package/workflow/TaskConfigForm.js.map +1 -1
- package/workflow/TaskPickerPopover.js +5 -5
- package/workflow/TaskPickerPopover.js.map +1 -1
- package/workflow/ViewYamlDialog.js +2 -2
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowAgentCallTranscript.js +2 -2
- package/workflow/WorkflowAgentCallTranscript.js.map +1 -1
- package/workflow/WorkflowApprovalList.js +2 -2
- package/workflow/WorkflowApprovalList.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +9 -9
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +7 -7
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +6 -6
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.js +1 -1
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowCodePreviewGraph.js +2 -2
- package/workflow/WorkflowCodePreviewGraph.js.map +1 -1
- package/workflow/WorkflowDashboard.js +1 -1
- package/workflow/WorkflowDashboard.js.map +1 -1
- package/workflow/WorkflowDetailView.js +15 -15
- package/workflow/WorkflowDetailView.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +3 -3
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowEditorView.js +13 -13
- package/workflow/WorkflowEditorView.js.map +1 -1
- package/workflow/WorkflowExecutionGraph.js +6 -6
- package/workflow/WorkflowExecutionGraph.js.map +1 -1
- package/workflow/WorkflowExecutionHeader.js +4 -4
- package/workflow/WorkflowExecutionHeader.js.map +1 -1
- package/workflow/WorkflowExecutionPhaseBadge.js +9 -9
- package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +16 -16
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.js +2 -2
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowFileReviewList.js +2 -2
- package/workflow/WorkflowFileReviewList.js.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.js +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
- package/workflow/WorkflowNode.js +1 -1
- package/workflow/WorkflowNode.js.map +1 -1
- package/workflow/WorkflowNodePopover.js +2 -2
- package/workflow/WorkflowNodePopover.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +4 -4
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowOverviewSummary.js +8 -8
- package/workflow/WorkflowOverviewSummary.js.map +1 -1
- package/workflow/WorkflowRefinePanel.js +5 -5
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.js +5 -5
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.js +2 -2
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowRunForm.js +10 -10
- package/workflow/WorkflowRunForm.js.map +1 -1
- package/workflow/WorkflowTaskApprovalCard.js +1 -1
- package/workflow/WorkflowTaskApprovalCard.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +8 -8
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowTaskList.js +4 -4
- package/workflow/WorkflowTaskList.js.map +1 -1
- package/workflow/WorkflowTaskPalette.js +5 -5
- package/workflow/WorkflowTaskPalette.js.map +1 -1
- package/workflow/WorkflowTaskReviewGate.js +3 -3
- package/workflow/WorkflowTaskReviewGate.js.map +1 -1
- package/workflow/WorkflowVersionBadge.js +1 -1
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionDiffViewer.js +12 -12
- package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +7 -7
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/WorkflowVersionsTab.js +1 -1
- package/workflow/WorkflowVersionsTab.js.map +1 -1
- package/workflow/diff/DiffSummaryBar.js +2 -2
- package/workflow/diff/DiffSummaryBar.js.map +1 -1
- package/workflow/execution-comparison/ComparisonSummaryCards.js +1 -1
- package/workflow/execution-comparison/ComparisonSummaryCards.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -7
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonView.js +4 -4
- package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.js +22 -22
- package/workflow/execution-comparison/TaskComparisonTable.js.map +1 -1
- package/workflow/execution-history/ExecutionFilterBar.js +5 -5
- package/workflow/execution-history/ExecutionFilterBar.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +11 -11
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/execution-history/FailureAnalysisPanel.js +4 -4
- package/workflow/execution-history/FailureAnalysisPanel.js.map +1 -1
- package/workflow/execution-history/HealthMetricsStrip.js +8 -8
- package/workflow/execution-history/HealthMetricsStrip.js.map +1 -1
- package/workflow/execution-history/WorkflowExecutionHistory.js +1 -1
- package/workflow/execution-history/WorkflowExecutionHistory.js.map +1 -1
- package/workflow/facets/WorkflowArtifactsTab.js +2 -2
- package/workflow/facets/WorkflowArtifactsTab.js.map +1 -1
- package/workflow/facets/WorkflowChangesTab.js +5 -5
- package/workflow/facets/WorkflowChangesTab.js.map +1 -1
- package/workflow/facets/WorkflowUsageTab.js +6 -6
- package/workflow/facets/WorkflowUsageTab.js.map +1 -1
- package/workflow/inspector/EdgeInspector.js +1 -1
- package/workflow/inspector/EdgeInspector.js.map +1 -1
- package/workflow/inspector/InspectorHeader.js +7 -7
- package/workflow/inspector/InspectorHeader.js.map +1 -1
- package/workflow/inspector/InspectorShell.js +2 -2
- package/workflow/inspector/InspectorShell.js.map +1 -1
- package/workflow/inspector/NestedTaskList.js +2 -2
- package/workflow/inspector/NestedTaskList.js.map +1 -1
- package/workflow/inspector/SentinelInspector.js +1 -1
- package/workflow/inspector/SentinelInspector.js.map +1 -1
- package/workflow/inspector/WorkflowSummaryPanel.js +5 -5
- package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
- package/workflow/inspector/forms/AgentCallForm.js +9 -9
- package/workflow/inspector/forms/AgentCallForm.js.map +1 -1
- package/workflow/inspector/forms/HttpCallForm.js +4 -4
- package/workflow/inspector/forms/HttpCallForm.js.map +1 -1
- package/workflow/inspector/tabs/AdvancedTab.js +2 -2
- package/workflow/inspector/tabs/AdvancedTab.js.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.js +6 -6
- package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
- package/workflow/inspector/tabs/CatchTab.js +2 -2
- package/workflow/inspector/tabs/CatchTab.js.map +1 -1
- package/workflow/inspector/tabs/ConfigureTab.js +3 -3
- package/workflow/inspector/tabs/ConfigureTab.js.map +1 -1
- package/workflow/inspector/tabs/DataTab.js +1 -1
- package/workflow/inspector/tabs/DataTab.js.map +1 -1
- package/workflow/inspector/tabs/DocsTab.js +1 -1
- package/workflow/inspector/tabs/DocsTab.js.map +1 -1
- package/workflow/inspector/tabs/IterationTab.js +3 -3
- package/workflow/inspector/tabs/IterationTab.js.map +1 -1
- package/workflow/inspector/tabs/RuntimeTab.js +9 -9
- package/workflow/inspector/tabs/RuntimeTab.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
- package/workflow/instance/RunVisibilityControl.js +5 -5
- package/workflow/instance/RunVisibilityControl.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +2 -2
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/instance/WorkflowInstanceList.js +4 -4
- package/workflow/instance/WorkflowInstanceList.js.map +1 -1
- package/workflow/node-shell/BranchBadge.js +3 -3
- package/workflow/node-shell/BranchBadge.js.map +1 -1
- package/workflow/node-shell/DiffBadge.js +4 -4
- package/workflow/node-shell/DiffBadge.js.map +1 -1
- package/workflow/node-shell/ExecutionBadge.js +10 -10
- package/workflow/node-shell/ExecutionBadge.js.map +1 -1
- package/workflow/node-shell/NodeActions.js +3 -3
- package/workflow/node-shell/NodeActions.js.map +1 -1
- package/workflow/node-shell/NodeContent.js +5 -5
- package/workflow/node-shell/NodeContent.js.map +1 -1
- package/workflow/node-shell/NodeHandles.js +5 -5
- package/workflow/node-shell/NodeHandles.js.map +1 -1
- package/workflow/node-shell/NodeShell.js +14 -14
- package/workflow/node-shell/NodeShell.js.map +1 -1
- package/workflow/picker/BranchAddPopover.js +2 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.js +12 -12
- package/workflow/task-detail/StructuredDataViewer.js.map +1 -1
- package/workflow/templates/WorkflowTemplateCard.js +17 -17
- package/workflow/templates/WorkflowTemplateCard.js.map +1 -1
- package/workflow/templates/WorkflowTemplateGallery.js +5 -5
- package/workflow/templates/WorkflowTemplateGallery.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +5 -5
- package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
- package/workflow/thread/WorkflowTaskThread.js +16 -16
- package/workflow/thread/WorkflowTaskThread.js.map +1 -1
- package/workspace/EditorTabs.js +5 -5
- package/workspace/EditorTabs.js.map +1 -1
- package/workspace/ExplorerTree.js +6 -6
- package/workspace/ExplorerTree.js.map +1 -1
- package/workspace/FileViewer.js +20 -20
- package/workspace/FileViewer.js.map +1 -1
- package/workspace/PanelChip.js +1 -1
- package/workspace/PanelChip.js.map +1 -1
- package/workspace/WorkspaceContentSearch.js +11 -11
- package/workspace/WorkspaceContentSearch.js.map +1 -1
- package/workspace/WorkspaceEditor.js +10 -10
- package/workspace/WorkspaceEditor.js.map +1 -1
- package/workspace/WorkspaceFileSearch.js +9 -9
- package/workspace/WorkspaceFileSearch.js.map +1 -1
- package/workspace/WorkspaceSummary.js +3 -3
- package/workspace/WorkspaceSummary.js.map +1 -1
- package/workspace/WorkspaceSurface.js +22 -22
- 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 {
|
|
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
|
-
//
|
|
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
|
|
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'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'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
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
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'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
|
|
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
|
|
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 “{search}”
|
|
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
|
-
:
|
|
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
|
|
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
|
|
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 “{search}”
|
|
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't exist or you don'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" />
|