@stigmer/react 3.12.1 → 3.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/access/ManageAccessDialog.d.ts.map +1 -1
- package/access/ManageAccessDialog.js +8 -19
- package/access/ManageAccessDialog.js.map +1 -1
- package/activity/format-relative-time.d.ts +11 -9
- package/activity/format-relative-time.d.ts.map +1 -1
- package/activity/format-relative-time.js +11 -9
- package/activity/format-relative-time.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +5 -2
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +6 -5
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +15 -20
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +12 -20
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +3 -23
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +6 -10
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/approval-defaults-context.d.ts +47 -0
- package/approval-defaults-context.d.ts.map +1 -0
- package/approval-defaults-context.js +27 -0
- package/approval-defaults-context.js.map +1 -0
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +8 -23
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/attachment/index.d.ts +2 -0
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +1 -0
- package/attachment/index.js.map +1 -1
- package/attachment/vision-preflight.d.ts +113 -0
- package/attachment/vision-preflight.d.ts.map +1 -0
- package/attachment/vision-preflight.js +143 -0
- package/attachment/vision-preflight.js.map +1 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +3 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +3 -2
- package/billing/BillingSection.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +6 -21
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +10 -21
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +7 -22
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +10 -23
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +10 -23
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/useChannelSessions.d.ts.map +1 -1
- package/channel/useChannelSessions.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +8 -5
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +12 -7
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.d.ts +0 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +5 -10
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +2 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +120 -13
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.d.ts +0 -1
- package/composer/icons.d.ts.map +1 -1
- package/composer/icons.js +0 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationAttentionBanner.d.ts +23 -6
- package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
- package/conversation/ConversationAttentionBanner.js +25 -10
- package/conversation/ConversationAttentionBanner.js.map +1 -1
- package/conversation/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +28 -8
- package/conversation/ConversationListPane.js.map +1 -1
- package/conversation/ConversationsWorkbench.d.ts.map +1 -1
- package/conversation/ConversationsWorkbench.js +1 -1
- package/conversation/ConversationsWorkbench.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +3 -14
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -14
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/environment/CreateEnvironmentForm.d.ts.map +1 -1
- package/environment/CreateEnvironmentForm.js +4 -8
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.d.ts.map +1 -1
- package/environment/EnvVarForm.js +2 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +5 -7
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +13 -3
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ArtifactPreviewModal.d.ts.map +1 -1
- package/execution/ArtifactPreviewModal.js +11 -17
- package/execution/ArtifactPreviewModal.js.map +1 -1
- package/execution/ExecutionErrorNotice.d.ts +36 -0
- package/execution/ExecutionErrorNotice.d.ts.map +1 -0
- package/execution/ExecutionErrorNotice.js +39 -0
- package/execution/ExecutionErrorNotice.js.map +1 -0
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +5 -8
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +1 -6
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FollowUpInput.d.ts.map +1 -1
- package/execution/FollowUpInput.js +1 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/LivenessStatusLine.d.ts +40 -0
- package/execution/LivenessStatusLine.d.ts.map +1 -0
- package/execution/LivenessStatusLine.js +34 -0
- package/execution/LivenessStatusLine.js.map +1 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +31 -3
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +25 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -36
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +1 -1
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +9 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +30 -0
- package/execution/TerminalSession.d.ts.map +1 -1
- package/execution/TerminalSession.js +37 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +9 -0
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +16 -0
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts +23 -7
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +120 -35
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts.map +1 -1
- package/execution/ToolRunGroup.js +11 -11
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +5 -20
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/index.d.ts +7 -3
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +4 -2
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +93 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +141 -5
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +32 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +10 -2
- package/execution/tool-presenter.js.map +1 -1
- package/execution/useArtifactInspection.d.ts.map +1 -1
- package/execution/useArtifactInspection.js +4 -7
- package/execution/useArtifactInspection.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -4
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +3 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +7 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -9
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +17 -26
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -4
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +8 -7
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +5 -6
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +1 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/DialogShell.d.ts +77 -0
- package/internal/DialogShell.d.ts.map +1 -0
- package/internal/DialogShell.js +77 -0
- package/internal/DialogShell.js.map +1 -0
- package/internal/SpinnerIcon.d.ts +22 -0
- package/internal/SpinnerIcon.d.ts.map +1 -0
- package/internal/SpinnerIcon.js +23 -0
- package/internal/SpinnerIcon.js.map +1 -0
- package/internal/select-element-text.d.ts +11 -0
- package/internal/select-element-text.d.ts.map +1 -0
- package/internal/select-element-text.js +19 -0
- package/internal/select-element-text.js.map +1 -0
- package/internal/thread-card/ThreadCardShell.d.ts +27 -10
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +11 -5
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.d.ts +11 -2
- package/internal/thread-card/glyphs.d.ts.map +1 -1
- package/internal/thread-card/glyphs.js +9 -3
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/thread-card/index.d.ts +1 -1
- package/internal/thread-card/index.d.ts.map +1 -1
- package/internal/thread-card/index.js.map +1 -1
- package/internal/useCopyFeedback.d.ts +28 -0
- package/internal/useCopyFeedback.d.ts.map +1 -0
- package/internal/useCopyFeedback.js +40 -0
- package/internal/useCopyFeedback.js.map +1 -0
- package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
- package/invitation/InvitationCreatedAlert.js +12 -19
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +14 -21
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +2 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +16 -27
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.d.ts.map +1 -1
- package/manifest/ApplyManifestDialog.js +7 -17
- package/manifest/ApplyManifestDialog.js.map +1 -1
- package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
- package/manifest/EditResourceYamlDialog.js +3 -19
- package/manifest/EditResourceYamlDialog.js.map +1 -1
- package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
- package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
- package/mcp-server/DefinitionDriftNotice.js +52 -0
- package/mcp-server/DefinitionDriftNotice.js.map +1 -0
- package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +8 -20
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +50 -28
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/OAuthAppForm.d.ts.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -4
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +39 -0
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
- package/mcp-server/internal/definitionDrift.js +122 -0
- package/mcp-server/internal/definitionDrift.js.map +1 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
- package/mcp-server/internal/mcpServerToInput.js +3 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +5 -4
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +1 -1
- package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
- package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
- package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
- package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
- package/models/ModelRegistryContext.d.ts +7 -1
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.js +9 -1
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -2
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +88 -6
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +133 -27
- package/models/registry.js.map +1 -1
- package/models/useModelRegistry.d.ts +7 -1
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -5
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +5 -6
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.d.ts.map +1 -1
- package/organization/CreateOrganizationForm.js +5 -9
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +7 -16
- package/organization/OrgProfilePanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +5 -6
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +6 -7
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -4
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +18 -25
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/provider.d.ts +34 -1
- package/provider.d.ts.map +1 -1
- package/provider.js +14 -7
- package/provider.js.map +1 -1
- package/resource-creation/WizardNav.d.ts.map +1 -1
- package/resource-creation/WizardNav.js +2 -4
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-detail/ConfirmDialog.d.ts +2 -3
- package/resource-detail/ConfirmDialog.d.ts.map +1 -1
- package/resource-detail/ConfirmDialog.js +8 -20
- package/resource-detail/ConfirmDialog.js.map +1 -1
- package/resource-detail/useCopyResource.d.ts +4 -3
- package/resource-detail/useCopyResource.d.ts.map +1 -1
- package/resource-detail/useCopyResource.js +10 -19
- package/resource-detail/useCopyResource.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -4
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +6 -7
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +52 -2
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +21 -6
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionViewer.d.ts +63 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +43 -17
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +17 -0
- package/session/audience.d.ts.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/run-config.d.ts +50 -0
- package/session/run-config.d.ts.map +1 -0
- package/session/run-config.js +15 -0
- package/session/run-config.js.map +1 -0
- package/session/useNewSessionFlow.d.ts +11 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +29 -2
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +7 -7
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +18 -4
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +33 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +37 -2
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +44 -10
- package/session/useSessionPanel.js.map +1 -1
- package/settings/ApiKeysSection.d.ts.map +1 -1
- package/settings/ApiKeysSection.js +3 -2
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts.map +1 -1
- package/settings/ChannelAppsSection.js +3 -2
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +5 -3
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.d.ts.map +1 -1
- package/settings/IdentityProvidersSection.js +3 -2
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.d.ts.map +1 -1
- package/settings/InvitationsSection.js +3 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +3 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.d.ts.map +1 -1
- package/settings/OAuthAppsSection.js +3 -2
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.d.ts.map +1 -1
- package/settings/OrgProfileSection.js +3 -2
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +3 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +3 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +19 -26
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/chrome.d.ts +3 -4
- package/sidebar/chrome.d.ts.map +1 -1
- package/sidebar/chrome.js +5 -4
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDiffDialog.d.ts.map +1 -1
- package/skill/SkillDiffDialog.js +5 -21
- package/skill/SkillDiffDialog.js.map +1 -1
- package/src/access/ManageAccessDialog.tsx +14 -28
- package/src/activity/format-relative-time.ts +11 -9
- package/src/agent/steps/CapabilitiesStep.tsx +6 -3
- package/src/agent/steps/IdentityStep.tsx +19 -12
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +29 -33
- package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
- package/src/api-key/ApiKeyListPanel.tsx +3 -39
- package/src/api-key/CreateApiKeyForm.tsx +12 -26
- package/src/approval-defaults-context.ts +56 -0
- package/src/attachment/AttachmentImageLightbox.tsx +13 -36
- package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
- package/src/attachment/index.ts +12 -0
- package/src/attachment/vision-preflight.ts +236 -0
- package/src/billing/AutoRechargeCard.tsx +5 -4
- package/src/billing/BillingSection.tsx +4 -3
- package/src/channel/ChannelConversationsDialog.tsx +14 -29
- package/src/channel/ChannelCredentialsDialog.tsx +19 -29
- package/src/channel/ChannelTemplatesDialog.tsx +16 -31
- package/src/channel/ConnectSlackDialog.tsx +19 -31
- package/src/channel/ConnectWhatsAppDialog.tsx +19 -31
- package/src/channel/useChannelSessions.ts +3 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
- package/src/channel-app/CreateChannelAppForm.tsx +17 -12
- package/src/channel-app/internal.tsx +5 -25
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +160 -13
- package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
- package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
- package/src/composer/icons.tsx +0 -18
- package/src/conversation/ConversationAttentionBanner.tsx +64 -19
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +46 -20
- package/src/conversation/ConversationsWorkbench.tsx +1 -0
- package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
- package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
- package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
- package/src/dashboard/DashboardFailedRuns.tsx +2 -12
- package/src/environment/CreateEnvironmentForm.tsx +8 -27
- package/src/environment/EnvVarForm.tsx +2 -18
- package/src/environment/EnvironmentVariableEditor.tsx +5 -21
- package/src/execution/ApprovalCard.tsx +23 -2
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ArtifactPreviewModal.tsx +15 -27
- package/src/execution/ExecutionErrorNotice.tsx +99 -0
- package/src/execution/FilePathLink.tsx +5 -9
- package/src/execution/FileReviewCard.tsx +1 -20
- package/src/execution/FollowUpInput.tsx +1 -16
- package/src/execution/LivenessStatusLine.tsx +59 -0
- package/src/execution/MessageEntry.tsx +136 -25
- package/src/execution/MessageThread.tsx +84 -83
- package/src/execution/SetupProgress.tsx +5 -1
- package/src/execution/SubAgentSection.tsx +9 -20
- package/src/execution/TerminalSession.tsx +97 -10
- package/src/execution/ToolCallDetail.tsx +19 -0
- package/src/execution/ToolCallItem.tsx +175 -44
- package/src/execution/ToolRunGroup.tsx +30 -32
- package/src/execution/WriteBackCard.tsx +5 -24
- package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
- package/src/execution/__tests__/MessageThread.test.tsx +97 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
- package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
- package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
- package/src/execution/__tests__/intent-title.test.tsx +221 -0
- package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +11 -2
- package/src/execution/tool-categories.ts +195 -9
- package/src/execution/tool-presenter.ts +44 -2
- package/src/execution/useArtifactInspection.ts +4 -8
- package/src/iam-policy/GrantAccessForm.tsx +2 -18
- package/src/iam-policy/OrgMembersPanel.tsx +3 -19
- package/src/iam-policy/RoleSelector.tsx +8 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
- package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
- package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
- package/src/index.ts +26 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/DialogShell.tsx +169 -0
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/DialogShell.test.tsx +223 -0
- package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
- package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
- package/src/internal/select-element-text.ts +17 -0
- package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
- package/src/internal/thread-card/glyphs.tsx +24 -3
- package/src/internal/thread-card/index.ts +1 -0
- package/src/internal/useCopyFeedback.ts +61 -0
- package/src/invitation/InvitationCreatedAlert.tsx +10 -18
- package/src/invitation/InvitationManager.tsx +23 -34
- package/src/invitation/InvitationRedemption.tsx +2 -18
- package/src/library/useExportResource.ts +15 -29
- package/src/manifest/ApplyManifestDialog.tsx +8 -26
- package/src/manifest/EditResourceYamlDialog.tsx +4 -31
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
- package/src/mcp-server/McpServerDetailView.tsx +69 -49
- package/src/mcp-server/OAuthAppForm.tsx +2 -18
- package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
- package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
- package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
- package/src/mcp-server/internal/definitionDrift.ts +158 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
- package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
- package/src/mcp-server/useMcpServerConnect.ts +1 -1
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/models/ModelRegistryContext.ts +7 -1
- package/src/models/ModelSelector.tsx +37 -0
- package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
- package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
- package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
- package/src/models/index.ts +2 -2
- package/src/models/registry.ts +196 -29
- package/src/models/useModelRegistry.ts +10 -2
- package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
- package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
- package/src/organization/CreateOrganizationForm.tsx +10 -29
- package/src/organization/OrgProfilePanel.tsx +13 -44
- package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
- package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
- package/src/platform-client/PlatformClientListPanel.tsx +2 -18
- package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
- package/src/provider.tsx +76 -33
- package/src/resource-creation/WizardNav.tsx +2 -18
- package/src/resource-detail/ConfirmDialog.tsx +9 -30
- package/src/resource-detail/useCopyResource.ts +17 -23
- package/src/schedule/ScheduleDetailView.tsx +2 -18
- package/src/schedule/ScheduleForm.tsx +19 -34
- package/src/session/NewSessionViewer.tsx +85 -7
- package/src/session/SessionViewer.tsx +120 -17
- package/src/session/__tests__/audienceWiring.test.tsx +76 -0
- package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
- package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
- package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
- package/src/session/__tests__/useSessionPanel.test.ts +114 -0
- package/src/session/audience.ts +18 -0
- package/src/session/index.ts +2 -1
- package/src/session/run-config.ts +59 -0
- package/src/session/useNewSessionFlow.ts +39 -2
- package/src/session/useSessionConversation.ts +10 -8
- package/src/session/useSessionPageFlow.ts +51 -10
- package/src/session/useSessionPanel.ts +91 -10
- package/src/settings/ApiKeysSection.tsx +4 -3
- package/src/settings/ChannelAppsSection.tsx +4 -3
- package/src/settings/EnvironmentsSection.tsx +8 -5
- package/src/settings/IdentityProvidersSection.tsx +4 -3
- package/src/settings/InvitationsSection.tsx +4 -2
- package/src/settings/MembersSection.tsx +4 -2
- package/src/settings/OAuthAppsSection.tsx +4 -3
- package/src/settings/OrgProfileSection.tsx +4 -3
- package/src/settings/PlatformClientsSection.tsx +4 -3
- package/src/settings/UsageSection.tsx +4 -2
- package/src/sharing/ShareAgentDialog.tsx +33 -37
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +13 -36
- package/src/styles.css +43 -0
- package/src/version-history/VersionTimelineEntry.tsx +1 -21
- package/src/workflow/FailedRunsWidget.tsx +2 -9
- package/src/workflow/PendingApprovalsWidget.tsx +2 -9
- package/src/workflow/ViewYamlDialog.tsx +21 -55
- package/src/workflow/WorkflowArchitectDialog.tsx +17 -68
- package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
- package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
- package/src/workflow/WorkflowExplainDialog.tsx +18 -60
- package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
- package/src/workflow/WorkflowRefinePanel.tsx +2 -18
- package/src/workflow/WorkflowRepairCard.tsx +2 -18
- package/src/workflow/WorkflowRunDialog.tsx +23 -70
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
- package/src/workflow/WorkflowVersionBadge.tsx +4 -13
- package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
- package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +20 -41
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useWorkflowCanvas.ts +114 -11
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +1 -23
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -11
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -11
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +14 -49
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +10 -33
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +5 -8
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +1 -1
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.d.ts +4 -2
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
- package/workflow/WorkflowCanvasInner.js +7 -3
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +6 -2
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +23 -6
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +10 -28
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
- package/workflow/WorkflowGraphFullscreenDialog.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +8 -2
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
- package/workflow/WorkflowRefinePanel.js +2 -4
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.d.ts.map +1 -1
- package/workflow/WorkflowRepairCard.js +2 -4
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +14 -35
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +2 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +4 -13
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +1 -26
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +14 -40
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.d.ts.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.d.ts +1 -1
- package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +10 -22
- package/workflow/templates/WorkflowTemplatePreview.js.map +1 -1
- package/workflow/useApprovalBoundary.d.ts +1 -1
- package/workflow/useApprovalBoundary.js +1 -1
- package/workflow/useWorkflowCanvas.d.ts +5 -1
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +99 -13
- package/workflow/useWorkflowCanvas.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +46 -13
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { memo, useCallback, useRef } from "react";
|
|
3
|
+
import { memo, useCallback, useId, useRef } from "react";
|
|
4
4
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
5
5
|
import { MessageSquare, TriangleAlert, User } from "lucide-react";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
@@ -110,6 +110,7 @@ export function ConversationListPane({
|
|
|
110
110
|
now,
|
|
111
111
|
className,
|
|
112
112
|
}: ConversationListPaneProps) {
|
|
113
|
+
const channelFilterId = useId();
|
|
113
114
|
const providerById = new Map(
|
|
114
115
|
channels.map((channel) => [
|
|
115
116
|
channel.metadata?.id ?? "",
|
|
@@ -129,11 +130,11 @@ export function ConversationListPane({
|
|
|
129
130
|
)}
|
|
130
131
|
{channels.length > 1 && (
|
|
131
132
|
<>
|
|
132
|
-
<label className="stg:sr-only" htmlFor=
|
|
133
|
+
<label className="stg:sr-only" htmlFor={channelFilterId}>
|
|
133
134
|
Filter by channel
|
|
134
135
|
</label>
|
|
135
136
|
<select
|
|
136
|
-
id=
|
|
137
|
+
id={channelFilterId}
|
|
137
138
|
value={channelFilter}
|
|
138
139
|
onChange={(e) => onChannelFilterChange(e.target.value)}
|
|
139
140
|
className={cn(
|
|
@@ -192,7 +193,11 @@ export function ConversationListPane({
|
|
|
192
193
|
{/* One context-only provider arms every row's attention
|
|
193
194
|
tooltip (the WorkspaceSidebar recents-list precedent). */}
|
|
194
195
|
<TooltipProvider>
|
|
195
|
-
|
|
196
|
+
{/* The SDK's own list reset (the MemberKeysPanel
|
|
197
|
+
convention): hosts without a global preflight would
|
|
198
|
+
otherwise render inbox rows with UA bullets and
|
|
199
|
+
indent. */}
|
|
200
|
+
<ul className="stg:m-0 stg:list-none stg:space-y-0.5 stg:p-0">
|
|
196
201
|
{conversations.map((conversation) => (
|
|
197
202
|
<ConversationRow
|
|
198
203
|
key={`${conversation.agentChannelId}:${conversation.conversationKey}`}
|
|
@@ -332,6 +337,20 @@ function ConversationFilterToggle({
|
|
|
332
337
|
);
|
|
333
338
|
}
|
|
334
339
|
|
|
340
|
+
/**
|
|
341
|
+
* The awaiting dot's meaning, shared verbatim by its tooltip and its
|
|
342
|
+
* sr-only text — one string per strength so sighted-hover and
|
|
343
|
+
* screen-reader users hear the identical fact. The copy carries the
|
|
344
|
+
* DISTINCTION, not just the fact (cloud#266): who holds the
|
|
345
|
+
* conversation is exactly what the two strengths encode, and it names
|
|
346
|
+
* the stake without promising an outcome — a muted dot survives a dead
|
|
347
|
+
* agent turn on purpose (DD-011 D-b's recovery path).
|
|
348
|
+
*/
|
|
349
|
+
const AWAITING_COPY: Record<"strong" | "muted", string> = {
|
|
350
|
+
strong: "Customer awaiting reply — a human has this conversation; the agent will not answer",
|
|
351
|
+
muted: "Customer awaiting reply — the agent has this conversation",
|
|
352
|
+
};
|
|
353
|
+
|
|
335
354
|
const ConversationRow = memo(function ConversationRow({
|
|
336
355
|
conversation,
|
|
337
356
|
label,
|
|
@@ -424,22 +443,29 @@ const ConversationRow = memo(function ConversationRow({
|
|
|
424
443
|
// carries a dot under its timestamp. Strength maps the
|
|
425
444
|
// holder (DD-011 D-a): strong when a human holds it — the
|
|
426
445
|
// agent will not answer, a person must — muted when the
|
|
427
|
-
// agent does.
|
|
428
|
-
//
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
/>
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
446
|
+
// agent does. Strong is FILLED and muted is a hollow RING
|
|
447
|
+
// (cloud#266): fill-vs-outline reads as "act vs watching"
|
|
448
|
+
// without decoding color, and color alone inverted in dark
|
|
449
|
+
// mode, where the muted gray outshone the strong primary.
|
|
450
|
+
// The meaning rides the house tooltip (the attention
|
|
451
|
+
// icon's exact pattern above — span trigger inside the row
|
|
452
|
+
// button, out of the tab order, sr-only as the accessible
|
|
453
|
+
// name); a bare dot told a first-time viewer nothing.
|
|
454
|
+
<Tooltip>
|
|
455
|
+
<TooltipTrigger render={<span className="stg:flex" />}>
|
|
456
|
+
<span
|
|
457
|
+
aria-hidden="true"
|
|
458
|
+
className={cn(
|
|
459
|
+
"stg:size-2 stg:rounded-full",
|
|
460
|
+
awaiting === "strong"
|
|
461
|
+
? "stg:bg-primary"
|
|
462
|
+
: "stg:border-2 stg:border-muted-foreground",
|
|
463
|
+
)}
|
|
464
|
+
/>
|
|
465
|
+
<span className="stg:sr-only">{AWAITING_COPY[awaiting]}</span>
|
|
466
|
+
</TooltipTrigger>
|
|
467
|
+
<TooltipContent side="top">{AWAITING_COPY[awaiting]}</TooltipContent>
|
|
468
|
+
</Tooltip>
|
|
443
469
|
)}
|
|
444
470
|
</span>
|
|
445
471
|
)}
|
|
@@ -340,6 +340,7 @@ export function ConversationsWorkbench({
|
|
|
340
340
|
<ConversationAttentionBanner
|
|
341
341
|
conversation={detail.conversation}
|
|
342
342
|
participation={participation}
|
|
343
|
+
supportsStaffReplies={descriptor?.supportsStaffReplies ?? true}
|
|
343
344
|
/>
|
|
344
345
|
)}
|
|
345
346
|
{detail.conversation && (
|
|
@@ -2,7 +2,10 @@ import { describe, it, expect, vi, afterEach } from "vitest";
|
|
|
2
2
|
import { cleanup, render, screen } from "@testing-library/react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import { create } from "@bufbuild/protobuf";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
ChannelConversationSchema,
|
|
7
|
+
ConversationControl,
|
|
8
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/conversation_io_pb";
|
|
6
9
|
import { ConversationAttentionBanner } from "../ConversationAttentionBanner";
|
|
7
10
|
import type {
|
|
8
11
|
ConversationCommand,
|
|
@@ -23,7 +26,7 @@ function participation(
|
|
|
23
26
|
): UseConversationParticipationReturn {
|
|
24
27
|
return {
|
|
25
28
|
reply: vi.fn(),
|
|
26
|
-
takeOver: vi.fn(),
|
|
29
|
+
takeOver: vi.fn().mockResolvedValue(conversation()),
|
|
27
30
|
handBack: vi.fn(),
|
|
28
31
|
clearAttention: vi.fn().mockResolvedValue(conversation()),
|
|
29
32
|
pendingCommands: new Set<ConversationCommand>(),
|
|
@@ -79,4 +82,75 @@ describe("ConversationAttentionBanner", () => {
|
|
|
79
82
|
);
|
|
80
83
|
expect(screen.getByText("agent channel ach_1 not found")).toBeDefined();
|
|
81
84
|
});
|
|
85
|
+
|
|
86
|
+
it("offers Take over beside Dismiss while the agent holds it — the escalation's answer lives where the escalation speaks (cloud#266, F-20)", async () => {
|
|
87
|
+
const user = userEvent.setup();
|
|
88
|
+
const p = participation();
|
|
89
|
+
render(
|
|
90
|
+
<ConversationAttentionBanner
|
|
91
|
+
conversation={conversation({ needsAttention: true })}
|
|
92
|
+
participation={p}
|
|
93
|
+
/>,
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
await user.click(screen.getByRole("button", { name: "Take over" }));
|
|
97
|
+
expect(p.takeOver).toHaveBeenCalled();
|
|
98
|
+
// Dismiss stays — the false-alarm path never disappears.
|
|
99
|
+
expect(screen.getByRole("button", { name: "Dismiss" })).toBeDefined();
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("offers only Dismiss when a human already holds it — the human arriving IS the attention answered", () => {
|
|
103
|
+
render(
|
|
104
|
+
<ConversationAttentionBanner
|
|
105
|
+
conversation={conversation({
|
|
106
|
+
needsAttention: true,
|
|
107
|
+
control: ConversationControl.control_human,
|
|
108
|
+
controlledBy: "idt_staff",
|
|
109
|
+
})}
|
|
110
|
+
participation={participation()}
|
|
111
|
+
/>,
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
expect(screen.queryByRole("button", { name: "Take over" })).toBeNull();
|
|
115
|
+
expect(screen.getByRole("button", { name: "Dismiss" })).toBeDefined();
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("offers only Dismiss on senderless providers — the control banner already explains the missing lane", () => {
|
|
119
|
+
render(
|
|
120
|
+
<ConversationAttentionBanner
|
|
121
|
+
conversation={conversation({ needsAttention: true })}
|
|
122
|
+
participation={participation()}
|
|
123
|
+
supportsStaffReplies={false}
|
|
124
|
+
/>,
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
expect(screen.queryByRole("button", { name: "Take over" })).toBeNull();
|
|
128
|
+
expect(screen.getByRole("button", { name: "Dismiss" })).toBeDefined();
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("shows the takeover in flight and renders its failure verbatim", () => {
|
|
132
|
+
const { rerender } = render(
|
|
133
|
+
<ConversationAttentionBanner
|
|
134
|
+
conversation={conversation({ needsAttention: true })}
|
|
135
|
+
participation={participation({
|
|
136
|
+
pendingCommands: new Set<ConversationCommand>(["takeOver"]),
|
|
137
|
+
})}
|
|
138
|
+
/>,
|
|
139
|
+
);
|
|
140
|
+
expect(screen.getByRole("button", { name: "Taking over…" })).toBeDefined();
|
|
141
|
+
|
|
142
|
+
rerender(
|
|
143
|
+
<ConversationAttentionBanner
|
|
144
|
+
conversation={conversation({ needsAttention: true })}
|
|
145
|
+
participation={participation({
|
|
146
|
+
commandErrors: new Map([
|
|
147
|
+
["takeOver", new Error("this channel is disabled: set spec.enabled to resume messaging on it")],
|
|
148
|
+
]),
|
|
149
|
+
})}
|
|
150
|
+
/>,
|
|
151
|
+
);
|
|
152
|
+
expect(
|
|
153
|
+
screen.getByText("this channel is disabled: set spec.enabled to resume messaging on it"),
|
|
154
|
+
).toBeDefined();
|
|
155
|
+
});
|
|
82
156
|
});
|
|
@@ -145,7 +145,7 @@ describe("ConversationListPane", () => {
|
|
|
145
145
|
).toBeDefined();
|
|
146
146
|
});
|
|
147
147
|
|
|
148
|
-
it("uses the house tooltip for the attention badge and no native titles anywhere (F-18)", () => {
|
|
148
|
+
it("uses the house tooltip for the attention badge and awaiting dot, no native titles anywhere (F-18)", () => {
|
|
149
149
|
const { container } = render(
|
|
150
150
|
<ConversationListPane
|
|
151
151
|
{...baseProps()}
|
|
@@ -154,6 +154,9 @@ describe("ConversationListPane", () => {
|
|
|
154
154
|
displayName: "Pat with a very long name that will truncate",
|
|
155
155
|
needsAttention: true,
|
|
156
156
|
attentionReason: "refund I cannot process",
|
|
157
|
+
// The awaiting dot renders too, so its tooltip trigger is
|
|
158
|
+
// under the same no-title / no-tab-stop assertions below.
|
|
159
|
+
awaitingReply: true,
|
|
157
160
|
}),
|
|
158
161
|
]}
|
|
159
162
|
/>,
|
|
@@ -204,8 +207,12 @@ describe("ConversationListPane", () => {
|
|
|
204
207
|
/>,
|
|
205
208
|
);
|
|
206
209
|
|
|
210
|
+
// The copy names the stake, not just the fact (cloud#266): a
|
|
211
|
+
// human-held wait is one only a person can end.
|
|
207
212
|
expect(
|
|
208
|
-
screen.getByText(
|
|
213
|
+
screen.getByText(
|
|
214
|
+
"Customer awaiting reply — a human has this conversation; the agent will not answer",
|
|
215
|
+
),
|
|
209
216
|
).toBeDefined();
|
|
210
217
|
});
|
|
211
218
|
|
|
@@ -217,9 +224,13 @@ describe("ConversationListPane", () => {
|
|
|
217
224
|
/>,
|
|
218
225
|
);
|
|
219
226
|
|
|
220
|
-
expect(screen.getByText("Customer awaiting reply")).toBeDefined();
|
|
221
227
|
expect(
|
|
222
|
-
screen.
|
|
228
|
+
screen.getByText("Customer awaiting reply — the agent has this conversation"),
|
|
229
|
+
).toBeDefined();
|
|
230
|
+
expect(
|
|
231
|
+
screen.queryByText(
|
|
232
|
+
"Customer awaiting reply — a human has this conversation; the agent will not answer",
|
|
233
|
+
),
|
|
223
234
|
).toBeNull();
|
|
224
235
|
});
|
|
225
236
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import {
|
|
6
6
|
CursorMemberKeyState,
|
|
@@ -420,21 +420,10 @@ function KeyStatusBadge({
|
|
|
420
420
|
* would join the operator's own Cursor account to the team.
|
|
421
421
|
*/
|
|
422
422
|
function CopyInviteButton({ inviteLink }: { readonly inviteLink: string }) {
|
|
423
|
-
const
|
|
424
|
-
|
|
425
|
-
const handleCopy = useCallback(async () => {
|
|
426
|
-
try {
|
|
427
|
-
await navigator.clipboard.writeText(inviteLink);
|
|
428
|
-
setCopied(true);
|
|
429
|
-
setTimeout(() => setCopied(false), 2000);
|
|
430
|
-
} catch {
|
|
431
|
-
// Clipboard unavailable (permissions, non-secure context) — the
|
|
432
|
-
// section description still points at the Cursor dashboard.
|
|
433
|
-
}
|
|
434
|
-
}, [inviteLink]);
|
|
423
|
+
const { copy, copied } = useCopyFeedback();
|
|
435
424
|
|
|
436
425
|
return (
|
|
437
|
-
<Button size="sm" variant="outline" onClick={() => void
|
|
426
|
+
<Button size="sm" variant="outline" onClick={() => void copy(inviteLink)}>
|
|
438
427
|
{copied ? "Copied" : "Copy invite"}
|
|
439
428
|
</Button>
|
|
440
429
|
);
|
|
@@ -137,16 +137,8 @@ function scenarView() {
|
|
|
137
137
|
}),
|
|
138
138
|
}),
|
|
139
139
|
],
|
|
140
|
-
// The
|
|
141
|
-
//
|
|
142
|
-
membersWithoutKeys: [
|
|
143
|
-
create(CursorTeamMemberSchema, {
|
|
144
|
-
userId: "u2",
|
|
145
|
-
email: "uncovered@scenar.ai",
|
|
146
|
-
name: "Uncovered U",
|
|
147
|
-
role: "member",
|
|
148
|
-
}),
|
|
149
|
-
],
|
|
140
|
+
// The console reads the spend-joined views (field 4's flat list is
|
|
141
|
+
// gone from the proto — stigmer#313).
|
|
150
142
|
membersWithoutKeysViews: [
|
|
151
143
|
create(CursorTeamMemberViewSchema, {
|
|
152
144
|
member: create(CursorTeamMemberSchema, {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { memo } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { DashboardFailedRun } from "./types.js";
|
|
6
|
+
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
6
7
|
|
|
7
8
|
export interface DashboardFailedRunsProps {
|
|
8
9
|
readonly failedRuns: readonly DashboardFailedRun[];
|
|
@@ -12,17 +13,6 @@ export interface DashboardFailedRunsProps {
|
|
|
12
13
|
readonly className?: string;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
function timeAgo(date: Date): string {
|
|
16
|
-
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
17
|
-
if (seconds < 60) return "just now";
|
|
18
|
-
const minutes = Math.floor(seconds / 60);
|
|
19
|
-
if (minutes < 60) return `${minutes}m ago`;
|
|
20
|
-
const hours = Math.floor(minutes / 60);
|
|
21
|
-
if (hours < 24) return `${hours}h ago`;
|
|
22
|
-
const days = Math.floor(hours / 24);
|
|
23
|
-
return `${days}d ago`;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
16
|
/**
|
|
27
17
|
* Widget showing recent failed executions from both agent and workflow
|
|
28
18
|
* domains, interleaved by timestamp.
|
|
@@ -89,7 +79,7 @@ export const DashboardFailedRuns = memo(function DashboardFailedRuns({
|
|
|
89
79
|
)}
|
|
90
80
|
</div>
|
|
91
81
|
<span className="stg:shrink-0 stg:text-muted-foreground">
|
|
92
|
-
{
|
|
82
|
+
{formatRelativeTime(run.failedAt)}
|
|
93
83
|
</span>
|
|
94
84
|
{onViewClick && (
|
|
95
85
|
<button
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { type FormEvent, useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { Environment } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
|
|
7
7
|
import { useCreateEnvironment } from "./useCreateEnvironment.js";
|
|
8
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
8
9
|
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Public API
|
|
@@ -47,6 +48,7 @@ export function CreateEnvironmentForm({
|
|
|
47
48
|
onCancel,
|
|
48
49
|
className,
|
|
49
50
|
}: CreateEnvironmentFormProps) {
|
|
51
|
+
const baseId = useId();
|
|
50
52
|
const { create, isCreating, error, clearError } = useCreateEnvironment();
|
|
51
53
|
|
|
52
54
|
const [name, setName] = useState("");
|
|
@@ -80,13 +82,13 @@ export function CreateEnvironmentForm({
|
|
|
80
82
|
<div className="stg:space-y-2">
|
|
81
83
|
<div className="stg:space-y-1">
|
|
82
84
|
<label
|
|
83
|
-
htmlFor=
|
|
85
|
+
htmlFor={`${baseId}-name`}
|
|
84
86
|
className="stg:text-xs stg:font-medium stg:text-foreground"
|
|
85
87
|
>
|
|
86
88
|
Name
|
|
87
89
|
</label>
|
|
88
90
|
<input
|
|
89
|
-
id=
|
|
91
|
+
id={`${baseId}-name`}
|
|
90
92
|
type="text"
|
|
91
93
|
value={name}
|
|
92
94
|
onChange={(e) => setName(e.target.value)}
|
|
@@ -105,14 +107,14 @@ export function CreateEnvironmentForm({
|
|
|
105
107
|
|
|
106
108
|
<div className="stg:space-y-1">
|
|
107
109
|
<label
|
|
108
|
-
htmlFor=
|
|
110
|
+
htmlFor={`${baseId}-desc`}
|
|
109
111
|
className="stg:text-xs stg:font-medium stg:text-muted-foreground"
|
|
110
112
|
>
|
|
111
113
|
Description{" "}
|
|
112
114
|
<span className="stg:text-muted-foreground-subtle">(optional)</span>
|
|
113
115
|
</label>
|
|
114
116
|
<input
|
|
115
|
-
id=
|
|
117
|
+
id={`${baseId}-desc`}
|
|
116
118
|
type="text"
|
|
117
119
|
value={description}
|
|
118
120
|
onChange={(e) => setDescription(e.target.value)}
|
|
@@ -144,7 +146,7 @@ export function CreateEnvironmentForm({
|
|
|
144
146
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
145
147
|
)}
|
|
146
148
|
>
|
|
147
|
-
{isCreating && <SpinnerIcon />}
|
|
149
|
+
{isCreating && <SpinnerIcon size={12} />}
|
|
148
150
|
Create environment
|
|
149
151
|
</button>
|
|
150
152
|
|
|
@@ -167,24 +169,3 @@ export function CreateEnvironmentForm({
|
|
|
167
169
|
);
|
|
168
170
|
}
|
|
169
171
|
|
|
170
|
-
// ---------------------------------------------------------------------------
|
|
171
|
-
// Icons
|
|
172
|
-
// ---------------------------------------------------------------------------
|
|
173
|
-
|
|
174
|
-
function SpinnerIcon() {
|
|
175
|
-
return (
|
|
176
|
-
<svg
|
|
177
|
-
width="12"
|
|
178
|
-
height="12"
|
|
179
|
-
viewBox="0 0 16 16"
|
|
180
|
-
fill="none"
|
|
181
|
-
stroke="currentColor"
|
|
182
|
-
strokeWidth="2"
|
|
183
|
-
strokeLinecap="round"
|
|
184
|
-
className="stg:animate-spin"
|
|
185
|
-
aria-hidden="true"
|
|
186
|
-
>
|
|
187
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
188
|
-
</svg>
|
|
189
|
-
);
|
|
190
|
-
}
|
|
@@ -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
|
-
}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import {
|
|
13
13
|
resolveToolCategoryFromKind,
|
|
14
14
|
extractPrimaryArgFromPreview,
|
|
15
|
+
extractShellIntentFromPreview,
|
|
15
16
|
extractWriteContentFromPreview,
|
|
16
17
|
isFileCategory,
|
|
17
18
|
type ToolCategory,
|
|
@@ -160,6 +161,26 @@ export function ApprovalCardHeader({
|
|
|
160
161
|
],
|
|
161
162
|
);
|
|
162
163
|
|
|
164
|
+
// A shell gate whose call carries a model-authored intent phrase titles
|
|
165
|
+
// the header with it (stigmer#276) — supplementary context only: the
|
|
166
|
+
// command stays foregrounded in the body's terminal preview, which remains
|
|
167
|
+
// the content the user is approving.
|
|
168
|
+
const intent = useMemo(
|
|
169
|
+
() =>
|
|
170
|
+
extractShellIntentFromPreview(
|
|
171
|
+
pendingApproval.toolName,
|
|
172
|
+
pendingApproval.argsPreview,
|
|
173
|
+
pendingApproval.mcpServerSlug,
|
|
174
|
+
pendingApproval.toolKind,
|
|
175
|
+
),
|
|
176
|
+
[
|
|
177
|
+
pendingApproval.toolName,
|
|
178
|
+
pendingApproval.argsPreview,
|
|
179
|
+
pendingApproval.mcpServerSlug,
|
|
180
|
+
pendingApproval.toolKind,
|
|
181
|
+
],
|
|
182
|
+
);
|
|
183
|
+
|
|
163
184
|
return (
|
|
164
185
|
<div
|
|
165
186
|
className={cn(
|
|
@@ -173,7 +194,7 @@ export function ApprovalCardHeader({
|
|
|
173
194
|
|
|
174
195
|
<span className="stg:min-w-0 stg:flex-1 stg:flex stg:items-center stg:gap-1.5 stg:overflow-hidden">
|
|
175
196
|
<span className="stg:shrink-0 stg:font-medium stg:text-foreground">
|
|
176
|
-
{categoryInfo.label}
|
|
197
|
+
{intent ?? categoryInfo.label}
|
|
177
198
|
</span>
|
|
178
199
|
{primaryArg &&
|
|
179
200
|
categoryInfo.category !== "shell" &&
|
|
@@ -186,7 +207,7 @@ export function ApprovalCardHeader({
|
|
|
186
207
|
/>
|
|
187
208
|
) : (
|
|
188
209
|
// Shell is the exception: its command is shown in the body's
|
|
189
|
-
// terminal session, so the header stays minimal (icon +
|
|
210
|
+
// terminal session, so the header stays minimal (icon + title).
|
|
190
211
|
<span className="stg:min-w-0 stg:truncate stg:font-mono stg:text-muted-foreground">
|
|
191
212
|
{primaryArg}
|
|
192
213
|
</span>
|
|
@@ -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
|
-
}
|