@stigmer/react 3.12.1 → 3.12.2
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 +7 -2
- 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 +10 -2
- 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/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 +5 -4
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +9 -4
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +5 -4
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +9 -4
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +9 -4
- 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/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +3 -2
- package/conversation/ConversationListPane.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/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.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 +20 -6
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +102 -29
- 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 +6 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +3 -1
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +42 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +38 -4
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +17 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +4 -1
- 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/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.js +1 -1
- package/manifest/EditResourceYamlDialog.js +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.js +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +47 -14
- 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.js +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 +18 -7
- 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.js +1 -1
- package/src/access/ManageAccessDialog.tsx +10 -4
- 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 +17 -8
- 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/__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 +8 -4
- package/src/channel/ChannelCredentialsDialog.tsx +14 -4
- package/src/channel/ChannelTemplatesDialog.tsx +8 -4
- package/src/channel/ConnectSlackDialog.tsx +14 -4
- package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
- 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/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +4 -3
- 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/ArtifactApplyButton.tsx +2 -17
- 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 +157 -37
- 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__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +8 -2
- package/src/execution/tool-categories.ts +72 -8
- package/src/execution/tool-presenter.ts +22 -1
- 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 +23 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/SpinnerIcon.tsx +42 -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 +1 -1
- package/src/manifest/EditResourceYamlDialog.tsx +1 -1
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +1 -1
- package/src/mcp-server/McpServerDetailView.tsx +58 -26
- 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 +1 -1
- 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 +28 -10
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +1 -1
- 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 +7 -22
- package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
- 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 +8 -24
- 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 +3 -23
- 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 +7 -11
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +1 -1
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- 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 +7 -23
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +7 -11
- 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 +6 -8
- package/workflow/WorkflowExplainDialog.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 +2 -7
- 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 +7 -15
- 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.js +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.js +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
|
@@ -7,6 +7,7 @@ import type { Invitation } from "@stigmer/protos/ai/stigmer/iam/invitation/v1/ap
|
|
|
7
7
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
8
8
|
import { useInvitationPreview } from "./useInvitationPreview.js";
|
|
9
9
|
import { useRedeemInvitation } from "./useRedeemInvitation.js";
|
|
10
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
10
11
|
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
13
|
// Public API
|
|
@@ -261,7 +262,7 @@ export function InvitationRedemption({
|
|
|
261
262
|
"stg:transition-colors",
|
|
262
263
|
)}
|
|
263
264
|
>
|
|
264
|
-
{isRedeeming && <SpinnerIcon />}
|
|
265
|
+
{isRedeeming && <SpinnerIcon size={14} />}
|
|
265
266
|
{isRedeeming ? "Accepting\u2026" : "Accept Invitation"}
|
|
266
267
|
</button>
|
|
267
268
|
{redeemError && (
|
|
@@ -442,20 +443,3 @@ function SuccessIcon() {
|
|
|
442
443
|
);
|
|
443
444
|
}
|
|
444
445
|
|
|
445
|
-
function SpinnerIcon() {
|
|
446
|
-
return (
|
|
447
|
-
<svg
|
|
448
|
-
width="14"
|
|
449
|
-
height="14"
|
|
450
|
-
viewBox="0 0 16 16"
|
|
451
|
-
fill="none"
|
|
452
|
-
stroke="currentColor"
|
|
453
|
-
strokeWidth="2"
|
|
454
|
-
strokeLinecap="round"
|
|
455
|
-
className="stg:animate-spin"
|
|
456
|
-
aria-hidden="true"
|
|
457
|
-
>
|
|
458
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
459
|
-
</svg>
|
|
460
|
-
);
|
|
461
|
-
}
|
|
@@ -8,6 +8,7 @@ import type { Schedule } from "@stigmer/protos/ai/stigmer/agentic/schedule/v1/ap
|
|
|
8
8
|
import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
|
|
9
9
|
import { serializeManifest } from "@stigmer/sdk";
|
|
10
10
|
import { toast } from "../feedback/toast.js";
|
|
11
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
11
12
|
import { serializeWorkflowYaml } from "../workflow/serialize-workflow-yaml.js";
|
|
12
13
|
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
@@ -98,17 +99,25 @@ export function useExportResource({
|
|
|
98
99
|
return resource.metadata?.slug || resource.metadata?.name || "resource";
|
|
99
100
|
}, [resource]);
|
|
100
101
|
|
|
102
|
+
const { copy: copyText } = useCopyFeedback();
|
|
103
|
+
|
|
101
104
|
const copyYaml = useCallback(async () => {
|
|
102
105
|
if (!yaml) return;
|
|
103
|
-
await
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
if (await copyText(yaml)) {
|
|
107
|
+
toast.success("YAML copied to clipboard");
|
|
108
|
+
} else {
|
|
109
|
+
toast.error("Couldn't copy YAML");
|
|
110
|
+
}
|
|
111
|
+
}, [copyText, yaml]);
|
|
106
112
|
|
|
107
113
|
const copyJson = useCallback(async () => {
|
|
108
114
|
if (!json) return;
|
|
109
|
-
await
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
if (await copyText(json)) {
|
|
116
|
+
toast.success("JSON copied to clipboard");
|
|
117
|
+
} else {
|
|
118
|
+
toast.error("Couldn't copy JSON");
|
|
119
|
+
}
|
|
120
|
+
}, [copyText, json]);
|
|
112
121
|
|
|
113
122
|
const downloadYaml = useCallback(() => {
|
|
114
123
|
if (!yaml) return;
|
|
@@ -126,29 +135,6 @@ export function useExportResource({
|
|
|
126
135
|
);
|
|
127
136
|
}
|
|
128
137
|
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
// Clipboard
|
|
131
|
-
// ---------------------------------------------------------------------------
|
|
132
|
-
|
|
133
|
-
async function copyToClipboard(text: string): Promise<void> {
|
|
134
|
-
try {
|
|
135
|
-
await navigator.clipboard.writeText(text);
|
|
136
|
-
} catch {
|
|
137
|
-
fallbackCopy(text);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function fallbackCopy(text: string): void {
|
|
142
|
-
const textarea = document.createElement("textarea");
|
|
143
|
-
textarea.value = text;
|
|
144
|
-
textarea.style.position = "fixed";
|
|
145
|
-
textarea.style.opacity = "0";
|
|
146
|
-
document.body.appendChild(textarea);
|
|
147
|
-
textarea.select();
|
|
148
|
-
document.execCommand("copy");
|
|
149
|
-
document.body.removeChild(textarea);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
138
|
// ---------------------------------------------------------------------------
|
|
153
139
|
// File download
|
|
154
140
|
// ---------------------------------------------------------------------------
|
|
@@ -156,7 +156,7 @@ export function ApplyManifestDialog({
|
|
|
156
156
|
onCancel={handleCancel}
|
|
157
157
|
className={cn(
|
|
158
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-
|
|
159
|
+
"stg:backdrop:bg-backdrop",
|
|
160
160
|
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
161
161
|
)}
|
|
162
162
|
>
|
|
@@ -116,7 +116,7 @@ export function EditResourceYamlDialog({
|
|
|
116
116
|
onCancel={handleCancel}
|
|
117
117
|
className={cn(
|
|
118
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-
|
|
119
|
+
"stg:backdrop:bg-backdrop",
|
|
120
120
|
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
121
121
|
)}
|
|
122
122
|
>
|
|
@@ -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
|
+
}
|
|
@@ -124,7 +124,7 @@ export function McpServerConnectDialog({
|
|
|
124
124
|
onClick={handleBackdropClick}
|
|
125
125
|
className={cn(
|
|
126
126
|
"stg:m-auto stg:max-h-[85vh] stg:w-full stg:max-w-md stg:overflow-visible stg:rounded-lg stg:border stg:border-border stg:bg-card stg:p-0 stg:text-foreground stg:shadow-lg",
|
|
127
|
-
"stg:backdrop:bg-
|
|
127
|
+
"stg:backdrop:bg-backdrop",
|
|
128
128
|
className,
|
|
129
129
|
)}
|
|
130
130
|
>
|
|
@@ -27,6 +27,9 @@ 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";
|
|
@@ -226,6 +229,50 @@ export function McpServerDetailView({
|
|
|
226
229
|
const credentials = useMcpServerCredentials(activeOrg ?? org, mcpServer ?? null);
|
|
227
230
|
const connection = useMcpServerConnect();
|
|
228
231
|
const oauth = useMcpServerOAuthConnect();
|
|
232
|
+
|
|
233
|
+
// Definition drift is only checked for editable servers: the paired
|
|
234
|
+
// refresh writes to the resource, so read-only viewers (e.g. anyone
|
|
235
|
+
// browsing another org's marketplace row) have nothing to act on.
|
|
236
|
+
const { drift: definitionDrift } = useMcpServerDefinitionDrift(
|
|
237
|
+
editable ? (mcpServer ?? null) : null,
|
|
238
|
+
);
|
|
239
|
+
const [isRefreshingDefinition, setIsRefreshingDefinition] = useState(false);
|
|
240
|
+
const handleDefinitionRefresh = useCallback(async () => {
|
|
241
|
+
if (!mcpServer?.metadata?.id || !definitionDrift) return;
|
|
242
|
+
setIsRefreshingDefinition(true);
|
|
243
|
+
try {
|
|
244
|
+
const updated = await updateMcpServer(
|
|
245
|
+
buildRefreshInput(mcpServer, definitionDrift.template),
|
|
246
|
+
);
|
|
247
|
+
onResourceUpdated?.(updated);
|
|
248
|
+
// The update RPC does not re-run discovery (only apply does), so
|
|
249
|
+
// reconnect explicitly — the refreshed transport/auth configuration
|
|
250
|
+
// is exactly what discovery needs to be retried against.
|
|
251
|
+
const envKeys = Object.keys(updated.spec?.env ?? {});
|
|
252
|
+
await connection.connect(
|
|
253
|
+
updated.metadata!.id,
|
|
254
|
+
activeOrg ?? org,
|
|
255
|
+
undefined,
|
|
256
|
+
envKeys,
|
|
257
|
+
);
|
|
258
|
+
} catch {
|
|
259
|
+
// Update errors surface through useUpdateMcpServer's error state;
|
|
260
|
+
// a failed re-discovery lands in connection.error next to the
|
|
261
|
+
// Connect button. Either way the page stays usable.
|
|
262
|
+
} finally {
|
|
263
|
+
setIsRefreshingDefinition(false);
|
|
264
|
+
refetch();
|
|
265
|
+
}
|
|
266
|
+
}, [
|
|
267
|
+
mcpServer,
|
|
268
|
+
definitionDrift,
|
|
269
|
+
updateMcpServer,
|
|
270
|
+
onResourceUpdated,
|
|
271
|
+
connection,
|
|
272
|
+
activeOrg,
|
|
273
|
+
org,
|
|
274
|
+
refetch,
|
|
275
|
+
]);
|
|
229
276
|
const disconnectOAuth = useDisconnectOAuth();
|
|
230
277
|
const orgOAuthApp = useOrgOAuthApp(
|
|
231
278
|
mcpServer?.metadata?.id ?? null,
|
|
@@ -588,6 +635,12 @@ export function McpServerDetailView({
|
|
|
588
635
|
{/* scrollTarget: guided tours/demos bring the connect flow into view
|
|
589
636
|
(see IdentityTransportStep's "mcp-transport" for the convention). */}
|
|
590
637
|
<Section title="Connection" scrollTarget="mcp-connection">
|
|
638
|
+
<DefinitionDriftNotice
|
|
639
|
+
drift={definitionDrift}
|
|
640
|
+
onRefresh={handleDefinitionRefresh}
|
|
641
|
+
isRefreshing={isRefreshingDefinition}
|
|
642
|
+
className="stg:mb-3"
|
|
643
|
+
/>
|
|
591
644
|
<StdioSandboxNotice serverType={spec?.serverType} className="stg:mb-3" />
|
|
592
645
|
<OAuthRequiredNotice oauthOnly={spec?.auth?.oauthOnly} className="stg:mb-3" />
|
|
593
646
|
<ConnectBar
|
|
@@ -659,7 +712,7 @@ export function McpServerDetailView({
|
|
|
659
712
|
onCancel={handleByoaDialogCancel}
|
|
660
713
|
className={cn(
|
|
661
714
|
"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-
|
|
715
|
+
"stg:backdrop:bg-backdrop",
|
|
663
716
|
)}
|
|
664
717
|
>
|
|
665
718
|
<h3 className="stg:mb-4 stg:text-base stg:font-semibold stg:text-foreground">
|
|
@@ -710,7 +763,7 @@ export function McpServerDetailView({
|
|
|
710
763
|
</Section>
|
|
711
764
|
|
|
712
765
|
{(editable || (spec && spec.tags.length > 0)) && (
|
|
713
|
-
<TagsSection tags={spec?.tags ?? []} editable={editable}
|
|
766
|
+
<TagsSection tags={spec?.tags ?? []} editable={editable} />
|
|
714
767
|
)}
|
|
715
768
|
</ResourceDetailShell>
|
|
716
769
|
{access.dialog}
|
|
@@ -1836,34 +1889,13 @@ function EnvSection({
|
|
|
1836
1889
|
function TagsSection({
|
|
1837
1890
|
tags,
|
|
1838
1891
|
editable,
|
|
1839
|
-
isSaving,
|
|
1840
|
-
saveMcpField,
|
|
1841
1892
|
}: {
|
|
1842
1893
|
readonly tags: readonly string[];
|
|
1843
1894
|
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
1895
|
}) {
|
|
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
|
-
|
|
1896
|
+
// Display-only by design: tags are curated marketplace categorization,
|
|
1897
|
+
// not per-connection state. (McpServerInput does carry `tags`, so an
|
|
1898
|
+
// editing affordance is unblocked if the product ever wants one.)
|
|
1867
1899
|
return (
|
|
1868
1900
|
<Section title="Tags" count={tags.length}>
|
|
1869
1901
|
<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
|
+
});
|