@stigmer/react 3.12.2 → 3.12.4
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 +3 -19
- package/access/ManageAccessDialog.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +2 -1
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/AgentInstanceDetailPanel.d.ts.map +1 -1
- package/agent-instance/AgentInstanceDetailPanel.js +2 -1
- package/agent-instance/AgentInstanceDetailPanel.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +7 -20
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +2 -1
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +8 -23
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +5 -20
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +3 -19
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +6 -21
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +5 -22
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +3 -21
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/connect/ServingAppSection.d.ts.map +1 -1
- package/channel/connect/ServingAppSection.js +2 -1
- package/channel/connect/ServingAppSection.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +2 -1
- package/channel-app/CreateChannelAppForm.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/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +26 -6
- package/conversation/ConversationListPane.js.map +1 -1
- package/conversation/ConversationTimelineView.d.ts.map +1 -1
- package/conversation/ConversationTimelineView.js +2 -1
- package/conversation/ConversationTimelineView.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/CursorAccountsConsole.d.ts.map +1 -1
- package/cursor-accounts/CursorAccountsConsole.js +2 -1
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
- package/cursor-accounts/MemberKeysPanel.d.ts.map +1 -1
- package/cursor-accounts/MemberKeysPanel.js +2 -1
- package/cursor-accounts/MemberKeysPanel.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -1
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/dependency-graph/DependencyGraph.d.ts.map +1 -1
- package/dependency-graph/DependencyGraph.js +2 -1
- package/dependency-graph/DependencyGraph.js.map +1 -1
- package/dependency-graph/DependencyTreeNode.d.ts.map +1 -1
- package/dependency-graph/DependencyTreeNode.js +2 -1
- package/dependency-graph/DependencyTreeNode.js.map +1 -1
- package/environment/EnvironmentPicker.d.ts.map +1 -1
- package/environment/EnvironmentPicker.js +2 -1
- package/environment/EnvironmentPicker.js.map +1 -1
- package/error/SecretFlowErrorGuide.d.ts.map +1 -1
- package/error/SecretFlowErrorGuide.js +2 -1
- package/error/SecretFlowErrorGuide.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/ArtifactContentBody.d.ts.map +1 -1
- package/execution/ArtifactContentBody.js +2 -1
- package/execution/ArtifactContentBody.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/ArtifactsWidget.d.ts.map +1 -1
- package/execution/ArtifactsWidget.js +2 -1
- package/execution/ArtifactsWidget.js.map +1 -1
- package/execution/FileChangeProgressBar.d.ts.map +1 -1
- package/execution/FileChangeProgressBar.js +2 -1
- package/execution/FileChangeProgressBar.js.map +1 -1
- package/execution/TodoList.d.ts.map +1 -1
- package/execution/TodoList.js +2 -1
- package/execution/TodoList.js.map +1 -1
- package/execution/ToolCallItem.d.ts +3 -1
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +19 -7
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/WriteBacksWidget.d.ts.map +1 -1
- package/execution/WriteBacksWidget.js +2 -1
- package/execution/WriteBacksWidget.js.map +1 -1
- package/execution/index.d.ts +1 -1
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +1 -1
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +37 -3
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +74 -2
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +15 -0
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +7 -2
- package/execution/tool-presenter.js.map +1 -1
- package/iam-policy/PeopleWithAccess.d.ts.map +1 -1
- package/iam-policy/PeopleWithAccess.js +2 -1
- package/iam-policy/PeopleWithAccess.js.map +1 -1
- package/iam-policy/PrincipalPicker.d.ts.map +1 -1
- package/iam-policy/PrincipalPicker.js +2 -1
- package/iam-policy/PrincipalPicker.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +2 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +2 -1
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +2 -1
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +2 -1
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/index.d.ts +4 -2
- package/index.d.ts.map +1 -1
- package/index.js +4 -1
- package/index.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/element-resets.d.ts +17 -0
- package/internal/element-resets.d.ts.map +1 -0
- package/internal/element-resets.js +32 -0
- package/internal/element-resets.js.map +1 -0
- package/internal/file-tree/FileTreeNode.d.ts.map +1 -1
- package/internal/file-tree/FileTreeNode.js +2 -1
- package/internal/file-tree/FileTreeNode.js.map +1 -1
- package/internal/markdown-components.d.ts +7 -0
- package/internal/markdown-components.d.ts.map +1 -1
- package/internal/markdown-components.js +15 -5
- package/internal/markdown-components.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +2 -1
- package/invitation/InvitationManager.js.map +1 -1
- package/manifest/ApplyManifestDialog.d.ts.map +1 -1
- package/manifest/ApplyManifestDialog.js +8 -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/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 +4 -15
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +2 -1
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +2 -1
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +2 -1
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/pricing-governance/BaselineEditor.d.ts.map +1 -1
- package/pricing-governance/BaselineEditor.js +2 -1
- package/pricing-governance/BaselineEditor.js.map +1 -1
- package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -1
- package/pricing-governance/PricingGovernanceConsole.js +2 -1
- package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
- package/provider-standing/ProviderStandingAccessNotice.d.ts +11 -0
- package/provider-standing/ProviderStandingAccessNotice.d.ts.map +1 -0
- package/provider-standing/ProviderStandingAccessNotice.js +14 -0
- package/provider-standing/ProviderStandingAccessNotice.js.map +1 -0
- package/provider-standing/ProviderStandingConsole.d.ts +24 -0
- package/provider-standing/ProviderStandingConsole.d.ts.map +1 -0
- package/provider-standing/ProviderStandingConsole.js +98 -0
- package/provider-standing/ProviderStandingConsole.js.map +1 -0
- package/provider-standing/index.d.ts +6 -0
- package/provider-standing/index.d.ts.map +1 -0
- package/provider-standing/index.js +6 -0
- package/provider-standing/index.js.map +1 -0
- package/provider-standing/useProviderStanding.d.ts +34 -0
- package/provider-standing/useProviderStanding.d.ts.map +1 -0
- package/provider-standing/useProviderStanding.js +26 -0
- package/provider-standing/useProviderStanding.js.map +1 -0
- package/provider.d.ts +12 -0
- package/provider.d.ts.map +1 -1
- package/provider.js +12 -0
- package/provider.js.map +1 -1
- package/resource-creation/StepIndicator.d.ts.map +1 -1
- package/resource-creation/StepIndicator.js +2 -1
- package/resource-creation/StepIndicator.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/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +3 -2
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleRunsTable.d.ts.map +1 -1
- package/schedule/ScheduleRunsTable.js +2 -1
- package/schedule/ScheduleRunsTable.js.map +1 -1
- package/session/facets/ArtifactsTab.d.ts.map +1 -1
- package/session/facets/ArtifactsTab.js +2 -1
- package/session/facets/ArtifactsTab.js.map +1 -1
- package/session/facets/ChangesTab.d.ts.map +1 -1
- package/session/facets/ChangesTab.js +2 -1
- package/session/facets/ChangesTab.js.map +1 -1
- package/session/facets/UsageTab.d.ts +10 -3
- package/session/facets/UsageTab.d.ts.map +1 -1
- package/session/facets/UsageTab.js +42 -6
- package/session/facets/UsageTab.js.map +1 -1
- package/session/index.d.ts +1 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/useSessionUsage.d.ts +25 -0
- package/session/useSessionUsage.d.ts.map +1 -1
- package/session/useSessionUsage.js +11 -0
- package/session/useSessionUsage.js.map +1 -1
- package/settings/settings-nav.d.ts.map +1 -1
- package/settings/settings-nav.js +7 -1
- package/settings/settings-nav.js.map +1 -1
- package/settings/useSettingsNavGroups.d.ts.map +1 -1
- package/settings/useSettingsNavGroups.js +4 -1
- package/settings/useSettingsNavGroups.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +4 -21
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
- package/sidebar/WorkspaceSidebar.js +2 -1
- package/sidebar/WorkspaceSidebar.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/skill/SkillFileBrowser.d.ts.map +1 -1
- package/skill/SkillFileBrowser.js +2 -1
- package/skill/SkillFileBrowser.js.map +1 -1
- package/skill/internal/fetchAndUnpackArtifact.d.ts +1 -1
- package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -1
- package/skill/internal/fetchAndUnpackArtifact.js +47 -3
- package/skill/internal/fetchAndUnpackArtifact.js.map +1 -1
- package/skill/useSkillDiff.d.ts.map +1 -1
- package/skill/useSkillDiff.js +7 -1
- package/skill/useSkillDiff.js.map +1 -1
- package/skill/useSkillUpload.d.ts.map +1 -1
- package/skill/useSkillUpload.js +22 -4
- package/skill/useSkillUpload.js.map +1 -1
- package/src/__tests__/bare-host-resets.layout.test.tsx +184 -0
- package/src/access/ManageAccessDialog.tsx +7 -27
- package/src/agent/steps/IdentityStep.tsx +2 -1
- package/src/agent-instance/AgentInstanceDetailPanel.tsx +2 -1
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +14 -27
- package/src/api-key/CreateApiKeyForm.tsx +2 -1
- package/src/attachment/AttachmentImageLightbox.tsx +13 -36
- package/src/channel/ChannelConversationsDialog.tsx +10 -28
- package/src/channel/ChannelCredentialsDialog.tsx +8 -28
- package/src/channel/ChannelTemplatesDialog.tsx +12 -30
- package/src/channel/ConnectSlackDialog.tsx +10 -31
- package/src/channel/ConnectWhatsAppDialog.tsx +8 -30
- package/src/channel/connect/ServingAppSection.tsx +2 -1
- package/src/channel-app/CreateChannelAppForm.tsx +2 -1
- package/src/conversation/ConversationAttentionBanner.tsx +64 -19
- package/src/conversation/ConversationListPane.tsx +39 -17
- package/src/conversation/ConversationTimelineView.tsx +2 -1
- 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/CursorAccountsConsole.tsx +2 -1
- package/src/cursor-accounts/MemberKeysPanel.tsx +2 -1
- package/src/dashboard/DashboardFailedRuns.tsx +2 -1
- package/src/dependency-graph/DependencyGraph.tsx +2 -1
- package/src/dependency-graph/DependencyTreeNode.tsx +2 -1
- package/src/environment/EnvironmentPicker.tsx +2 -1
- package/src/error/SecretFlowErrorGuide.tsx +3 -2
- package/src/execution/ApprovalCard.tsx +23 -2
- package/src/execution/ArtifactContentBody.tsx +2 -1
- package/src/execution/ArtifactPreviewModal.tsx +15 -27
- package/src/execution/ArtifactsWidget.tsx +2 -1
- package/src/execution/FileChangeProgressBar.tsx +2 -1
- package/src/execution/TodoList.tsx +2 -1
- package/src/execution/ToolCallItem.tsx +19 -8
- package/src/execution/WriteBacksWidget.tsx +2 -1
- package/src/execution/__tests__/intent-title.test.tsx +221 -0
- package/src/execution/index.ts +3 -0
- package/src/execution/tool-categories.ts +103 -5
- package/src/execution/tool-presenter.ts +22 -1
- package/src/iam-policy/PeopleWithAccess.tsx +2 -1
- package/src/iam-policy/PrincipalPicker.tsx +2 -0
- package/src/iam-policy/RoleSelector.tsx +2 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +2 -1
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +2 -1
- package/src/identity-provider/IdentityProviderWizard.tsx +2 -1
- package/src/index.ts +16 -0
- package/src/internal/DialogShell.tsx +169 -0
- package/src/internal/__tests__/DialogShell.test.tsx +223 -0
- package/src/internal/element-resets.ts +33 -0
- package/src/internal/file-tree/FileTreeNode.tsx +2 -1
- package/src/internal/markdown-components.tsx +15 -5
- package/src/invitation/InvitationManager.tsx +3 -2
- package/src/manifest/ApplyManifestDialog.tsx +10 -27
- package/src/manifest/EditResourceYamlDialog.tsx +4 -31
- package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
- package/src/mcp-server/McpServerDetailView.tsx +12 -24
- package/src/mcp-server/steps/IdentityTransportStep.tsx +3 -2
- package/src/platform-client/CreatePlatformClientForm.tsx +4 -3
- package/src/platform-client/PlatformClientDetailPanel.tsx +4 -3
- package/src/pricing-governance/BaselineEditor.tsx +3 -2
- package/src/pricing-governance/PricingGovernanceConsole.tsx +2 -1
- package/src/provider-standing/ProviderStandingAccessNotice.tsx +36 -0
- package/src/provider-standing/ProviderStandingConsole.tsx +216 -0
- package/src/provider-standing/__tests__/ProviderStandingConsole.test.tsx +143 -0
- package/src/provider-standing/index.ts +8 -0
- package/src/provider-standing/useProviderStanding.ts +50 -0
- package/src/provider.tsx +12 -0
- package/src/resource-creation/StepIndicator.tsx +2 -1
- package/src/resource-detail/ConfirmDialog.tsx +9 -30
- package/src/schedule/ScheduleDetailView.tsx +3 -2
- package/src/schedule/ScheduleRunsTable.tsx +2 -1
- package/src/session/__tests__/UsageTab.test.tsx +136 -0
- package/src/session/__tests__/useSessionUsage.test.ts +19 -0
- package/src/session/facets/ArtifactsTab.tsx +2 -1
- package/src/session/facets/ChangesTab.tsx +2 -1
- package/src/session/facets/UsageTab.tsx +98 -6
- package/src/session/index.ts +1 -0
- package/src/session/useSessionUsage.ts +37 -0
- package/src/settings/__tests__/useSettingsNavGroups.test.tsx +11 -1
- package/src/settings/settings-nav.ts +7 -0
- package/src/settings/useSettingsNavGroups.ts +8 -1
- package/src/sharing/ShareAgentDialog.tsx +9 -30
- package/src/sidebar/WorkspaceSidebar.tsx +2 -1
- package/src/skill/SkillDiffDialog.tsx +13 -36
- package/src/skill/SkillFileBrowser.tsx +2 -1
- package/src/skill/__tests__/SkillFileBrowser.test.tsx +10 -2
- package/src/skill/__tests__/fetchAndUnpackArtifact.test.ts +90 -0
- package/src/skill/__tests__/useSkillUpload.test.ts +69 -0
- package/src/skill/internal/fetchAndUnpackArtifact.ts +54 -4
- package/src/skill/useSkillDiff.ts +7 -1
- package/src/skill/useSkillUpload.ts +25 -6
- package/src/workflow/FailedRunsWidget.tsx +2 -1
- package/src/workflow/PendingApprovalsWidget.tsx +2 -1
- package/src/workflow/ViewYamlDialog.tsx +18 -37
- package/src/workflow/WorkflowArchitectDialog.tsx +11 -43
- package/src/workflow/WorkflowExplainDialog.tsx +11 -37
- package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
- package/src/workflow/WorkflowRunDialog.tsx +21 -48
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +14 -31
- package/src/workflow/facets/WorkflowArtifactsTab.tsx +2 -1
- package/src/workflow/facets/WorkflowUsageTab.tsx +2 -1
- package/src/workflow/inspector/WorkflowSummaryPanel.tsx +2 -1
- package/src/workflow/inspector/tabs/BranchesTab.tsx +2 -1
- package/src/workflow/inspector/tabs/IterationTab.tsx +2 -1
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
- package/src/workspace/ExplorerTree.tsx +2 -1
- package/src/workspace/WorkspaceContentSearch.tsx +2 -1
- package/src/workspace/WorkspaceFileSearch.tsx +2 -1
- package/src/workspace/WorkspaceSummary.tsx +2 -1
- package/styles.css +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -1
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -1
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +10 -29
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +5 -24
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +5 -21
- 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/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +13 -29
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +8 -26
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/facets/WorkflowArtifactsTab.d.ts.map +1 -1
- package/workflow/facets/WorkflowArtifactsTab.js +2 -1
- package/workflow/facets/WorkflowArtifactsTab.js.map +1 -1
- package/workflow/facets/WorkflowUsageTab.d.ts.map +1 -1
- package/workflow/facets/WorkflowUsageTab.js +2 -1
- package/workflow/facets/WorkflowUsageTab.js.map +1 -1
- package/workflow/inspector/WorkflowSummaryPanel.d.ts.map +1 -1
- package/workflow/inspector/WorkflowSummaryPanel.js +2 -1
- package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.d.ts.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.js +2 -1
- package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
- package/workflow/inspector/tabs/IterationTab.d.ts.map +1 -1
- package/workflow/inspector/tabs/IterationTab.js +2 -1
- package/workflow/inspector/tabs/IterationTab.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 +2 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.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/workspace/ExplorerTree.d.ts.map +1 -1
- package/workspace/ExplorerTree.js +2 -1
- package/workspace/ExplorerTree.js.map +1 -1
- package/workspace/WorkspaceContentSearch.d.ts.map +1 -1
- package/workspace/WorkspaceContentSearch.js +2 -1
- package/workspace/WorkspaceContentSearch.js.map +1 -1
- package/workspace/WorkspaceFileSearch.d.ts.map +1 -1
- package/workspace/WorkspaceFileSearch.js +2 -1
- package/workspace/WorkspaceFileSearch.js.map +1 -1
- package/workspace/WorkspaceSummary.d.ts.map +1 -1
- package/workspace/WorkspaceSummary.js +2 -1
- package/workspace/WorkspaceSummary.js.map +1 -1
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
import { TriangleAlert } from "lucide-react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
|
-
import
|
|
6
|
+
import {
|
|
7
|
+
ConversationControl,
|
|
8
|
+
type ChannelConversation,
|
|
9
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/conversation_io_pb";
|
|
7
10
|
import { Button } from "../button/Button.js";
|
|
8
11
|
import type { UseConversationParticipationReturn } from "./useConversationParticipation.js";
|
|
9
12
|
|
|
@@ -13,28 +16,51 @@ export interface ConversationAttentionBannerProps {
|
|
|
13
16
|
readonly conversation: ChannelConversation;
|
|
14
17
|
/** The participation commands (from `useConversationParticipation`). */
|
|
15
18
|
readonly participation: UseConversationParticipationReturn;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the channel's provider has a staff send lane — the same
|
|
21
|
+
* fact `ConversationControlBanner` takes. When `false` the banner
|
|
22
|
+
* offers only Dismiss: a takeover would silence the agent with no way
|
|
23
|
+
* to reply, and the control banner beside this one already explains
|
|
24
|
+
* the missing lane, so a disabled Take over here would duplicate it.
|
|
25
|
+
* Defaults to `true` for hosts that only wire providers with staff
|
|
26
|
+
* lanes.
|
|
27
|
+
*/
|
|
28
|
+
readonly supportsStaffReplies?: boolean;
|
|
16
29
|
/** Additional classes for the banner container. */
|
|
17
30
|
readonly className?: string;
|
|
18
31
|
}
|
|
19
32
|
|
|
20
33
|
/**
|
|
21
34
|
* The needs-attention banner (channel-conversations DD-008): the
|
|
22
|
-
* escalating agent's reason, verbatim, with the
|
|
35
|
+
* escalating agent's reason, verbatim, with the escalation's ANSWER
|
|
36
|
+
* beside its false-alarm dismissal.
|
|
37
|
+
*
|
|
38
|
+
* Take over is the primary action because the human arriving IS the
|
|
39
|
+
* answer to an escalation — taking over clears attention structurally
|
|
40
|
+
* (cloud#266 / F-20: the answer used to live one banner away in
|
|
41
|
+
* equal-weight chrome, so staff read the plea and missed the response).
|
|
42
|
+
* It renders only while the agent holds the conversation on a channel
|
|
43
|
+
* with a staff lane; a human already holding it IS the attention
|
|
44
|
+
* answered, so only Dismiss remains.
|
|
23
45
|
*
|
|
24
46
|
* Dismiss is `clearAttention` — attention clears in place and control
|
|
25
|
-
* never moves
|
|
26
|
-
* human arriving IS the answer to an escalation). Renders nothing while
|
|
27
|
-
* the conversation is unflagged.
|
|
47
|
+
* never moves. Renders nothing while the conversation is unflagged.
|
|
28
48
|
*/
|
|
29
49
|
export function ConversationAttentionBanner({
|
|
30
50
|
conversation,
|
|
31
51
|
participation,
|
|
52
|
+
supportsStaffReplies = true,
|
|
32
53
|
className,
|
|
33
54
|
}: ConversationAttentionBannerProps) {
|
|
34
55
|
if (!conversation.needsAttention) return null;
|
|
35
56
|
|
|
36
|
-
const { clearAttention, pendingCommands, commandErrors } = participation;
|
|
37
|
-
|
|
57
|
+
const { takeOver, clearAttention, pendingCommands, commandErrors } = participation;
|
|
58
|
+
// Take over's failure renders on the control banner too — same
|
|
59
|
+
// command, same truth; a rare failure showing twice on the stacked
|
|
60
|
+
// banners beats it hiding beside the button the staffer pressed.
|
|
61
|
+
const error = commandErrors.get("clearAttention") ?? commandErrors.get("takeOver");
|
|
62
|
+
const humanHeld = conversation.control === ConversationControl.control_human;
|
|
63
|
+
const offersTakeOver = !humanHeld && supportsStaffReplies;
|
|
38
64
|
|
|
39
65
|
return (
|
|
40
66
|
<div
|
|
@@ -56,18 +82,37 @@ export function ConversationAttentionBanner({
|
|
|
56
82
|
)}
|
|
57
83
|
</span>
|
|
58
84
|
</p>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
85
|
+
{/* One shrink-proof group, right-aligned even after a wrap
|
|
86
|
+
(ml-auto): under a long reason the actions used to wrap to
|
|
87
|
+
the bottom-LEFT and read as part of the message (F-20). */}
|
|
88
|
+
<div className="stg:ml-auto stg:flex stg:shrink-0 stg:items-center stg:gap-2">
|
|
89
|
+
<Button
|
|
90
|
+
variant="outline"
|
|
91
|
+
size="xs"
|
|
92
|
+
onClick={() =>
|
|
93
|
+
void clearAttention().catch(() => {
|
|
94
|
+
// Recorded in commandErrors and rendered below.
|
|
95
|
+
})
|
|
96
|
+
}
|
|
97
|
+
disabled={pendingCommands.has("clearAttention")}
|
|
98
|
+
>
|
|
99
|
+
{pendingCommands.has("clearAttention") ? "Dismissing…" : "Dismiss"}
|
|
100
|
+
</Button>
|
|
101
|
+
{offersTakeOver && (
|
|
102
|
+
<Button
|
|
103
|
+
variant="primary"
|
|
104
|
+
size="xs"
|
|
105
|
+
onClick={() =>
|
|
106
|
+
void takeOver().catch(() => {
|
|
107
|
+
// Recorded in commandErrors and rendered below.
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
disabled={pendingCommands.has("takeOver")}
|
|
111
|
+
>
|
|
112
|
+
{pendingCommands.has("takeOver") ? "Taking over…" : "Take over"}
|
|
113
|
+
</Button>
|
|
114
|
+
)}
|
|
115
|
+
</div>
|
|
71
116
|
</div>
|
|
72
117
|
{error && (
|
|
73
118
|
<p className="stg:mt-1 stg:text-xs stg:text-destructive">{getUserMessage(error)}</p>
|
|
@@ -4,6 +4,7 @@ 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";
|
|
7
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
7
8
|
import { getUserMessage } from "@stigmer/sdk";
|
|
8
9
|
import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
|
|
9
10
|
import {
|
|
@@ -193,7 +194,7 @@ export function ConversationListPane({
|
|
|
193
194
|
{/* One context-only provider arms every row's attention
|
|
194
195
|
tooltip (the WorkspaceSidebar recents-list precedent). */}
|
|
195
196
|
<TooltipProvider>
|
|
196
|
-
<ul className="stg:space-y-0.5">
|
|
197
|
+
<ul className={cn(UNSTYLED_LIST, "stg:space-y-0.5")}>
|
|
197
198
|
{conversations.map((conversation) => (
|
|
198
199
|
<ConversationRow
|
|
199
200
|
key={`${conversation.agentChannelId}:${conversation.conversationKey}`}
|
|
@@ -333,6 +334,20 @@ function ConversationFilterToggle({
|
|
|
333
334
|
);
|
|
334
335
|
}
|
|
335
336
|
|
|
337
|
+
/**
|
|
338
|
+
* The awaiting dot's meaning, shared verbatim by its tooltip and its
|
|
339
|
+
* sr-only text — one string per strength so sighted-hover and
|
|
340
|
+
* screen-reader users hear the identical fact. The copy carries the
|
|
341
|
+
* DISTINCTION, not just the fact (cloud#266): who holds the
|
|
342
|
+
* conversation is exactly what the two strengths encode, and it names
|
|
343
|
+
* the stake without promising an outcome — a muted dot survives a dead
|
|
344
|
+
* agent turn on purpose (DD-011 D-b's recovery path).
|
|
345
|
+
*/
|
|
346
|
+
const AWAITING_COPY: Record<"strong" | "muted", string> = {
|
|
347
|
+
strong: "Customer awaiting reply — a human has this conversation; the agent will not answer",
|
|
348
|
+
muted: "Customer awaiting reply — the agent has this conversation",
|
|
349
|
+
};
|
|
350
|
+
|
|
336
351
|
const ConversationRow = memo(function ConversationRow({
|
|
337
352
|
conversation,
|
|
338
353
|
label,
|
|
@@ -425,22 +440,29 @@ const ConversationRow = memo(function ConversationRow({
|
|
|
425
440
|
// carries a dot under its timestamp. Strength maps the
|
|
426
441
|
// holder (DD-011 D-a): strong when a human holds it — the
|
|
427
442
|
// agent will not answer, a person must — muted when the
|
|
428
|
-
// agent does.
|
|
429
|
-
//
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
/>
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
443
|
+
// agent does. Strong is FILLED and muted is a hollow RING
|
|
444
|
+
// (cloud#266): fill-vs-outline reads as "act vs watching"
|
|
445
|
+
// without decoding color, and color alone inverted in dark
|
|
446
|
+
// mode, where the muted gray outshone the strong primary.
|
|
447
|
+
// The meaning rides the house tooltip (the attention
|
|
448
|
+
// icon's exact pattern above — span trigger inside the row
|
|
449
|
+
// button, out of the tab order, sr-only as the accessible
|
|
450
|
+
// name); a bare dot told a first-time viewer nothing.
|
|
451
|
+
<Tooltip>
|
|
452
|
+
<TooltipTrigger render={<span className="stg:flex" />}>
|
|
453
|
+
<span
|
|
454
|
+
aria-hidden="true"
|
|
455
|
+
className={cn(
|
|
456
|
+
"stg:size-2 stg:rounded-full",
|
|
457
|
+
awaiting === "strong"
|
|
458
|
+
? "stg:bg-primary"
|
|
459
|
+
: "stg:border-2 stg:border-muted-foreground",
|
|
460
|
+
)}
|
|
461
|
+
/>
|
|
462
|
+
<span className="stg:sr-only">{AWAITING_COPY[awaiting]}</span>
|
|
463
|
+
</TooltipTrigger>
|
|
464
|
+
<TooltipContent side="top">{AWAITING_COPY[awaiting]}</TooltipContent>
|
|
465
|
+
</Tooltip>
|
|
444
466
|
)}
|
|
445
467
|
</span>
|
|
446
468
|
)}
|
|
@@ -4,6 +4,7 @@ import { memo, useMemo } from "react";
|
|
|
4
4
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
5
5
|
import { Ban, Check, CheckCheck, Clock, Info, MessageSquare, TriangleAlert } from "lucide-react";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
7
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
7
8
|
import { getUserMessage } from "@stigmer/sdk";
|
|
8
9
|
import type { ConversationTimelineItem } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/conversation_io_pb";
|
|
9
10
|
import { channelProviderOf, type ChannelProviderId } from "../channel/providers.js";
|
|
@@ -165,7 +166,7 @@ export function ConversationTimelineView({
|
|
|
165
166
|
>
|
|
166
167
|
{day.label}
|
|
167
168
|
</div>
|
|
168
|
-
<ul className="stg:space-y-1.5">
|
|
169
|
+
<ul className={cn(UNSTYLED_LIST, "stg:space-y-1.5")}>
|
|
169
170
|
{day.items.map((item) => (
|
|
170
171
|
<TimelineItemRow
|
|
171
172
|
key={item.itemId}
|
|
@@ -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
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
5
6
|
import { getUserMessage, isPermissionDenied } from "@stigmer/sdk";
|
|
6
7
|
import type { CursorAccount } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/cursor_account_pb";
|
|
7
8
|
import type { CursorAccountSummary } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
|
|
@@ -145,7 +146,7 @@ export function CursorAccountsConsole({ className }: CursorAccountsConsoleProps)
|
|
|
145
146
|
add member execution keys to make it routable.
|
|
146
147
|
</p>
|
|
147
148
|
) : (
|
|
148
|
-
<ul role="list" aria-label="Cursor accounts" className=
|
|
149
|
+
<ul role="list" aria-label="Cursor accounts" className={UNSTYLED_LIST}>
|
|
149
150
|
{accounts.map((summary) => (
|
|
150
151
|
<AccountRow
|
|
151
152
|
key={summary.account?.accountId}
|
|
@@ -5,6 +5,7 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { CursorAccountView } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
|
|
7
7
|
import { Button } from "../button/index.js";
|
|
8
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
8
9
|
import { INPUT_CLASSES } from "../internal/form-primitives.js";
|
|
9
10
|
import { toError } from "../internal/toError.js";
|
|
10
11
|
import type { CursorAccountCoverage } from "./cursor-account-coverage.js";
|
|
@@ -259,7 +260,7 @@ export function MemberKeysPanel({
|
|
|
259
260
|
<ul
|
|
260
261
|
role="list"
|
|
261
262
|
aria-label="Import results"
|
|
262
|
-
className="stg:
|
|
263
|
+
className={cn(UNSTYLED_LIST, "stg:space-y-0.5 stg:text-[11px]")}
|
|
263
264
|
>
|
|
264
265
|
{importResults.map((result) => (
|
|
265
266
|
<li
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { memo } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
5
6
|
import type { DashboardFailedRun } from "./types.js";
|
|
6
7
|
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
7
8
|
|
|
@@ -54,7 +55,7 @@ export const DashboardFailedRuns = memo(function DashboardFailedRuns({
|
|
|
54
55
|
No recent failures
|
|
55
56
|
</p>
|
|
56
57
|
) : (
|
|
57
|
-
<ul className="stg:space-y-1.5" role="list">
|
|
58
|
+
<ul className={cn(UNSTYLED_LIST, "stg:space-y-1.5")} role="list">
|
|
58
59
|
{failedRuns.map((run) => (
|
|
59
60
|
<li
|
|
60
61
|
key={run.id}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useRef, type KeyboardEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
5
6
|
import type { DependencyGraphProps } from "./types.js";
|
|
6
7
|
import { DependencyTreeNode } from "./DependencyTreeNode.js";
|
|
7
8
|
|
|
@@ -114,7 +115,7 @@ export function DependencyGraph({
|
|
|
114
115
|
role="tree"
|
|
115
116
|
aria-label={`Dependencies of ${root.label}`}
|
|
116
117
|
onKeyDown={handleKeyDown}
|
|
117
|
-
className="stg:rounded-lg stg:border stg:border-border stg:p-2"
|
|
118
|
+
className={cn(UNSTYLED_LIST, "stg:rounded-lg stg:border stg:border-border stg:p-2")}
|
|
118
119
|
>
|
|
119
120
|
<DependencyTreeNode
|
|
120
121
|
node={root}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useState, type KeyboardEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
5
6
|
import type { DependencyNode, NodeKind } from "./types.js";
|
|
6
7
|
|
|
7
8
|
interface DependencyTreeNodeProps {
|
|
@@ -152,7 +153,7 @@ export function DependencyTreeNode({
|
|
|
152
153
|
{showChildren && (
|
|
153
154
|
<ul
|
|
154
155
|
role="group"
|
|
155
|
-
className="stg:relative stg:ml-[11px] stg:border-l stg:border-border stg:pl-3"
|
|
156
|
+
className={cn(UNSTYLED_LIST, "stg:relative stg:ml-[11px] stg:border-l stg:border-border stg:pl-3")}
|
|
156
157
|
>
|
|
157
158
|
{node.children.map((child) => (
|
|
158
159
|
<DependencyTreeNode
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useId, useMemo } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
5
6
|
import type { Environment } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
|
|
6
7
|
import type { ResourceRef } from "@stigmer/sdk";
|
|
7
8
|
import { useEnvironmentList } from "./useEnvironmentList.js";
|
|
@@ -217,7 +218,7 @@ function SelectedList({
|
|
|
217
218
|
total,
|
|
218
219
|
}: SelectedListProps) {
|
|
219
220
|
return (
|
|
220
|
-
<ol className="stg:space-y-1.5" aria-label="Selected environments (merge order)">
|
|
221
|
+
<ol className={cn(UNSTYLED_LIST, "stg:space-y-1.5")} aria-label="Selected environments (merge order)">
|
|
221
222
|
{value.map((ref, index) => (
|
|
222
223
|
<li
|
|
223
224
|
key={`${ref.org}-${ref.slug}-${index}`}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import { StigmerError, getUserMessage } from "@stigmer/sdk";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
6
7
|
|
|
7
8
|
/** Props for {@link SecretFlowErrorGuide}. */
|
|
8
9
|
export interface SecretFlowErrorGuideProps {
|
|
@@ -113,7 +114,7 @@ export function SecretFlowErrorGuide({
|
|
|
113
114
|
<p className="stg:text-xs stg:text-amber-700 stg:dark:text-amber-300">
|
|
114
115
|
<span className="stg:font-medium">{server}</span> requires:
|
|
115
116
|
</p>
|
|
116
|
-
<ul className="stg:mt-0.5 stg:space-y-0.5">
|
|
117
|
+
<ul className={cn(UNSTYLED_LIST, "stg:mt-0.5 stg:space-y-0.5")}>
|
|
117
118
|
{vars.map((v) => (
|
|
118
119
|
<li
|
|
119
120
|
key={v}
|
|
@@ -131,7 +132,7 @@ export function SecretFlowErrorGuide({
|
|
|
131
132
|
<p className="stg:text-xs stg:text-amber-700/90 stg:dark:text-amber-300/90">
|
|
132
133
|
You can provide these values in two ways:
|
|
133
134
|
</p>
|
|
134
|
-
<ul className="stg:mt-1 stg:space-y-0.5 stg:text-xs stg:text-amber-700/80 stg:dark:text-amber-300/80">
|
|
135
|
+
<ul className={cn(UNSTYLED_LIST, "stg:mt-1 stg:space-y-0.5 stg:text-xs stg:text-amber-700/80 stg:dark:text-amber-300/80")}>
|
|
135
136
|
<li className="stg:flex stg:items-start stg:gap-1.5">
|
|
136
137
|
<span className="stg:mt-px stg:shrink-0">•</span>
|
|
137
138
|
<span>
|
|
@@ -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>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
|
|
4
4
|
import { ExecutionArtifactKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
5
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
5
6
|
import { ArtifactFileContent } from "./ArtifactFileContent.js";
|
|
6
7
|
import type { SkillPackageDetection } from "../library/detect-skill-package.js";
|
|
7
8
|
|
|
@@ -103,7 +104,7 @@ function DirectoryContentView({
|
|
|
103
104
|
<h3 className="stg:mb-2 stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
104
105
|
Files ({entries.length})
|
|
105
106
|
</h3>
|
|
106
|
-
<ul className=
|
|
107
|
+
<ul className={`${UNSTYLED_LIST} stg:space-y-0.5`} role="list">
|
|
107
108
|
{entries.map((entry) => (
|
|
108
109
|
<li
|
|
109
110
|
key={entry}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback
|
|
3
|
+
import { useCallback } from "react";
|
|
4
4
|
import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
6
7
|
import { useArtifactDownload } from "./useArtifactDownload.js";
|
|
7
8
|
import { formatArtifactSize } from "./artifact-utils.js";
|
|
8
9
|
import { ArtifactContentBody } from "./ArtifactContentBody.js";
|
|
@@ -253,37 +254,24 @@ export function ArtifactPreviewModal({
|
|
|
253
254
|
onImplement,
|
|
254
255
|
className,
|
|
255
256
|
}: ArtifactPreviewModalProps) {
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const dialog = dialogRef.current;
|
|
260
|
-
if (!dialog) return;
|
|
261
|
-
|
|
262
|
-
if (open && !dialog.open) {
|
|
263
|
-
dialog.showModal();
|
|
264
|
-
} else if (!open && dialog.open) {
|
|
265
|
-
dialog.close();
|
|
266
|
-
}
|
|
267
|
-
}, [open]);
|
|
268
|
-
|
|
269
|
-
const handleCancel = useCallback(
|
|
270
|
-
(e: React.SyntheticEvent) => {
|
|
271
|
-
e.preventDefault();
|
|
272
|
-
onClose();
|
|
257
|
+
const handleOpenChange = useCallback(
|
|
258
|
+
(nextOpen: boolean) => {
|
|
259
|
+
if (!nextOpen) onClose();
|
|
273
260
|
},
|
|
274
261
|
[onClose],
|
|
275
262
|
);
|
|
276
263
|
|
|
277
264
|
return (
|
|
278
|
-
<
|
|
279
|
-
|
|
280
|
-
|
|
265
|
+
<DialogShell
|
|
266
|
+
open={open}
|
|
267
|
+
onOpenChange={handleOpenChange}
|
|
268
|
+
width="3xl"
|
|
281
269
|
aria-label={`Preview ${artifact.name}`}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
)}
|
|
270
|
+
// Background surface is deliberate for content previews. The
|
|
271
|
+
// previously hardcoded ::backdrop color (bg-black/50 — it escaped the
|
|
272
|
+
// #652 fence via the arbitrary-variant spelling) now rides the
|
|
273
|
+
// shell's token backdrop.
|
|
274
|
+
className={cn("stg:bg-background stg:text-foreground stg:outline-none", className)}
|
|
287
275
|
>
|
|
288
276
|
{open && (
|
|
289
277
|
<ArtifactPreviewContent
|
|
@@ -296,7 +284,7 @@ export function ArtifactPreviewModal({
|
|
|
296
284
|
onImplement={onImplement}
|
|
297
285
|
/>
|
|
298
286
|
)}
|
|
299
|
-
</
|
|
287
|
+
</DialogShell>
|
|
300
288
|
);
|
|
301
289
|
}
|
|
302
290
|
|