@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
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { lazy, Suspense, useCallback, useEffect
|
|
3
|
+
import { lazy, Suspense, useCallback, useEffect } from "react";
|
|
4
4
|
import type { Message } from "@bufbuild/protobuf";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
6
7
|
import { getUserMessage, type AppliedManifest } from "@stigmer/sdk";
|
|
7
8
|
import { toast } from "../feedback/toast.js";
|
|
8
9
|
import { RedactedSecretsNotice } from "./RedactedSecretsNotice.js";
|
|
@@ -67,34 +68,14 @@ export function EditResourceYamlDialog({
|
|
|
67
68
|
resource,
|
|
68
69
|
onApplied,
|
|
69
70
|
}: EditResourceYamlDialogProps) {
|
|
70
|
-
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
71
71
|
const edit = useEditResourceYaml({ resource });
|
|
72
72
|
const { reset } = edit;
|
|
73
73
|
|
|
74
|
-
// Sync dialog open state with the native <dialog> element.
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
const dialog = dialogRef.current;
|
|
77
|
-
if (!dialog) return;
|
|
78
|
-
if (open && !dialog.open) {
|
|
79
|
-
dialog.showModal();
|
|
80
|
-
} else if (!open && dialog.open) {
|
|
81
|
-
dialog.close();
|
|
82
|
-
}
|
|
83
|
-
}, [open]);
|
|
84
|
-
|
|
85
74
|
// Discard stale edits from a previous session when the dialog opens.
|
|
86
75
|
useEffect(() => {
|
|
87
76
|
if (open) reset();
|
|
88
77
|
}, [open, reset]);
|
|
89
78
|
|
|
90
|
-
const handleCancel = useCallback(
|
|
91
|
-
(e: React.SyntheticEvent) => {
|
|
92
|
-
e.preventDefault();
|
|
93
|
-
onOpenChange(false);
|
|
94
|
-
},
|
|
95
|
-
[onOpenChange],
|
|
96
|
-
);
|
|
97
|
-
|
|
98
79
|
const handleApply = useCallback(async () => {
|
|
99
80
|
try {
|
|
100
81
|
const result = await edit.apply();
|
|
@@ -111,15 +92,7 @@ export function EditResourceYamlDialog({
|
|
|
111
92
|
edit.validation.status === "valid" && edit.isDirty && !edit.isApplying;
|
|
112
93
|
|
|
113
94
|
return (
|
|
114
|
-
<
|
|
115
|
-
ref={dialogRef}
|
|
116
|
-
onCancel={handleCancel}
|
|
117
|
-
className={cn(
|
|
118
|
-
"stg:fixed stg:inset-0 stg:z-50 stg:m-auto stg:w-full stg:max-w-3xl stg:rounded-lg stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-lg",
|
|
119
|
-
"stg:backdrop:bg-backdrop",
|
|
120
|
-
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
121
|
-
)}
|
|
122
|
-
>
|
|
95
|
+
<DialogShell open={open} onOpenChange={onOpenChange} width="3xl" aria-label="Edit YAML">
|
|
123
96
|
<div className="stg:flex stg:flex-col stg:gap-4 stg:p-6">
|
|
124
97
|
{/* Header */}
|
|
125
98
|
<div className="stg:flex stg:flex-col stg:gap-1">
|
|
@@ -233,7 +206,7 @@ export function EditResourceYamlDialog({
|
|
|
233
206
|
</div>
|
|
234
207
|
</div>
|
|
235
208
|
</div>
|
|
236
|
-
</
|
|
209
|
+
</DialogShell>
|
|
237
210
|
);
|
|
238
211
|
}
|
|
239
212
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect,
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
5
6
|
import type { EnvVarInput } from "@stigmer/sdk";
|
|
6
7
|
import { useMcpServer } from "./useMcpServer.js";
|
|
7
8
|
import { useMcpServerCredentials } from "./useMcpServerCredentials.js";
|
|
@@ -88,29 +89,11 @@ export function McpServerConnectDialog({
|
|
|
88
89
|
onOpenDetails,
|
|
89
90
|
className,
|
|
90
91
|
}: McpServerConnectDialogProps) {
|
|
91
|
-
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
92
92
|
const resolvedOrg = activeOrg || org;
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (open && !dialog.open) {
|
|
99
|
-
dialog.showModal();
|
|
100
|
-
} else if (!open && dialog.open) {
|
|
101
|
-
dialog.close();
|
|
102
|
-
}
|
|
103
|
-
}, [open]);
|
|
104
|
-
|
|
105
|
-
const handleDialogClose = useCallback(() => {
|
|
106
|
-
onClose();
|
|
107
|
-
}, [onClose]);
|
|
108
|
-
|
|
109
|
-
const handleBackdropClick = useCallback(
|
|
110
|
-
(e: React.MouseEvent<HTMLDialogElement>) => {
|
|
111
|
-
if (e.target === dialogRef.current) {
|
|
112
|
-
onClose();
|
|
113
|
-
}
|
|
94
|
+
const handleOpenChange = useCallback(
|
|
95
|
+
(nextOpen: boolean) => {
|
|
96
|
+
if (!nextOpen) onClose();
|
|
114
97
|
},
|
|
115
98
|
[onClose],
|
|
116
99
|
);
|
|
@@ -118,15 +101,18 @@ export function McpServerConnectDialog({
|
|
|
118
101
|
if (!open) return null;
|
|
119
102
|
|
|
120
103
|
return (
|
|
121
|
-
<
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
104
|
+
<DialogShell
|
|
105
|
+
open
|
|
106
|
+
onOpenChange={handleOpenChange}
|
|
107
|
+
width="md"
|
|
108
|
+
dismissOnBackdrop
|
|
109
|
+
// Card surface + visible overflow are deliberate: the connect form
|
|
110
|
+
// hosts popovers that extend past the dialog bounds.
|
|
125
111
|
className={cn(
|
|
126
|
-
"stg:
|
|
127
|
-
"stg:backdrop:bg-backdrop",
|
|
112
|
+
"stg:max-h-[85vh] stg:overflow-visible stg:bg-card stg:text-foreground",
|
|
128
113
|
className,
|
|
129
114
|
)}
|
|
115
|
+
aria-label={`Connect ${slug}`}
|
|
130
116
|
>
|
|
131
117
|
<div
|
|
132
118
|
className="stg:flex stg:max-h-[85vh] stg:flex-col stg:overflow-y-auto stg:p-6"
|
|
@@ -141,7 +127,7 @@ export function McpServerConnectDialog({
|
|
|
141
127
|
onOpenDetails={onOpenDetails}
|
|
142
128
|
/>
|
|
143
129
|
</div>
|
|
144
|
-
</
|
|
130
|
+
</DialogShell>
|
|
145
131
|
);
|
|
146
132
|
}
|
|
147
133
|
|
|
@@ -36,6 +36,7 @@ import { OAuthAppForm } from "./OAuthAppForm.js";
|
|
|
36
36
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
37
37
|
import { ErrorMessage } from "../error/ErrorMessage.js";
|
|
38
38
|
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
39
|
+
import { DialogShell } from "../internal/DialogShell.js";
|
|
39
40
|
import { EnvVarForm } from "../environment/EnvVarForm.js";
|
|
40
41
|
import type { EnvVarFormVariable } from "../environment/EnvVarForm.js";
|
|
41
42
|
import { VisibilityBadge } from "../library/VisibilitySelector.js";
|
|
@@ -282,7 +283,6 @@ export function McpServerDetailView({
|
|
|
282
283
|
const [showCredentialForm, setShowCredentialForm] = useState(defaultShowCredentialForm);
|
|
283
284
|
const [showByoaForm, setShowByoaForm] = useState(false);
|
|
284
285
|
const [capabilityTab, setCapabilityTab] = useState<CapabilityTab>(defaultCapabilityTab);
|
|
285
|
-
const byoaDialogRef = useRef<HTMLDialogElement>(null);
|
|
286
286
|
|
|
287
287
|
const onResourceLoadRef = useRef(onResourceLoad);
|
|
288
288
|
onResourceLoadRef.current = onResourceLoad;
|
|
@@ -388,20 +388,9 @@ export function McpServerDetailView({
|
|
|
388
388
|
}
|
|
389
389
|
}, [mcpServer, disconnectOAuth, credentials, refetch, activeOrg, org]);
|
|
390
390
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
if (!dialog) return;
|
|
395
|
-
if (showByoaForm && !dialog.open) {
|
|
396
|
-
dialog.showModal();
|
|
397
|
-
} else if (!showByoaForm && dialog.open) {
|
|
398
|
-
dialog.close();
|
|
399
|
-
}
|
|
400
|
-
}, [showByoaForm]);
|
|
401
|
-
|
|
402
|
-
const handleByoaDialogCancel = useCallback(
|
|
403
|
-
(e: React.SyntheticEvent) => {
|
|
404
|
-
e.preventDefault();
|
|
391
|
+
const handleByoaOpenChange = useCallback(
|
|
392
|
+
(nextOpen: boolean) => {
|
|
393
|
+
if (nextOpen) return;
|
|
405
394
|
setShowByoaForm(false);
|
|
406
395
|
orgOAuthApp.clearErrors();
|
|
407
396
|
},
|
|
@@ -706,14 +695,13 @@ export function McpServerDetailView({
|
|
|
706
695
|
)}
|
|
707
696
|
</Section>
|
|
708
697
|
|
|
709
|
-
{/* BYOA dialog
|
|
710
|
-
<
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
)}
|
|
698
|
+
{/* BYOA dialog */}
|
|
699
|
+
<DialogShell
|
|
700
|
+
open={showByoaForm}
|
|
701
|
+
onOpenChange={handleByoaOpenChange}
|
|
702
|
+
width="md"
|
|
703
|
+
className="stg:p-6"
|
|
704
|
+
aria-label="Use your own OAuth app"
|
|
717
705
|
>
|
|
718
706
|
<h3 className="stg:mb-4 stg:text-base stg:font-semibold stg:text-foreground">
|
|
719
707
|
Use your own OAuth app
|
|
@@ -729,7 +717,7 @@ export function McpServerDetailView({
|
|
|
729
717
|
isSubmitting={orgOAuthApp.isSetting}
|
|
730
718
|
error={orgOAuthApp.setError}
|
|
731
719
|
/>
|
|
732
|
-
</
|
|
720
|
+
</DialogShell>
|
|
733
721
|
|
|
734
722
|
<Section title="Capabilities" scrollTarget="mcp-capabilities">
|
|
735
723
|
<Tabs
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useId } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_FIELDSET } from "../../internal/element-resets.js";
|
|
5
6
|
import { generateSlug } from "../../internal/slug.js";
|
|
6
7
|
import type { McpServerWizardData, KeyValueEntry } from "./types.js";
|
|
7
8
|
|
|
@@ -179,7 +180,7 @@ export function IdentityTransportStep({
|
|
|
179
180
|
/>
|
|
180
181
|
</div>
|
|
181
182
|
|
|
182
|
-
<fieldset className="stg:space-y-1.5">
|
|
183
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-1.5")}>
|
|
183
184
|
<legend className="stg:text-sm stg:font-medium stg:text-foreground">
|
|
184
185
|
Visibility
|
|
185
186
|
</legend>
|
|
@@ -204,7 +205,7 @@ export function IdentityTransportStep({
|
|
|
204
205
|
|
|
205
206
|
{/* data-scroll-target: guided tours/demos scroll the transport config
|
|
206
207
|
(the step's decision point) into view within the wizard's scroll area. */}
|
|
207
|
-
<fieldset className="stg:space-y-3" data-scroll-target="mcp-transport">
|
|
208
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-3")} data-scroll-target="mcp-transport">
|
|
208
209
|
<legend className="stg:text-sm stg:font-medium stg:text-foreground">
|
|
209
210
|
Transport <span className="stg:text-destructive">*</span>
|
|
210
211
|
</legend>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { type FormEvent, type KeyboardEvent, useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
|
|
5
6
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
7
|
import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
7
8
|
import type { PlatformClientCreateResponse } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/io_pb";
|
|
@@ -167,7 +168,7 @@ export function CreatePlatformClientForm({
|
|
|
167
168
|
/>
|
|
168
169
|
|
|
169
170
|
{/* Expiry */}
|
|
170
|
-
<fieldset className="stg:space-y-2" disabled={isCreating}>
|
|
171
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2")} disabled={isCreating}>
|
|
171
172
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
172
173
|
Expiry
|
|
173
174
|
</legend>
|
|
@@ -202,7 +203,7 @@ export function CreatePlatformClientForm({
|
|
|
202
203
|
</fieldset>
|
|
203
204
|
|
|
204
205
|
{/* JIT provisioning */}
|
|
205
|
-
<fieldset className="stg:space-y-2.5" disabled={isCreating}>
|
|
206
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2.5")} disabled={isCreating}>
|
|
206
207
|
<hr className="stg:border-border-muted" />
|
|
207
208
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
208
209
|
JIT provisioning
|
|
@@ -263,7 +264,7 @@ export function CreatePlatformClientForm({
|
|
|
263
264
|
</fieldset>
|
|
264
265
|
|
|
265
266
|
{/* Allowed origins */}
|
|
266
|
-
<fieldset className="stg:space-y-2" disabled={isCreating}>
|
|
267
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2")} disabled={isCreating}>
|
|
267
268
|
<hr className="stg:border-border-muted" />
|
|
268
269
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
269
270
|
Allowed origins
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { type FormEvent, type KeyboardEvent, useCallback, useId, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
|
|
5
6
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
7
|
import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
7
8
|
import { timestampDate, type Timestamp } from "@bufbuild/protobuf/wkt";
|
|
@@ -302,7 +303,7 @@ export function PlatformClientDetailPanel({
|
|
|
302
303
|
</div>
|
|
303
304
|
|
|
304
305
|
{/* Expiry */}
|
|
305
|
-
<fieldset className="stg:space-y-2" disabled={isUpdating}>
|
|
306
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2")} disabled={isUpdating}>
|
|
306
307
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
307
308
|
Expiry
|
|
308
309
|
</legend>
|
|
@@ -337,7 +338,7 @@ export function PlatformClientDetailPanel({
|
|
|
337
338
|
</fieldset>
|
|
338
339
|
|
|
339
340
|
{/* JIT provisioning */}
|
|
340
|
-
<fieldset className="stg:space-y-2.5" disabled={isUpdating}>
|
|
341
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2.5")} disabled={isUpdating}>
|
|
341
342
|
<hr className="stg:border-border-muted" />
|
|
342
343
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
343
344
|
JIT provisioning
|
|
@@ -393,7 +394,7 @@ export function PlatformClientDetailPanel({
|
|
|
393
394
|
</fieldset>
|
|
394
395
|
|
|
395
396
|
{/* Allowed origins */}
|
|
396
|
-
<fieldset className="stg:space-y-2" disabled={isUpdating}>
|
|
397
|
+
<fieldset className={cn(UNSTYLED_FIELDSET, "stg:space-y-2")} disabled={isUpdating}>
|
|
397
398
|
<hr className="stg:border-border-muted" />
|
|
398
399
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
399
400
|
Allowed origins
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { useCallback, useState, type FormEvent } from "react";
|
|
4
|
+
import { UNSTYLED_FIELDSET } from "../internal/element-resets.js";
|
|
4
5
|
import { create } from "@bufbuild/protobuf";
|
|
5
6
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
7
|
import {
|
|
@@ -546,7 +547,7 @@ export function BaselineEditor({
|
|
|
546
547
|
Featured (appears in the curated default picker list)
|
|
547
548
|
</label>
|
|
548
549
|
|
|
549
|
-
<fieldset className=
|
|
550
|
+
<fieldset className={`${UNSTYLED_FIELDSET} stg:space-y-2`}>
|
|
550
551
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">
|
|
551
552
|
Rates ($ per million tokens)
|
|
552
553
|
</legend>
|
|
@@ -565,7 +566,7 @@ export function BaselineEditor({
|
|
|
565
566
|
</div>
|
|
566
567
|
</fieldset>
|
|
567
568
|
|
|
568
|
-
<fieldset className=
|
|
569
|
+
<fieldset className={`${UNSTYLED_FIELDSET} stg:space-y-2`}>
|
|
569
570
|
<legend className="stg:text-xs stg:font-medium stg:text-foreground">Pricing variants</legend>
|
|
570
571
|
{form.variants.map((variant, index) => (
|
|
571
572
|
<div key={index} className="stg:space-y-2 stg:rounded-md stg:border stg:border-border-muted stg:px-2.5 stg:py-2">
|
|
@@ -11,6 +11,7 @@ import { RetireConfirm } from "./RetireConfirm.js";
|
|
|
11
11
|
import { ModelGovernanceDetail } from "./ModelGovernanceDetail.js";
|
|
12
12
|
import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
|
|
13
13
|
import { GovernanceBadge, PendingOverrideCard, RateCell } from "./governance-primitives.js";
|
|
14
|
+
import { UNSTYLED_LIST } from "../internal/element-resets.js";
|
|
14
15
|
import { INPUT_CLASSES } from "../internal/form-primitives.js";
|
|
15
16
|
import { TruncatedText } from "../internal/truncated-text.js";
|
|
16
17
|
import { ZERO } from "./pricing-format.js";
|
|
@@ -328,7 +329,7 @@ function ModelsTab({
|
|
|
328
329
|
: "The catalog is empty — has the baseline seed migration run?"}
|
|
329
330
|
</p>
|
|
330
331
|
) : (
|
|
331
|
-
<ul role="list" aria-label="Models" className=
|
|
332
|
+
<ul role="list" aria-label="Models" className={UNSTYLED_LIST}>
|
|
332
333
|
{view.models.map((row) => (
|
|
333
334
|
<ModelRow key={row.key} row={row} onOpen={() => view.openDetail(row.key)} />
|
|
334
335
|
))}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The access-denied state for the provider-standing operator surface.
|
|
7
|
+
* Server-side authorization (`can_view_provider_standing` on
|
|
8
|
+
* `platform:stigmer`) is the real gate — this is the honest, designed
|
|
9
|
+
* face of that denial for anyone who navigates to the operator route
|
|
10
|
+
* without the permission, instead of a raw RPC error string.
|
|
11
|
+
*/
|
|
12
|
+
export function ProviderStandingAccessNotice({
|
|
13
|
+
className,
|
|
14
|
+
}: {
|
|
15
|
+
readonly className?: string;
|
|
16
|
+
}) {
|
|
17
|
+
return (
|
|
18
|
+
<div
|
|
19
|
+
className={cn(
|
|
20
|
+
"stg:rounded-lg stg:border stg:border-border stg:bg-card stg:px-4 stg:py-6 stg:text-center",
|
|
21
|
+
className,
|
|
22
|
+
)}
|
|
23
|
+
role="status"
|
|
24
|
+
>
|
|
25
|
+
<p className="stg:text-xs stg:font-semibold stg:text-foreground">
|
|
26
|
+
Platform operator access required
|
|
27
|
+
</p>
|
|
28
|
+
<p className="stg:mx-auto stg:mt-1 stg:max-w-md stg:text-xs stg:text-muted-foreground">
|
|
29
|
+
Provider standing reports the health of the platform's own LLM
|
|
30
|
+
provider accounts, which is Stigmer-internal. It needs the platform
|
|
31
|
+
operator role — organization roles do not grant it. If you believe
|
|
32
|
+
you should have access, contact a platform operator.
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { getUserMessage, isPermissionDenied } from "@stigmer/sdk";
|
|
5
|
+
import type { Timestamp } from "@bufbuild/protobuf/wkt";
|
|
6
|
+
import type { ProviderStandingEntry } from "@stigmer/protos/ai/stigmer/platform/providerstanding/v1/io_pb";
|
|
7
|
+
import { Button } from "../button/index.js";
|
|
8
|
+
import { ProviderStandingAccessNotice } from "./ProviderStandingAccessNotice.js";
|
|
9
|
+
import { useProviderStanding } from "./useProviderStanding.js";
|
|
10
|
+
|
|
11
|
+
/** Props for {@link ProviderStandingConsole}. */
|
|
12
|
+
export interface ProviderStandingConsoleProps {
|
|
13
|
+
/** Additional CSS class names. */
|
|
14
|
+
readonly className?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// BigInt literals (0n) require an ES2020 target, which not every consuming
|
|
18
|
+
// app's tsconfig guarantees — the constructor form is target-agnostic (the
|
|
19
|
+
// cursor-account-format precedent).
|
|
20
|
+
const ZERO = BigInt(0);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A probe verdict older than this is flagged stale — the probe-silence
|
|
24
|
+
* alert's UI twin: the probe runs hourly and the alert fires at 3h (the
|
|
25
|
+
* 60m interval plus generous grace), so the console goes amber on the
|
|
26
|
+
* same clock operators are paged on.
|
|
27
|
+
*/
|
|
28
|
+
const STALE_AFTER_MS = 3 * 60 * 60 * 1000;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Display metadata for the probe's closed status vocabulary (the
|
|
32
|
+
* lowercase labels StandingStatus persists). An unknown future label
|
|
33
|
+
* degrades to a muted badge showing the raw label — the wire contract is
|
|
34
|
+
* a string precisely so consoles never fail to decode a new status.
|
|
35
|
+
*/
|
|
36
|
+
const STATUS_DISPLAY: Record<string, { label: string; tone: "ok" | "warn" | "muted" }> = {
|
|
37
|
+
healthy: { label: "Healthy", tone: "ok" },
|
|
38
|
+
platform_billing: { label: "Billing rejected", tone: "warn" },
|
|
39
|
+
platform_auth: { label: "Auth rejected", tone: "warn" },
|
|
40
|
+
unclassified_error: { label: "Erroring", tone: "warn" },
|
|
41
|
+
unreachable: { label: "Unreachable", tone: "warn" },
|
|
42
|
+
not_configured: { label: "Not configured", tone: "muted" },
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The platform-operator console page for provider standing: one card per
|
|
47
|
+
* platform LLM provider account with the latest canary-probe verdict —
|
|
48
|
+
* status, round-trip latency, upstream HTTP status, a bounded error
|
|
49
|
+
* summary, and when the probe last ran (flagged when stale).
|
|
50
|
+
*
|
|
51
|
+
* Read-only by design: the detection core (hourly probe, standing store,
|
|
52
|
+
* degraded/silence alerts) lives server-side; this surface only makes it
|
|
53
|
+
* visible where operators already look. Requires
|
|
54
|
+
* `can_view_provider_standing` on `platform:stigmer` — non-operators see
|
|
55
|
+
* the designed access notice.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* <ProviderStandingConsole />
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export function ProviderStandingConsole({ className }: ProviderStandingConsoleProps) {
|
|
63
|
+
const { standing, isLoading, isRefetching, error, refetch } = useProviderStanding();
|
|
64
|
+
|
|
65
|
+
if (isLoading) {
|
|
66
|
+
return (
|
|
67
|
+
<div className={cn("stg:space-y-2", className)} aria-busy="true">
|
|
68
|
+
<div className="stg:h-4 stg:w-40 stg:animate-pulse stg:rounded stg:bg-muted-subtle" />
|
|
69
|
+
{Array.from({ length: 2 }, (_, i) => (
|
|
70
|
+
<div key={i} className="stg:h-16 stg:animate-pulse stg:rounded-lg stg:bg-muted-subtle" />
|
|
71
|
+
))}
|
|
72
|
+
</div>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (error) {
|
|
77
|
+
// A non-operator landing here is expected (the route is reachable by
|
|
78
|
+
// URL) — show the designed access notice, not a raw RPC error.
|
|
79
|
+
if (isPermissionDenied(error)) {
|
|
80
|
+
return <ProviderStandingAccessNotice className={className} />;
|
|
81
|
+
}
|
|
82
|
+
return (
|
|
83
|
+
<p className={cn("stg:text-destructive stg:text-xs", className)} role="alert">
|
|
84
|
+
{getUserMessage(error)}
|
|
85
|
+
</p>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const providers = standing?.providers ?? [];
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<div className={cn("stg:space-y-3", className)}>
|
|
93
|
+
<div className="stg:flex stg:items-center stg:justify-between">
|
|
94
|
+
<p className="stg:text-xs stg:text-muted-foreground">
|
|
95
|
+
Latest canary verdict per platform provider account, probed hourly.
|
|
96
|
+
</p>
|
|
97
|
+
<Button
|
|
98
|
+
variant="outline"
|
|
99
|
+
size="sm"
|
|
100
|
+
onClick={refetch}
|
|
101
|
+
disabled={isRefetching}
|
|
102
|
+
>
|
|
103
|
+
{isRefetching ? "Refreshing…" : "Refresh"}
|
|
104
|
+
</Button>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
{providers.length === 0 ? (
|
|
108
|
+
<p className="stg:rounded-lg stg:border stg:border-border stg:bg-card stg:px-4 stg:py-6 stg:text-center stg:text-xs stg:text-muted-foreground">
|
|
109
|
+
No probe verdicts recorded yet — the standing probe has not
|
|
110
|
+
completed a pass since this deployment came up.
|
|
111
|
+
</p>
|
|
112
|
+
) : (
|
|
113
|
+
<ul className="stg:m-0 stg:grid stg:list-none stg:gap-2 stg:p-0 sm:stg:grid-cols-2">
|
|
114
|
+
{providers.map((entry) => (
|
|
115
|
+
<StandingCard key={entry.provider} entry={entry} />
|
|
116
|
+
))}
|
|
117
|
+
</ul>
|
|
118
|
+
)}
|
|
119
|
+
</div>
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function StandingCard({ entry }: { readonly entry: ProviderStandingEntry }) {
|
|
124
|
+
const display = STATUS_DISPLAY[entry.status] ?? {
|
|
125
|
+
label: entry.status || "unknown",
|
|
126
|
+
tone: "muted" as const,
|
|
127
|
+
};
|
|
128
|
+
const stale = isStale(entry.checkedAt);
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<li className="stg:rounded-lg stg:border stg:border-border stg:bg-card stg:p-3">
|
|
132
|
+
<div className="stg:flex stg:items-center stg:justify-between stg:gap-2">
|
|
133
|
+
<span className="stg:text-sm stg:font-semibold stg:capitalize stg:text-foreground">
|
|
134
|
+
{entry.provider}
|
|
135
|
+
</span>
|
|
136
|
+
<StatusBadge tone={display.tone} label={display.label} />
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<dl className="stg:mt-2 stg:flex stg:flex-wrap stg:gap-x-4 stg:gap-y-1 stg:text-xs stg:text-muted-foreground">
|
|
140
|
+
{entry.latencyMs > ZERO && (
|
|
141
|
+
<div className="stg:flex stg:gap-1">
|
|
142
|
+
<dt>Latency</dt>
|
|
143
|
+
<dd className="stg:m-0 stg:text-foreground">{`${entry.latencyMs}ms`}</dd>
|
|
144
|
+
</div>
|
|
145
|
+
)}
|
|
146
|
+
{entry.httpStatus > 0 && (
|
|
147
|
+
<div className="stg:flex stg:gap-1">
|
|
148
|
+
<dt>HTTP</dt>
|
|
149
|
+
<dd className="stg:m-0 stg:text-foreground">{entry.httpStatus}</dd>
|
|
150
|
+
</div>
|
|
151
|
+
)}
|
|
152
|
+
<div className="stg:flex stg:gap-1">
|
|
153
|
+
<dt>Probed</dt>
|
|
154
|
+
<dd
|
|
155
|
+
className={cn(
|
|
156
|
+
"stg:m-0",
|
|
157
|
+
stale ? "stg:font-medium stg:text-destructive" : "stg:text-foreground",
|
|
158
|
+
)}
|
|
159
|
+
>
|
|
160
|
+
{formatProbeTime(entry.checkedAt)}
|
|
161
|
+
{stale ? " — stale" : ""}
|
|
162
|
+
</dd>
|
|
163
|
+
</div>
|
|
164
|
+
</dl>
|
|
165
|
+
|
|
166
|
+
{entry.errorSummary && (
|
|
167
|
+
<p className="stg:mt-2 stg:break-words stg:rounded stg:bg-muted-subtle stg:px-2 stg:py-1 stg:text-[11px] stg:text-muted-foreground">
|
|
168
|
+
{entry.errorSummary}
|
|
169
|
+
</p>
|
|
170
|
+
)}
|
|
171
|
+
</li>
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Small tonal status badge — the cursor-accounts StateBadge shape, local
|
|
177
|
+
* to this module (the two operator surfaces evolve independently).
|
|
178
|
+
*/
|
|
179
|
+
function StatusBadge({
|
|
180
|
+
tone,
|
|
181
|
+
label,
|
|
182
|
+
}: {
|
|
183
|
+
readonly tone: "ok" | "warn" | "muted";
|
|
184
|
+
readonly label: string;
|
|
185
|
+
}) {
|
|
186
|
+
return (
|
|
187
|
+
<span
|
|
188
|
+
className={cn(
|
|
189
|
+
"stg:inline-block stg:rounded stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium",
|
|
190
|
+
tone === "ok" && "stg:bg-accent stg:text-primary",
|
|
191
|
+
tone === "warn" && "stg:bg-muted-subtle stg:text-destructive",
|
|
192
|
+
tone === "muted" && "stg:bg-muted-subtle stg:text-muted-foreground",
|
|
193
|
+
)}
|
|
194
|
+
>
|
|
195
|
+
{label}
|
|
196
|
+
</span>
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function isStale(ts: Timestamp | undefined): boolean {
|
|
201
|
+
if (!ts || ts.seconds === ZERO) return true;
|
|
202
|
+
return Date.now() - Number(ts.seconds) * 1000 > STALE_AFTER_MS;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/** Proto Timestamp to a compact local date-time (e.g. "Jul 22, 14:05"). */
|
|
206
|
+
function formatProbeTime(ts: Timestamp | undefined): string {
|
|
207
|
+
if (!ts || ts.seconds === ZERO) {
|
|
208
|
+
return "never";
|
|
209
|
+
}
|
|
210
|
+
return new Date(Number(ts.seconds) * 1000).toLocaleString(undefined, {
|
|
211
|
+
month: "short",
|
|
212
|
+
day: "numeric",
|
|
213
|
+
hour: "2-digit",
|
|
214
|
+
minute: "2-digit",
|
|
215
|
+
});
|
|
216
|
+
}
|