@stigmer/react 3.10.0 → 3.11.1-dev.20260812192248
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.d.ts.map +1 -1
- package/agent-instance/AgentInstanceList.js +5 -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.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +10 -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.d.ts.map +1 -1
- package/attachment/AttachmentChipList.js +18 -17
- 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.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +13 -12
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +7 -6
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.js +2 -2
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +14 -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.d.ts.map +1 -1
- package/channel-app/internal.js +8 -7
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/ComposerToolbar.js +10 -7
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/ConfigureMenu.d.ts.map +1 -1
- package/composer/ConfigureMenu.js +5 -4
- package/composer/ConfigureMenu.js.map +1 -1
- package/composer/ContextChip.d.ts.map +1 -1
- package/composer/ContextChip.js +5 -4
- package/composer/ContextChip.js.map +1 -1
- package/composer/ContextPopover.d.ts.map +1 -1
- package/composer/ContextPopover.js +5 -4
- package/composer/ContextPopover.js.map +1 -1
- package/composer/InteractionModePicker.js +5 -5
- package/composer/InteractionModePicker.js.map +1 -1
- package/composer/SessionComposer.d.ts +13 -0
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +19 -9
- 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.d.ts.map +1 -1
- package/conversation/ConversationMediaAttachment.js +5 -4
- package/conversation/ConversationMediaAttachment.js.map +1 -1
- package/conversation/ConversationTimelineView.d.ts.map +1 -1
- package/conversation/ConversationTimelineView.js +25 -15
- package/conversation/ConversationTimelineView.js.map +1 -1
- package/conversation/ConversationsWorkbench.js +3 -3
- package/conversation/ConversationsWorkbench.js.map +1 -1
- package/conversation/conversationPresentation.d.ts +28 -0
- package/conversation/conversationPresentation.d.ts.map +1 -1
- package/conversation/conversationPresentation.js +38 -1
- package/conversation/conversationPresentation.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.d.ts.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +11 -10
- 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.d.ts.map +1 -1
- package/dashboard/DashboardKPICards.js +9 -7
- package/dashboard/DashboardKPICards.js.map +1 -1
- package/dashboard/OperationalDashboard.js +1 -1
- package/dashboard/OperationalDashboard.js.map +1 -1
- package/datastore/CollectionRecordsBrowser.d.ts.map +1 -1
- package/datastore/CollectionRecordsBrowser.js +14 -11
- 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.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +18 -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.d.ts.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.d.ts.map +1 -1
- package/execution/ArtifactRowView.js +3 -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.d.ts +4 -4
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +8 -8
- 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.d.ts.map +1 -1
- package/execution/McpToolDetail.js +13 -12
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/MessageAttachments.d.ts.map +1 -1
- package/execution/MessageAttachments.js +13 -11
- package/execution/MessageAttachments.js.map +1 -1
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +9 -8
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.js +12 -12
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanArtifactCard.d.ts.map +1 -1
- package/execution/PlanArtifactCard.js +14 -11
- 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.d.ts.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.d.ts.map +1 -1
- package/execution/ToolCallItem.js +20 -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.d.ts.map +1 -1
- package/execution/WriteBackCard.js +18 -16
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/WriteBacksWidget.js +1 -1
- package/execution/WriteBacksWidget.js.map +1 -1
- package/execution/artifact-row-item.d.ts +1 -1
- package/execution/artifact-row-item.d.ts.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.d.ts.map +1 -1
- package/file-reference/FileReferenceChipList.js +8 -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.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +13 -12
- 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.d.ts.map +1 -1
- package/iam-policy/ProviderBadge.js +3 -2
- package/iam-policy/ProviderBadge.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.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.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +9 -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/internal/truncated-text.d.ts +17 -0
- package/internal/truncated-text.d.ts.map +1 -0
- package/internal/truncated-text.js +27 -0
- package/internal/truncated-text.js.map +1 -0
- package/invitation/InvitationCreatedAlert.js +1 -1
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +25 -24
- 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.d.ts.map +1 -1
- package/library/ScopeToggle.js +13 -5
- 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.d.ts.map +1 -1
- package/library/VisibilitySelector.js +6 -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.d.ts +30 -1
- package/mcp-server/McpServerConfigPanel.d.ts.map +1 -1
- package/mcp-server/McpServerConfigPanel.js +36 -26
- package/mcp-server/McpServerConfigPanel.js.map +1 -1
- package/mcp-server/McpServerConnectDialog.d.ts +12 -1
- package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +48 -21
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +113 -64
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +101 -20
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/mcp-server/McpToolSelector.d.ts.map +1 -1
- package/mcp-server/McpToolSelector.js +5 -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/VendorApprovalBlockedNotice.d.ts +77 -0
- package/mcp-server/VendorApprovalBlockedNotice.d.ts.map +1 -0
- package/mcp-server/VendorApprovalBlockedNotice.js +62 -0
- package/mcp-server/VendorApprovalBlockedNotice.js.map +1 -0
- 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/mcpServerSetupReducer.d.ts +18 -0
- package/mcp-server/mcpServerSetupReducer.d.ts.map +1 -1
- package/mcp-server/mcpServerSetupReducer.js +6 -0
- package/mcp-server/mcpServerSetupReducer.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/mcp-server/useMcpServerSetup.d.ts.map +1 -1
- package/mcp-server/useMcpServerSetup.js +7 -0
- package/mcp-server/useMcpServerSetup.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.d.ts.map +1 -1
- package/oauth-app/OAuthAppListPanel.js +7 -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.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +11 -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.d.ts.map +1 -1
- package/pricing-governance/BaselineEditor.js +11 -5
- package/pricing-governance/BaselineEditor.js.map +1 -1
- package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -1
- package/pricing-governance/ModelCatalogPanel.js +6 -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.d.ts.map +1 -1
- package/pricing-governance/PricingGovernanceConsole.js +9 -8
- package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
- package/pricing-governance/PricingGovernancePanel.d.ts.map +1 -1
- package/pricing-governance/PricingGovernancePanel.js +5 -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.d.ts.map +1 -1
- package/resource-workbench/components/StatusBadge.js +17 -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.d.ts.map +1 -1
- package/schedule/CadenceField.js +26 -19
- 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.d.ts.map +1 -1
- package/schedule/ScheduleRunsTable.js +18 -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.d.ts.map +1 -1
- package/session/PlanEditor.js +9 -11
- 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.d.ts.map +1 -1
- package/sharing/AgentShareList.js +7 -5
- package/sharing/AgentShareList.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +31 -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.d.ts.map +1 -1
- package/skill/SkillDetailView.js +14 -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__/helpers/open-menu.ts +88 -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 +40 -41
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +35 -35
- package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +5 -10
- package/src/api-key/ApiKeyCreatedAlert.tsx +15 -15
- package/src/api-key/ApiKeyListPanel.tsx +39 -31
- package/src/api-key/CreateApiKeyForm.tsx +25 -25
- package/src/attachment/AttachmentChipList.tsx +86 -77
- package/src/attachment/AttachmentImageLightbox.tsx +13 -14
- package/src/attachment/__tests__/AttachmentChipList.test.tsx +5 -4
- 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 +37 -38
- package/src/channel/ChannelConversationsDialog.tsx +25 -23
- package/src/channel/ChannelCredentialsDialog.tsx +13 -13
- package/src/channel/ChannelTemplatesDialog.tsx +38 -39
- 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 +18 -18
- 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 +25 -26
- package/src/composer/ComposerToolbar.tsx +124 -92
- package/src/composer/ConfigureMenu.tsx +49 -40
- package/src/composer/ContextChip.tsx +13 -14
- package/src/composer/ContextPopover.tsx +30 -21
- package/src/composer/InteractionModePicker.tsx +14 -14
- package/src/composer/SessionComposer.tsx +64 -32
- package/src/composer/__tests__/SessionComposer-agentSetupError.test.tsx +124 -0
- package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +13 -17
- 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 +14 -14
- package/src/conversation/ConversationTimelineView.tsx +64 -47
- package/src/conversation/ConversationsWorkbench.tsx +10 -10
- package/src/conversation/__tests__/ConversationComposer.test.tsx +1 -1
- package/src/conversation/__tests__/ConversationTimelineView.test.tsx +106 -3
- package/src/conversation/conversationPresentation.ts +52 -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 +41 -39
- package/src/cursor-accounts/MemberKeysPanel.tsx +17 -17
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +4 -4
- package/src/cursor-accounts/badges.tsx +4 -4
- package/src/dashboard/DashboardFailedRuns.tsx +17 -17
- package/src/dashboard/DashboardKPICards.tsx +14 -13
- package/src/dashboard/OperationalDashboard.tsx +2 -2
- package/src/datastore/CollectionRecordsBrowser.tsx +42 -41
- 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 +69 -58
- package/src/error/ErrorMessage.tsx +22 -22
- package/src/error/SecretFlowErrorGuide.tsx +19 -19
- package/src/execution/ApprovalCard.tsx +20 -22
- 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 +70 -50
- 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 +51 -35
- 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 +33 -29
- package/src/execution/MessageAttachments.tsx +64 -48
- package/src/execution/MessageEntry.tsx +40 -33
- package/src/execution/MessageThread.tsx +28 -28
- package/src/execution/PlanArtifactCard.tsx +44 -37
- 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 -10
- package/src/execution/ToolCallGroup.tsx +1 -1
- package/src/execution/ToolCallItem.tsx +45 -34
- package/src/execution/ToolRunGroup.tsx +16 -16
- package/src/execution/UsageWidget.tsx +12 -12
- package/src/execution/WriteBackCard.tsx +60 -51
- 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__/ArtifactRow.test.tsx +6 -2
- package/src/execution/__tests__/ArtifactRowView.test.tsx +5 -2
- package/src/execution/__tests__/FileChangesView.test.tsx +2 -2
- package/src/execution/__tests__/FilePathLink.test.tsx +11 -7
- package/src/execution/__tests__/FileReviewCard.test.tsx +2 -1
- package/src/execution/__tests__/FileReviewDock.test.tsx +1 -1
- package/src/execution/__tests__/MessageEntry-attachments.test.tsx +5 -4
- package/src/execution/__tests__/MessageThread.test.tsx +7 -2
- 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__/artifact-row-tooltips.layout.test.tsx +115 -0
- 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/artifact-row-item.ts +1 -1
- package/src/execution/tool-rendering-primitives.tsx +12 -12
- package/src/feedback/StigmerToaster.tsx +8 -5
- package/src/file-reference/FileReferenceChipList.tsx +31 -19
- package/src/file-reference/__tests__/FileReferenceChipList.test.tsx +5 -2
- package/src/github/GitHubRepoPicker.tsx +60 -60
- package/src/iam-policy/GrantAccessForm.tsx +11 -11
- package/src/iam-policy/OrgMembersPanel.tsx +70 -63
- package/src/iam-policy/PeopleWithAccess.tsx +23 -23
- package/src/iam-policy/PrincipalPicker.tsx +34 -34
- package/src/iam-policy/ProviderBadge.tsx +17 -10
- package/src/iam-policy/RoleSelector.tsx +9 -10
- 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 +44 -36
- 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/__tests__/truncated-text.layout.test.tsx +68 -0
- package/src/internal/__tests__/truncated-text.test.tsx +33 -0
- 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/internal/truncated-text.tsx +81 -0
- package/src/invitation/InvitationCreatedAlert.tsx +15 -15
- package/src/invitation/InvitationManager.tsx +96 -83
- package/src/invitation/InvitationRedemption.tsx +49 -49
- package/src/library/ResourceCountCard.tsx +7 -7
- package/src/library/ScopeToggle.tsx +21 -9
- package/src/library/VisibilityOptionRow.tsx +30 -30
- package/src/library/VisibilitySelector.tsx +38 -31
- 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 +145 -103
- package/src/mcp-server/McpServerConnectDialog.tsx +120 -57
- package/src/mcp-server/McpServerDetailView.tsx +341 -256
- package/src/mcp-server/McpServerPicker.tsx +149 -57
- package/src/mcp-server/McpToolSelector.tsx +37 -32
- 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/VendorApprovalBlockedNotice.tsx +221 -0
- package/src/mcp-server/__tests__/McpServerDetailView.test.tsx +162 -7
- package/src/mcp-server/__tests__/McpServerPicker.test.tsx +504 -0
- package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +321 -0
- package/src/mcp-server/__tests__/VendorApprovalBlockedNotice.test.tsx +154 -0
- package/src/mcp-server/__tests__/useMcpServerOAuthConnect.test.tsx +159 -0
- package/src/mcp-server/index.ts +4 -1
- package/src/mcp-server/mcpServerSetupReducer.ts +24 -0
- 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/mcp-server/useMcpServerSetup.ts +9 -0
- 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 +25 -17
- 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 +70 -53
- package/src/platform-client/PlatformClientSecretAlert.tsx +18 -18
- package/src/portal-container.ts +36 -9
- package/src/pricing-governance/BaselineEditor.tsx +49 -29
- package/src/pricing-governance/ModelCatalogPanel.tsx +35 -31
- package/src/pricing-governance/ModelGovernanceDetail.tsx +35 -35
- package/src/pricing-governance/OperatorAccessNotice.tsx +3 -3
- package/src/pricing-governance/PricingGovernanceConsole.tsx +38 -34
- package/src/pricing-governance/PricingGovernancePanel.tsx +31 -22
- package/src/pricing-governance/RetireConfirm.tsx +7 -7
- package/src/pricing-governance/__tests__/ModelCatalogPanel.test.tsx +37 -0
- 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 +23 -19
- package/src/resource-workbench/components/ViewSwitcher.tsx +7 -7
- package/src/schedule/CadenceField.tsx +68 -57
- 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 +64 -52
- package/src/schedule/TimeZoneField.tsx +12 -12
- package/src/schedule/__tests__/cadence-tooltips.layout.test.tsx +86 -0
- 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 +46 -45
- 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 +62 -56
- package/src/sharing/ShareAgentDialog.tsx +153 -154
- package/src/sharing/SharedAgentChat.tsx +24 -24
- package/src/sharing/__tests__/AgentShareList.test.tsx +4 -11
- 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 +75 -64
- 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 +48 -39
- 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 +36 -29
- package/src/workflow/CostByWorkflowChart.tsx +18 -18
- package/src/workflow/ExecutionActiveTaskIndicator.tsx +76 -61
- 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 -23
- 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 +108 -77
- 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 +14 -7
- 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 +39 -32
- package/src/workflow/WorkflowTaskList.tsx +13 -13
- package/src/workflow/WorkflowTaskPalette.tsx +23 -23
- package/src/workflow/WorkflowTaskReviewGate.tsx +10 -10
- package/src/workflow/WorkflowVersionBadge.tsx +35 -20
- package/src/workflow/WorkflowVersionDiffViewer.tsx +24 -24
- package/src/workflow/WorkflowVersionTimeline.tsx +39 -38
- 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 +4 -2
- package/src/workflow/__tests__/node-shell.test.ts +2 -0
- package/src/workflow/__tests__/structured-data-viewer.test.tsx +5 -2
- 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 +20 -18
- package/src/workflow/execution-comparison/TaskComparisonTable.tsx +55 -48
- package/src/workflow/execution-history/ExecutionFilterBar.tsx +12 -12
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +47 -38
- 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 +36 -27
- package/src/workflow/inspector/InspectorShell.tsx +6 -6
- package/src/workflow/inspector/NestedTaskList.tsx +28 -21
- package/src/workflow/inspector/SentinelInspector.tsx +3 -3
- package/src/workflow/inspector/WorkflowSummaryPanel.tsx +37 -35
- 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 +94 -64
- 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 +36 -37
- package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +5 -10
- package/src/workflow/node-shell/BranchBadge.tsx +9 -9
- package/src/workflow/node-shell/DiffBadge.tsx +21 -14
- package/src/workflow/node-shell/ExecutionBadge.tsx +79 -52
- package/src/workflow/node-shell/NodeActions.tsx +132 -98
- 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 +37 -35
- 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 +102 -85
- package/src/workspace/ExplorerTree.tsx +57 -40
- package/src/workspace/FileViewer.tsx +48 -40
- package/src/workspace/PanelChip.tsx +32 -23
- package/src/workspace/WorkspaceContentSearch.tsx +26 -26
- package/src/workspace/WorkspaceEditor.tsx +63 -51
- package/src/workspace/WorkspaceFileSearch.tsx +22 -22
- package/src/workspace/WorkspaceSummary.tsx +25 -16
- package/src/workspace/WorkspaceSurface.tsx +120 -95
- package/src/workspace/__tests__/EditorTabs.test.tsx +5 -2
- 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 +11 -8
- 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.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +10 -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.d.ts.map +1 -1
- package/workflow/CanvasTransitionEdge.js +13 -12
- package/workflow/CanvasTransitionEdge.js.map +1 -1
- package/workflow/CostByWorkflowChart.js +4 -4
- package/workflow/CostByWorkflowChart.js.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.d.ts.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.js +12 -11
- 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.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +13 -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.d.ts.map +1 -1
- package/workflow/WorkflowNode.js +2 -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.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +11 -9
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowTaskList.js +5 -5
- 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.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +2 -1
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionDiffViewer.js +12 -12
- package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +8 -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.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonView.js +5 -4
- package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.d.ts.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.js +23 -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.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +15 -13
- 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.d.ts.map +1 -1
- package/workflow/inspector/InspectorHeader.js +9 -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.d.ts.map +1 -1
- package/workflow/inspector/NestedTaskList.js +3 -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.d.ts.map +1 -1
- package/workflow/inspector/WorkflowSummaryPanel.js +6 -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.d.ts.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.js +9 -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.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceList.js +5 -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.d.ts.map +1 -1
- package/workflow/node-shell/DiffBadge.js +6 -5
- package/workflow/node-shell/DiffBadge.js.map +1 -1
- package/workflow/node-shell/ExecutionBadge.d.ts.map +1 -1
- package/workflow/node-shell/ExecutionBadge.js +11 -10
- package/workflow/node-shell/ExecutionBadge.js.map +1 -1
- package/workflow/node-shell/NodeActions.d.ts.map +1 -1
- package/workflow/node-shell/NodeActions.js +14 -13
- 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.d.ts.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.js +16 -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.d.ts.map +1 -1
- package/workspace/EditorTabs.js +38 -37
- package/workspace/EditorTabs.js.map +1 -1
- package/workspace/ExplorerTree.d.ts.map +1 -1
- package/workspace/ExplorerTree.js +7 -6
- package/workspace/ExplorerTree.js.map +1 -1
- package/workspace/FileViewer.d.ts.map +1 -1
- package/workspace/FileViewer.js +21 -20
- package/workspace/FileViewer.js.map +1 -1
- package/workspace/PanelChip.d.ts.map +1 -1
- package/workspace/PanelChip.js +2 -1
- package/workspace/PanelChip.js.map +1 -1
- package/workspace/WorkspaceContentSearch.js +11 -11
- package/workspace/WorkspaceContentSearch.js.map +1 -1
- package/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/workspace/WorkspaceEditor.js +11 -10
- package/workspace/WorkspaceEditor.js.map +1 -1
- package/workspace/WorkspaceFileSearch.js +9 -9
- package/workspace/WorkspaceFileSearch.js.map +1 -1
- package/workspace/WorkspaceSummary.d.ts.map +1 -1
- package/workspace/WorkspaceSummary.js +8 -3
- package/workspace/WorkspaceSummary.js.map +1 -1
- package/workspace/WorkspaceSurface.d.ts.map +1 -1
- package/workspace/WorkspaceSurface.js +28 -27
- package/workspace/WorkspaceSurface.js.map +1 -1
|
@@ -19,15 +19,20 @@ 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";
|
|
29
|
+
import { VendorApprovalBlockedNotice } from "./VendorApprovalBlockedNotice.js";
|
|
26
30
|
import { useDisconnectOAuth } from "./useDisconnectOAuth.js";
|
|
27
31
|
import { useOrgOAuthApp } from "./useOrgOAuthApp.js";
|
|
28
32
|
import { OAuthAppForm } from "./OAuthAppForm.js";
|
|
29
33
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
30
34
|
import { ErrorMessage } from "../error/ErrorMessage.js";
|
|
35
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
31
36
|
import { EnvVarForm } from "../environment/EnvVarForm.js";
|
|
32
37
|
import type { EnvVarFormVariable } from "../environment/EnvVarForm.js";
|
|
33
38
|
import { VisibilityBadge } from "../library/VisibilitySelector.js";
|
|
@@ -250,23 +255,38 @@ export function McpServerDetailView({
|
|
|
250
255
|
credentials.refetch();
|
|
251
256
|
refetch();
|
|
252
257
|
} catch {
|
|
253
|
-
//
|
|
258
|
+
// Error state is managed by the oauth hook — but refetch anyway:
|
|
259
|
+
// completeOAuthConnect persists the grant BEFORE the chained
|
|
260
|
+
// discovery runs, so a discovery-leg failure still changed server
|
|
261
|
+
// state. Without this, stale isOAuthConnected=false makes the next
|
|
262
|
+
// Connect click relaunch the popup instead of retrying discovery
|
|
263
|
+
// (stigmer/stigmer#229).
|
|
264
|
+
credentials.refetch();
|
|
265
|
+
refetch();
|
|
254
266
|
}
|
|
255
267
|
}, [mcpServer, oauth, credentials, refetch]);
|
|
256
268
|
|
|
269
|
+
// A failure in the "connecting" phase proves sign-in already succeeded —
|
|
270
|
+
// the grant exists server-side even while the grant-status refetch is
|
|
271
|
+
// still in flight. Retry bare discovery; never relaunch the popup and
|
|
272
|
+
// never demand credentials the flow already has.
|
|
273
|
+
const isDiscoveryRetry =
|
|
274
|
+
credentials.authMode === "oauth" && oauth.failedPhase === "connecting";
|
|
275
|
+
|
|
257
276
|
const handleConnectClick = useCallback(async () => {
|
|
258
277
|
if (!mcpServer?.metadata?.id) return;
|
|
259
278
|
|
|
260
279
|
if (
|
|
261
280
|
credentials.authMode === "oauth" &&
|
|
262
281
|
!credentials.isOAuthConnected &&
|
|
263
|
-
!credentials.manualOverride
|
|
282
|
+
!credentials.manualOverride &&
|
|
283
|
+
!isDiscoveryRetry
|
|
264
284
|
) {
|
|
265
285
|
handleOAuthSignIn();
|
|
266
286
|
return;
|
|
267
287
|
}
|
|
268
288
|
|
|
269
|
-
if (!credentials.isReady) {
|
|
289
|
+
if (!credentials.isReady && !isDiscoveryRetry) {
|
|
270
290
|
setShowCredentialForm(true);
|
|
271
291
|
return;
|
|
272
292
|
}
|
|
@@ -274,11 +294,15 @@ export function McpServerDetailView({
|
|
|
274
294
|
const envKeys = Object.keys(mcpServer.spec?.env ?? {});
|
|
275
295
|
try {
|
|
276
296
|
await connection.connect(mcpServer.metadata.id, activeOrg ?? org, undefined, envKeys);
|
|
297
|
+
// Discovery succeeded — retire the OAuth chain's stale
|
|
298
|
+
// discovery-failure error so the banner doesn't outlive the state
|
|
299
|
+
// it described.
|
|
300
|
+
oauth.clearError();
|
|
277
301
|
refetch();
|
|
278
302
|
} catch {
|
|
279
303
|
// error state is managed by the hook
|
|
280
304
|
}
|
|
281
|
-
}, [mcpServer, credentials.authMode, credentials.isOAuthConnected, credentials.manualOverride, credentials.isReady, connection, refetch, handleOAuthSignIn]);
|
|
305
|
+
}, [mcpServer, credentials.authMode, credentials.isOAuthConnected, credentials.manualOverride, credentials.isReady, isDiscoveryRetry, connection, oauth.clearError, refetch, handleOAuthSignIn, activeOrg, org]);
|
|
282
306
|
|
|
283
307
|
const handleCredentialSubmit = useCallback(
|
|
284
308
|
async (
|
|
@@ -367,6 +391,20 @@ export function McpServerDetailView({
|
|
|
367
391
|
const resourceTemplates = capabilities?.resourceTemplates ?? [];
|
|
368
392
|
const hasDiscoveredTools = tools.length > 0;
|
|
369
393
|
|
|
394
|
+
// "Signed in but never discovered" (stigmer/stigmer#229): the OAuth flow
|
|
395
|
+
// persists the grant in completeOAuthConnect BEFORE the chained discovery
|
|
396
|
+
// runs, so a failed/interrupted discovery leg leaves a healthy grant with
|
|
397
|
+
// empty discovered_capabilities. Both inputs are server truth, so this
|
|
398
|
+
// derivation survives reloads and self-heals once discovery lands (even
|
|
399
|
+
// when the workflow outlives the browser's RPC). Token-expired grants are
|
|
400
|
+
// excluded — re-auth, not discovery, is their next step.
|
|
401
|
+
const isOAuthStranded =
|
|
402
|
+
credentials.authMode === "oauth" &&
|
|
403
|
+
credentials.isOAuthConnected &&
|
|
404
|
+
credentials.connectionHealth !==
|
|
405
|
+
OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_TOKEN_EXPIRED &&
|
|
406
|
+
!hasDiscoveredTools;
|
|
407
|
+
|
|
370
408
|
const capabilityTabs: TabItem[] = useMemo(() => {
|
|
371
409
|
const items: TabItem[] = [
|
|
372
410
|
{ id: "tools", label: "Tools", badge: tools.length },
|
|
@@ -383,6 +421,14 @@ export function McpServerDetailView({
|
|
|
383
421
|
}, [tools.length, totalPolicyCount, resourceTemplates.length]);
|
|
384
422
|
|
|
385
423
|
const combinedError = connection.error ?? oauth.error;
|
|
424
|
+
// OAuth-chain errors compose through the phase-aware helper so a
|
|
425
|
+
// discovery-leg failure reads "signed in, but discovery failed" instead
|
|
426
|
+
// of masquerading as a failed sign-in.
|
|
427
|
+
const combinedErrorMessage = connection.error
|
|
428
|
+
? getUserMessage(connection.error)
|
|
429
|
+
: oauth.error
|
|
430
|
+
? getOAuthConnectErrorMessage(oauth.error, oauth.failedPhase)
|
|
431
|
+
: null;
|
|
386
432
|
const combinedClearError = useCallback(() => {
|
|
387
433
|
connection.clearError();
|
|
388
434
|
oauth.clearError();
|
|
@@ -444,10 +490,10 @@ export function McpServerDetailView({
|
|
|
444
490
|
value={spec?.iconUrl ?? ""}
|
|
445
491
|
onSave={(v) => saveMcpField("iconUrl", v || undefined)}
|
|
446
492
|
isSaving={isUpdating}
|
|
447
|
-
fallback={<McpServerIcon className="size-6 text-muted-foreground" />}
|
|
493
|
+
fallback={<McpServerIcon className="stg:size-6 stg:text-muted-foreground" />}
|
|
448
494
|
size="md"
|
|
449
495
|
/>
|
|
450
|
-
) : spec?.iconUrl ? undefined : <McpServerIcon className="size-6 text-muted-foreground" />,
|
|
496
|
+
) : spec?.iconUrl ? undefined : <McpServerIcon className="stg:size-6 stg:text-muted-foreground" />,
|
|
451
497
|
iconUrl: editable ? undefined : spec?.iconUrl || undefined,
|
|
452
498
|
createdAt: specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null,
|
|
453
499
|
updatedAt: specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null,
|
|
@@ -499,7 +545,7 @@ export function McpServerDetailView({
|
|
|
499
545
|
{(editable || spec?.description) && (
|
|
500
546
|
<Section title="Description">
|
|
501
547
|
{editable && saveMcpField ? (
|
|
502
|
-
<div className="max-h-20 overflow-y-auto p-3">
|
|
548
|
+
<div className="stg:max-h-20 stg:overflow-y-auto stg:p-3">
|
|
503
549
|
<InlineEditTextarea
|
|
504
550
|
value={spec?.description || ""}
|
|
505
551
|
onSave={(v) => saveMcpField("description", v || undefined)}
|
|
@@ -509,8 +555,8 @@ export function McpServerDetailView({
|
|
|
509
555
|
/>
|
|
510
556
|
</div>
|
|
511
557
|
) : (
|
|
512
|
-
<div className="p-3">
|
|
513
|
-
<pre className="whitespace-pre-wrap break-words text-sm text-foreground font-sans">
|
|
558
|
+
<div className="stg:p-3">
|
|
559
|
+
<pre className="stg:whitespace-pre-wrap stg:break-words stg:text-sm stg:text-foreground stg:font-sans">
|
|
514
560
|
{spec?.description}
|
|
515
561
|
</pre>
|
|
516
562
|
</div>
|
|
@@ -542,15 +588,17 @@ export function McpServerDetailView({
|
|
|
542
588
|
{/* scrollTarget: guided tours/demos bring the connect flow into view
|
|
543
589
|
(see IdentityTransportStep's "mcp-transport" for the convention). */}
|
|
544
590
|
<Section title="Connection" scrollTarget="mcp-connection">
|
|
545
|
-
<StdioSandboxNotice serverType={spec?.serverType} className="mb-3" />
|
|
546
|
-
<OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="mb-3" />
|
|
591
|
+
<StdioSandboxNotice serverType={spec?.serverType} className="stg:mb-3" />
|
|
592
|
+
<OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="stg:mb-3" />
|
|
547
593
|
<ConnectBar
|
|
548
594
|
manualEntrySupported={credentials.manualEntrySupported}
|
|
549
595
|
isConnecting={connection.isConnecting || oauth.isInProgress}
|
|
550
596
|
connectionError={combinedError}
|
|
597
|
+
connectionErrorMessage={combinedErrorMessage}
|
|
551
598
|
onConnect={handleConnectClick}
|
|
552
599
|
onClearConnectionError={combinedClearError}
|
|
553
600
|
hasDiscoveredTools={hasDiscoveredTools}
|
|
601
|
+
isOAuthStranded={isOAuthStranded}
|
|
554
602
|
credentialsLoading={credentials.isLoading}
|
|
555
603
|
oauthPhase={oauth.phase}
|
|
556
604
|
authMode={credentials.authMode}
|
|
@@ -588,7 +636,7 @@ export function McpServerDetailView({
|
|
|
588
636
|
|
|
589
637
|
{showCredentialForm && credentials.missingVariables.length > 0 && (
|
|
590
638
|
<div
|
|
591
|
-
className="border-b border-border p-4"
|
|
639
|
+
className="stg:border-b stg:border-border stg:p-4"
|
|
592
640
|
data-cursor-target="credential-form"
|
|
593
641
|
>
|
|
594
642
|
<EnvVarForm
|
|
@@ -599,7 +647,7 @@ export function McpServerDetailView({
|
|
|
599
647
|
onCancel={() => setShowCredentialForm(false)}
|
|
600
648
|
isSubmitting={credentials.isSaving}
|
|
601
649
|
poolValues={credentialPoolValues}
|
|
602
|
-
className="w-full max-w-md"
|
|
650
|
+
className="stg:w-full stg:max-w-md"
|
|
603
651
|
/>
|
|
604
652
|
</div>
|
|
605
653
|
)}
|
|
@@ -610,11 +658,11 @@ export function McpServerDetailView({
|
|
|
610
658
|
ref={byoaDialogRef}
|
|
611
659
|
onCancel={handleByoaDialogCancel}
|
|
612
660
|
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",
|
|
661
|
+
"stg:m-auto stg:w-full stg:max-w-md stg:rounded-lg stg:border stg:border-border stg:bg-background stg:p-6 stg:shadow-lg",
|
|
662
|
+
"stg:backdrop:bg-black/50",
|
|
615
663
|
)}
|
|
616
664
|
>
|
|
617
|
-
<h3 className="mb-4 text-base font-semibold text-foreground">
|
|
665
|
+
<h3 className="stg:mb-4 stg:text-base stg:font-semibold stg:text-foreground">
|
|
618
666
|
Use your own OAuth app
|
|
619
667
|
</h3>
|
|
620
668
|
<OAuthAppForm
|
|
@@ -638,7 +686,12 @@ export function McpServerDetailView({
|
|
|
638
686
|
aria-label="MCP server capabilities"
|
|
639
687
|
>
|
|
640
688
|
{capabilityTab === "tools" && (
|
|
641
|
-
<ToolsTabContent
|
|
689
|
+
<ToolsTabContent
|
|
690
|
+
tools={tools}
|
|
691
|
+
isOAuthStranded={isOAuthStranded}
|
|
692
|
+
onDiscover={handleConnectClick}
|
|
693
|
+
isDiscovering={connection.isConnecting || oauth.isInProgress}
|
|
694
|
+
/>
|
|
642
695
|
)}
|
|
643
696
|
|
|
644
697
|
{capabilityTab === "policies" && (
|
|
@@ -646,6 +699,7 @@ export function McpServerDetailView({
|
|
|
646
699
|
pinnedPolicies={pinnedPolicies}
|
|
647
700
|
classifiedPolicies={classifiedPolicies}
|
|
648
701
|
hasDiscoveredTools={hasDiscoveredTools}
|
|
702
|
+
isOAuthStranded={isOAuthStranded}
|
|
649
703
|
/>
|
|
650
704
|
)}
|
|
651
705
|
|
|
@@ -675,34 +729,34 @@ function healthPillProps(
|
|
|
675
729
|
): { pillClass: string; dotClass: string; label: string } {
|
|
676
730
|
if (isVendorApprovalPending) {
|
|
677
731
|
return {
|
|
678
|
-
pillClass: "bg-amber-500/10 text-amber-600 dark:text-amber-400",
|
|
679
|
-
dotClass: "bg-amber-500",
|
|
732
|
+
pillClass: "stg:bg-amber-500/10 stg:text-amber-600 stg:dark:text-amber-400",
|
|
733
|
+
dotClass: "stg:bg-amber-500",
|
|
680
734
|
label: "Pending approval",
|
|
681
735
|
};
|
|
682
736
|
}
|
|
683
737
|
switch (health) {
|
|
684
738
|
case OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_HEALTHY:
|
|
685
739
|
return {
|
|
686
|
-
pillClass: "bg-success/10 text-success",
|
|
687
|
-
dotClass: "bg-success",
|
|
740
|
+
pillClass: "stg:bg-success/10 stg:text-success",
|
|
741
|
+
dotClass: "stg:bg-success",
|
|
688
742
|
label: "Connected",
|
|
689
743
|
};
|
|
690
744
|
case OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_TOKEN_EXPIRED_REFRESHABLE:
|
|
691
745
|
return {
|
|
692
|
-
pillClass: "bg-amber-500/10 text-amber-600 dark:text-amber-400",
|
|
693
|
-
dotClass: "bg-amber-500",
|
|
746
|
+
pillClass: "stg:bg-amber-500/10 stg:text-amber-600 stg:dark:text-amber-400",
|
|
747
|
+
dotClass: "stg:bg-amber-500",
|
|
694
748
|
label: "Token expired",
|
|
695
749
|
};
|
|
696
750
|
case OAuthConnectionHealth.OAUTH_CONNECTION_HEALTH_TOKEN_EXPIRED:
|
|
697
751
|
return {
|
|
698
|
-
pillClass: "bg-destructive-subtle text-destructive",
|
|
699
|
-
dotClass: "bg-destructive",
|
|
752
|
+
pillClass: "stg:bg-destructive-subtle stg:text-destructive",
|
|
753
|
+
dotClass: "stg:bg-destructive",
|
|
700
754
|
label: "Re-auth needed",
|
|
701
755
|
};
|
|
702
756
|
default:
|
|
703
757
|
return {
|
|
704
|
-
pillClass: "bg-muted text-muted-foreground",
|
|
705
|
-
dotClass: "bg-muted-foreground",
|
|
758
|
+
pillClass: "stg:bg-muted stg:text-muted-foreground",
|
|
759
|
+
dotClass: "stg:bg-muted-foreground",
|
|
706
760
|
label: "Not connected",
|
|
707
761
|
};
|
|
708
762
|
}
|
|
@@ -740,9 +794,11 @@ type RemoveOrgAppPhase = "idle" | "confirming" | "removing";
|
|
|
740
794
|
function ConnectBar({
|
|
741
795
|
isConnecting,
|
|
742
796
|
connectionError,
|
|
797
|
+
connectionErrorMessage,
|
|
743
798
|
onConnect,
|
|
744
799
|
onClearConnectionError,
|
|
745
800
|
hasDiscoveredTools,
|
|
801
|
+
isOAuthStranded,
|
|
746
802
|
credentialsLoading,
|
|
747
803
|
oauthPhase,
|
|
748
804
|
authMode,
|
|
@@ -774,9 +830,13 @@ function ConnectBar({
|
|
|
774
830
|
}: {
|
|
775
831
|
readonly isConnecting: boolean;
|
|
776
832
|
readonly connectionError: Error | null;
|
|
833
|
+
/** Display copy for `connectionError`, pre-composed by the parent (phase-aware for OAuth-chain failures). */
|
|
834
|
+
readonly connectionErrorMessage: string | null;
|
|
777
835
|
readonly onConnect: () => void;
|
|
778
836
|
readonly onClearConnectionError: () => void;
|
|
779
837
|
readonly hasDiscoveredTools: boolean;
|
|
838
|
+
/** OAuth grant is healthy but discovery never landed — see the derivation in the parent. */
|
|
839
|
+
readonly isOAuthStranded: boolean;
|
|
780
840
|
readonly credentialsLoading: boolean;
|
|
781
841
|
readonly oauthPhase: OAuthConnectPhase;
|
|
782
842
|
readonly authMode: "manual" | "oauth";
|
|
@@ -832,19 +892,23 @@ function ConnectBar({
|
|
|
832
892
|
if (isConnecting) return "Connecting...";
|
|
833
893
|
if (isOrgOAuthApp && showOAuthPrimary) return "Sign in with your app";
|
|
834
894
|
if (showOAuthPrimary || needsReAuth) return "Sign in to connect";
|
|
895
|
+
if (isOAuthStranded) return "Discover tools";
|
|
835
896
|
if (hasDiscoveredTools) return "Reconnect";
|
|
836
897
|
return "Connect";
|
|
837
898
|
})();
|
|
838
899
|
|
|
839
900
|
const buttonIcon = (() => {
|
|
840
901
|
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" />;
|
|
902
|
+
if (showOAuthPrimary || needsReAuth) return <OAuthIcon className="stg:size-3.5" />;
|
|
903
|
+
if (hasDiscoveredTools) return <RefreshIcon className="stg:size-3.5" />;
|
|
904
|
+
return <ConnectIcon className="stg:size-3.5" />;
|
|
844
905
|
})();
|
|
845
906
|
|
|
846
907
|
const statusText = (() => {
|
|
847
908
|
if (authMode === "oauth" && isOAuthConnected) {
|
|
909
|
+
// Stranded takes precedence over token health: "tokens refresh
|
|
910
|
+
// automatically" reads as all-done while the Tools tab is empty.
|
|
911
|
+
if (isOAuthStranded) return "Signed in \u2014 tools not discovered yet";
|
|
848
912
|
const base = healthStatusText(connectionHealth, accessTokenExpiresAt, tokenLifetimeHint);
|
|
849
913
|
return isOrgOAuthApp ? `${base} \u00B7 Using your OAuth app` : base;
|
|
850
914
|
}
|
|
@@ -865,14 +929,14 @@ function ConnectBar({
|
|
|
865
929
|
// Inline disconnect confirmation replaces the main bar content
|
|
866
930
|
if (disconnectPhase === "confirming" || disconnectPhase === "disconnecting") {
|
|
867
931
|
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>?
|
|
932
|
+
<div className="stg:flex stg:flex-col">
|
|
933
|
+
<div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:py-2">
|
|
934
|
+
<WarningIcon className="stg:size-3.5 stg:shrink-0 stg:text-destructive" />
|
|
935
|
+
<p className="stg:flex-1 stg:text-xs stg:text-foreground">
|
|
936
|
+
Remove OAuth credentials for <span className="stg:font-medium">{serverName}</span>?
|
|
873
937
|
You can reconnect at any time.
|
|
874
938
|
</p>
|
|
875
|
-
<div className="flex shrink-0 items-center gap-1.5">
|
|
939
|
+
<div className="stg:flex stg:shrink-0 stg:items-center stg:gap-1.5">
|
|
876
940
|
<button
|
|
877
941
|
type="button"
|
|
878
942
|
disabled={isDisconnecting}
|
|
@@ -886,9 +950,9 @@ function ConnectBar({
|
|
|
886
950
|
}
|
|
887
951
|
}}
|
|
888
952
|
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",
|
|
953
|
+
"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",
|
|
954
|
+
"stg:bg-destructive stg:text-destructive-foreground stg:hover:bg-destructive-hover",
|
|
955
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
892
956
|
)}
|
|
893
957
|
>
|
|
894
958
|
{isDisconnecting && <Spinner />}
|
|
@@ -902,9 +966,9 @@ function ConnectBar({
|
|
|
902
966
|
onClearDisconnectError();
|
|
903
967
|
}}
|
|
904
968
|
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",
|
|
969
|
+
"stg:inline-flex stg:items-center stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
|
|
970
|
+
"stg:border stg:border-border stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground",
|
|
971
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
908
972
|
)}
|
|
909
973
|
>
|
|
910
974
|
Cancel
|
|
@@ -912,15 +976,15 @@ function ConnectBar({
|
|
|
912
976
|
</div>
|
|
913
977
|
</div>
|
|
914
978
|
{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">
|
|
979
|
+
<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">
|
|
980
|
+
<WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-destructive" />
|
|
981
|
+
<p className="stg:flex-1 stg:text-xs stg:text-destructive">
|
|
918
982
|
{getUserMessage(disconnectError)}
|
|
919
983
|
</p>
|
|
920
984
|
<button
|
|
921
985
|
type="button"
|
|
922
986
|
onClick={onClearDisconnectError}
|
|
923
|
-
className="shrink-0 text-xs text-destructive-muted hover:text-destructive"
|
|
987
|
+
className="stg:shrink-0 stg:text-xs stg:text-destructive-muted stg:hover:text-destructive"
|
|
924
988
|
aria-label="Dismiss error"
|
|
925
989
|
>
|
|
926
990
|
Dismiss
|
|
@@ -934,15 +998,15 @@ function ConnectBar({
|
|
|
934
998
|
// Inline "remove custom app" confirmation
|
|
935
999
|
if (removeOrgAppPhase === "confirming" || removeOrgAppPhase === "removing") {
|
|
936
1000
|
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">
|
|
1001
|
+
<div className="stg:flex stg:flex-col">
|
|
1002
|
+
<div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:py-2">
|
|
1003
|
+
<WarningIcon className="stg:size-3.5 stg:shrink-0 stg:text-destructive" />
|
|
1004
|
+
<p className="stg:flex-1 stg:text-xs stg:text-foreground">
|
|
941
1005
|
Remove your custom OAuth app for{" "}
|
|
942
|
-
<span className="font-medium">{serverName}</span>? The server
|
|
1006
|
+
<span className="stg:font-medium">{serverName}</span>? The server
|
|
943
1007
|
will revert to the platform's OAuth app.
|
|
944
1008
|
</p>
|
|
945
|
-
<div className="flex shrink-0 items-center gap-1.5">
|
|
1009
|
+
<div className="stg:flex stg:shrink-0 stg:items-center stg:gap-1.5">
|
|
946
1010
|
<button
|
|
947
1011
|
type="button"
|
|
948
1012
|
disabled={isRemovingOrgApp}
|
|
@@ -956,9 +1020,9 @@ function ConnectBar({
|
|
|
956
1020
|
}
|
|
957
1021
|
}}
|
|
958
1022
|
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",
|
|
1023
|
+
"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",
|
|
1024
|
+
"stg:bg-destructive stg:text-destructive-foreground stg:hover:bg-destructive-hover",
|
|
1025
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
962
1026
|
)}
|
|
963
1027
|
>
|
|
964
1028
|
{isRemovingOrgApp && <Spinner />}
|
|
@@ -972,9 +1036,9 @@ function ConnectBar({
|
|
|
972
1036
|
onClearRemoveOrgAppError();
|
|
973
1037
|
}}
|
|
974
1038
|
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",
|
|
1039
|
+
"stg:inline-flex stg:items-center stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium",
|
|
1040
|
+
"stg:border stg:border-border stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground",
|
|
1041
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
978
1042
|
)}
|
|
979
1043
|
>
|
|
980
1044
|
Cancel
|
|
@@ -982,15 +1046,15 @@ function ConnectBar({
|
|
|
982
1046
|
</div>
|
|
983
1047
|
</div>
|
|
984
1048
|
{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">
|
|
1049
|
+
<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">
|
|
1050
|
+
<WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-destructive" />
|
|
1051
|
+
<p className="stg:flex-1 stg:text-xs stg:text-destructive">
|
|
988
1052
|
{getUserMessage(removeOrgAppError)}
|
|
989
1053
|
</p>
|
|
990
1054
|
<button
|
|
991
1055
|
type="button"
|
|
992
1056
|
onClick={onClearRemoveOrgAppError}
|
|
993
|
-
className="shrink-0 text-xs text-destructive-muted hover:text-destructive"
|
|
1057
|
+
className="stg:shrink-0 stg:text-xs stg:text-destructive-muted stg:hover:text-destructive"
|
|
994
1058
|
aria-label="Dismiss error"
|
|
995
1059
|
>
|
|
996
1060
|
Dismiss
|
|
@@ -1002,31 +1066,31 @@ function ConnectBar({
|
|
|
1002
1066
|
}
|
|
1003
1067
|
|
|
1004
1068
|
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">
|
|
1069
|
+
<div className="stg:flex stg:flex-col">
|
|
1070
|
+
<div className="stg:flex stg:items-center stg:justify-between stg:px-3 stg:py-2">
|
|
1071
|
+
<div className="stg:flex stg:items-center stg:gap-2">
|
|
1008
1072
|
{authMode === "oauth" && !manualOverride && (
|
|
1009
1073
|
<span
|
|
1010
1074
|
className={cn(
|
|
1011
|
-
"inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-medium",
|
|
1075
|
+
"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
1076
|
pill.pillClass,
|
|
1013
1077
|
)}
|
|
1014
1078
|
>
|
|
1015
1079
|
<span
|
|
1016
|
-
className={cn("size-1.5 rounded-full", pill.dotClass)}
|
|
1080
|
+
className={cn("stg:size-1.5 stg:rounded-full", pill.dotClass)}
|
|
1017
1081
|
aria-hidden="true"
|
|
1018
1082
|
/>
|
|
1019
1083
|
{pill.label}
|
|
1020
1084
|
</span>
|
|
1021
1085
|
)}
|
|
1022
|
-
<span className="text-xs text-muted-foreground">
|
|
1086
|
+
<span className="stg:text-xs stg:text-muted-foreground">
|
|
1023
1087
|
{oauthSignInDisabled ? "OAuth sign-in is pending vendor approval" : statusText}
|
|
1024
1088
|
</span>
|
|
1025
1089
|
{showDisconnectLink && (
|
|
1026
1090
|
<button
|
|
1027
1091
|
type="button"
|
|
1028
1092
|
onClick={() => setDisconnectPhase("confirming")}
|
|
1029
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1093
|
+
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
1094
|
>
|
|
1031
1095
|
Disconnect
|
|
1032
1096
|
</button>
|
|
@@ -1035,7 +1099,7 @@ function ConnectBar({
|
|
|
1035
1099
|
<button
|
|
1036
1100
|
type="button"
|
|
1037
1101
|
onClick={() => setRemoveOrgAppPhase("confirming")}
|
|
1038
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1102
|
+
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
1103
|
>
|
|
1040
1104
|
Remove custom app
|
|
1041
1105
|
</button>
|
|
@@ -1047,11 +1111,11 @@ function ConnectBar({
|
|
|
1047
1111
|
disabled={anyBusy || credentialsLoading || oauthSignInDisabled}
|
|
1048
1112
|
data-cursor-target="connect-button"
|
|
1049
1113
|
className={cn(
|
|
1050
|
-
"inline-flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs font-medium",
|
|
1114
|
+
"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
1115
|
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",
|
|
1116
|
+
? "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover"
|
|
1117
|
+
: "stg:border stg:border-border stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground",
|
|
1118
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
1055
1119
|
)}
|
|
1056
1120
|
>
|
|
1057
1121
|
{buttonIcon}
|
|
@@ -1060,11 +1124,11 @@ function ConnectBar({
|
|
|
1060
1124
|
</div>
|
|
1061
1125
|
|
|
1062
1126
|
{oauthPhase === "awaiting-callback" && (
|
|
1063
|
-
<div className="flex items-center gap-3 border-t border-border px-3 py-1.5">
|
|
1127
|
+
<div className="stg:flex stg:items-center stg:gap-3 stg:border-t stg:border-border stg:px-3 stg:py-1.5">
|
|
1064
1128
|
<button
|
|
1065
1129
|
type="button"
|
|
1066
1130
|
onClick={onCancelOAuth}
|
|
1067
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1131
|
+
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
1132
|
>
|
|
1069
1133
|
Cancel sign-in
|
|
1070
1134
|
</button>
|
|
@@ -1073,38 +1137,15 @@ function ConnectBar({
|
|
|
1073
1137
|
|
|
1074
1138
|
{/* Vendor approval blocked banner with BYOA CTA */}
|
|
1075
1139
|
{oauthSignInDisabled && (
|
|
1076
|
-
<
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
{canBringOwnApp && (
|
|
1086
|
-
<button
|
|
1087
|
-
type="button"
|
|
1088
|
-
onClick={onBringOwnApp}
|
|
1089
|
-
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"
|
|
1091
|
-
>
|
|
1092
|
-
Use your own OAuth app
|
|
1093
|
-
</button>
|
|
1094
|
-
)}
|
|
1095
|
-
{vendorApprovalDocsUrl && !canBringOwnApp && (
|
|
1096
|
-
<a
|
|
1097
|
-
href={vendorApprovalDocsUrl}
|
|
1098
|
-
target="_blank"
|
|
1099
|
-
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"
|
|
1101
|
-
>
|
|
1102
|
-
Learn how to bring your own token
|
|
1103
|
-
<ExternalLinkIcon className="size-3 shrink-0" />
|
|
1104
|
-
</a>
|
|
1105
|
-
)}
|
|
1106
|
-
</div>
|
|
1107
|
-
</div>
|
|
1140
|
+
<VendorApprovalBlockedNotice
|
|
1141
|
+
blocked
|
|
1142
|
+
pending={isVendorApprovalPending}
|
|
1143
|
+
manualEntrySupported={manualEntrySupported}
|
|
1144
|
+
canBringOwnApp={canBringOwnApp}
|
|
1145
|
+
docsUrl={vendorApprovalDocsUrl}
|
|
1146
|
+
onBringOwnApp={onBringOwnApp}
|
|
1147
|
+
className="stg:border-t stg:border-amber-500/20"
|
|
1148
|
+
/>
|
|
1108
1149
|
)}
|
|
1109
1150
|
|
|
1110
1151
|
{/* Secondary actions: manual entry, BYOA, back to OAuth. Suppressed
|
|
@@ -1112,12 +1153,12 @@ function ConnectBar({
|
|
|
1112
1153
|
action bar renders. */}
|
|
1113
1154
|
{authMode === "oauth" && !isOAuthConnected && !isOAuthBusy && !isConnecting &&
|
|
1114
1155
|
(manualOverride || manualEntrySupported || canBringOwnApp) && (
|
|
1115
|
-
<div className="flex items-center gap-3 border-t border-border px-3 py-1.5">
|
|
1156
|
+
<div className="stg:flex stg:items-center stg:gap-3 stg:border-t stg:border-border stg:px-3 stg:py-1.5">
|
|
1116
1157
|
{manualOverride ? (
|
|
1117
1158
|
<button
|
|
1118
1159
|
type="button"
|
|
1119
1160
|
onClick={onBackToOAuth}
|
|
1120
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1161
|
+
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
1162
|
>
|
|
1122
1163
|
{isVendorApprovalPending ? "Back to OAuth status" : "Sign in with OAuth instead"}
|
|
1123
1164
|
</button>
|
|
@@ -1127,7 +1168,7 @@ function ConnectBar({
|
|
|
1127
1168
|
<button
|
|
1128
1169
|
type="button"
|
|
1129
1170
|
onClick={onManualOverride}
|
|
1130
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1171
|
+
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
1172
|
>
|
|
1132
1173
|
Enter token manually
|
|
1133
1174
|
</button>
|
|
@@ -1136,7 +1177,7 @@ function ConnectBar({
|
|
|
1136
1177
|
<button
|
|
1137
1178
|
type="button"
|
|
1138
1179
|
onClick={onBringOwnApp}
|
|
1139
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1180
|
+
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
1181
|
>
|
|
1141
1182
|
Use your own OAuth app
|
|
1142
1183
|
</button>
|
|
@@ -1148,14 +1189,14 @@ function ConnectBar({
|
|
|
1148
1189
|
|
|
1149
1190
|
{connectionError && (
|
|
1150
1191
|
<div
|
|
1151
|
-
className="flex items-start gap-2 border-t border-destructive/20 bg-destructive-subtle px-3 py-2"
|
|
1192
|
+
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
1193
|
role="alert"
|
|
1153
1194
|
>
|
|
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)}
|
|
1195
|
+
<WarningIcon className="stg:mt-0.5 stg:size-3.5 stg:shrink-0 stg:text-destructive" />
|
|
1196
|
+
<p className="stg:flex-1 stg:text-xs stg:text-destructive">
|
|
1197
|
+
{connectionErrorMessage ?? getUserMessage(connectionError)}
|
|
1157
1198
|
</p>
|
|
1158
|
-
<div className="flex shrink-0 items-center gap-2">
|
|
1199
|
+
<div className="stg:flex stg:shrink-0 stg:items-center stg:gap-2">
|
|
1159
1200
|
{isRetryableError(connectionError) && (
|
|
1160
1201
|
<button
|
|
1161
1202
|
type="button"
|
|
@@ -1163,7 +1204,7 @@ function ConnectBar({
|
|
|
1163
1204
|
onClearConnectionError();
|
|
1164
1205
|
onConnect();
|
|
1165
1206
|
}}
|
|
1166
|
-
className="text-xs font-medium text-destructive underline underline-offset-2 hover:no-underline"
|
|
1207
|
+
className="stg:text-xs stg:font-medium stg:text-destructive stg:underline stg:underline-offset-2 stg:hover:no-underline"
|
|
1167
1208
|
>
|
|
1168
1209
|
Try again
|
|
1169
1210
|
</button>
|
|
@@ -1171,7 +1212,7 @@ function ConnectBar({
|
|
|
1171
1212
|
<button
|
|
1172
1213
|
type="button"
|
|
1173
1214
|
onClick={onClearConnectionError}
|
|
1174
|
-
className="text-xs text-destructive-muted hover:text-destructive"
|
|
1215
|
+
className="stg:text-xs stg:text-destructive-muted stg:hover:text-destructive"
|
|
1175
1216
|
aria-label="Dismiss error"
|
|
1176
1217
|
>
|
|
1177
1218
|
Dismiss
|
|
@@ -1220,14 +1261,14 @@ function ValidationBanner({ message }: { readonly message: string }) {
|
|
|
1220
1261
|
return (
|
|
1221
1262
|
<div
|
|
1222
1263
|
role="alert"
|
|
1223
|
-
className="flex items-start gap-2.5 rounded-lg border border-destructive/30 bg-destructive-subtle px-4 py-3"
|
|
1264
|
+
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
1265
|
>
|
|
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">
|
|
1266
|
+
<WarningIcon className="stg:mt-0.5 stg:size-4 stg:shrink-0 stg:text-destructive" />
|
|
1267
|
+
<div className="stg:min-w-0 stg:flex-1">
|
|
1268
|
+
<p className="stg:text-sm stg:font-medium stg:text-destructive">
|
|
1228
1269
|
Invalid Configuration
|
|
1229
1270
|
</p>
|
|
1230
|
-
<p className="mt-0.5 text-xs text-destructive-muted">{message}</p>
|
|
1271
|
+
<p className="stg:mt-0.5 stg:text-xs stg:text-destructive-muted">{message}</p>
|
|
1231
1272
|
</div>
|
|
1232
1273
|
</div>
|
|
1233
1274
|
);
|
|
@@ -1244,8 +1285,8 @@ function ValidationStateBadge({
|
|
|
1244
1285
|
return (
|
|
1245
1286
|
<>
|
|
1246
1287
|
<Dot />
|
|
1247
|
-
<span className="inline-flex items-center gap-1 text-emerald-600 dark:text-emerald-400">
|
|
1248
|
-
<CheckIcon className="size-3" />
|
|
1288
|
+
<span className="stg:inline-flex stg:items-center stg:gap-1 stg:text-emerald-600 stg:dark:text-emerald-400">
|
|
1289
|
+
<CheckIcon className="stg:size-3" />
|
|
1249
1290
|
Valid
|
|
1250
1291
|
</span>
|
|
1251
1292
|
</>
|
|
@@ -1254,7 +1295,7 @@ function ValidationStateBadge({
|
|
|
1254
1295
|
return (
|
|
1255
1296
|
<>
|
|
1256
1297
|
<Dot />
|
|
1257
|
-
<span className="text-destructive">Invalid</span>
|
|
1298
|
+
<span className="stg:text-destructive">Invalid</span>
|
|
1258
1299
|
</>
|
|
1259
1300
|
);
|
|
1260
1301
|
default:
|
|
@@ -1352,9 +1393,9 @@ function ServerConfigSection({
|
|
|
1352
1393
|
|
|
1353
1394
|
return (
|
|
1354
1395
|
<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">
|
|
1396
|
+
<div className="stg:flex stg:flex-col stg:gap-2 stg:p-3">
|
|
1397
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1398
|
+
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
1358
1399
|
Type
|
|
1359
1400
|
</span>
|
|
1360
1401
|
{editable && saveMcpField ? (
|
|
@@ -1365,7 +1406,7 @@ function ServerConfigSection({
|
|
|
1365
1406
|
isSaving={isSaving}
|
|
1366
1407
|
/>
|
|
1367
1408
|
) : (
|
|
1368
|
-
<span className="rounded bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground">
|
|
1409
|
+
<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
1410
|
{serverType?.case ?? "none"}
|
|
1370
1411
|
</span>
|
|
1371
1412
|
)}
|
|
@@ -1373,8 +1414,8 @@ function ServerConfigSection({
|
|
|
1373
1414
|
|
|
1374
1415
|
{serverType?.case === "stdio" && (
|
|
1375
1416
|
<>
|
|
1376
|
-
<div className="flex items-baseline gap-2">
|
|
1377
|
-
<span className="text-xs font-medium text-muted-foreground">
|
|
1417
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1418
|
+
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
1378
1419
|
Command
|
|
1379
1420
|
</span>
|
|
1380
1421
|
{editable && saveMcpField ? (
|
|
@@ -1391,7 +1432,7 @@ function ServerConfigSection({
|
|
|
1391
1432
|
placeholder="e.g. npx -y @modelcontextprotocol/server"
|
|
1392
1433
|
/>
|
|
1393
1434
|
) : (
|
|
1394
|
-
<code className="font-mono text-sm text-foreground">
|
|
1435
|
+
<code className="stg:font-mono stg:text-sm stg:text-foreground">
|
|
1395
1436
|
{serverType.value.command}
|
|
1396
1437
|
{serverType.value.args.length > 0 &&
|
|
1397
1438
|
` ${serverType.value.args.join(" ")}`}
|
|
@@ -1399,8 +1440,8 @@ function ServerConfigSection({
|
|
|
1399
1440
|
)}
|
|
1400
1441
|
</div>
|
|
1401
1442
|
{(editable || serverType.value.workingDir) && (
|
|
1402
|
-
<div className="flex items-baseline gap-2">
|
|
1403
|
-
<span className="text-xs font-medium text-muted-foreground">
|
|
1443
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1444
|
+
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
1404
1445
|
Working Dir
|
|
1405
1446
|
</span>
|
|
1406
1447
|
{editable && saveMcpField ? (
|
|
@@ -1417,7 +1458,7 @@ function ServerConfigSection({
|
|
|
1417
1458
|
placeholder="/path/to/working/dir"
|
|
1418
1459
|
/>
|
|
1419
1460
|
) : (
|
|
1420
|
-
<code className="font-mono text-xs text-foreground">
|
|
1461
|
+
<code className="stg:font-mono stg:text-xs stg:text-foreground">
|
|
1421
1462
|
{serverType.value.workingDir}
|
|
1422
1463
|
</code>
|
|
1423
1464
|
)}
|
|
@@ -1428,8 +1469,8 @@ function ServerConfigSection({
|
|
|
1428
1469
|
|
|
1429
1470
|
{serverType?.case === "http" && (
|
|
1430
1471
|
<>
|
|
1431
|
-
<div className="flex items-baseline gap-2">
|
|
1432
|
-
<span className="text-xs font-medium text-muted-foreground">
|
|
1472
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1473
|
+
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
1433
1474
|
URL
|
|
1434
1475
|
</span>
|
|
1435
1476
|
{editable && saveMcpField ? (
|
|
@@ -1442,14 +1483,14 @@ function ServerConfigSection({
|
|
|
1442
1483
|
placeholder="https://example.com/mcp"
|
|
1443
1484
|
/>
|
|
1444
1485
|
) : (
|
|
1445
|
-
<code className="break-all font-mono text-sm text-foreground">
|
|
1486
|
+
<code className="stg:break-all stg:font-mono stg:text-sm stg:text-foreground">
|
|
1446
1487
|
{serverType.value.url}
|
|
1447
1488
|
</code>
|
|
1448
1489
|
)}
|
|
1449
1490
|
</div>
|
|
1450
1491
|
{(editable || serverType.value.timeoutSeconds > 0) && (
|
|
1451
|
-
<div className="flex items-baseline gap-2">
|
|
1452
|
-
<span className="text-xs font-medium text-muted-foreground">
|
|
1492
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1493
|
+
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
1453
1494
|
Timeout
|
|
1454
1495
|
</span>
|
|
1455
1496
|
{editable && saveMcpField ? (
|
|
@@ -1469,7 +1510,7 @@ function ServerConfigSection({
|
|
|
1469
1510
|
}}
|
|
1470
1511
|
/>
|
|
1471
1512
|
) : (
|
|
1472
|
-
<span className="text-xs text-foreground">
|
|
1513
|
+
<span className="stg:text-xs stg:text-foreground">
|
|
1473
1514
|
{serverType.value.timeoutSeconds}s
|
|
1474
1515
|
</span>
|
|
1475
1516
|
)}
|
|
@@ -1533,12 +1574,12 @@ function HttpKeyValueSubsection({
|
|
|
1533
1574
|
readonly keyLabel: string;
|
|
1534
1575
|
}) {
|
|
1535
1576
|
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>
|
|
1577
|
+
<div className="stg:border-t stg:border-border">
|
|
1578
|
+
<div className="stg:flex stg:items-center stg:justify-between stg:px-3 stg:py-2">
|
|
1579
|
+
<div className="stg:flex stg:items-center stg:gap-1.5">
|
|
1580
|
+
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">{title}</span>
|
|
1540
1581
|
{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">
|
|
1582
|
+
<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
1583
|
{count}
|
|
1543
1584
|
</span>
|
|
1544
1585
|
)}
|
|
@@ -1547,7 +1588,7 @@ function HttpKeyValueSubsection({
|
|
|
1547
1588
|
<button
|
|
1548
1589
|
type="button"
|
|
1549
1590
|
onClick={() => onEditingChange(!editing)}
|
|
1550
|
-
className="text-[11px] text-muted-foreground underline decoration-muted-foreground/40 underline-offset-2 hover:text-foreground hover:decoration-foreground"
|
|
1591
|
+
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
1592
|
>
|
|
1552
1593
|
{editing ? "Done" : "Edit"}
|
|
1553
1594
|
</button>
|
|
@@ -1565,13 +1606,13 @@ function HttpKeyValueSubsection({
|
|
|
1565
1606
|
valueLabel="Value"
|
|
1566
1607
|
/>
|
|
1567
1608
|
) : (
|
|
1568
|
-
<div className="flex flex-col divide-y divide-border">
|
|
1609
|
+
<div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
|
|
1569
1610
|
{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">
|
|
1611
|
+
<div key={row.key} className="stg:flex stg:items-start stg:gap-2 stg:px-3 stg:py-1.5">
|
|
1612
|
+
<code className="stg:shrink-0 stg:font-mono stg:text-xs stg:font-medium stg:text-foreground">
|
|
1572
1613
|
{row.key}
|
|
1573
1614
|
</code>
|
|
1574
|
-
<span className="min-w-0 break-all font-mono text-xs text-muted-foreground">
|
|
1615
|
+
<span className="stg:min-w-0 stg:break-all stg:font-mono stg:text-xs stg:text-muted-foreground">
|
|
1575
1616
|
{renderHeaderValue(row.value)}
|
|
1576
1617
|
</span>
|
|
1577
1618
|
</div>
|
|
@@ -1598,13 +1639,18 @@ function renderHeaderValue(value: string): React.ReactNode {
|
|
|
1598
1639
|
parts.push(value.slice(lastIndex, match.index));
|
|
1599
1640
|
}
|
|
1600
1641
|
parts.push(
|
|
1601
|
-
<
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1642
|
+
<Tooltip key={match.index}>
|
|
1643
|
+
<TooltipTrigger
|
|
1644
|
+
render={
|
|
1645
|
+
<span 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" />
|
|
1646
|
+
}
|
|
1647
|
+
>
|
|
1648
|
+
{match[0]}
|
|
1649
|
+
</TooltipTrigger>
|
|
1650
|
+
<TooltipContent side="top">
|
|
1651
|
+
{`Resolved from environment variable: ${match[1]}`}
|
|
1652
|
+
</TooltipContent>
|
|
1653
|
+
</Tooltip>,
|
|
1608
1654
|
);
|
|
1609
1655
|
lastIndex = match.index + match[0].length;
|
|
1610
1656
|
}
|
|
@@ -1623,29 +1669,29 @@ function SourceSection({
|
|
|
1623
1669
|
}) {
|
|
1624
1670
|
return (
|
|
1625
1671
|
<Section title="Source">
|
|
1626
|
-
<div className="flex flex-col gap-2 p-3">
|
|
1672
|
+
<div className="stg:flex stg:flex-col stg:gap-2 stg:p-3">
|
|
1627
1673
|
{spec.repositoryUrl && (
|
|
1628
|
-
<div className="flex items-baseline gap-2">
|
|
1629
|
-
<span className="shrink-0 text-xs font-medium text-muted-foreground">
|
|
1674
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1675
|
+
<span className="stg:shrink-0 stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
1630
1676
|
Repository
|
|
1631
1677
|
</span>
|
|
1632
1678
|
<a
|
|
1633
1679
|
href={spec.repositoryUrl}
|
|
1634
1680
|
target="_blank"
|
|
1635
1681
|
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"
|
|
1682
|
+
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
1683
|
>
|
|
1638
1684
|
{spec.repositoryUrl}
|
|
1639
|
-
<ExternalLinkIcon className="size-3 shrink-0" />
|
|
1685
|
+
<ExternalLinkIcon className="stg:size-3 stg:shrink-0" />
|
|
1640
1686
|
</a>
|
|
1641
1687
|
</div>
|
|
1642
1688
|
)}
|
|
1643
1689
|
{spec.githubStars > 0 && (
|
|
1644
|
-
<div className="flex items-baseline gap-2">
|
|
1645
|
-
<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">
|
|
1646
1692
|
Stars
|
|
1647
1693
|
</span>
|
|
1648
|
-
<span className="text-xs text-foreground">
|
|
1694
|
+
<span className="stg:text-xs stg:text-foreground">
|
|
1649
1695
|
{spec.githubStars.toLocaleString()}
|
|
1650
1696
|
</span>
|
|
1651
1697
|
</div>
|
|
@@ -1663,19 +1709,19 @@ function ResourceTemplatesList({
|
|
|
1663
1709
|
if (templates.length === 0) return null;
|
|
1664
1710
|
|
|
1665
1711
|
return (
|
|
1666
|
-
<div className="flex flex-col divide-y divide-border">
|
|
1712
|
+
<div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
|
|
1667
1713
|
{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">
|
|
1714
|
+
<div key={tpl.uriTemplate || tpl.name} className="stg:px-3 stg:py-2.5">
|
|
1715
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
1716
|
+
<span className="stg:text-sm stg:font-medium stg:text-foreground">
|
|
1671
1717
|
{tpl.name}
|
|
1672
1718
|
</span>
|
|
1673
|
-
<code className="font-mono text-[10px] text-muted-foreground">
|
|
1719
|
+
<code className="stg:font-mono stg:text-[10px] stg:text-muted-foreground">
|
|
1674
1720
|
{tpl.uriTemplate}
|
|
1675
1721
|
</code>
|
|
1676
1722
|
</div>
|
|
1677
1723
|
{tpl.description && (
|
|
1678
|
-
<p className="mt-0.5 text-xs text-muted-foreground">
|
|
1724
|
+
<p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
|
|
1679
1725
|
{tpl.description}
|
|
1680
1726
|
</p>
|
|
1681
1727
|
)}
|
|
@@ -1752,29 +1798,29 @@ function EnvSection({
|
|
|
1752
1798
|
keyLabel="Variable name"
|
|
1753
1799
|
/>
|
|
1754
1800
|
) : (
|
|
1755
|
-
<div className="flex flex-col divide-y divide-border">
|
|
1801
|
+
<div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
|
|
1756
1802
|
{entries.map(([name, env]) => {
|
|
1757
1803
|
const isOAuthManaged = name === oauthTargetEnvVar;
|
|
1758
1804
|
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">
|
|
1805
|
+
<div key={name} className="stg:flex stg:items-start stg:gap-3 stg:px-3 stg:py-2">
|
|
1806
|
+
<code className="stg:shrink-0 stg:font-mono stg:text-sm stg:font-medium stg:text-foreground">
|
|
1761
1807
|
{name}
|
|
1762
1808
|
</code>
|
|
1763
|
-
<span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
|
|
1809
|
+
<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
1810
|
{env.isSecret ? "secret" : "config"}
|
|
1765
1811
|
</span>
|
|
1766
1812
|
{isOAuthManaged && (
|
|
1767
|
-
<span className="shrink-0 rounded bg-primary-subtle px-1.5 py-0.5 text-[10px] font-medium text-primary">
|
|
1813
|
+
<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
1814
|
oauth
|
|
1769
1815
|
</span>
|
|
1770
1816
|
)}
|
|
1771
1817
|
{env.optional && (
|
|
1772
|
-
<span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground-subtle">
|
|
1818
|
+
<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
1819
|
optional
|
|
1774
1820
|
</span>
|
|
1775
1821
|
)}
|
|
1776
1822
|
{env.description && (
|
|
1777
|
-
<span className="text-xs text-muted-foreground">
|
|
1823
|
+
<span className="stg:text-xs stg:text-muted-foreground">
|
|
1778
1824
|
{env.description}
|
|
1779
1825
|
</span>
|
|
1780
1826
|
)}
|
|
@@ -1820,17 +1866,17 @@ function TagsSection({
|
|
|
1820
1866
|
|
|
1821
1867
|
return (
|
|
1822
1868
|
<Section title="Tags" count={tags.length}>
|
|
1823
|
-
<div className="flex flex-wrap gap-1.5 p-3">
|
|
1869
|
+
<div className="stg:flex stg:flex-wrap stg:gap-1.5 stg:p-3">
|
|
1824
1870
|
{tags.map((tag) => (
|
|
1825
1871
|
<span
|
|
1826
1872
|
key={tag}
|
|
1827
|
-
className="rounded-full bg-muted px-2.5 py-0.5 text-xs font-medium text-muted-foreground"
|
|
1873
|
+
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
1874
|
>
|
|
1829
1875
|
{tag}
|
|
1830
1876
|
</span>
|
|
1831
1877
|
))}
|
|
1832
1878
|
{editable && tags.length === 0 && (
|
|
1833
|
-
<p className="text-xs text-muted-foreground italic">No tags</p>
|
|
1879
|
+
<p className="stg:text-xs stg:text-muted-foreground stg:italic">No tags</p>
|
|
1834
1880
|
)}
|
|
1835
1881
|
</div>
|
|
1836
1882
|
</Section>
|
|
@@ -1843,8 +1889,17 @@ function TagsSection({
|
|
|
1843
1889
|
|
|
1844
1890
|
function ToolsTabContent({
|
|
1845
1891
|
tools,
|
|
1892
|
+
isOAuthStranded,
|
|
1893
|
+
onDiscover,
|
|
1894
|
+
isDiscovering,
|
|
1846
1895
|
}: {
|
|
1847
1896
|
readonly tools: readonly DiscoveredTool[];
|
|
1897
|
+
/** OAuth grant is healthy but discovery never landed — renders the recovery empty state. */
|
|
1898
|
+
readonly isOAuthStranded: boolean;
|
|
1899
|
+
/** Runs tool discovery (the parent's connect handler). */
|
|
1900
|
+
readonly onDiscover: () => void;
|
|
1901
|
+
/** `true` while a discovery attempt is in flight. */
|
|
1902
|
+
readonly isDiscovering: boolean;
|
|
1848
1903
|
}) {
|
|
1849
1904
|
const [search, setSearch] = useState("");
|
|
1850
1905
|
const [expandedTool, setExpandedTool] = useState<string | null>(null);
|
|
@@ -1860,12 +1915,37 @@ function ToolsTabContent({
|
|
|
1860
1915
|
}, [tools, search]);
|
|
1861
1916
|
|
|
1862
1917
|
if (tools.length === 0) {
|
|
1918
|
+
// Two distinct empty states: "never connected" (informational) vs
|
|
1919
|
+
// "signed in but discovery never landed" (stigmer/stigmer#229) — the
|
|
1920
|
+
// latter must carry its own recovery action, because the user already
|
|
1921
|
+
// did the thing the informational copy asks for.
|
|
1863
1922
|
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
|
-
|
|
1923
|
+
<div className="stg:px-3 stg:py-8 stg:text-center">
|
|
1924
|
+
<ConnectIcon className="stg:mx-auto stg:mb-2 stg:size-6 stg:text-muted-foreground-faint" />
|
|
1925
|
+
{isOAuthStranded ? (
|
|
1926
|
+
<>
|
|
1927
|
+
<p className="stg:text-xs stg:text-muted-foreground">
|
|
1928
|
+
Signed in, but tools haven't been discovered yet.
|
|
1929
|
+
</p>
|
|
1930
|
+
<button
|
|
1931
|
+
type="button"
|
|
1932
|
+
onClick={onDiscover}
|
|
1933
|
+
disabled={isDiscovering}
|
|
1934
|
+
className={cn(
|
|
1935
|
+
"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",
|
|
1936
|
+
"stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover",
|
|
1937
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
1938
|
+
)}
|
|
1939
|
+
>
|
|
1940
|
+
{isDiscovering && <Spinner />}
|
|
1941
|
+
{isDiscovering ? "Discovering tools..." : "Discover tools"}
|
|
1942
|
+
</button>
|
|
1943
|
+
</>
|
|
1944
|
+
) : (
|
|
1945
|
+
<p className="stg:text-xs stg:text-muted-foreground">
|
|
1946
|
+
Connect to this MCP server to discover its available tools.
|
|
1947
|
+
</p>
|
|
1948
|
+
)}
|
|
1869
1949
|
</div>
|
|
1870
1950
|
);
|
|
1871
1951
|
}
|
|
@@ -1873,43 +1953,43 @@ function ToolsTabContent({
|
|
|
1873
1953
|
const isFiltered = search.trim().length > 0;
|
|
1874
1954
|
|
|
1875
1955
|
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
|
|
1956
|
+
<div className="stg:flex stg:flex-col">
|
|
1957
|
+
<div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:pb-2">
|
|
1958
|
+
<div className="stg:relative stg:flex-1">
|
|
1959
|
+
<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
1960
|
<input
|
|
1881
1961
|
type="text"
|
|
1882
1962
|
value={search}
|
|
1883
1963
|
onChange={(e) => setSearch(e.target.value)}
|
|
1884
1964
|
placeholder="Search tools…"
|
|
1885
1965
|
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"
|
|
1966
|
+
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
1967
|
/>
|
|
1888
1968
|
{isFiltered && (
|
|
1889
1969
|
<button
|
|
1890
1970
|
type="button"
|
|
1891
1971
|
onClick={() => setSearch("")}
|
|
1892
1972
|
aria-label="Clear search"
|
|
1893
|
-
className="absolute right-2 top-1/2
|
|
1973
|
+
className="stg:absolute stg:right-2 stg:top-1/2 stg:-translate-y-1/2 stg:text-muted-foreground stg:hover:text-foreground"
|
|
1894
1974
|
>
|
|
1895
|
-
<CloseIcon className="size-3" />
|
|
1975
|
+
<CloseIcon className="stg:size-3" />
|
|
1896
1976
|
</button>
|
|
1897
1977
|
)}
|
|
1898
1978
|
</div>
|
|
1899
|
-
<span className="shrink-0 text-[10px] text-muted-foreground">
|
|
1979
|
+
<span className="stg:shrink-0 stg:text-[10px] stg:text-muted-foreground">
|
|
1900
1980
|
{isFiltered ? `${filtered.length} of ${tools.length}` : tools.length}
|
|
1901
1981
|
</span>
|
|
1902
1982
|
</div>
|
|
1903
1983
|
|
|
1904
1984
|
{filtered.length === 0 ? (
|
|
1905
|
-
<div className="px-3 py-6 text-center">
|
|
1906
|
-
<p className="text-xs text-muted-foreground">
|
|
1985
|
+
<div className="stg:px-3 stg:py-6 stg:text-center">
|
|
1986
|
+
<p className="stg:text-xs stg:text-muted-foreground">
|
|
1907
1987
|
No tools matching “{search}”
|
|
1908
1988
|
</p>
|
|
1909
1989
|
</div>
|
|
1910
1990
|
) : (
|
|
1911
|
-
<div className="max-h-96 overflow-y-auto">
|
|
1912
|
-
<div className="flex flex-col divide-y divide-border">
|
|
1991
|
+
<div className="stg:max-h-96 stg:overflow-y-auto">
|
|
1992
|
+
<div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
|
|
1913
1993
|
{filtered.map((tool) => {
|
|
1914
1994
|
const isExpanded = expandedTool === tool.name;
|
|
1915
1995
|
const hasSchema =
|
|
@@ -1923,34 +2003,34 @@ function ToolsTabContent({
|
|
|
1923
2003
|
onClick={() =>
|
|
1924
2004
|
setExpandedTool(isExpanded ? null : tool.name)
|
|
1925
2005
|
}
|
|
1926
|
-
className="flex w-full items-start gap-2 px-3 py-2.5 text-left transition-colors hover:bg-muted-faint"
|
|
2006
|
+
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
2007
|
aria-expanded={isExpanded}
|
|
1928
2008
|
>
|
|
1929
2009
|
<ChevronIcon
|
|
1930
2010
|
className={cn(
|
|
1931
|
-
"mt-0.5 size-3 shrink-0 text-muted-foreground transition-transform",
|
|
1932
|
-
isExpanded && "rotate-90",
|
|
2011
|
+
"stg:mt-0.5 stg:size-3 stg:shrink-0 stg:text-muted-foreground stg:transition-transform",
|
|
2012
|
+
isExpanded && "stg:rotate-90",
|
|
1933
2013
|
)}
|
|
1934
2014
|
/>
|
|
1935
|
-
<div className="min-w-0 flex-1">
|
|
1936
|
-
<code className="font-mono text-sm font-medium text-foreground">
|
|
2015
|
+
<div className="stg:min-w-0 stg:flex-1">
|
|
2016
|
+
<code className="stg:font-mono stg:text-sm stg:font-medium stg:text-foreground">
|
|
1937
2017
|
{tool.name}
|
|
1938
2018
|
</code>
|
|
1939
2019
|
{tool.description && (
|
|
1940
|
-
<p className="mt-0.5 text-xs text-muted-foreground">
|
|
2020
|
+
<p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
|
|
1941
2021
|
{tool.description}
|
|
1942
2022
|
</p>
|
|
1943
2023
|
)}
|
|
1944
2024
|
</div>
|
|
1945
2025
|
{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">
|
|
2026
|
+
<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
2027
|
schema
|
|
1948
2028
|
</span>
|
|
1949
2029
|
)}
|
|
1950
2030
|
</button>
|
|
1951
2031
|
{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">
|
|
2032
|
+
<div className="stg:border-t stg:border-border stg:bg-muted-faint stg:px-3 stg:py-2">
|
|
2033
|
+
<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
2034
|
{JSON.stringify(tool.inputSchema, null, 2)}
|
|
1955
2035
|
</pre>
|
|
1956
2036
|
</div>
|
|
@@ -1969,10 +2049,13 @@ function PoliciesTabContent({
|
|
|
1969
2049
|
pinnedPolicies,
|
|
1970
2050
|
classifiedPolicies,
|
|
1971
2051
|
hasDiscoveredTools,
|
|
2052
|
+
isOAuthStranded,
|
|
1972
2053
|
}: {
|
|
1973
2054
|
readonly pinnedPolicies: readonly ToolApprovalPolicy[];
|
|
1974
2055
|
readonly classifiedPolicies: readonly ToolApprovalPolicy[];
|
|
1975
2056
|
readonly hasDiscoveredTools: boolean;
|
|
2057
|
+
/** OAuth grant is healthy but discovery never landed — adjusts the empty-state copy. */
|
|
2058
|
+
readonly isOAuthStranded: boolean;
|
|
1976
2059
|
}) {
|
|
1977
2060
|
const [search, setSearch] = useState("");
|
|
1978
2061
|
|
|
@@ -2004,64 +2087,66 @@ function PoliciesTabContent({
|
|
|
2004
2087
|
|
|
2005
2088
|
if (!hasAnyPolicies) {
|
|
2006
2089
|
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">
|
|
2090
|
+
<div className="stg:px-3 stg:py-8 stg:text-center">
|
|
2091
|
+
<ShieldIcon className="stg:mx-auto stg:mb-2 stg:size-6 stg:text-muted-foreground-faint" />
|
|
2092
|
+
<p className="stg:text-xs stg:text-muted-foreground">
|
|
2010
2093
|
{hasDiscoveredTools
|
|
2011
2094
|
? "No approval policies yet. Reconnect to reclassify tools."
|
|
2012
|
-
:
|
|
2095
|
+
: isOAuthStranded
|
|
2096
|
+
? "Signed in \u2014 discover tools to auto-classify approval policies."
|
|
2097
|
+
: "Connect to discover tools and auto-classify approval policies."}
|
|
2013
2098
|
</p>
|
|
2014
2099
|
</div>
|
|
2015
2100
|
);
|
|
2016
2101
|
}
|
|
2017
2102
|
|
|
2018
2103
|
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
|
|
2104
|
+
<div className="stg:flex stg:flex-col">
|
|
2105
|
+
<div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:pb-2">
|
|
2106
|
+
<div className="stg:relative stg:flex-1">
|
|
2107
|
+
<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
2108
|
<input
|
|
2024
2109
|
type="text"
|
|
2025
2110
|
value={search}
|
|
2026
2111
|
onChange={(e) => setSearch(e.target.value)}
|
|
2027
2112
|
placeholder="Search policies…"
|
|
2028
2113
|
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"
|
|
2114
|
+
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
2115
|
/>
|
|
2031
2116
|
{isFiltered && (
|
|
2032
2117
|
<button
|
|
2033
2118
|
type="button"
|
|
2034
2119
|
onClick={() => setSearch("")}
|
|
2035
2120
|
aria-label="Clear search"
|
|
2036
|
-
className="absolute right-2 top-1/2
|
|
2121
|
+
className="stg:absolute stg:right-2 stg:top-1/2 stg:-translate-y-1/2 stg:text-muted-foreground stg:hover:text-foreground"
|
|
2037
2122
|
>
|
|
2038
|
-
<CloseIcon className="size-3" />
|
|
2123
|
+
<CloseIcon className="stg:size-3" />
|
|
2039
2124
|
</button>
|
|
2040
2125
|
)}
|
|
2041
2126
|
</div>
|
|
2042
|
-
<span className="shrink-0 text-[10px] text-muted-foreground">
|
|
2127
|
+
<span className="stg:shrink-0 stg:text-[10px] stg:text-muted-foreground">
|
|
2043
2128
|
{isFiltered ? `${filteredTotal} of ${totalCount}` : totalCount}
|
|
2044
2129
|
</span>
|
|
2045
2130
|
</div>
|
|
2046
2131
|
|
|
2047
2132
|
{filteredTotal === 0 ? (
|
|
2048
|
-
<div className="px-3 py-6 text-center">
|
|
2049
|
-
<p className="text-xs text-muted-foreground">
|
|
2133
|
+
<div className="stg:px-3 stg:py-6 stg:text-center">
|
|
2134
|
+
<p className="stg:text-xs stg:text-muted-foreground">
|
|
2050
2135
|
No policies matching “{search}”
|
|
2051
2136
|
</p>
|
|
2052
2137
|
</div>
|
|
2053
2138
|
) : (
|
|
2054
|
-
<div className="max-h-96 overflow-y-auto">
|
|
2139
|
+
<div className="stg:max-h-96 stg:overflow-y-auto">
|
|
2055
2140
|
{filteredPinned.length > 0 && (
|
|
2056
2141
|
<PolicyGroup
|
|
2057
|
-
icon={<PinIcon className="size-3.5" />}
|
|
2142
|
+
icon={<PinIcon className="stg:size-3.5" />}
|
|
2058
2143
|
label="Pinned"
|
|
2059
2144
|
policies={filteredPinned}
|
|
2060
2145
|
/>
|
|
2061
2146
|
)}
|
|
2062
2147
|
{filteredClassified.length > 0 && (
|
|
2063
2148
|
<PolicyGroup
|
|
2064
|
-
icon={<SparklesIcon className="size-3.5" />}
|
|
2149
|
+
icon={<SparklesIcon className="stg:size-3.5" />}
|
|
2065
2150
|
label="Auto-classified"
|
|
2066
2151
|
policies={filteredClassified}
|
|
2067
2152
|
/>
|
|
@@ -2082,30 +2167,30 @@ function PolicyGroup({
|
|
|
2082
2167
|
readonly policies: readonly ToolApprovalPolicy[];
|
|
2083
2168
|
}) {
|
|
2084
2169
|
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">
|
|
2170
|
+
<div className="stg:flex stg:flex-col">
|
|
2171
|
+
<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">
|
|
2172
|
+
<span className="stg:text-muted-foreground">{icon}</span>
|
|
2173
|
+
<span className="stg:text-[10px] stg:font-medium stg:uppercase stg:tracking-wider stg:text-muted-foreground">
|
|
2089
2174
|
{label}
|
|
2090
2175
|
</span>
|
|
2091
|
-
<span className="text-[10px] text-muted-foreground">
|
|
2176
|
+
<span className="stg:text-[10px] stg:text-muted-foreground">
|
|
2092
2177
|
({policies.length})
|
|
2093
2178
|
</span>
|
|
2094
2179
|
</div>
|
|
2095
|
-
<div className="flex flex-col divide-y divide-border">
|
|
2180
|
+
<div className="stg:flex stg:flex-col stg:divide-y stg:divide-border">
|
|
2096
2181
|
{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">
|
|
2182
|
+
<div key={policy.toolName} className="stg:px-3 stg:py-2.5">
|
|
2183
|
+
<div className="stg:flex stg:items-baseline stg:gap-2">
|
|
2184
|
+
<code className="stg:font-mono stg:text-sm stg:font-medium stg:text-foreground">
|
|
2100
2185
|
{policy.toolName}
|
|
2101
2186
|
</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" />
|
|
2187
|
+
<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">
|
|
2188
|
+
<ShieldIcon className="stg:size-2.5" />
|
|
2104
2189
|
requires approval
|
|
2105
2190
|
</span>
|
|
2106
2191
|
</div>
|
|
2107
2192
|
{policy.message && (
|
|
2108
|
-
<p className="mt-0.5 text-xs text-muted-foreground">
|
|
2193
|
+
<p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
|
|
2109
2194
|
{policy.message}
|
|
2110
2195
|
</p>
|
|
2111
2196
|
)}
|
|
@@ -2123,7 +2208,7 @@ function PolicyGroup({
|
|
|
2123
2208
|
|
|
2124
2209
|
function Dot() {
|
|
2125
2210
|
return (
|
|
2126
|
-
<span className="shrink-0" aria-hidden="true">
|
|
2211
|
+
<span className="stg:shrink-0" aria-hidden="true">
|
|
2127
2212
|
{"\u00B7"}
|
|
2128
2213
|
</span>
|
|
2129
2214
|
);
|
|
@@ -2136,23 +2221,23 @@ function Dot() {
|
|
|
2136
2221
|
function LoadingSkeleton({ className }: { readonly className?: string }) {
|
|
2137
2222
|
return (
|
|
2138
2223
|
<div
|
|
2139
|
-
className={cn("flex flex-col gap-6", className)}
|
|
2224
|
+
className={cn("stg:flex stg:flex-col stg:gap-6", className)}
|
|
2140
2225
|
aria-busy="true"
|
|
2141
2226
|
aria-label="Loading MCP server details"
|
|
2142
2227
|
>
|
|
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" />
|
|
2228
|
+
<div className="stg:flex stg:items-start stg:gap-3">
|
|
2229
|
+
<div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
2230
|
+
<div className="stg:flex-1 stg:space-y-2">
|
|
2231
|
+
<div className="stg:h-5 stg:w-48 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
2232
|
+
<div className="stg:h-3 stg:w-64 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
2233
|
+
<div className="stg:h-4 stg:w-full stg:max-w-md stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
2149
2234
|
</div>
|
|
2150
2235
|
</div>
|
|
2151
2236
|
{[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" />
|
|
2237
|
+
<div key={i} className="stg:space-y-2">
|
|
2238
|
+
<div className="stg:h-3 stg:w-28 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
2154
2239
|
<div
|
|
2155
|
-
className="animate-pulse rounded-lg border border-border bg-muted-faint"
|
|
2240
|
+
className="stg:animate-pulse stg:rounded-lg stg:border stg:border-border stg:bg-muted-faint"
|
|
2156
2241
|
style={{ height: `${h * 4}px` }}
|
|
2157
2242
|
/>
|
|
2158
2243
|
</div>
|
|
@@ -2166,15 +2251,15 @@ function NotFoundState({ className }: { readonly className?: string }) {
|
|
|
2166
2251
|
<div
|
|
2167
2252
|
role="status"
|
|
2168
2253
|
className={cn(
|
|
2169
|
-
"flex flex-col items-center gap-2 py-12 text-center",
|
|
2254
|
+
"stg:flex stg:flex-col stg:items-center stg:gap-2 stg:py-12 stg:text-center",
|
|
2170
2255
|
className,
|
|
2171
2256
|
)}
|
|
2172
2257
|
>
|
|
2173
|
-
<McpServerIcon className="size-10 text-muted-foreground-faint" />
|
|
2174
|
-
<p className="text-sm font-medium text-muted-foreground">
|
|
2258
|
+
<McpServerIcon className="stg:size-10 stg:text-muted-foreground-faint" />
|
|
2259
|
+
<p className="stg:text-sm stg:font-medium stg:text-muted-foreground">
|
|
2175
2260
|
MCP Server not found
|
|
2176
2261
|
</p>
|
|
2177
|
-
<p className="text-xs text-muted-foreground-subtle">
|
|
2262
|
+
<p className="stg:text-xs stg:text-muted-foreground-subtle">
|
|
2178
2263
|
This MCP server doesn't exist or you don't have access to it.
|
|
2179
2264
|
</p>
|
|
2180
2265
|
</div>
|
|
@@ -2448,7 +2533,7 @@ function Spinner() {
|
|
|
2448
2533
|
stroke="currentColor"
|
|
2449
2534
|
strokeWidth="2"
|
|
2450
2535
|
strokeLinecap="round"
|
|
2451
|
-
className="animate-spin"
|
|
2536
|
+
className="stg:animate-spin"
|
|
2452
2537
|
aria-hidden="true"
|
|
2453
2538
|
>
|
|
2454
2539
|
<path d="M8 2a6 6 0 1 0 6 6" />
|