@stigmer/react 3.12.0 → 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/execution/useCreateAgentExecution.d.ts +3 -2
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.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/isUnimplemented.d.ts +17 -0
- package/internal/isUnimplemented.d.ts.map +1 -0
- package/internal/isUnimplemented.js +26 -0
- package/internal/isUnimplemented.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 +8 -4
- package/mcp-server/McpServerConnectDialog.js.map +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/useMcpServerCredentials.d.ts +38 -10
- package/mcp-server/useMcpServerCredentials.d.ts.map +1 -1
- package/mcp-server/useMcpServerCredentials.js +50 -7
- package/mcp-server/useMcpServerCredentials.js.map +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/mcp-server/useOrgOAuthApp.d.ts +22 -0
- package/mcp-server/useOrgOAuthApp.d.ts.map +1 -1
- package/mcp-server/useOrgOAuthApp.js +39 -7
- package/mcp-server/useOrgOAuthApp.js.map +1 -1
- 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 +11 -9
- 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/skill/useSkillVersions.d.ts.map +1 -1
- package/skill/useSkillVersions.js +1 -9
- package/skill/useSkillVersions.js.map +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/execution/useCreateAgentExecution.ts +3 -2
- 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/isUnimplemented.ts +26 -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 +30 -12
- 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__/VendorApprovalBlocked.surfaces.test.tsx +103 -5
- package/src/mcp-server/__tests__/byoaEditionDegradation.test.tsx +323 -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__/useMcpServerCredentials.test.tsx +306 -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/useMcpServerCredentials.ts +87 -19
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/mcp-server/useOrgOAuthApp.ts +54 -8
- 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 +14 -10
- 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/skill/useSkillVersions.ts +1 -11
- 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 +39 -7
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionGraph.tsx +26 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +115 -24
- package/src/workflow/WorkflowExplainDialog.tsx +8 -24
- package/src/workflow/WorkflowNode.tsx +5 -2
- 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 +31 -24
- 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__/WorkflowExecutionViewer.reconciliation.test.tsx +48 -1
- package/src/workflow/__tests__/WorkflowNode.test.tsx +93 -0
- package/src/workflow/__tests__/WorkflowRunDialog.test.tsx +127 -0
- package/src/workflow/__tests__/graph-history.test.ts +103 -0
- package/src/workflow/__tests__/overview-graph.test.ts +17 -0
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useCanvasKeyboardShortcuts.undo.test.ts +115 -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__/useWorkflowCanvas.undo.test.tsx +133 -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 +17 -8
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/instance/useDeleteWorkflowInstance.ts +9 -4
- package/src/workflow/layout/registry-dimensions.ts +2 -5
- package/src/workflow/node-shell/NodeShell.tsx +4 -0
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/task-type-visual-registry.ts +5 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useCanvasKeyboardShortcuts.ts +33 -3
- package/src/workflow/useGraphHistory.ts +22 -41
- package/src/workflow/useWorkflowCanvas.ts +126 -21
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/src/workflow/useWorkflowSave.ts +2 -15
- package/src/workflow/workflow-graph-conversions.ts +25 -3
- 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 +31 -6
- 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/WorkflowExecutionGraph.d.ts.map +1 -1
- package/workflow/WorkflowExecutionGraph.js +27 -1
- package/workflow/WorkflowExecutionGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +49 -18
- 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/WorkflowNode.d.ts.map +1 -1
- package/workflow/WorkflowNode.js +2 -2
- package/workflow/WorkflowNode.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 +11 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +18 -9
- 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.d.ts.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +10 -2
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/instance/useDeleteWorkflowInstance.d.ts +9 -4
- package/workflow/instance/useDeleteWorkflowInstance.d.ts.map +1 -1
- package/workflow/instance/useDeleteWorkflowInstance.js +4 -2
- package/workflow/instance/useDeleteWorkflowInstance.js.map +1 -1
- package/workflow/layout/registry-dimensions.d.ts.map +1 -1
- package/workflow/layout/registry-dimensions.js +2 -5
- package/workflow/layout/registry-dimensions.js.map +1 -1
- package/workflow/node-shell/NodeShell.js +1 -1
- package/workflow/node-shell/NodeShell.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/task-type-visual-registry.d.ts.map +1 -1
- package/workflow/task-type-visual-registry.js +5 -3
- package/workflow/task-type-visual-registry.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/useCanvasKeyboardShortcuts.d.ts +15 -4
- package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -1
- package/workflow/useCanvasKeyboardShortcuts.js +25 -4
- package/workflow/useCanvasKeyboardShortcuts.js.map +1 -1
- package/workflow/useGraphHistory.d.ts +16 -9
- package/workflow/useGraphHistory.d.ts.map +1 -1
- package/workflow/useGraphHistory.js +19 -33
- package/workflow/useGraphHistory.js.map +1 -1
- package/workflow/useWorkflowCanvas.d.ts +6 -4
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +115 -23
- 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
- package/workflow/useWorkflowSave.d.ts.map +1 -1
- package/workflow/useWorkflowSave.js +2 -15
- package/workflow/useWorkflowSave.js.map +1 -1
- package/workflow/workflow-graph-conversions.d.ts +19 -1
- package/workflow/workflow-graph-conversions.d.ts.map +1 -1
- package/workflow/workflow-graph-conversions.js +17 -3
- package/workflow/workflow-graph-conversions.js.map +1 -1
|
@@ -5,6 +5,7 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import type { EnvVarInput } from "@stigmer/sdk";
|
|
6
6
|
import { useScrollShadows } from "../internal/useScrollShadows.js";
|
|
7
7
|
import { ScrollFade } from "../internal/ScrollFade.js";
|
|
8
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Describes a single environment variable the form should collect.
|
|
@@ -414,7 +415,7 @@ export function EnvVarForm({
|
|
|
414
415
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
415
416
|
)}
|
|
416
417
|
>
|
|
417
|
-
{isSubmitting && <SpinnerIcon />}
|
|
418
|
+
{isSubmitting && <SpinnerIcon size={12} />}
|
|
418
419
|
{resolvedSubmitLabel}
|
|
419
420
|
</button>
|
|
420
421
|
</div>
|
|
@@ -466,20 +467,3 @@ function EyeOffIcon() {
|
|
|
466
467
|
);
|
|
467
468
|
}
|
|
468
469
|
|
|
469
|
-
function SpinnerIcon() {
|
|
470
|
-
return (
|
|
471
|
-
<svg
|
|
472
|
-
width="12"
|
|
473
|
-
height="12"
|
|
474
|
-
viewBox="0 0 16 16"
|
|
475
|
-
fill="none"
|
|
476
|
-
stroke="currentColor"
|
|
477
|
-
strokeWidth="2"
|
|
478
|
-
strokeLinecap="round"
|
|
479
|
-
className="stg:animate-spin"
|
|
480
|
-
aria-hidden="true"
|
|
481
|
-
>
|
|
482
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
483
|
-
</svg>
|
|
484
|
-
);
|
|
485
|
-
}
|
|
@@ -17,6 +17,7 @@ import { PermissionGate } from "../iam-policy/PermissionGate.js";
|
|
|
17
17
|
import { useUpdateEnvironmentVariables } from "./useUpdateEnvironmentVariables.js";
|
|
18
18
|
import { useRemoveEnvironmentVariables } from "./useRemoveEnvironmentVariables.js";
|
|
19
19
|
import { useRevealSecretValue } from "./useRevealSecretValue.js";
|
|
20
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
20
21
|
|
|
21
22
|
// ---------------------------------------------------------------------------
|
|
22
23
|
// Public API
|
|
@@ -367,7 +368,7 @@ function VariableRow({
|
|
|
367
368
|
label="Save"
|
|
368
369
|
variant="primary"
|
|
369
370
|
>
|
|
370
|
-
{isSaving ? <SpinnerIcon /> : <CheckIcon />}
|
|
371
|
+
{isSaving ? <SpinnerIcon size={12} /> : <CheckIcon />}
|
|
371
372
|
</ActionButton>
|
|
372
373
|
|
|
373
374
|
<ActionButton
|
|
@@ -436,7 +437,7 @@ function VariableRow({
|
|
|
436
437
|
label="Confirm delete"
|
|
437
438
|
variant="danger"
|
|
438
439
|
>
|
|
439
|
-
{isDeleting ? <SpinnerIcon /> : <CheckIcon />}
|
|
440
|
+
{isDeleting ? <SpinnerIcon size={12} /> : <CheckIcon />}
|
|
440
441
|
</ActionButton>
|
|
441
442
|
<ActionButton
|
|
442
443
|
onClick={() => setMode("idle")}
|
|
@@ -469,7 +470,7 @@ function VariableRow({
|
|
|
469
470
|
variant="muted"
|
|
470
471
|
>
|
|
471
472
|
{isRevealing ? (
|
|
472
|
-
<SpinnerIcon />
|
|
473
|
+
<SpinnerIcon size={12} />
|
|
473
474
|
) : revealedValue !== null ? (
|
|
474
475
|
<EyeOffIcon />
|
|
475
476
|
) : (
|
|
@@ -609,7 +610,7 @@ function AddVariableForm({
|
|
|
609
610
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
610
611
|
)}
|
|
611
612
|
>
|
|
612
|
-
{isAdding && <SpinnerIcon />}
|
|
613
|
+
{isAdding && <SpinnerIcon size={12} />}
|
|
613
614
|
Add
|
|
614
615
|
</button>
|
|
615
616
|
<button
|
|
@@ -815,20 +816,3 @@ function PlusIcon() {
|
|
|
815
816
|
);
|
|
816
817
|
}
|
|
817
818
|
|
|
818
|
-
function SpinnerIcon() {
|
|
819
|
-
return (
|
|
820
|
-
<svg
|
|
821
|
-
width="12"
|
|
822
|
-
height="12"
|
|
823
|
-
viewBox="0 0 16 16"
|
|
824
|
-
fill="none"
|
|
825
|
-
stroke="currentColor"
|
|
826
|
-
strokeWidth="2"
|
|
827
|
-
strokeLinecap="round"
|
|
828
|
-
className="stg:animate-spin"
|
|
829
|
-
aria-hidden="true"
|
|
830
|
-
>
|
|
831
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
832
|
-
</svg>
|
|
833
|
-
);
|
|
834
|
-
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { SpinnerIcon } from "../internal/thread-card/glyphs.js";
|
|
4
5
|
|
|
5
6
|
/** Props for {@link ArtifactApplyButton}. */
|
|
6
7
|
export interface ArtifactApplyButtonProps {
|
|
@@ -51,7 +52,7 @@ export function ArtifactApplyButton({
|
|
|
51
52
|
>
|
|
52
53
|
{isApplying ? (
|
|
53
54
|
<span className="stg:inline-flex stg:items-center stg:gap-1.5">
|
|
54
|
-
<SpinnerIcon />
|
|
55
|
+
<SpinnerIcon size={12} className="stg:shrink-0" />
|
|
55
56
|
Applying{"\u2026"}
|
|
56
57
|
</span>
|
|
57
58
|
) : (
|
|
@@ -61,19 +62,3 @@ export function ArtifactApplyButton({
|
|
|
61
62
|
);
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
function SpinnerIcon() {
|
|
65
|
-
return (
|
|
66
|
-
<svg
|
|
67
|
-
width="12"
|
|
68
|
-
height="12"
|
|
69
|
-
viewBox="0 0 12 12"
|
|
70
|
-
fill="none"
|
|
71
|
-
stroke="currentColor"
|
|
72
|
-
strokeWidth="1.5"
|
|
73
|
-
className="stg:shrink-0 stg:animate-spin"
|
|
74
|
-
aria-hidden="true"
|
|
75
|
-
>
|
|
76
|
-
<path d="M6 1.5A4.5 4.5 0 1 1 1.5 6" strokeLinecap="round" />
|
|
77
|
-
</svg>
|
|
78
|
-
);
|
|
79
|
-
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Recognizes a recoverable *interruption* (worker reaped / heartbeat timeout /
|
|
8
|
+
* stall) as opposed to a genuine application failure. The runner stamps these
|
|
9
|
+
* with a stable signature ("[StallTimeoutError]", "Execution interrupted",
|
|
10
|
+
* "Retry or resume."), and the workflow auto-resumes them while recovery cycles
|
|
11
|
+
* remain; by the time one reaches the UI as terminal it is resumable from the
|
|
12
|
+
* session's persisted harness_state_id rather than a dead end.
|
|
13
|
+
*/
|
|
14
|
+
function isInterruptedError(error: string): boolean {
|
|
15
|
+
return /\[StallTimeoutError\]|execution interrupted|retry or resume/i.test(error);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Props for {@link ExecutionErrorNotice} and its MessageThread slot. */
|
|
19
|
+
export interface ExecutionErrorNoticeProps {
|
|
20
|
+
/** The server-reported failure reason (`AgentExecutionStatus.error`), raw. */
|
|
21
|
+
readonly error: string;
|
|
22
|
+
/**
|
|
23
|
+
* The originating user message, resent verbatim on retry. Absent when the
|
|
24
|
+
* failed execution has no resendable prompt — the retry affordance is
|
|
25
|
+
* hidden in that case.
|
|
26
|
+
*/
|
|
27
|
+
readonly retryMessage?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Resends {@link retryMessage}; the server continues from the session's
|
|
30
|
+
* persisted harness_state_id. Retry renders only when both this handler
|
|
31
|
+
* and {@link retryMessage} are present.
|
|
32
|
+
*/
|
|
33
|
+
readonly onRetry?: (message: string) => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Renders the server-reported failure reason (`AgentExecutionStatus.error`)
|
|
38
|
+
* for an execution that died — typically before producing any messages. The
|
|
39
|
+
* reason can be a long Temporal error, so it is clamped by default with a
|
|
40
|
+
* Show more / Show less toggle.
|
|
41
|
+
*
|
|
42
|
+
* A genuine failure renders as a destructive alert with a Retry. A *recoverable
|
|
43
|
+
* interruption* renders as a neutral notice with a Resume — both resend the
|
|
44
|
+
* originating message, which the server continues from the session's persisted
|
|
45
|
+
* harness_state_id (the same data path; the framing differs so an interruption
|
|
46
|
+
* never looks like a dead-end crash).
|
|
47
|
+
*
|
|
48
|
+
* Slot-overridable via `MessageThreadSlots.ExecutionErrorNotice`. An override
|
|
49
|
+
* receives the raw reason and the retry wiring and owns its own presentation —
|
|
50
|
+
* including whether to reproduce the interruption-vs-failure framing, which is
|
|
51
|
+
* an internal heuristic of this built-in, not part of the slot contract.
|
|
52
|
+
*/
|
|
53
|
+
export function ExecutionErrorNotice({
|
|
54
|
+
error,
|
|
55
|
+
retryMessage,
|
|
56
|
+
onRetry,
|
|
57
|
+
}: ExecutionErrorNoticeProps) {
|
|
58
|
+
const [expanded, setExpanded] = useState(false);
|
|
59
|
+
const canRetry = !!onRetry && !!retryMessage;
|
|
60
|
+
const interrupted = isInterruptedError(error);
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div
|
|
64
|
+
role={interrupted ? "status" : "alert"}
|
|
65
|
+
className={cn(
|
|
66
|
+
"stg:mx-4 stg:flex stg:flex-col stg:gap-1.5 stg:rounded-md stg:px-3 stg:py-2",
|
|
67
|
+
interrupted ? "stg:bg-muted" : "stg:bg-destructive-subtle",
|
|
68
|
+
)}
|
|
69
|
+
>
|
|
70
|
+
<p
|
|
71
|
+
className={cn(
|
|
72
|
+
"stg:text-xs stg:whitespace-pre-wrap stg:break-words",
|
|
73
|
+
interrupted ? "stg:text-foreground" : "stg:text-destructive",
|
|
74
|
+
!expanded && "stg:line-clamp-3",
|
|
75
|
+
)}
|
|
76
|
+
>
|
|
77
|
+
{error}
|
|
78
|
+
</p>
|
|
79
|
+
<div className="stg:flex stg:items-center stg:gap-3 stg:text-xs">
|
|
80
|
+
<button
|
|
81
|
+
type="button"
|
|
82
|
+
onClick={() => setExpanded((v) => !v)}
|
|
83
|
+
className="stg:font-medium stg:text-muted-foreground stg:underline-offset-2 stg:hover:underline stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring"
|
|
84
|
+
>
|
|
85
|
+
{expanded ? "Show less" : "Show more"}
|
|
86
|
+
</button>
|
|
87
|
+
{canRetry && (
|
|
88
|
+
<button
|
|
89
|
+
type="button"
|
|
90
|
+
onClick={() => onRetry!(retryMessage!)}
|
|
91
|
+
className="stg:font-medium stg:text-foreground stg:underline-offset-2 stg:hover:underline stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring"
|
|
92
|
+
>
|
|
93
|
+
{interrupted ? "Resume" : "Retry"}
|
|
94
|
+
</button>
|
|
95
|
+
)}
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useContext, useMemo
|
|
3
|
+
import { useCallback, useContext, useMemo } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
6
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
6
7
|
import { FilePathContext } from "./FilePathContext.js";
|
|
7
8
|
import { resolvePathAction, splitDisplayPath } from "./file-path-resolver.js";
|
|
8
9
|
|
|
@@ -28,8 +29,6 @@ export interface FilePathLinkProps {
|
|
|
28
29
|
readonly className?: string;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
const COPIED_FEEDBACK_MS = 2000;
|
|
32
|
-
|
|
33
32
|
/**
|
|
34
33
|
* Interactive file path display that replaces inert `<span>` path
|
|
35
34
|
* text in tool call rendering.
|
|
@@ -62,7 +61,7 @@ export function FilePathLink({
|
|
|
62
61
|
className,
|
|
63
62
|
}: FilePathLinkProps) {
|
|
64
63
|
const { workspaceEntries, onFilePathClick } = useContext(FilePathContext);
|
|
65
|
-
const
|
|
64
|
+
const { copy, copied } = useCopyFeedback();
|
|
66
65
|
|
|
67
66
|
const resolved = useMemo(
|
|
68
67
|
() => resolvePathAction(path, workspaceEntries),
|
|
@@ -80,11 +79,8 @@ export function FilePathLink({
|
|
|
80
79
|
|
|
81
80
|
const handleCopy = useCallback(() => {
|
|
82
81
|
const value = resolved.action === "copy" ? resolved.value : path;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
setTimeout(() => setCopied(false), COPIED_FEEDBACK_MS);
|
|
86
|
-
});
|
|
87
|
-
}, [resolved, path]);
|
|
82
|
+
void copy(value);
|
|
83
|
+
}, [resolved, path, copy]);
|
|
88
84
|
|
|
89
85
|
const handleClick = useCallback(
|
|
90
86
|
(e: React.MouseEvent) => {
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
fileReviewability,
|
|
29
29
|
type FileReviewability,
|
|
30
30
|
} from "./file-review-status.js";
|
|
31
|
+
import { SpinnerIcon } from "../internal/thread-card/glyphs.js";
|
|
31
32
|
|
|
32
33
|
/** A stable empty set so the default `submittingDecisionKeys` keeps a constant ref. */
|
|
33
34
|
const NO_KEYS: ReadonlySet<string> = new Set();
|
|
@@ -1063,23 +1064,3 @@ function bulkLabels(
|
|
|
1063
1064
|
return { approve: `${approveVerb} all`, reject: "Reject all" };
|
|
1064
1065
|
}
|
|
1065
1066
|
|
|
1066
|
-
// ---------------------------------------------------------------------------
|
|
1067
|
-
// Inline SVG icon
|
|
1068
|
-
// ---------------------------------------------------------------------------
|
|
1069
|
-
|
|
1070
|
-
function SpinnerIcon() {
|
|
1071
|
-
return (
|
|
1072
|
-
<svg
|
|
1073
|
-
width="10"
|
|
1074
|
-
height="10"
|
|
1075
|
-
viewBox="0 0 12 12"
|
|
1076
|
-
fill="none"
|
|
1077
|
-
stroke="currentColor"
|
|
1078
|
-
strokeWidth="1.5"
|
|
1079
|
-
className="stg:animate-spin"
|
|
1080
|
-
aria-hidden="true"
|
|
1081
|
-
>
|
|
1082
|
-
<path d="M6 1.5A4.5 4.5 0 1 1 1.5 6" strokeLinecap="round" />
|
|
1083
|
-
</svg>
|
|
1084
|
-
);
|
|
1085
|
-
}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from "react";
|
|
10
10
|
import { cn } from "@stigmer/theme";
|
|
11
11
|
import { ModelSelector } from "../models/ModelSelector.js";
|
|
12
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
12
13
|
|
|
13
14
|
/** Props for {@link FollowUpInput}. */
|
|
14
15
|
export interface FollowUpInputProps {
|
|
@@ -204,19 +205,3 @@ function ArrowUpIcon() {
|
|
|
204
205
|
);
|
|
205
206
|
}
|
|
206
207
|
|
|
207
|
-
function SpinnerIcon() {
|
|
208
|
-
return (
|
|
209
|
-
<svg
|
|
210
|
-
width="16"
|
|
211
|
-
height="16"
|
|
212
|
-
viewBox="0 0 16 16"
|
|
213
|
-
fill="none"
|
|
214
|
-
stroke="currentColor"
|
|
215
|
-
strokeWidth="2"
|
|
216
|
-
strokeLinecap="round"
|
|
217
|
-
className="stg:animate-spin"
|
|
218
|
-
>
|
|
219
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
220
|
-
</svg>
|
|
221
|
-
);
|
|
222
|
-
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
|
|
6
|
+
/** Props for {@link LivenessStatusLine}. */
|
|
7
|
+
export interface LivenessStatusLineProps {
|
|
8
|
+
/**
|
|
9
|
+
* The status copy. Defaults to `"Working…"` — deliberately generic: the
|
|
10
|
+
* thread has no model-authored account of what the agent is doing between
|
|
11
|
+
* visible events (that seam is stigmer#276), so the line claims only what
|
|
12
|
+
* is provably true.
|
|
13
|
+
*/
|
|
14
|
+
readonly label?: string;
|
|
15
|
+
/** Additional CSS class names for the root container. */
|
|
16
|
+
readonly className?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The thread's ambient-liveness anchor (stigmer#277): a quiet one-line status
|
|
21
|
+
* at the bottom of the thread while an execution is live but nothing else on
|
|
22
|
+
* screen is visibly moving — the exact stretches (model generation between
|
|
23
|
+
* tool calls) where users conclude the agent died and reach for a restart.
|
|
24
|
+
*
|
|
25
|
+
* The label carries the shared `stgm-shimmer-label` sweep, the same treatment
|
|
26
|
+
* as a running tool row's title and the thinking indicator, so "alive" reads
|
|
27
|
+
* identically everywhere. {@link MessageThread} emits it only while the
|
|
28
|
+
* active execution is `IN_PROGRESS` with no running tool call, no live
|
|
29
|
+
* sub-agent, and no pending approval — when a gate is waiting on the *user*,
|
|
30
|
+
* shimmering "Working…" would be a lie, and when a tool is running, its own
|
|
31
|
+
* row carries the sweep. It disappears the moment the execution settles
|
|
32
|
+
* (phase-driven, DD-009 — never inferred from the stream going quiet).
|
|
33
|
+
*
|
|
34
|
+
* Replaceable via {@link MessageThreadSlots.LivenessStatusLine} (the
|
|
35
|
+
* SetupProgress precedent) for hosts that want their own liveness voice.
|
|
36
|
+
*
|
|
37
|
+
* All visual properties flow through `--stgm-*` tokens.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* <LivenessStatusLine />
|
|
42
|
+
* <LivenessStatusLine label="Reviewing your data…" />
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export const LivenessStatusLine = memo(function LivenessStatusLine({
|
|
46
|
+
label = "Working\u2026",
|
|
47
|
+
className,
|
|
48
|
+
}: LivenessStatusLineProps) {
|
|
49
|
+
return (
|
|
50
|
+
<div
|
|
51
|
+
role="status"
|
|
52
|
+
aria-label={label}
|
|
53
|
+
data-cursor-target="liveness-status-line"
|
|
54
|
+
className={cn("stg:flex stg:items-center stg:px-4 stg:py-1.5", className)}
|
|
55
|
+
>
|
|
56
|
+
<span className="stg:text-xs stgm-shimmer-label">{label}</span>
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
});
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
import { PlanDocumentMessage } from "./PlanDocumentMessage.js";
|
|
21
21
|
import { useRenderTracer } from "../internal/dev/index.js";
|
|
22
22
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
23
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
23
24
|
|
|
24
25
|
/** Props for {@link MessageEntry}. */
|
|
25
26
|
export interface MessageEntryProps {
|
|
@@ -192,29 +193,29 @@ function HumanMessage({
|
|
|
192
193
|
/>
|
|
193
194
|
)}
|
|
194
195
|
<p className="stg:text-sm stg:text-foreground stg:whitespace-pre-wrap">{content}</p>
|
|
195
|
-
{
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
"
|
|
206
|
-
|
|
207
|
-
"
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
196
|
+
{/* The hover-revealed action cluster on the bubble's shoulder: copy is
|
|
197
|
+
always offered (the message text is the content), edit only when the
|
|
198
|
+
host wired the callback. */}
|
|
199
|
+
<div className="stg:absolute stg:-top-2.5 stg:-right-2.5 stg:flex stg:gap-1">
|
|
200
|
+
<CopyMessageButton text={content} variant="bubble" />
|
|
201
|
+
{onEdit && (
|
|
202
|
+
<Tooltip>
|
|
203
|
+
<TooltipTrigger
|
|
204
|
+
render={
|
|
205
|
+
<button
|
|
206
|
+
type="button"
|
|
207
|
+
onClick={onEdit}
|
|
208
|
+
aria-label="Edit message"
|
|
209
|
+
className={BUBBLE_ACTION_CLASSES}
|
|
210
|
+
/>
|
|
211
|
+
}
|
|
212
|
+
>
|
|
213
|
+
<EditIcon />
|
|
214
|
+
</TooltipTrigger>
|
|
215
|
+
<TooltipContent side="top">Edit</TooltipContent>
|
|
216
|
+
</Tooltip>
|
|
217
|
+
)}
|
|
218
|
+
</div>
|
|
218
219
|
</div>
|
|
219
220
|
);
|
|
220
221
|
}
|
|
@@ -269,7 +270,7 @@ function AiMessage({
|
|
|
269
270
|
role="article"
|
|
270
271
|
aria-label="AI response"
|
|
271
272
|
aria-busy={isStreaming}
|
|
272
|
-
className={cn("stg:px-4 stg:py-3", className)}
|
|
273
|
+
className={cn("stg:group stg:px-4 stg:py-3", className)}
|
|
273
274
|
>
|
|
274
275
|
<div className="stgm-prose">
|
|
275
276
|
<Streamdown
|
|
@@ -280,10 +281,118 @@ function AiMessage({
|
|
|
280
281
|
{markdown}
|
|
281
282
|
</Streamdown>
|
|
282
283
|
</div>
|
|
284
|
+
{/* The quiet per-message actions row (issue #278). Height is reserved
|
|
285
|
+
whenever it renders, so the hover reveal never shifts the prose; it
|
|
286
|
+
appears only once the message settles — a streaming message's text
|
|
287
|
+
is still changing, so a copy would race the content. Copies the
|
|
288
|
+
display markdown (fence-unwrapped), i.e. what the reader sees. */}
|
|
289
|
+
{!isStreaming && markdown.trim().length > 0 && (
|
|
290
|
+
<div className="stg:mt-1 stg:flex stg:h-6 stg:items-center">
|
|
291
|
+
<CopyMessageButton text={markdown} variant="quiet" />
|
|
292
|
+
</div>
|
|
293
|
+
)}
|
|
283
294
|
</div>
|
|
284
295
|
);
|
|
285
296
|
}
|
|
286
297
|
|
|
298
|
+
// ---------------------------------------------------------------------------
|
|
299
|
+
// Per-message copy affordance (issue #278)
|
|
300
|
+
// ---------------------------------------------------------------------------
|
|
301
|
+
|
|
302
|
+
// The floating circular action on a human bubble's shoulder — shared by the
|
|
303
|
+
// copy and edit buttons so the cluster reads as one control family.
|
|
304
|
+
const BUBBLE_ACTION_CLASSES = cn(
|
|
305
|
+
"stg:inline-flex stg:h-7 stg:w-7 stg:items-center stg:justify-center stg:rounded-full",
|
|
306
|
+
"stg:border stg:border-border stg:bg-card stg:text-muted-foreground stg:shadow-sm stg:transition",
|
|
307
|
+
"stg:hover:text-foreground stg:hover:bg-accent-hover",
|
|
308
|
+
"stg:opacity-0 stg:group-hover:opacity-100 stg:focus-visible:opacity-100",
|
|
309
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
// The quiet in-flow variant for AI prose: no border or fill, one contrast
|
|
313
|
+
// step below the reading text (`muted-foreground-subtle`, rising to
|
|
314
|
+
// `muted-foreground` on hover) — findable when wanted, invisible while
|
|
315
|
+
// reading. The same hover/focus reveal keeps both variants keyboard-reachable.
|
|
316
|
+
const QUIET_ACTION_CLASSES = cn(
|
|
317
|
+
"stg:inline-flex stg:h-6 stg:w-6 stg:items-center stg:justify-center stg:rounded-md",
|
|
318
|
+
"stg:text-muted-foreground-subtle stg:transition",
|
|
319
|
+
"stg:hover:text-muted-foreground stg:hover:bg-accent-hover",
|
|
320
|
+
"stg:opacity-0 stg:group-hover:opacity-100 stg:focus-visible:opacity-100",
|
|
321
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* The per-message copy control: writes the message's text to the clipboard
|
|
326
|
+
* and flips to a check for the feedback window. `variant` selects the visual
|
|
327
|
+
* home — `"bubble"` joins the human bubble's floating action cluster,
|
|
328
|
+
* `"quiet"` sits in the AI message's reserved actions row.
|
|
329
|
+
*/
|
|
330
|
+
function CopyMessageButton({
|
|
331
|
+
text,
|
|
332
|
+
variant,
|
|
333
|
+
}: {
|
|
334
|
+
text: string;
|
|
335
|
+
variant: "bubble" | "quiet";
|
|
336
|
+
}) {
|
|
337
|
+
const { copy, copied } = useCopyFeedback();
|
|
338
|
+
return (
|
|
339
|
+
<Tooltip>
|
|
340
|
+
<TooltipTrigger
|
|
341
|
+
render={
|
|
342
|
+
<button
|
|
343
|
+
type="button"
|
|
344
|
+
onClick={() => void copy(text)}
|
|
345
|
+
aria-label={copied ? "Copied" : "Copy message"}
|
|
346
|
+
className={
|
|
347
|
+
variant === "bubble" ? BUBBLE_ACTION_CLASSES : QUIET_ACTION_CLASSES
|
|
348
|
+
}
|
|
349
|
+
/>
|
|
350
|
+
}
|
|
351
|
+
>
|
|
352
|
+
{copied ? <CheckIcon /> : <CopyMessageIcon />}
|
|
353
|
+
</TooltipTrigger>
|
|
354
|
+
<TooltipContent side="top">{copied ? "Copied" : "Copy"}</TooltipContent>
|
|
355
|
+
</Tooltip>
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function CopyMessageIcon() {
|
|
360
|
+
return (
|
|
361
|
+
<svg
|
|
362
|
+
width="13"
|
|
363
|
+
height="13"
|
|
364
|
+
viewBox="0 0 24 24"
|
|
365
|
+
fill="none"
|
|
366
|
+
stroke="currentColor"
|
|
367
|
+
strokeWidth="2"
|
|
368
|
+
strokeLinecap="round"
|
|
369
|
+
strokeLinejoin="round"
|
|
370
|
+
aria-hidden="true"
|
|
371
|
+
>
|
|
372
|
+
<rect x="9" y="9" width="13" height="13" rx="2" />
|
|
373
|
+
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
|
|
374
|
+
</svg>
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
function CheckIcon() {
|
|
379
|
+
return (
|
|
380
|
+
<svg
|
|
381
|
+
width="13"
|
|
382
|
+
height="13"
|
|
383
|
+
viewBox="0 0 24 24"
|
|
384
|
+
fill="none"
|
|
385
|
+
stroke="currentColor"
|
|
386
|
+
strokeWidth="2"
|
|
387
|
+
strokeLinecap="round"
|
|
388
|
+
strokeLinejoin="round"
|
|
389
|
+
aria-hidden="true"
|
|
390
|
+
>
|
|
391
|
+
<path d="M20 6 9 17l-5-5" />
|
|
392
|
+
</svg>
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
|
|
287
396
|
const THINKING_PREVIEW_LENGTH = 80;
|
|
288
397
|
|
|
289
398
|
function ThinkingMessage({
|
|
@@ -320,7 +429,9 @@ function ThinkingMessage({
|
|
|
320
429
|
)}
|
|
321
430
|
>
|
|
322
431
|
<ThinkingIcon isStreaming={isStreaming} />
|
|
323
|
-
|
|
432
|
+
{/* Live reasoning carries the ambient-liveness sweep (stigmer#277) —
|
|
433
|
+
the words themselves signal activity, not just the icon. */}
|
|
434
|
+
<span className={cn("stg:min-w-0 stg:truncate", isStreaming && "stgm-shimmer-label")}>
|
|
324
435
|
{isStreaming && !hasContent
|
|
325
436
|
? "Thinking..."
|
|
326
437
|
: expanded
|