@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
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback } from "react";
|
|
3
|
+
import { useCallback, useId } from "react";
|
|
4
4
|
import type { Organization } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
5
5
|
import { OrgProfilePanel } from "../organization/OrgProfilePanel.js";
|
|
6
6
|
import { useOrg } from "../organization/OrgProvider.js";
|
|
7
7
|
|
|
8
8
|
/** Settings section for editing the active organization profile. */
|
|
9
9
|
export function OrgProfileSection() {
|
|
10
|
+
const headingId = useId();
|
|
10
11
|
const { activeOrg, refresh } = useOrg();
|
|
11
12
|
const orgId = activeOrg?.metadata?.id ?? "";
|
|
12
13
|
|
|
@@ -18,9 +19,9 @@ export function OrgProfileSection() {
|
|
|
18
19
|
);
|
|
19
20
|
|
|
20
21
|
return (
|
|
21
|
-
<section aria-labelledby=
|
|
22
|
+
<section aria-labelledby={headingId}>
|
|
22
23
|
<h2
|
|
23
|
-
id=
|
|
24
|
+
id={headingId}
|
|
24
25
|
className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
|
|
25
26
|
>
|
|
26
27
|
Organization Profile
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useRef, useState } from "react";
|
|
4
4
|
import type { PlatformClient } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/api_pb";
|
|
5
5
|
import type { PlatformClientCreateResponse } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/io_pb";
|
|
6
6
|
import { PlatformClientListPanel } from "../platform-client/PlatformClientListPanel.js";
|
|
@@ -24,6 +24,7 @@ type FlowState =
|
|
|
24
24
|
|
|
25
25
|
/** Settings section for creating and maintaining platform clients. */
|
|
26
26
|
export function PlatformClientsSection() {
|
|
27
|
+
const headingId = useId();
|
|
27
28
|
const org = useActiveOrgSlug();
|
|
28
29
|
const pcAvailable = useResourceAvailable(ApiResourceKind.platform_client);
|
|
29
30
|
|
|
@@ -71,10 +72,10 @@ export function PlatformClientsSection() {
|
|
|
71
72
|
}, []);
|
|
72
73
|
|
|
73
74
|
return (
|
|
74
|
-
<section aria-labelledby=
|
|
75
|
+
<section aria-labelledby={headingId}>
|
|
75
76
|
<div className="stg:mb-3 stg:flex stg:items-center stg:justify-between">
|
|
76
77
|
<h2
|
|
77
|
-
id=
|
|
78
|
+
id={headingId}
|
|
78
79
|
className="stg:text-foreground stg:text-sm stg:font-semibold"
|
|
79
80
|
>
|
|
80
81
|
Platform Clients
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
+
import { useId } from "react";
|
|
3
4
|
import { OrgUsagePanel } from "../usage/OrgUsagePanel.js";
|
|
4
5
|
import { useOrg } from "../organization/OrgProvider.js";
|
|
5
6
|
|
|
6
7
|
/** Settings section for organization usage and cost reporting. */
|
|
7
8
|
export function UsageSection() {
|
|
9
|
+
const headingId = useId();
|
|
8
10
|
const { activeOrg } = useOrg();
|
|
9
11
|
const orgId = activeOrg?.metadata?.id ?? "";
|
|
10
12
|
|
|
11
13
|
return (
|
|
12
|
-
<section aria-labelledby=
|
|
14
|
+
<section aria-labelledby={headingId}>
|
|
13
15
|
<h2
|
|
14
|
-
id=
|
|
16
|
+
id={headingId}
|
|
15
17
|
className="stg:text-foreground stg:mb-1 stg:text-sm stg:font-semibold"
|
|
16
18
|
>
|
|
17
19
|
Usage
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useRef, useState, type FormEvent } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState, type FormEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import {
|
|
6
6
|
MAX_ALLOWED_ORIGINS,
|
|
@@ -139,6 +139,12 @@ export function ShareAgentDialog({
|
|
|
139
139
|
}: ShareAgentDialogProps) {
|
|
140
140
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
141
141
|
|
|
142
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
143
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
144
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
145
|
+
// aria-labelledby association for every copy after the first.
|
|
146
|
+
const titleId = useId();
|
|
147
|
+
|
|
142
148
|
const handleClose = useCallback(() => {
|
|
143
149
|
dialogRef.current?.close();
|
|
144
150
|
onOpenChange(false);
|
|
@@ -168,9 +174,9 @@ export function ShareAgentDialog({
|
|
|
168
174
|
onClose={handleClose}
|
|
169
175
|
className={cn(
|
|
170
176
|
"stg:w-full stg:max-w-lg stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
171
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
177
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
172
178
|
)}
|
|
173
|
-
aria-labelledby=
|
|
179
|
+
aria-labelledby={titleId}
|
|
174
180
|
>
|
|
175
181
|
{/* Body mounts only while open so its draft state resets per
|
|
176
182
|
session — reopening the dialog never shows a stale draft. */}
|
|
@@ -182,6 +188,7 @@ export function ShareAgentDialog({
|
|
|
182
188
|
buildShareUrl={buildShareUrl}
|
|
183
189
|
onSharingChanged={onSharingChanged}
|
|
184
190
|
onClose={handleClose}
|
|
191
|
+
titleId={titleId}
|
|
185
192
|
/>
|
|
186
193
|
)}
|
|
187
194
|
</dialog>
|
|
@@ -207,6 +214,7 @@ function ShareAgentDialogBody({
|
|
|
207
214
|
buildShareUrl,
|
|
208
215
|
onSharingChanged,
|
|
209
216
|
onClose,
|
|
217
|
+
titleId,
|
|
210
218
|
}: {
|
|
211
219
|
readonly agent: Agent;
|
|
212
220
|
readonly share: AgentShare | null;
|
|
@@ -214,6 +222,8 @@ function ShareAgentDialogBody({
|
|
|
214
222
|
readonly buildShareUrl?: (org: string, slug: string) => string;
|
|
215
223
|
readonly onSharingChanged?: () => void;
|
|
216
224
|
readonly onClose: () => void;
|
|
225
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
226
|
+
readonly titleId: string;
|
|
217
227
|
}) {
|
|
218
228
|
const [created, setCreated] = useState<AgentShare | null>(null);
|
|
219
229
|
const activeShare = share ?? created;
|
|
@@ -229,7 +239,7 @@ function ShareAgentDialogBody({
|
|
|
229
239
|
<div className="stg:flex stg:items-start stg:justify-between stg:border-b stg:border-border stg:px-6 stg:py-4">
|
|
230
240
|
<div className="stg:min-w-0">
|
|
231
241
|
<h2
|
|
232
|
-
id=
|
|
242
|
+
id={titleId}
|
|
233
243
|
className="stg:text-base stg:font-semibold stg:text-foreground"
|
|
234
244
|
>
|
|
235
245
|
{isCreating ? "Create share" : "Share"}
|
|
@@ -322,6 +332,11 @@ function CreateShareForm({
|
|
|
322
332
|
const agentName = agent.metadata?.name || (agent.metadata?.slug ?? "");
|
|
323
333
|
const isCrossOrg = shareOrg !== (agent.metadata?.org ?? "");
|
|
324
334
|
|
|
335
|
+
// Instance-scoped field ids (oss#593) — see the outer dialog's titleId.
|
|
336
|
+
const baseId = useId();
|
|
337
|
+
const nameId = `${baseId}-name`;
|
|
338
|
+
const slugId = `${baseId}-slug`;
|
|
339
|
+
|
|
325
340
|
const [name, setName] = useState(agentName);
|
|
326
341
|
const [slug, setSlug] = useState(agent.metadata?.slug ?? "");
|
|
327
342
|
// Once the user manually edits the slug field, stop auto-deriving.
|
|
@@ -421,13 +436,13 @@ function CreateShareForm({
|
|
|
421
436
|
{/* ---- Name ---- */}
|
|
422
437
|
<div className="stg:space-y-1">
|
|
423
438
|
<label
|
|
424
|
-
htmlFor=
|
|
439
|
+
htmlFor={nameId}
|
|
425
440
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
426
441
|
>
|
|
427
442
|
Name
|
|
428
443
|
</label>
|
|
429
444
|
<input
|
|
430
|
-
id=
|
|
445
|
+
id={nameId}
|
|
431
446
|
type="text"
|
|
432
447
|
value={name}
|
|
433
448
|
onChange={(e) => handleNameChange(e.target.value)}
|
|
@@ -457,13 +472,13 @@ function CreateShareForm({
|
|
|
457
472
|
{/* ---- Slug ---- */}
|
|
458
473
|
<div className="stg:space-y-1">
|
|
459
474
|
<label
|
|
460
|
-
htmlFor=
|
|
475
|
+
htmlFor={slugId}
|
|
461
476
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
462
477
|
>
|
|
463
478
|
Slug
|
|
464
479
|
</label>
|
|
465
480
|
<input
|
|
466
|
-
id=
|
|
481
|
+
id={slugId}
|
|
467
482
|
type="text"
|
|
468
483
|
value={slug}
|
|
469
484
|
onChange={(e) => handleSlugChange(e.target.value)}
|
|
@@ -533,6 +548,9 @@ function ShareAgentForm({
|
|
|
533
548
|
}) {
|
|
534
549
|
const agentName = agent.metadata?.name || (agent.metadata?.slug ?? "");
|
|
535
550
|
|
|
551
|
+
// Instance-scoped label id (oss#593) — see the outer dialog's titleId.
|
|
552
|
+
const enabledLabelId = useId();
|
|
553
|
+
|
|
536
554
|
// The latest server share is the single baseline: the draft, the link
|
|
537
555
|
// token, and the share id for rotation all derive from it.
|
|
538
556
|
const [share, setShare] = useState<AgentShare>(initialShare);
|
|
@@ -644,7 +662,7 @@ function ShareAgentForm({
|
|
|
644
662
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-4">
|
|
645
663
|
<div className="stg:min-w-0">
|
|
646
664
|
<span
|
|
647
|
-
id=
|
|
665
|
+
id={enabledLabelId}
|
|
648
666
|
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
649
667
|
>
|
|
650
668
|
{isOrgAudience
|
|
@@ -657,7 +675,7 @@ function ShareAgentForm({
|
|
|
657
675
|
checked={draft.enabled}
|
|
658
676
|
onCheckedChange={handleToggle}
|
|
659
677
|
disabled={isPending}
|
|
660
|
-
aria-labelledby=
|
|
678
|
+
aria-labelledby={enabledLabelId}
|
|
661
679
|
/>
|
|
662
680
|
</div>
|
|
663
681
|
{!isCrossOrg && (
|
|
@@ -274,7 +274,10 @@ describe("WorkspaceSidebar — chrome", () => {
|
|
|
274
274
|
expect(screen.getByTestId("footer-slot")).toBeTruthy();
|
|
275
275
|
const toggle = screen.getByLabelText("Collapse sidebar");
|
|
276
276
|
expect(toggle.getAttribute("aria-expanded")).toBe("false");
|
|
277
|
-
|
|
277
|
+
// The nav id is minted per mount; assert the association, not the value.
|
|
278
|
+
const controlsId = toggle.getAttribute("aria-controls");
|
|
279
|
+
expect(controlsId).toBeTruthy();
|
|
280
|
+
expect(document.getElementById(controlsId!)?.tagName).toBe("NAV");
|
|
278
281
|
});
|
|
279
282
|
|
|
280
283
|
it("resolves the org switcher from the mocked transport", async () => {
|
package/src/sidebar/chrome.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import type
|
|
3
|
+
import { useId, type ReactNode } from "react";
|
|
4
4
|
import { PanelLeft } from "lucide-react";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
6
|
import type { Organization } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
@@ -46,9 +46,8 @@ export interface SidebarChromeProps {
|
|
|
46
46
|
/**
|
|
47
47
|
* Outer sidebar frame: `<nav>` container, top row, content, footer band.
|
|
48
48
|
*
|
|
49
|
-
* The
|
|
50
|
-
*
|
|
51
|
-
* only one sidebar renders at a time, so the id cannot collide.
|
|
49
|
+
* The nav id exists solely for the collapse toggle's `aria-controls`
|
|
50
|
+
* association; it is minted per mount like every SDK DOM id.
|
|
52
51
|
*/
|
|
53
52
|
export function SidebarChrome({
|
|
54
53
|
ariaLabel,
|
|
@@ -58,9 +57,10 @@ export function SidebarChrome({
|
|
|
58
57
|
footer,
|
|
59
58
|
children,
|
|
60
59
|
}: SidebarChromeProps) {
|
|
60
|
+
const navId = useId();
|
|
61
61
|
return (
|
|
62
62
|
<nav
|
|
63
|
-
id=
|
|
63
|
+
id={navId}
|
|
64
64
|
aria-label={ariaLabel}
|
|
65
65
|
className="stg:bg-sidebar stg:text-sidebar-foreground stg:flex stg:h-full stg:flex-col"
|
|
66
66
|
>
|
|
@@ -70,7 +70,7 @@ export function SidebarChrome({
|
|
|
70
70
|
type="button"
|
|
71
71
|
onClick={onCollapse}
|
|
72
72
|
aria-expanded={isOpen}
|
|
73
|
-
aria-controls=
|
|
73
|
+
aria-controls={navId}
|
|
74
74
|
aria-label="Collapse sidebar"
|
|
75
75
|
className={cn(
|
|
76
76
|
"stg:inline-flex stg:size-7 stg:shrink-0 stg:items-center stg:justify-center stg:rounded-md",
|
|
@@ -100,7 +100,7 @@ export function SkillDiffDialog({ state, onClose }: SkillDiffDialogProps) {
|
|
|
100
100
|
onClick={handleBackdropClick}
|
|
101
101
|
className={cn(
|
|
102
102
|
"stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:h-[85vh] stg:w-full stg:max-w-4xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
|
|
103
|
-
"stg:backdrop:bg-
|
|
103
|
+
"stg:backdrop:bg-backdrop",
|
|
104
104
|
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
105
105
|
)}
|
|
106
106
|
>
|
package/src/styles.css
CHANGED
|
@@ -331,6 +331,40 @@
|
|
|
331
331
|
animation: stgm-running-pulse 2s ease-in-out infinite;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
+
/* Ambient liveness (stigmer#277): a left-to-right light sweep across the
|
|
335
|
+
text of whatever is currently in flight — a running tool's label, the
|
|
336
|
+
thinking indicator, the thread's bottom status line. The sweep rides the
|
|
337
|
+
WORDS describing the current activity (not a spinner beside them), so
|
|
338
|
+
the screen is never still while the agent is alive.
|
|
339
|
+
|
|
340
|
+
Token-driven: the text settles to the muted base with a foreground-
|
|
341
|
+
colored band sweeping through, which reads correctly in both color
|
|
342
|
+
modes and every preset. background-clip:text needs the -webkit- prefix
|
|
343
|
+
in Safari; the transparent fill is what lets the gradient show through
|
|
344
|
+
the glyphs. */
|
|
345
|
+
@keyframes stgm-shimmer {
|
|
346
|
+
to {
|
|
347
|
+
background-position: -200% 0;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.stgm-shimmer-label {
|
|
352
|
+
background-image: linear-gradient(
|
|
353
|
+
90deg,
|
|
354
|
+
var(--stgm-muted-foreground) 0%,
|
|
355
|
+
var(--stgm-muted-foreground) 35%,
|
|
356
|
+
var(--stgm-foreground) 50%,
|
|
357
|
+
var(--stgm-muted-foreground) 65%,
|
|
358
|
+
var(--stgm-muted-foreground) 100%
|
|
359
|
+
);
|
|
360
|
+
background-size: 200% 100%;
|
|
361
|
+
background-position: 0 0;
|
|
362
|
+
-webkit-background-clip: text;
|
|
363
|
+
background-clip: text;
|
|
364
|
+
color: transparent;
|
|
365
|
+
animation: stgm-shimmer 2s linear infinite;
|
|
366
|
+
}
|
|
367
|
+
|
|
334
368
|
@media (prefers-reduced-motion: reduce) {
|
|
335
369
|
.stgm {
|
|
336
370
|
--stgm-motion-duration: 0ms;
|
|
@@ -344,6 +378,15 @@
|
|
|
344
378
|
animation-iteration-count: 1 !important;
|
|
345
379
|
transition-duration: 0.01ms !important;
|
|
346
380
|
}
|
|
381
|
+
|
|
382
|
+
/* The shimmer is pure decoration: under reduced motion the label drops
|
|
383
|
+
the clipped gradient entirely and reads as ordinary text (DD-015) —
|
|
384
|
+
a frozen gradient band would look like a rendering glitch. */
|
|
385
|
+
.stgm-shimmer-label {
|
|
386
|
+
background-image: none;
|
|
387
|
+
color: inherit;
|
|
388
|
+
animation: none;
|
|
389
|
+
}
|
|
347
390
|
}
|
|
348
391
|
}
|
|
349
392
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { cn } from "@stigmer/theme";
|
|
4
4
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
5
5
|
import type { VersionTimelineEntryProps } from "./types.js";
|
|
6
|
+
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* A single row in a version timeline.
|
|
@@ -205,27 +206,6 @@ function GitProvenanceRow({
|
|
|
205
206
|
// Utilities
|
|
206
207
|
// ---------------------------------------------------------------------------
|
|
207
208
|
|
|
208
|
-
function formatRelativeTime(date: Date): string {
|
|
209
|
-
const now = Date.now();
|
|
210
|
-
const diffMs = now - date.getTime();
|
|
211
|
-
const diffSec = Math.floor(diffMs / 1000);
|
|
212
|
-
const diffMin = Math.floor(diffSec / 60);
|
|
213
|
-
const diffHr = Math.floor(diffMin / 60);
|
|
214
|
-
const diffDays = Math.floor(diffHr / 24);
|
|
215
|
-
|
|
216
|
-
if (diffSec < 60) return "just now";
|
|
217
|
-
if (diffMin < 60) return `${diffMin}m ago`;
|
|
218
|
-
if (diffHr < 24) return `${diffHr}h ago`;
|
|
219
|
-
if (diffDays < 7) return `${diffDays}d ago`;
|
|
220
|
-
if (diffDays < 30) return `${Math.floor(diffDays / 7)}w ago`;
|
|
221
|
-
|
|
222
|
-
return date.toLocaleDateString(undefined, {
|
|
223
|
-
month: "short",
|
|
224
|
-
day: "numeric",
|
|
225
|
-
year: date.getFullYear() !== new Date().getFullYear() ? "numeric" : undefined,
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
|
|
229
209
|
function normalizeGitUrl(url: string): string | null {
|
|
230
210
|
if (!url) return null;
|
|
231
211
|
const cleaned = url.replace(/\.git$/, "");
|
|
@@ -4,6 +4,7 @@ import { memo } from "react";
|
|
|
4
4
|
import type { WorkflowExecution } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
5
5
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
7
|
+
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
7
8
|
|
|
8
9
|
export interface FailedRunsWidgetProps {
|
|
9
10
|
/** Recent failed executions to display. */
|
|
@@ -14,14 +15,6 @@ export interface FailedRunsWidgetProps {
|
|
|
14
15
|
readonly className?: string;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
function formatTimeAgo(date: Date): string {
|
|
18
|
-
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
19
|
-
if (seconds < 60) return "just now";
|
|
20
|
-
if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
|
|
21
|
-
if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
|
|
22
|
-
return `${Math.floor(seconds / 86400)}d ago`;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
18
|
/**
|
|
26
19
|
* Dashboard widget showing recent failed workflow executions.
|
|
27
20
|
*
|
|
@@ -85,7 +78,7 @@ export const FailedRunsWidget = memo(function FailedRunsWidget({
|
|
|
85
78
|
</p>
|
|
86
79
|
{failedDate && (
|
|
87
80
|
<p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
|
|
88
|
-
{
|
|
81
|
+
{formatRelativeTime(failedDate)}
|
|
89
82
|
</p>
|
|
90
83
|
)}
|
|
91
84
|
</div>
|
|
@@ -4,6 +4,7 @@ import { memo } from "react";
|
|
|
4
4
|
import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
|
|
5
5
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
7
|
+
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
7
8
|
|
|
8
9
|
export interface PendingApprovalsWidgetProps {
|
|
9
10
|
readonly approvals: readonly PendingApproval[];
|
|
@@ -14,14 +15,6 @@ export interface PendingApprovalsWidgetProps {
|
|
|
14
15
|
readonly className?: string;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
function formatTimeAgo(date: Date): string {
|
|
18
|
-
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
19
|
-
if (seconds < 60) return "just now";
|
|
20
|
-
if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
|
|
21
|
-
if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
|
|
22
|
-
return `${Math.floor(seconds / 86400)}d ago`;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
18
|
/**
|
|
26
19
|
* Dashboard widget showing pending human_input approvals.
|
|
27
20
|
*
|
|
@@ -98,7 +91,7 @@ export const PendingApprovalsWidget = memo(function PendingApprovalsWidget({
|
|
|
98
91
|
<p className="stg:mt-0.5 stg:truncate stg:text-xs stg:text-muted-foreground">
|
|
99
92
|
Task: {approval.taskName}
|
|
100
93
|
{requestedAt && (
|
|
101
|
-
<> · {
|
|
94
|
+
<> · {formatRelativeTime(requestedAt)}</>
|
|
102
95
|
)}
|
|
103
96
|
</p>
|
|
104
97
|
</div>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { memo, useCallback, useEffect, useRef
|
|
3
|
+
import { memo, useCallback, useEffect, useRef } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { WorkflowGraphModel } from "./workflow-graph-model.js";
|
|
6
6
|
import { taskToYaml } from "./inspector/task-to-yaml.js";
|
|
7
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
7
8
|
|
|
8
9
|
/** Props for {@link ViewYamlDialog}. */
|
|
9
10
|
export interface ViewYamlDialogProps {
|
|
@@ -32,7 +33,7 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
|
|
|
32
33
|
onClose,
|
|
33
34
|
}: ViewYamlDialogProps) {
|
|
34
35
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
35
|
-
const
|
|
36
|
+
const { copy, copied } = useCopyFeedback();
|
|
36
37
|
|
|
37
38
|
const node = nodeId && graph
|
|
38
39
|
? graph.nodes.find((n) => n.id === nodeId) ?? null
|
|
@@ -58,25 +59,9 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
|
|
|
58
59
|
return () => dialog.removeEventListener("close", handleClose);
|
|
59
60
|
}, [onClose]);
|
|
60
61
|
|
|
61
|
-
const handleCopy = useCallback(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
setCopied(true);
|
|
65
|
-
setTimeout(() => setCopied(false), 2000);
|
|
66
|
-
} catch {
|
|
67
|
-
// Fallback for environments without clipboard API
|
|
68
|
-
const textarea = document.createElement("textarea");
|
|
69
|
-
textarea.value = yaml;
|
|
70
|
-
textarea.style.position = "fixed";
|
|
71
|
-
textarea.style.opacity = "0";
|
|
72
|
-
document.body.appendChild(textarea);
|
|
73
|
-
textarea.select();
|
|
74
|
-
document.execCommand("copy");
|
|
75
|
-
document.body.removeChild(textarea);
|
|
76
|
-
setCopied(true);
|
|
77
|
-
setTimeout(() => setCopied(false), 2000);
|
|
78
|
-
}
|
|
79
|
-
}, [yaml]);
|
|
62
|
+
const handleCopy = useCallback(() => {
|
|
63
|
+
void copy(yaml);
|
|
64
|
+
}, [copy, yaml]);
|
|
80
65
|
|
|
81
66
|
const handleBackdropClick = useCallback(
|
|
82
67
|
(e: React.MouseEvent<HTMLDialogElement>) => {
|
|
@@ -92,7 +77,7 @@ export const ViewYamlDialog = memo(function ViewYamlDialog({
|
|
|
92
77
|
ref={dialogRef}
|
|
93
78
|
className={cn(
|
|
94
79
|
"stgm stg:m-auto stg:max-h-[80vh] stg:w-full stg:max-w-lg stg:rounded-lg stg:border stg:border-[var(--stgm-border,#e5e5e5)] stg:bg-[var(--stgm-background,#fff)] stg:p-0 stg:shadow-xl",
|
|
95
|
-
"stg:backdrop:bg-
|
|
80
|
+
"stg:backdrop:bg-backdrop",
|
|
96
81
|
)}
|
|
97
82
|
onClick={handleBackdropClick}
|
|
98
83
|
aria-label={node ? `YAML for ${node.taskName}` : "View YAML"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useEffect, useId, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import {
|
|
6
6
|
useWorkflowArchitectFlow,
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "./useWorkflowArchitectFlow.js";
|
|
9
9
|
import { MessageThread } from "../execution/MessageThread.js";
|
|
10
10
|
import { WorkflowDiffGraph } from "./WorkflowDiffGraph.js";
|
|
11
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
11
12
|
|
|
12
13
|
/** Props for {@link WorkflowArchitectDialog}. */
|
|
13
14
|
export interface WorkflowArchitectDialogProps {
|
|
@@ -119,7 +120,7 @@ export function WorkflowArchitectDialog({
|
|
|
119
120
|
onClick={handleBackdropClick}
|
|
120
121
|
className={cn(
|
|
121
122
|
"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",
|
|
122
|
-
"stg:backdrop:bg-
|
|
123
|
+
"stg:backdrop:bg-backdrop",
|
|
123
124
|
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
124
125
|
)}
|
|
125
126
|
>
|
|
@@ -176,6 +177,7 @@ function InputPhase({
|
|
|
176
177
|
readonly flow: ReturnType<typeof useWorkflowArchitectFlow>;
|
|
177
178
|
readonly onClose: () => void;
|
|
178
179
|
}) {
|
|
180
|
+
const promptId = useId();
|
|
179
181
|
return (
|
|
180
182
|
<>
|
|
181
183
|
<div className="stg:border-b stg:border-border stg:px-6 stg:py-4">
|
|
@@ -200,7 +202,7 @@ function InputPhase({
|
|
|
200
202
|
|
|
201
203
|
<div className="stg:flex stg:flex-col stg:gap-1">
|
|
202
204
|
<label
|
|
203
|
-
htmlFor=
|
|
205
|
+
htmlFor={promptId}
|
|
204
206
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
205
207
|
>
|
|
206
208
|
Description
|
|
@@ -209,7 +211,7 @@ function InputPhase({
|
|
|
209
211
|
</span>
|
|
210
212
|
</label>
|
|
211
213
|
<textarea
|
|
212
|
-
id=
|
|
214
|
+
id={promptId}
|
|
213
215
|
value={flow.prompt}
|
|
214
216
|
onChange={(e) => flow.setPrompt(e.target.value)}
|
|
215
217
|
placeholder="e.g., A workflow that enriches customer data using my data-agent, validates the output, and sends a Slack notification on failure"
|
|
@@ -279,7 +281,7 @@ function StreamingPhase({
|
|
|
279
281
|
Workflow Architect
|
|
280
282
|
</h3>
|
|
281
283
|
<span className="stg:inline-flex stg:items-center stg:gap-1.5 stg:text-xs stg:text-muted-foreground">
|
|
282
|
-
<SpinnerIcon />
|
|
284
|
+
<SpinnerIcon size={14} />
|
|
283
285
|
{flow.phase === "starting" ? "Starting…" : "Working…"}
|
|
284
286
|
</span>
|
|
285
287
|
</div>
|
|
@@ -436,7 +438,7 @@ function ResultPhase({
|
|
|
436
438
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
437
439
|
)}
|
|
438
440
|
>
|
|
439
|
-
{isApplying && <SpinnerIcon />}
|
|
441
|
+
{isApplying && <SpinnerIcon size={14} />}
|
|
440
442
|
{isApplying ? "Creating…" : "Create Workflow"}
|
|
441
443
|
</button>
|
|
442
444
|
</div>
|
|
@@ -502,24 +504,3 @@ function ErrorPhase({
|
|
|
502
504
|
);
|
|
503
505
|
}
|
|
504
506
|
|
|
505
|
-
// ---------------------------------------------------------------------------
|
|
506
|
-
// Shared components
|
|
507
|
-
// ---------------------------------------------------------------------------
|
|
508
|
-
|
|
509
|
-
function SpinnerIcon({ size = 14 }: { readonly size?: number }) {
|
|
510
|
-
return (
|
|
511
|
-
<svg
|
|
512
|
-
width={size}
|
|
513
|
-
height={size}
|
|
514
|
-
viewBox="0 0 16 16"
|
|
515
|
-
fill="none"
|
|
516
|
-
stroke="currentColor"
|
|
517
|
-
strokeWidth="2"
|
|
518
|
-
strokeLinecap="round"
|
|
519
|
-
className="stg:animate-spin"
|
|
520
|
-
aria-hidden="true"
|
|
521
|
-
>
|
|
522
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
523
|
-
</svg>
|
|
524
|
-
);
|
|
525
|
-
}
|
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
// Editor-area document rendering one workflow Artifact resource's content.
|
|
4
4
|
// Domain: workflow (the Artifact-resource counterpart of execution/ArtifactDocument).
|
|
5
5
|
|
|
6
|
-
import { useCallback
|
|
6
|
+
import { useCallback } from "react";
|
|
7
7
|
import type { Artifact } from "@stigmer/protos/ai/stigmer/agentic/artifact/v1/api_pb";
|
|
8
8
|
import { cn } from "@stigmer/theme";
|
|
9
9
|
import { ArtifactFileContent } from "../execution/ArtifactFileContent.js";
|
|
10
10
|
import { formatArtifactSize } from "../execution/artifact-utils.js";
|
|
11
11
|
import { useArtifactContentById } from "../execution/useArtifactContentById.js";
|
|
12
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
12
13
|
import { useWorkflowArtifactDownload } from "./useWorkflowArtifactDownload.js";
|
|
13
14
|
|
|
14
|
-
const COPIED_FEEDBACK_MS = 2000;
|
|
15
|
-
|
|
16
15
|
/** Props for {@link WorkflowArtifactDocument}. */
|
|
17
16
|
export interface WorkflowArtifactDocumentProps {
|
|
18
17
|
/** The workflow artifact to render. */
|
|
@@ -78,14 +77,11 @@ export function WorkflowArtifactDocument({
|
|
|
78
77
|
|
|
79
78
|
const { download, isDownloading } = useWorkflowArtifactDownload();
|
|
80
79
|
|
|
81
|
-
const
|
|
80
|
+
const { copy: copyToClipboard, copied } = useCopyFeedback();
|
|
82
81
|
const copy = useCallback(() => {
|
|
83
82
|
if (!content) return;
|
|
84
|
-
void
|
|
85
|
-
|
|
86
|
-
setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
|
|
87
|
-
});
|
|
88
|
-
}, [content]);
|
|
83
|
+
void copyToClipboard(content);
|
|
84
|
+
}, [content, copyToClipboard]);
|
|
89
85
|
|
|
90
86
|
const showCopy = content !== null;
|
|
91
87
|
|
|
@@ -636,6 +636,8 @@ const WorkflowCanvasEditorInner = memo(function WorkflowCanvasEditorInner({
|
|
|
636
636
|
edges={canvas.edges}
|
|
637
637
|
onNodesChange={canvas.onNodesChange}
|
|
638
638
|
onEdgesChange={canvas.onEdgesChange}
|
|
639
|
+
onNodeDragStart={canvas.onNodeDragStart}
|
|
640
|
+
onNodeDragStop={canvas.onNodeDragStop}
|
|
639
641
|
onNodeClick={handleNodeClick}
|
|
640
642
|
onEdgeClick={handleEdgeClick}
|
|
641
643
|
onPaneClick={handlePaneClick}
|