@stigmer/react 3.12.1 → 3.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/access/ManageAccessDialog.d.ts.map +1 -1
- package/access/ManageAccessDialog.js +7 -2
- package/access/ManageAccessDialog.js.map +1 -1
- package/activity/format-relative-time.d.ts +11 -9
- package/activity/format-relative-time.d.ts.map +1 -1
- package/activity/format-relative-time.js +11 -9
- package/activity/format-relative-time.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +5 -2
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +6 -5
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +10 -2
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +12 -20
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +3 -23
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +6 -10
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/approval-defaults-context.d.ts +47 -0
- package/approval-defaults-context.d.ts.map +1 -0
- package/approval-defaults-context.js +27 -0
- package/approval-defaults-context.js.map +1 -0
- package/attachment/index.d.ts +2 -0
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +1 -0
- package/attachment/index.js.map +1 -1
- package/attachment/vision-preflight.d.ts +113 -0
- package/attachment/vision-preflight.d.ts.map +1 -0
- package/attachment/vision-preflight.js +143 -0
- package/attachment/vision-preflight.js.map +1 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +3 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +3 -2
- package/billing/BillingSection.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +5 -4
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +9 -4
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +5 -4
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +9 -4
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +9 -4
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/useChannelSessions.d.ts.map +1 -1
- package/channel/useChannelSessions.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +8 -5
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +12 -7
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.d.ts +0 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +5 -10
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +2 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +120 -13
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.d.ts +0 -1
- package/composer/icons.d.ts.map +1 -1
- package/composer/icons.js +0 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +3 -2
- package/conversation/ConversationListPane.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +3 -14
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -14
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/environment/CreateEnvironmentForm.d.ts.map +1 -1
- package/environment/CreateEnvironmentForm.js +4 -8
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.d.ts.map +1 -1
- package/environment/EnvVarForm.js +2 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +5 -7
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ExecutionErrorNotice.d.ts +36 -0
- package/execution/ExecutionErrorNotice.d.ts.map +1 -0
- package/execution/ExecutionErrorNotice.js +39 -0
- package/execution/ExecutionErrorNotice.js.map +1 -0
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +5 -8
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +1 -6
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FollowUpInput.d.ts.map +1 -1
- package/execution/FollowUpInput.js +1 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/LivenessStatusLine.d.ts +40 -0
- package/execution/LivenessStatusLine.d.ts.map +1 -0
- package/execution/LivenessStatusLine.js +34 -0
- package/execution/LivenessStatusLine.js.map +1 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +31 -3
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +25 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -36
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +1 -1
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +9 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +30 -0
- package/execution/TerminalSession.d.ts.map +1 -1
- package/execution/TerminalSession.js +37 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +9 -0
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +16 -0
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts +20 -6
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +102 -29
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts.map +1 -1
- package/execution/ToolRunGroup.js +11 -11
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +5 -20
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/index.d.ts +6 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +3 -1
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +42 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +38 -4
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +17 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +4 -1
- package/execution/tool-presenter.js.map +1 -1
- package/execution/useArtifactInspection.d.ts.map +1 -1
- package/execution/useArtifactInspection.js +4 -7
- package/execution/useArtifactInspection.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -4
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +3 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +7 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -9
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +17 -26
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -4
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +8 -7
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +5 -6
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +1 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/SpinnerIcon.d.ts +22 -0
- package/internal/SpinnerIcon.d.ts.map +1 -0
- package/internal/SpinnerIcon.js +23 -0
- package/internal/SpinnerIcon.js.map +1 -0
- package/internal/select-element-text.d.ts +11 -0
- package/internal/select-element-text.d.ts.map +1 -0
- package/internal/select-element-text.js +19 -0
- package/internal/select-element-text.js.map +1 -0
- package/internal/thread-card/ThreadCardShell.d.ts +27 -10
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +11 -5
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.d.ts +11 -2
- package/internal/thread-card/glyphs.d.ts.map +1 -1
- package/internal/thread-card/glyphs.js +9 -3
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/thread-card/index.d.ts +1 -1
- package/internal/thread-card/index.d.ts.map +1 -1
- package/internal/thread-card/index.js.map +1 -1
- package/internal/useCopyFeedback.d.ts +28 -0
- package/internal/useCopyFeedback.d.ts.map +1 -0
- package/internal/useCopyFeedback.js +40 -0
- package/internal/useCopyFeedback.js.map +1 -0
- package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
- package/invitation/InvitationCreatedAlert.js +12 -19
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +14 -21
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +2 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +16 -27
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.js +1 -1
- package/manifest/EditResourceYamlDialog.js +1 -1
- package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
- package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
- package/mcp-server/DefinitionDriftNotice.js +52 -0
- package/mcp-server/DefinitionDriftNotice.js.map +1 -0
- package/mcp-server/McpServerConnectDialog.js +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +47 -14
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/OAuthAppForm.d.ts.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -4
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +39 -0
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
- package/mcp-server/internal/definitionDrift.js +122 -0
- package/mcp-server/internal/definitionDrift.js.map +1 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
- package/mcp-server/internal/mcpServerToInput.js +3 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +5 -4
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +1 -1
- package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
- package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
- package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
- package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
- package/models/ModelRegistryContext.d.ts +7 -1
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.js +9 -1
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -2
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +88 -6
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +133 -27
- package/models/registry.js.map +1 -1
- package/models/useModelRegistry.d.ts +7 -1
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -5
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +5 -6
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.d.ts.map +1 -1
- package/organization/CreateOrganizationForm.js +5 -9
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +7 -16
- package/organization/OrgProfilePanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +5 -6
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +6 -7
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -4
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +18 -25
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/provider.d.ts +34 -1
- package/provider.d.ts.map +1 -1
- package/provider.js +14 -7
- package/provider.js.map +1 -1
- package/resource-creation/WizardNav.d.ts.map +1 -1
- package/resource-creation/WizardNav.js +2 -4
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-detail/ConfirmDialog.js +1 -1
- package/resource-detail/useCopyResource.d.ts +4 -3
- package/resource-detail/useCopyResource.d.ts.map +1 -1
- package/resource-detail/useCopyResource.js +10 -19
- package/resource-detail/useCopyResource.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -4
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +6 -7
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +52 -2
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +21 -6
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionViewer.d.ts +63 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +43 -17
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +17 -0
- package/session/audience.d.ts.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/run-config.d.ts +50 -0
- package/session/run-config.d.ts.map +1 -0
- package/session/run-config.js +15 -0
- package/session/run-config.js.map +1 -0
- package/session/useNewSessionFlow.d.ts +11 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +29 -2
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +7 -7
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +18 -4
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +33 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +37 -2
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +44 -10
- package/session/useSessionPanel.js.map +1 -1
- package/settings/ApiKeysSection.d.ts.map +1 -1
- package/settings/ApiKeysSection.js +3 -2
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts.map +1 -1
- package/settings/ChannelAppsSection.js +3 -2
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +5 -3
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.d.ts.map +1 -1
- package/settings/IdentityProvidersSection.js +3 -2
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.d.ts.map +1 -1
- package/settings/InvitationsSection.js +3 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +3 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.d.ts.map +1 -1
- package/settings/OAuthAppsSection.js +3 -2
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.d.ts.map +1 -1
- package/settings/OrgProfileSection.js +3 -2
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +3 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +3 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +18 -7
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/chrome.d.ts +3 -4
- package/sidebar/chrome.d.ts.map +1 -1
- package/sidebar/chrome.js +5 -4
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDiffDialog.js +1 -1
- package/src/access/ManageAccessDialog.tsx +10 -4
- package/src/activity/format-relative-time.ts +11 -9
- package/src/agent/steps/CapabilitiesStep.tsx +6 -3
- package/src/agent/steps/IdentityStep.tsx +19 -12
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
- package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
- package/src/api-key/ApiKeyListPanel.tsx +3 -39
- package/src/api-key/CreateApiKeyForm.tsx +12 -26
- package/src/approval-defaults-context.ts +56 -0
- package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
- package/src/attachment/index.ts +12 -0
- package/src/attachment/vision-preflight.ts +236 -0
- package/src/billing/AutoRechargeCard.tsx +5 -4
- package/src/billing/BillingSection.tsx +4 -3
- package/src/channel/ChannelConversationsDialog.tsx +8 -4
- package/src/channel/ChannelCredentialsDialog.tsx +14 -4
- package/src/channel/ChannelTemplatesDialog.tsx +8 -4
- package/src/channel/ConnectSlackDialog.tsx +14 -4
- package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
- package/src/channel/useChannelSessions.ts +3 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
- package/src/channel-app/CreateChannelAppForm.tsx +17 -12
- package/src/channel-app/internal.tsx +5 -25
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +160 -13
- package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
- package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
- package/src/composer/icons.tsx +0 -18
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +4 -3
- package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
- package/src/dashboard/DashboardFailedRuns.tsx +2 -12
- package/src/environment/CreateEnvironmentForm.tsx +8 -27
- package/src/environment/EnvVarForm.tsx +2 -18
- package/src/environment/EnvironmentVariableEditor.tsx +5 -21
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ExecutionErrorNotice.tsx +99 -0
- package/src/execution/FilePathLink.tsx +5 -9
- package/src/execution/FileReviewCard.tsx +1 -20
- package/src/execution/FollowUpInput.tsx +1 -16
- package/src/execution/LivenessStatusLine.tsx +59 -0
- package/src/execution/MessageEntry.tsx +136 -25
- package/src/execution/MessageThread.tsx +84 -83
- package/src/execution/SetupProgress.tsx +5 -1
- package/src/execution/SubAgentSection.tsx +9 -20
- package/src/execution/TerminalSession.tsx +97 -10
- package/src/execution/ToolCallDetail.tsx +19 -0
- package/src/execution/ToolCallItem.tsx +157 -37
- package/src/execution/ToolRunGroup.tsx +30 -32
- package/src/execution/WriteBackCard.tsx +5 -24
- package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
- package/src/execution/__tests__/MessageThread.test.tsx +97 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
- package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
- package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
- package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +8 -2
- package/src/execution/tool-categories.ts +72 -8
- package/src/execution/tool-presenter.ts +22 -1
- package/src/execution/useArtifactInspection.ts +4 -8
- package/src/iam-policy/GrantAccessForm.tsx +2 -18
- package/src/iam-policy/OrgMembersPanel.tsx +3 -19
- package/src/iam-policy/RoleSelector.tsx +8 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
- package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
- package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
- package/src/index.ts +23 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
- package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
- package/src/internal/select-element-text.ts +17 -0
- package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
- package/src/internal/thread-card/glyphs.tsx +24 -3
- package/src/internal/thread-card/index.ts +1 -0
- package/src/internal/useCopyFeedback.ts +61 -0
- package/src/invitation/InvitationCreatedAlert.tsx +10 -18
- package/src/invitation/InvitationManager.tsx +23 -34
- package/src/invitation/InvitationRedemption.tsx +2 -18
- package/src/library/useExportResource.ts +15 -29
- package/src/manifest/ApplyManifestDialog.tsx +1 -1
- package/src/manifest/EditResourceYamlDialog.tsx +1 -1
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +1 -1
- package/src/mcp-server/McpServerDetailView.tsx +58 -26
- package/src/mcp-server/OAuthAppForm.tsx +2 -18
- package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
- package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
- package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
- package/src/mcp-server/internal/definitionDrift.ts +158 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
- package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
- package/src/mcp-server/useMcpServerConnect.ts +1 -1
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/models/ModelRegistryContext.ts +7 -1
- package/src/models/ModelSelector.tsx +37 -0
- package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
- package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
- package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
- package/src/models/index.ts +2 -2
- package/src/models/registry.ts +196 -29
- package/src/models/useModelRegistry.ts +10 -2
- package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
- package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
- package/src/organization/CreateOrganizationForm.tsx +10 -29
- package/src/organization/OrgProfilePanel.tsx +13 -44
- package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
- package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
- package/src/platform-client/PlatformClientListPanel.tsx +2 -18
- package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
- package/src/provider.tsx +76 -33
- package/src/resource-creation/WizardNav.tsx +2 -18
- package/src/resource-detail/ConfirmDialog.tsx +1 -1
- package/src/resource-detail/useCopyResource.ts +17 -23
- package/src/schedule/ScheduleDetailView.tsx +2 -18
- package/src/schedule/ScheduleForm.tsx +19 -34
- package/src/session/NewSessionViewer.tsx +85 -7
- package/src/session/SessionViewer.tsx +120 -17
- package/src/session/__tests__/audienceWiring.test.tsx +76 -0
- package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
- package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
- package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
- package/src/session/__tests__/useSessionPanel.test.ts +114 -0
- package/src/session/audience.ts +18 -0
- package/src/session/index.ts +2 -1
- package/src/session/run-config.ts +59 -0
- package/src/session/useNewSessionFlow.ts +39 -2
- package/src/session/useSessionConversation.ts +10 -8
- package/src/session/useSessionPageFlow.ts +51 -10
- package/src/session/useSessionPanel.ts +91 -10
- package/src/settings/ApiKeysSection.tsx +4 -3
- package/src/settings/ChannelAppsSection.tsx +4 -3
- package/src/settings/EnvironmentsSection.tsx +8 -5
- package/src/settings/IdentityProvidersSection.tsx +4 -3
- package/src/settings/InvitationsSection.tsx +4 -2
- package/src/settings/MembersSection.tsx +4 -2
- package/src/settings/OAuthAppsSection.tsx +4 -3
- package/src/settings/OrgProfileSection.tsx +4 -3
- package/src/settings/PlatformClientsSection.tsx +4 -3
- package/src/settings/UsageSection.tsx +4 -2
- package/src/sharing/ShareAgentDialog.tsx +28 -10
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +1 -1
- package/src/styles.css +43 -0
- package/src/version-history/VersionTimelineEntry.tsx +1 -21
- package/src/workflow/FailedRunsWidget.tsx +2 -9
- package/src/workflow/PendingApprovalsWidget.tsx +2 -9
- package/src/workflow/ViewYamlDialog.tsx +7 -22
- package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
- package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
- package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
- package/src/workflow/WorkflowExplainDialog.tsx +8 -24
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
- package/src/workflow/WorkflowRefinePanel.tsx +2 -18
- package/src/workflow/WorkflowRepairCard.tsx +2 -18
- package/src/workflow/WorkflowRunDialog.tsx +3 -23
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
- package/src/workflow/WorkflowVersionBadge.tsx +4 -13
- package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
- package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +1 -1
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useWorkflowCanvas.ts +114 -11
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +1 -23
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -11
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -11
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +7 -23
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +7 -11
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +5 -8
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +1 -1
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.d.ts +4 -2
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
- package/workflow/WorkflowCanvasInner.js +7 -3
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +6 -2
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +23 -6
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +6 -8
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +8 -2
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
- package/workflow/WorkflowRefinePanel.js +2 -4
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.d.ts.map +1 -1
- package/workflow/WorkflowRepairCard.js +2 -4
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +2 -7
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +2 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +4 -13
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +1 -26
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +1 -1
- package/workflow/useApprovalBoundary.d.ts +1 -1
- package/workflow/useApprovalBoundary.js +1 -1
- package/workflow/useWorkflowCanvas.d.ts +5 -1
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +99 -13
- package/workflow/useWorkflowCanvas.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +46 -13
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
package/src/composer/icons.tsx
CHANGED
|
@@ -54,24 +54,6 @@ export function ArrowUpIcon() {
|
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
export function SpinnerIcon() {
|
|
58
|
-
return (
|
|
59
|
-
<svg
|
|
60
|
-
width="16"
|
|
61
|
-
height="16"
|
|
62
|
-
viewBox="0 0 16 16"
|
|
63
|
-
fill="none"
|
|
64
|
-
stroke="currentColor"
|
|
65
|
-
strokeWidth="2"
|
|
66
|
-
strokeLinecap="round"
|
|
67
|
-
className="stg:animate-spin"
|
|
68
|
-
aria-hidden="true"
|
|
69
|
-
>
|
|
70
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
71
|
-
</svg>
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
57
|
/**
|
|
76
58
|
* Filled rounded square — the universal "stop" glyph. Sized to ~62% of the
|
|
77
59
|
* viewBox so it reads as a confident, deliberate mark (not a stray dot) when
|
|
@@ -7,7 +7,7 @@ import { getUserMessage } from "@stigmer/sdk";
|
|
|
7
7
|
import { ChannelSendOutcome } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
8
8
|
import type { SendChannelMessageOutput } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/message_io_pb";
|
|
9
9
|
import { Button } from "../button/Button.js";
|
|
10
|
-
import { SpinnerIcon } from "../
|
|
10
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
11
11
|
import { useComposer } from "../composer/useComposer.js";
|
|
12
12
|
|
|
13
13
|
/** Props for {@link ConversationComposer}. */
|
|
@@ -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(
|
|
@@ -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
|
-
}
|
|
@@ -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
|
+
});
|