@stigmer/react 3.12.1 → 3.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/access/ManageAccessDialog.d.ts.map +1 -1
- package/access/ManageAccessDialog.js +8 -19
- package/access/ManageAccessDialog.js.map +1 -1
- package/activity/format-relative-time.d.ts +11 -9
- package/activity/format-relative-time.d.ts.map +1 -1
- package/activity/format-relative-time.js +11 -9
- package/activity/format-relative-time.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +5 -2
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +6 -5
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +15 -20
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +12 -20
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +3 -23
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +6 -10
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/approval-defaults-context.d.ts +47 -0
- package/approval-defaults-context.d.ts.map +1 -0
- package/approval-defaults-context.js +27 -0
- package/approval-defaults-context.js.map +1 -0
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +8 -23
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/attachment/index.d.ts +2 -0
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +1 -0
- package/attachment/index.js.map +1 -1
- package/attachment/vision-preflight.d.ts +113 -0
- package/attachment/vision-preflight.d.ts.map +1 -0
- package/attachment/vision-preflight.js +143 -0
- package/attachment/vision-preflight.js.map +1 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +3 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +3 -2
- package/billing/BillingSection.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +6 -21
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +10 -21
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +7 -22
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +10 -23
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +10 -23
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/useChannelSessions.d.ts.map +1 -1
- package/channel/useChannelSessions.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +8 -5
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +12 -7
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.d.ts +0 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +5 -10
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +2 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +120 -13
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.d.ts +0 -1
- package/composer/icons.d.ts.map +1 -1
- package/composer/icons.js +0 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationAttentionBanner.d.ts +23 -6
- package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
- package/conversation/ConversationAttentionBanner.js +25 -10
- package/conversation/ConversationAttentionBanner.js.map +1 -1
- package/conversation/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +28 -8
- package/conversation/ConversationListPane.js.map +1 -1
- package/conversation/ConversationsWorkbench.d.ts.map +1 -1
- package/conversation/ConversationsWorkbench.js +1 -1
- package/conversation/ConversationsWorkbench.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +3 -14
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -14
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/environment/CreateEnvironmentForm.d.ts.map +1 -1
- package/environment/CreateEnvironmentForm.js +4 -8
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.d.ts.map +1 -1
- package/environment/EnvVarForm.js +2 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +5 -7
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +13 -3
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ArtifactPreviewModal.d.ts.map +1 -1
- package/execution/ArtifactPreviewModal.js +11 -17
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/ExecutionErrorNotice.d.ts +36 -0
- package/execution/ExecutionErrorNotice.d.ts.map +1 -0
- package/execution/ExecutionErrorNotice.js +39 -0
- package/execution/ExecutionErrorNotice.js.map +1 -0
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +5 -8
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +1 -6
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FollowUpInput.d.ts.map +1 -1
- package/execution/FollowUpInput.js +1 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/LivenessStatusLine.d.ts +40 -0
- package/execution/LivenessStatusLine.d.ts.map +1 -0
- package/execution/LivenessStatusLine.js +34 -0
- package/execution/LivenessStatusLine.js.map +1 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +31 -3
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +25 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -36
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +1 -1
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +9 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +30 -0
- package/execution/TerminalSession.d.ts.map +1 -1
- package/execution/TerminalSession.js +37 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +9 -0
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +16 -0
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts +23 -7
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +120 -35
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts.map +1 -1
- package/execution/ToolRunGroup.js +11 -11
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +5 -20
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/index.d.ts +7 -3
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +4 -2
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +93 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +141 -5
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +32 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +10 -2
- package/execution/tool-presenter.js.map +1 -1
- package/execution/useArtifactInspection.d.ts.map +1 -1
- package/execution/useArtifactInspection.js +4 -7
- package/execution/useArtifactInspection.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -4
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +3 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +7 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -9
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +17 -26
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -4
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +8 -7
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +5 -6
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +1 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/DialogShell.d.ts +77 -0
- package/internal/DialogShell.d.ts.map +1 -0
- package/internal/DialogShell.js +77 -0
- package/internal/DialogShell.js.map +1 -0
- package/internal/SpinnerIcon.d.ts +22 -0
- package/internal/SpinnerIcon.d.ts.map +1 -0
- package/internal/SpinnerIcon.js +23 -0
- package/internal/SpinnerIcon.js.map +1 -0
- package/internal/select-element-text.d.ts +11 -0
- package/internal/select-element-text.d.ts.map +1 -0
- package/internal/select-element-text.js +19 -0
- package/internal/select-element-text.js.map +1 -0
- package/internal/thread-card/ThreadCardShell.d.ts +27 -10
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +11 -5
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.d.ts +11 -2
- package/internal/thread-card/glyphs.d.ts.map +1 -1
- package/internal/thread-card/glyphs.js +9 -3
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/thread-card/index.d.ts +1 -1
- package/internal/thread-card/index.d.ts.map +1 -1
- package/internal/thread-card/index.js.map +1 -1
- package/internal/useCopyFeedback.d.ts +28 -0
- package/internal/useCopyFeedback.d.ts.map +1 -0
- package/internal/useCopyFeedback.js +40 -0
- package/internal/useCopyFeedback.js.map +1 -0
- package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
- package/invitation/InvitationCreatedAlert.js +12 -19
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +14 -21
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +2 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +16 -27
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.d.ts.map +1 -1
- package/manifest/ApplyManifestDialog.js +7 -17
- package/manifest/ApplyManifestDialog.js.map +1 -1
- package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
- package/manifest/EditResourceYamlDialog.js +3 -19
- package/manifest/EditResourceYamlDialog.js.map +1 -1
- package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
- package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
- package/mcp-server/DefinitionDriftNotice.js +52 -0
- package/mcp-server/DefinitionDriftNotice.js.map +1 -0
- package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +8 -20
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +50 -28
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/OAuthAppForm.d.ts.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -4
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +39 -0
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
- package/mcp-server/internal/definitionDrift.js +122 -0
- package/mcp-server/internal/definitionDrift.js.map +1 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
- package/mcp-server/internal/mcpServerToInput.js +3 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +5 -4
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +1 -1
- package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
- package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
- package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
- package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
- package/models/ModelRegistryContext.d.ts +7 -1
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.js +9 -1
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -2
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +88 -6
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +133 -27
- package/models/registry.js.map +1 -1
- package/models/useModelRegistry.d.ts +7 -1
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -5
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +5 -6
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.d.ts.map +1 -1
- package/organization/CreateOrganizationForm.js +5 -9
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +7 -16
- package/organization/OrgProfilePanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +5 -6
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +6 -7
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -4
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +18 -25
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/provider.d.ts +34 -1
- package/provider.d.ts.map +1 -1
- package/provider.js +14 -7
- package/provider.js.map +1 -1
- package/resource-creation/WizardNav.d.ts.map +1 -1
- package/resource-creation/WizardNav.js +2 -4
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-detail/ConfirmDialog.d.ts +2 -3
- package/resource-detail/ConfirmDialog.d.ts.map +1 -1
- package/resource-detail/ConfirmDialog.js +8 -20
- package/resource-detail/ConfirmDialog.js.map +1 -1
- package/resource-detail/useCopyResource.d.ts +4 -3
- package/resource-detail/useCopyResource.d.ts.map +1 -1
- package/resource-detail/useCopyResource.js +10 -19
- package/resource-detail/useCopyResource.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -4
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +6 -7
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +52 -2
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +21 -6
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionViewer.d.ts +63 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +43 -17
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +17 -0
- package/session/audience.d.ts.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/run-config.d.ts +50 -0
- package/session/run-config.d.ts.map +1 -0
- package/session/run-config.js +15 -0
- package/session/run-config.js.map +1 -0
- package/session/useNewSessionFlow.d.ts +11 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +29 -2
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +7 -7
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +18 -4
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +33 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +37 -2
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +44 -10
- package/session/useSessionPanel.js.map +1 -1
- package/settings/ApiKeysSection.d.ts.map +1 -1
- package/settings/ApiKeysSection.js +3 -2
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts.map +1 -1
- package/settings/ChannelAppsSection.js +3 -2
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +5 -3
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.d.ts.map +1 -1
- package/settings/IdentityProvidersSection.js +3 -2
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.d.ts.map +1 -1
- package/settings/InvitationsSection.js +3 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +3 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.d.ts.map +1 -1
- package/settings/OAuthAppsSection.js +3 -2
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.d.ts.map +1 -1
- package/settings/OrgProfileSection.js +3 -2
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +3 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +3 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +19 -26
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/chrome.d.ts +3 -4
- package/sidebar/chrome.d.ts.map +1 -1
- package/sidebar/chrome.js +5 -4
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDiffDialog.d.ts.map +1 -1
- package/skill/SkillDiffDialog.js +5 -21
- package/skill/SkillDiffDialog.js.map +1 -1
- package/src/access/ManageAccessDialog.tsx +14 -28
- package/src/activity/format-relative-time.ts +11 -9
- package/src/agent/steps/CapabilitiesStep.tsx +6 -3
- package/src/agent/steps/IdentityStep.tsx +19 -12
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +29 -33
- package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
- package/src/api-key/ApiKeyListPanel.tsx +3 -39
- package/src/api-key/CreateApiKeyForm.tsx +12 -26
- package/src/approval-defaults-context.ts +56 -0
- package/src/attachment/AttachmentImageLightbox.tsx +13 -36
- package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
- package/src/attachment/index.ts +12 -0
- package/src/attachment/vision-preflight.ts +236 -0
- package/src/billing/AutoRechargeCard.tsx +5 -4
- package/src/billing/BillingSection.tsx +4 -3
- package/src/channel/ChannelConversationsDialog.tsx +14 -29
- package/src/channel/ChannelCredentialsDialog.tsx +19 -29
- package/src/channel/ChannelTemplatesDialog.tsx +16 -31
- package/src/channel/ConnectSlackDialog.tsx +19 -31
- package/src/channel/ConnectWhatsAppDialog.tsx +19 -31
- package/src/channel/useChannelSessions.ts +3 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
- package/src/channel-app/CreateChannelAppForm.tsx +17 -12
- package/src/channel-app/internal.tsx +5 -25
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +160 -13
- package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
- package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
- package/src/composer/icons.tsx +0 -18
- package/src/conversation/ConversationAttentionBanner.tsx +64 -19
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +46 -20
- package/src/conversation/ConversationsWorkbench.tsx +1 -0
- package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
- package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
- package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
- package/src/dashboard/DashboardFailedRuns.tsx +2 -12
- package/src/environment/CreateEnvironmentForm.tsx +8 -27
- package/src/environment/EnvVarForm.tsx +2 -18
- package/src/environment/EnvironmentVariableEditor.tsx +5 -21
- package/src/execution/ApprovalCard.tsx +23 -2
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ArtifactPreviewModal.tsx +15 -27
- package/src/execution/ExecutionErrorNotice.tsx +99 -0
- package/src/execution/FilePathLink.tsx +5 -9
- package/src/execution/FileReviewCard.tsx +1 -20
- package/src/execution/FollowUpInput.tsx +1 -16
- package/src/execution/LivenessStatusLine.tsx +59 -0
- package/src/execution/MessageEntry.tsx +136 -25
- package/src/execution/MessageThread.tsx +84 -83
- package/src/execution/SetupProgress.tsx +5 -1
- package/src/execution/SubAgentSection.tsx +9 -20
- package/src/execution/TerminalSession.tsx +97 -10
- package/src/execution/ToolCallDetail.tsx +19 -0
- package/src/execution/ToolCallItem.tsx +175 -44
- package/src/execution/ToolRunGroup.tsx +30 -32
- package/src/execution/WriteBackCard.tsx +5 -24
- package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
- package/src/execution/__tests__/MessageThread.test.tsx +97 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
- package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
- package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
- package/src/execution/__tests__/intent-title.test.tsx +221 -0
- package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +11 -2
- package/src/execution/tool-categories.ts +195 -9
- package/src/execution/tool-presenter.ts +44 -2
- package/src/execution/useArtifactInspection.ts +4 -8
- package/src/iam-policy/GrantAccessForm.tsx +2 -18
- package/src/iam-policy/OrgMembersPanel.tsx +3 -19
- package/src/iam-policy/RoleSelector.tsx +8 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
- package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
- package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
- package/src/index.ts +26 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/DialogShell.tsx +169 -0
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/DialogShell.test.tsx +223 -0
- package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
- package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
- package/src/internal/select-element-text.ts +17 -0
- package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
- package/src/internal/thread-card/glyphs.tsx +24 -3
- package/src/internal/thread-card/index.ts +1 -0
- package/src/internal/useCopyFeedback.ts +61 -0
- package/src/invitation/InvitationCreatedAlert.tsx +10 -18
- package/src/invitation/InvitationManager.tsx +23 -34
- package/src/invitation/InvitationRedemption.tsx +2 -18
- package/src/library/useExportResource.ts +15 -29
- package/src/manifest/ApplyManifestDialog.tsx +8 -26
- package/src/manifest/EditResourceYamlDialog.tsx +4 -31
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
- package/src/mcp-server/McpServerDetailView.tsx +69 -49
- package/src/mcp-server/OAuthAppForm.tsx +2 -18
- package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
- package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
- package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
- package/src/mcp-server/internal/definitionDrift.ts +158 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
- package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
- package/src/mcp-server/useMcpServerConnect.ts +1 -1
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/models/ModelRegistryContext.ts +7 -1
- package/src/models/ModelSelector.tsx +37 -0
- package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
- package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
- package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
- package/src/models/index.ts +2 -2
- package/src/models/registry.ts +196 -29
- package/src/models/useModelRegistry.ts +10 -2
- package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
- package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
- package/src/organization/CreateOrganizationForm.tsx +10 -29
- package/src/organization/OrgProfilePanel.tsx +13 -44
- package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
- package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
- package/src/platform-client/PlatformClientListPanel.tsx +2 -18
- package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
- package/src/provider.tsx +76 -33
- package/src/resource-creation/WizardNav.tsx +2 -18
- package/src/resource-detail/ConfirmDialog.tsx +9 -30
- package/src/resource-detail/useCopyResource.ts +17 -23
- package/src/schedule/ScheduleDetailView.tsx +2 -18
- package/src/schedule/ScheduleForm.tsx +19 -34
- package/src/session/NewSessionViewer.tsx +85 -7
- package/src/session/SessionViewer.tsx +120 -17
- package/src/session/__tests__/audienceWiring.test.tsx +76 -0
- package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
- package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
- package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
- package/src/session/__tests__/useSessionPanel.test.ts +114 -0
- package/src/session/audience.ts +18 -0
- package/src/session/index.ts +2 -1
- package/src/session/run-config.ts +59 -0
- package/src/session/useNewSessionFlow.ts +39 -2
- package/src/session/useSessionConversation.ts +10 -8
- package/src/session/useSessionPageFlow.ts +51 -10
- package/src/session/useSessionPanel.ts +91 -10
- package/src/settings/ApiKeysSection.tsx +4 -3
- package/src/settings/ChannelAppsSection.tsx +4 -3
- package/src/settings/EnvironmentsSection.tsx +8 -5
- package/src/settings/IdentityProvidersSection.tsx +4 -3
- package/src/settings/InvitationsSection.tsx +4 -2
- package/src/settings/MembersSection.tsx +4 -2
- package/src/settings/OAuthAppsSection.tsx +4 -3
- package/src/settings/OrgProfileSection.tsx +4 -3
- package/src/settings/PlatformClientsSection.tsx +4 -3
- package/src/settings/UsageSection.tsx +4 -2
- package/src/sharing/ShareAgentDialog.tsx +33 -37
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +13 -36
- package/src/styles.css +43 -0
- package/src/version-history/VersionTimelineEntry.tsx +1 -21
- package/src/workflow/FailedRunsWidget.tsx +2 -9
- package/src/workflow/PendingApprovalsWidget.tsx +2 -9
- package/src/workflow/ViewYamlDialog.tsx +21 -55
- package/src/workflow/WorkflowArchitectDialog.tsx +17 -68
- package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
- package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
- package/src/workflow/WorkflowExplainDialog.tsx +18 -60
- package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
- package/src/workflow/WorkflowRefinePanel.tsx +2 -18
- package/src/workflow/WorkflowRepairCard.tsx +2 -18
- package/src/workflow/WorkflowRunDialog.tsx +23 -70
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
- package/src/workflow/WorkflowVersionBadge.tsx +4 -13
- package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
- package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -41
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useWorkflowCanvas.ts +114 -11
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +1 -23
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -11
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -11
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +14 -49
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +10 -33
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +5 -8
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +1 -1
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.d.ts +4 -2
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
- package/workflow/WorkflowCanvasInner.js +7 -3
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +6 -2
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +23 -6
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +10 -28
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
- package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +8 -2
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
- package/workflow/WorkflowRefinePanel.js +2 -4
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.d.ts.map +1 -1
- package/workflow/WorkflowRepairCard.js +2 -4
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +14 -35
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +2 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +4 -13
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +1 -26
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +14 -40
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.d.ts +1 -1
- package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +10 -22
- package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
- package/workflow/useApprovalBoundary.d.ts +1 -1
- package/workflow/useApprovalBoundary.js +1 -1
- package/workflow/useWorkflowCanvas.d.ts +5 -1
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +99 -13
- package/workflow/useWorkflowCanvas.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +46 -13
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { lazy, Suspense, useCallback, useEffect, useRef } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
5
6
|
import { toast } from "../feedback/toast.js";
|
|
6
7
|
import { RedactedSecretsNotice } from "./RedactedSecretsNotice.js";
|
|
7
8
|
import {
|
|
@@ -71,22 +72,10 @@ export function ApplyManifestDialog({
|
|
|
71
72
|
org,
|
|
72
73
|
onApplied,
|
|
73
74
|
}: ApplyManifestDialogProps) {
|
|
74
|
-
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
75
75
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
|
76
76
|
const manifest = useApplyManifest(org);
|
|
77
77
|
const { reset } = manifest;
|
|
78
78
|
|
|
79
|
-
// Sync dialog open state with the native <dialog> element.
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
const dialog = dialogRef.current;
|
|
82
|
-
if (!dialog) return;
|
|
83
|
-
if (open && !dialog.open) {
|
|
84
|
-
dialog.showModal();
|
|
85
|
-
} else if (!open && dialog.open) {
|
|
86
|
-
dialog.close();
|
|
87
|
-
}
|
|
88
|
-
}, [open]);
|
|
89
|
-
|
|
90
79
|
// Start each session clean.
|
|
91
80
|
useEffect(() => {
|
|
92
81
|
if (open) {
|
|
@@ -109,10 +98,11 @@ export function ApplyManifestDialog({
|
|
|
109
98
|
if (applied.length > 0) onApplied?.(applied);
|
|
110
99
|
}, [onOpenChange, manifest.entries, onApplied]);
|
|
111
100
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
101
|
+
// Escape/cancel routes through the same dismiss-after-partial path as the
|
|
102
|
+
// Close button, via the shell's single close-intent callback.
|
|
103
|
+
const handleShellOpenChange = useCallback(
|
|
104
|
+
(nextOpen: boolean) => {
|
|
105
|
+
if (!nextOpen) closeAndMaybeRefresh();
|
|
116
106
|
},
|
|
117
107
|
[closeAndMaybeRefresh],
|
|
118
108
|
);
|
|
@@ -151,15 +141,7 @@ export function ApplyManifestDialog({
|
|
|
151
141
|
!manifest.isApplying;
|
|
152
142
|
|
|
153
143
|
return (
|
|
154
|
-
<
|
|
155
|
-
ref={dialogRef}
|
|
156
|
-
onCancel={handleCancel}
|
|
157
|
-
className={cn(
|
|
158
|
-
"stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
|
|
159
|
-
"stg:backdrop:bg-black/50",
|
|
160
|
-
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
161
|
-
)}
|
|
162
|
-
>
|
|
144
|
+
<DialogShell open={open} onOpenChange={handleShellOpenChange} width="3xl" aria-label="Apply YAML">
|
|
163
145
|
<div className="stg:flex stg:flex-col stg:gap-4 stg:p-6">
|
|
164
146
|
{/* Header */}
|
|
165
147
|
<div className="stg:flex stg:flex-col stg:gap-1">
|
|
@@ -252,7 +234,7 @@ export function ApplyManifestDialog({
|
|
|
252
234
|
</div>
|
|
253
235
|
</div>
|
|
254
236
|
</div>
|
|
255
|
-
</
|
|
237
|
+
</DialogShell>
|
|
256
238
|
);
|
|
257
239
|
}
|
|
258
240
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { lazy, Suspense, useCallback, useEffect
|
|
3
|
+
import { lazy, Suspense, useCallback, useEffect } from "react";
|
|
4
4
|
import type { Message } from "@bufbuild/protobuf";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
6
7
|
import { getUserMessage, type AppliedManifest } from "@stigmer/sdk";
|
|
7
8
|
import { toast } from "../feedback/toast.js";
|
|
8
9
|
import { RedactedSecretsNotice } from "./RedactedSecretsNotice.js";
|
|
@@ -67,34 +68,14 @@ export function EditResourceYamlDialog({
|
|
|
67
68
|
resource,
|
|
68
69
|
onApplied,
|
|
69
70
|
}: EditResourceYamlDialogProps) {
|
|
70
|
-
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
71
71
|
const edit = useEditResourceYaml({ resource });
|
|
72
72
|
const { reset } = edit;
|
|
73
73
|
|
|
74
|
-
// Sync dialog open state with the native <dialog> element.
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
const dialog = dialogRef.current;
|
|
77
|
-
if (!dialog) return;
|
|
78
|
-
if (open && !dialog.open) {
|
|
79
|
-
dialog.showModal();
|
|
80
|
-
} else if (!open && dialog.open) {
|
|
81
|
-
dialog.close();
|
|
82
|
-
}
|
|
83
|
-
}, [open]);
|
|
84
|
-
|
|
85
74
|
// Discard stale edits from a previous session when the dialog opens.
|
|
86
75
|
useEffect(() => {
|
|
87
76
|
if (open) reset();
|
|
88
77
|
}, [open, reset]);
|
|
89
78
|
|
|
90
|
-
const handleCancel = useCallback(
|
|
91
|
-
(e: React.SyntheticEvent) => {
|
|
92
|
-
e.preventDefault();
|
|
93
|
-
onOpenChange(false);
|
|
94
|
-
},
|
|
95
|
-
[onOpenChange],
|
|
96
|
-
);
|
|
97
|
-
|
|
98
79
|
const handleApply = useCallback(async () => {
|
|
99
80
|
try {
|
|
100
81
|
const result = await edit.apply();
|
|
@@ -111,15 +92,7 @@ export function EditResourceYamlDialog({
|
|
|
111
92
|
edit.validation.status === "valid" && edit.isDirty && !edit.isApplying;
|
|
112
93
|
|
|
113
94
|
return (
|
|
114
|
-
<
|
|
115
|
-
ref={dialogRef}
|
|
116
|
-
onCancel={handleCancel}
|
|
117
|
-
className={cn(
|
|
118
|
-
"stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
|
|
119
|
-
"stg:backdrop:bg-black/50",
|
|
120
|
-
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
121
|
-
)}
|
|
122
|
-
>
|
|
95
|
+
<DialogShell open={open} onOpenChange={onOpenChange} width="3xl" aria-label="Edit YAML">
|
|
123
96
|
<div className="stg:flex stg:flex-col stg:gap-4 stg:p-6">
|
|
124
97
|
{/* Header */}
|
|
125
98
|
<div className="stg:flex stg:flex-col stg:gap-1">
|
|
@@ -233,7 +206,7 @@ export function EditResourceYamlDialog({
|
|
|
233
206
|
</div>
|
|
234
207
|
</div>
|
|
235
208
|
</div>
|
|
236
|
-
</
|
|
209
|
+
</DialogShell>
|
|
237
210
|
);
|
|
238
211
|
}
|
|
239
212
|
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import type { McpServerDefinitionDrift } from "./useMcpServerDefinitionDrift.js";
|
|
5
|
+
import type { DriftFieldId } from "./internal/definitionDrift.js";
|
|
6
|
+
|
|
7
|
+
/** Props for {@link DefinitionDriftNotice}. */
|
|
8
|
+
export interface DefinitionDriftNoticeProps {
|
|
9
|
+
/**
|
|
10
|
+
* The detected drift from {@link useMcpServerDefinitionDrift}, or
|
|
11
|
+
* `null`. The notice renders `null` when there is no drift.
|
|
12
|
+
*/
|
|
13
|
+
readonly drift: McpServerDefinitionDrift | null;
|
|
14
|
+
/** Applies the marketplace configuration and re-runs discovery. */
|
|
15
|
+
readonly onRefresh: () => void;
|
|
16
|
+
/** `true` while the refresh (update + re-discovery) is in flight. */
|
|
17
|
+
readonly isRefreshing: boolean;
|
|
18
|
+
/** Additional CSS class names for the root container. */
|
|
19
|
+
readonly className?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Human-readable labels for the drifted field groups. */
|
|
23
|
+
const DRIFT_FIELD_LABELS: Record<DriftFieldId, string> = {
|
|
24
|
+
transport: "connection type",
|
|
25
|
+
endpoint: "endpoint URL",
|
|
26
|
+
headers: "request headers",
|
|
27
|
+
queryParams: "query parameters",
|
|
28
|
+
timeout: "request timeout",
|
|
29
|
+
command: "launch command",
|
|
30
|
+
workingDirectory: "working directory",
|
|
31
|
+
environmentVariables: "environment variables",
|
|
32
|
+
authentication: "authentication",
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Tells the owner of an org-owned MCP server that its connection-defining
|
|
37
|
+
* configuration differs from the current marketplace definition, and
|
|
38
|
+
* offers a one-click refresh (stigmer/stigmer#228).
|
|
39
|
+
*
|
|
40
|
+
* Without this notice, a server copied before a template fix is stranded
|
|
41
|
+
* forever: the user sees only downstream symptoms ("Token expired", 401s)
|
|
42
|
+
* with no indication that the root cause is a stale definition and no
|
|
43
|
+
* recovery path short of hand-editing YAML. This surfaces the actual
|
|
44
|
+
* state and pairs it with the action that fixes it (Nielsen: visibility
|
|
45
|
+
* of system status; error recovery).
|
|
46
|
+
*
|
|
47
|
+
* The copy says the configuration **differs** — never "was updated" —
|
|
48
|
+
* because the marketplace counterpart is matched by slug, and a
|
|
49
|
+
* hand-made server that happens to share a marketplace name must not be
|
|
50
|
+
* told a false history. Naming the differing fields keeps the claim
|
|
51
|
+
* verifiable, and the refresh explicitly promises what it preserves.
|
|
52
|
+
*
|
|
53
|
+
* Self-gating: renders `null` unless drift was detected. Callers render
|
|
54
|
+
* it unconditionally next to the other connection notices, mirroring
|
|
55
|
+
* {@link OAuthRequiredNotice}.
|
|
56
|
+
*
|
|
57
|
+
* All visual properties flow through `--stgm-*` design tokens. No
|
|
58
|
+
* Console-specific dependencies — safe for platform-builder embedding.
|
|
59
|
+
*/
|
|
60
|
+
export function DefinitionDriftNotice({
|
|
61
|
+
drift,
|
|
62
|
+
onRefresh,
|
|
63
|
+
isRefreshing,
|
|
64
|
+
className,
|
|
65
|
+
}: DefinitionDriftNoticeProps) {
|
|
66
|
+
if (!drift) return null;
|
|
67
|
+
|
|
68
|
+
const fieldList = drift.changedFields
|
|
69
|
+
.map((id) => DRIFT_FIELD_LABELS[id])
|
|
70
|
+
.join(", ");
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<div
|
|
74
|
+
role="status"
|
|
75
|
+
className={cn(
|
|
76
|
+
"stg:bg-muted-subtle stg:text-muted-foreground stg:flex stg:items-start stg:gap-2.5 stg:rounded-lg stg:border stg:border-transparent stg:px-4 stg:py-3",
|
|
77
|
+
className,
|
|
78
|
+
)}
|
|
79
|
+
>
|
|
80
|
+
<RefreshIcon className="stg:mt-0.5 stg:size-4 stg:shrink-0" />
|
|
81
|
+
<div className="stg:flex-1">
|
|
82
|
+
<p className="stg:text-xs stg:leading-relaxed">
|
|
83
|
+
This server's configuration differs from the current
|
|
84
|
+
marketplace definition ({fieldList}). Refreshing applies the
|
|
85
|
+
marketplace configuration and re-runs discovery — your enabled
|
|
86
|
+
tools and approval pins are kept.
|
|
87
|
+
</p>
|
|
88
|
+
<button
|
|
89
|
+
type="button"
|
|
90
|
+
onClick={onRefresh}
|
|
91
|
+
disabled={isRefreshing}
|
|
92
|
+
data-cursor-target="definition-drift-refresh"
|
|
93
|
+
className="stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover stg:mt-2 stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-[11px] stg:font-medium stg:disabled:opacity-60"
|
|
94
|
+
>
|
|
95
|
+
{isRefreshing ? "Refreshing…" : "Refresh configuration"}
|
|
96
|
+
</button>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function RefreshIcon({ className }: { readonly className?: string }) {
|
|
103
|
+
return (
|
|
104
|
+
<svg
|
|
105
|
+
width="16"
|
|
106
|
+
height="16"
|
|
107
|
+
viewBox="0 0 16 16"
|
|
108
|
+
fill="none"
|
|
109
|
+
stroke="currentColor"
|
|
110
|
+
strokeWidth="1.5"
|
|
111
|
+
strokeLinecap="round"
|
|
112
|
+
strokeLinejoin="round"
|
|
113
|
+
className={className}
|
|
114
|
+
aria-hidden="true"
|
|
115
|
+
>
|
|
116
|
+
<path d="M13.5 8a5.5 5.5 0 1 1-1.61-3.89" />
|
|
117
|
+
<path d="M13.5 2v3h-3" />
|
|
118
|
+
</svg>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect,
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
5
6
|
import type { EnvVarInput } from "@stigmer/sdk";
|
|
6
7
|
import { useMcpServer } from "./useMcpServer.js";
|
|
7
8
|
import { useMcpServerCredentials } from "./useMcpServerCredentials.js";
|
|
@@ -88,29 +89,11 @@ export function McpServerConnectDialog({
|
|
|
88
89
|
onOpenDetails,
|
|
89
90
|
className,
|
|
90
91
|
}: McpServerConnectDialogProps) {
|
|
91
|
-
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
92
92
|
const resolvedOrg = activeOrg || org;
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (open && !dialog.open) {
|
|
99
|
-
dialog.showModal();
|
|
100
|
-
} else if (!open && dialog.open) {
|
|
101
|
-
dialog.close();
|
|
102
|
-
}
|
|
103
|
-
}, [open]);
|
|
104
|
-
|
|
105
|
-
const handleDialogClose = useCallback(() => {
|
|
106
|
-
onClose();
|
|
107
|
-
}, [onClose]);
|
|
108
|
-
|
|
109
|
-
const handleBackdropClick = useCallback(
|
|
110
|
-
(e: React.MouseEvent<HTMLDialogElement>) => {
|
|
111
|
-
if (e.target === dialogRef.current) {
|
|
112
|
-
onClose();
|
|
113
|
-
}
|
|
94
|
+
const handleOpenChange = useCallback(
|
|
95
|
+
(nextOpen: boolean) => {
|
|
96
|
+
if (!nextOpen) onClose();
|
|
114
97
|
},
|
|
115
98
|
[onClose],
|
|
116
99
|
);
|
|
@@ -118,15 +101,18 @@ export function McpServerConnectDialog({
|
|
|
118
101
|
if (!open) return null;
|
|
119
102
|
|
|
120
103
|
return (
|
|
121
|
-
<
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
104
|
+
<DialogShell
|
|
105
|
+
open
|
|
106
|
+
onOpenChange={handleOpenChange}
|
|
107
|
+
width="md"
|
|
108
|
+
dismissOnBackdrop
|
|
109
|
+
// Card surface + visible overflow are deliberate: the connect form
|
|
110
|
+
// hosts popovers that extend past the dialog bounds.
|
|
125
111
|
className={cn(
|
|
126
|
-
"stg:
|
|
127
|
-
"stg:backdrop:bg-black/50",
|
|
112
|
+
"stg:max-h-[85vh] stg:overflow-visible stg:bg-card stg:text-foreground",
|
|
128
113
|
className,
|
|
129
114
|
)}
|
|
115
|
+
aria-label={`Connect ${slug}`}
|
|
130
116
|
>
|
|
131
117
|
<div
|
|
132
118
|
className="stg:flex stg:max-h-[85vh] stg:flex-col stg:overflow-y-auto stg:p-6"
|
|
@@ -141,7 +127,7 @@ export function McpServerConnectDialog({
|
|
|
141
127
|
onOpenDetails={onOpenDetails}
|
|
142
128
|
/>
|
|
143
129
|
</div>
|
|
144
|
-
</
|
|
130
|
+
</DialogShell>
|
|
145
131
|
);
|
|
146
132
|
}
|
|
147
133
|
|
|
@@ -27,12 +27,16 @@ import type { OAuthConnectPhase } from "./useMcpServerOAuthConnect.js";
|
|
|
27
27
|
import { StdioSandboxNotice } from "./StdioSandboxNotice.js";
|
|
28
28
|
import { OAuthRequiredNotice } from "./OAuthRequiredNotice.js";
|
|
29
29
|
import { VendorApprovalBlockedNotice } from "./VendorApprovalBlockedNotice.js";
|
|
30
|
+
import { DefinitionDriftNotice } from "./DefinitionDriftNotice.js";
|
|
31
|
+
import { useMcpServerDefinitionDrift } from "./useMcpServerDefinitionDrift.js";
|
|
32
|
+
import { buildRefreshInput } from "./internal/definitionDrift.js";
|
|
30
33
|
import { useDisconnectOAuth } from "./useDisconnectOAuth.js";
|
|
31
34
|
import { useOrgOAuthApp } from "./useOrgOAuthApp.js";
|
|
32
35
|
import { OAuthAppForm } from "./OAuthAppForm.js";
|
|
33
36
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
34
37
|
import { ErrorMessage } from "../error/ErrorMessage.js";
|
|
35
38
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
39
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
36
40
|
import { EnvVarForm } from "../environment/EnvVarForm.js";
|
|
37
41
|
import type { EnvVarFormVariable } from "../environment/EnvVarForm.js";
|
|
38
42
|
import { VisibilityBadge } from "../library/VisibilitySelector.js";
|
|
@@ -226,6 +230,50 @@ export function McpServerDetailView({
|
|
|
226
230
|
const credentials = useMcpServerCredentials(activeOrg ?? org, mcpServer ?? null);
|
|
227
231
|
const connection = useMcpServerConnect();
|
|
228
232
|
const oauth = useMcpServerOAuthConnect();
|
|
233
|
+
|
|
234
|
+
// Definition drift is only checked for editable servers: the paired
|
|
235
|
+
// refresh writes to the resource, so read-only viewers (e.g. anyone
|
|
236
|
+
// browsing another org's marketplace row) have nothing to act on.
|
|
237
|
+
const { drift: definitionDrift } = useMcpServerDefinitionDrift(
|
|
238
|
+
editable ? (mcpServer ?? null) : null,
|
|
239
|
+
);
|
|
240
|
+
const [isRefreshingDefinition, setIsRefreshingDefinition] = useState(false);
|
|
241
|
+
const handleDefinitionRefresh = useCallback(async () => {
|
|
242
|
+
if (!mcpServer?.metadata?.id || !definitionDrift) return;
|
|
243
|
+
setIsRefreshingDefinition(true);
|
|
244
|
+
try {
|
|
245
|
+
const updated = await updateMcpServer(
|
|
246
|
+
buildRefreshInput(mcpServer, definitionDrift.template),
|
|
247
|
+
);
|
|
248
|
+
onResourceUpdated?.(updated);
|
|
249
|
+
// The update RPC does not re-run discovery (only apply does), so
|
|
250
|
+
// reconnect explicitly — the refreshed transport/auth configuration
|
|
251
|
+
// is exactly what discovery needs to be retried against.
|
|
252
|
+
const envKeys = Object.keys(updated.spec?.env ?? {});
|
|
253
|
+
await connection.connect(
|
|
254
|
+
updated.metadata!.id,
|
|
255
|
+
activeOrg ?? org,
|
|
256
|
+
undefined,
|
|
257
|
+
envKeys,
|
|
258
|
+
);
|
|
259
|
+
} catch {
|
|
260
|
+
// Update errors surface through useUpdateMcpServer's error state;
|
|
261
|
+
// a failed re-discovery lands in connection.error next to the
|
|
262
|
+
// Connect button. Either way the page stays usable.
|
|
263
|
+
} finally {
|
|
264
|
+
setIsRefreshingDefinition(false);
|
|
265
|
+
refetch();
|
|
266
|
+
}
|
|
267
|
+
}, [
|
|
268
|
+
mcpServer,
|
|
269
|
+
definitionDrift,
|
|
270
|
+
updateMcpServer,
|
|
271
|
+
onResourceUpdated,
|
|
272
|
+
connection,
|
|
273
|
+
activeOrg,
|
|
274
|
+
org,
|
|
275
|
+
refetch,
|
|
276
|
+
]);
|
|
229
277
|
const disconnectOAuth = useDisconnectOAuth();
|
|
230
278
|
const orgOAuthApp = useOrgOAuthApp(
|
|
231
279
|
mcpServer?.metadata?.id ?? null,
|
|
@@ -235,7 +283,6 @@ export function McpServerDetailView({
|
|
|
235
283
|
const [showCredentialForm, setShowCredentialForm] = useState(defaultShowCredentialForm);
|
|
236
284
|
const [showByoaForm, setShowByoaForm] = useState(false);
|
|
237
285
|
const [capabilityTab, setCapabilityTab] = useState<CapabilityTab>(defaultCapabilityTab);
|
|
238
|
-
const byoaDialogRef = useRef<HTMLDialogElement>(null);
|
|
239
286
|
|
|
240
287
|
const onResourceLoadRef = useRef(onResourceLoad);
|
|
241
288
|
onResourceLoadRef.current = onResourceLoad;
|
|
@@ -341,20 +388,9 @@ export function McpServerDetailView({
|
|
|
341
388
|
}
|
|
342
389
|
}, [mcpServer, disconnectOAuth, credentials, refetch, activeOrg, org]);
|
|
343
390
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
if (!dialog) return;
|
|
348
|
-
if (showByoaForm && !dialog.open) {
|
|
349
|
-
dialog.showModal();
|
|
350
|
-
} else if (!showByoaForm && dialog.open) {
|
|
351
|
-
dialog.close();
|
|
352
|
-
}
|
|
353
|
-
}, [showByoaForm]);
|
|
354
|
-
|
|
355
|
-
const handleByoaDialogCancel = useCallback(
|
|
356
|
-
(e: React.SyntheticEvent) => {
|
|
357
|
-
e.preventDefault();
|
|
391
|
+
const handleByoaOpenChange = useCallback(
|
|
392
|
+
(nextOpen: boolean) => {
|
|
393
|
+
if (nextOpen) return;
|
|
358
394
|
setShowByoaForm(false);
|
|
359
395
|
orgOAuthApp.clearErrors();
|
|
360
396
|
},
|
|
@@ -588,6 +624,12 @@ export function McpServerDetailView({
|
|
|
588
624
|
{/* scrollTarget: guided tours/demos bring the connect flow into view
|
|
589
625
|
(see IdentityTransportStep's "mcp-transport" for the convention). */}
|
|
590
626
|
<Section title="Connection" scrollTarget="mcp-connection">
|
|
627
|
+
<DefinitionDriftNotice
|
|
628
|
+
drift={definitionDrift}
|
|
629
|
+
onRefresh={handleDefinitionRefresh}
|
|
630
|
+
isRefreshing={isRefreshingDefinition}
|
|
631
|
+
className="stg:mb-3"
|
|
632
|
+
/>
|
|
591
633
|
<StdioSandboxNotice serverType={spec?.serverType} className="stg:mb-3" />
|
|
592
634
|
<OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="stg:mb-3" />
|
|
593
635
|
<ConnectBar
|
|
@@ -653,14 +695,13 @@ export function McpServerDetailView({
|
|
|
653
695
|
)}
|
|
654
696
|
</Section>
|
|
655
697
|
|
|
656
|
-
{/* BYOA dialog
|
|
657
|
-
<
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
)}
|
|
698
|
+
{/* BYOA dialog */}
|
|
699
|
+
<DialogShell
|
|
700
|
+
open={showByoaForm}
|
|
701
|
+
onOpenChange={handleByoaOpenChange}
|
|
702
|
+
width="md"
|
|
703
|
+
className="stg:p-6"
|
|
704
|
+
aria-label="Use your own OAuth app"
|
|
664
705
|
>
|
|
665
706
|
<h3 className="stg:mb-4 stg:text-base stg:font-semibold stg:text-foreground">
|
|
666
707
|
Use your own OAuth app
|
|
@@ -676,7 +717,7 @@ export function McpServerDetailView({
|
|
|
676
717
|
isSubmitting={orgOAuthApp.isSetting}
|
|
677
718
|
error={orgOAuthApp.setError}
|
|
678
719
|
/>
|
|
679
|
-
</
|
|
720
|
+
</DialogShell>
|
|
680
721
|
|
|
681
722
|
<Section title="Capabilities" scrollTarget="mcp-capabilities">
|
|
682
723
|
<Tabs
|
|
@@ -710,7 +751,7 @@ export function McpServerDetailView({
|
|
|
710
751
|
</Section>
|
|
711
752
|
|
|
712
753
|
{(editable || (spec && spec.tags.length > 0)) && (
|
|
713
|
-
<TagsSection tags={spec?.tags ?? []} editable={editable}
|
|
754
|
+
<TagsSection tags={spec?.tags ?? []} editable={editable} />
|
|
714
755
|
)}
|
|
715
756
|
</ResourceDetailShell>
|
|
716
757
|
{access.dialog}
|
|
@@ -1836,34 +1877,13 @@ function EnvSection({
|
|
|
1836
1877
|
function TagsSection({
|
|
1837
1878
|
tags,
|
|
1838
1879
|
editable,
|
|
1839
|
-
isSaving,
|
|
1840
|
-
saveMcpField,
|
|
1841
1880
|
}: {
|
|
1842
1881
|
readonly tags: readonly string[];
|
|
1843
1882
|
readonly editable?: boolean;
|
|
1844
|
-
readonly isSaving?: boolean;
|
|
1845
|
-
readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
|
|
1846
|
-
field: K,
|
|
1847
|
-
value: import("@stigmer/sdk").McpServerInput[K],
|
|
1848
|
-
) => Promise<boolean>;
|
|
1849
1883
|
}) {
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
);
|
|
1854
|
-
|
|
1855
|
-
const handleTagsSave = useCallback(
|
|
1856
|
-
async (rows: KeyValueRow[]) => {
|
|
1857
|
-
if (!saveMcpField) return false;
|
|
1858
|
-
// Tags are stored as string[] on the spec but not directly on McpServerInput.
|
|
1859
|
-
// For now, save them through the full input by modifying the spec.
|
|
1860
|
-
// Tags don't have a direct field on McpServerInput, so we handle this at
|
|
1861
|
-
// a higher level if needed. For now, show read-only in edit mode.
|
|
1862
|
-
return false;
|
|
1863
|
-
},
|
|
1864
|
-
[saveMcpField],
|
|
1865
|
-
);
|
|
1866
|
-
|
|
1884
|
+
// Display-only by design: tags are curated marketplace categorization,
|
|
1885
|
+
// not per-connection state. (McpServerInput does carry `tags`, so an
|
|
1886
|
+
// editing affordance is unblocked if the product ever wants one.)
|
|
1867
1887
|
return (
|
|
1868
1888
|
<Section title="Tags" count={tags.length}>
|
|
1869
1889
|
<div className="stg:flex stg:flex-wrap stg:gap-1.5 stg:p-3">
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
6
7
|
|
|
7
8
|
/** Props for {@link OAuthAppForm}. */
|
|
8
9
|
export interface OAuthAppFormProps {
|
|
@@ -214,7 +215,7 @@ export function OAuthAppForm({
|
|
|
214
215
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
215
216
|
)}
|
|
216
217
|
>
|
|
217
|
-
{isSubmitting && <SpinnerIcon />}
|
|
218
|
+
{isSubmitting && <SpinnerIcon size={12} />}
|
|
218
219
|
Save
|
|
219
220
|
</button>
|
|
220
221
|
</div>
|
|
@@ -285,20 +286,3 @@ function EyeOffIcon() {
|
|
|
285
286
|
);
|
|
286
287
|
}
|
|
287
288
|
|
|
288
|
-
function SpinnerIcon() {
|
|
289
|
-
return (
|
|
290
|
-
<svg
|
|
291
|
-
width="12"
|
|
292
|
-
height="12"
|
|
293
|
-
viewBox="0 0 16 16"
|
|
294
|
-
fill="none"
|
|
295
|
-
stroke="currentColor"
|
|
296
|
-
strokeWidth="2"
|
|
297
|
-
strokeLinecap="round"
|
|
298
|
-
className="stg:animate-spin"
|
|
299
|
-
aria-hidden="true"
|
|
300
|
-
>
|
|
301
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
302
|
-
</svg>
|
|
303
|
-
);
|
|
304
|
-
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
2
|
+
import { render, screen, cleanup } from "@testing-library/react";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { samples } from "../../test/samples";
|
|
5
|
+
import { DefinitionDriftNotice } from "../DefinitionDriftNotice";
|
|
6
|
+
import type { McpServerDefinitionDrift } from "../useMcpServerDefinitionDrift";
|
|
7
|
+
|
|
8
|
+
afterEach(cleanup);
|
|
9
|
+
|
|
10
|
+
function drift(): McpServerDefinitionDrift {
|
|
11
|
+
return {
|
|
12
|
+
template: samples.mcpServer({ name: "Monday", org: "stigmer", slug: "monday" }),
|
|
13
|
+
changedFields: ["headers", "authentication"],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe("DefinitionDriftNotice", () => {
|
|
18
|
+
it("renders null when there is no drift", () => {
|
|
19
|
+
const { container } = render(
|
|
20
|
+
<DefinitionDriftNotice drift={null} onRefresh={() => {}} isRefreshing={false} />,
|
|
21
|
+
);
|
|
22
|
+
expect(container.firstChild).toBeNull();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("says the configuration DIFFERS (never 'was updated') and names the fields", () => {
|
|
26
|
+
render(
|
|
27
|
+
<DefinitionDriftNotice drift={drift()} onRefresh={() => {}} isRefreshing={false} />,
|
|
28
|
+
);
|
|
29
|
+
const notice = screen.getByRole("status");
|
|
30
|
+
// Honest copy: slug-matching is a heuristic, so the notice must state
|
|
31
|
+
// a verifiable present-tense fact, not invent an update history.
|
|
32
|
+
expect(notice.textContent).toContain("differs from the current marketplace definition");
|
|
33
|
+
expect(notice.textContent).not.toContain("was updated");
|
|
34
|
+
expect(notice.textContent).toContain("request headers, authentication");
|
|
35
|
+
// The refresh promise: what survives.
|
|
36
|
+
expect(notice.textContent).toContain("enabled tools and approval pins are kept");
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("fires onRefresh from the action button", async () => {
|
|
40
|
+
const onRefresh = vi.fn();
|
|
41
|
+
render(
|
|
42
|
+
<DefinitionDriftNotice drift={drift()} onRefresh={onRefresh} isRefreshing={false} />,
|
|
43
|
+
);
|
|
44
|
+
await userEvent.click(screen.getByRole("button", { name: "Refresh configuration" }));
|
|
45
|
+
expect(onRefresh).toHaveBeenCalledTimes(1);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("disables the button and shows progress while refreshing", () => {
|
|
49
|
+
render(
|
|
50
|
+
<DefinitionDriftNotice drift={drift()} onRefresh={() => {}} isRefreshing />,
|
|
51
|
+
);
|
|
52
|
+
const button = screen.getByRole<HTMLButtonElement>("button", {
|
|
53
|
+
name: "Refreshing…",
|
|
54
|
+
});
|
|
55
|
+
expect(button.disabled).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
});
|