@stigmer/react 3.11.0 → 3.12.0
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/activity/useRecentActivity.d.ts +3 -2
- package/activity/useRecentActivity.d.ts.map +1 -1
- package/activity/useRecentActivity.js +3 -2
- package/activity/useRecentActivity.js.map +1 -1
- package/agent/AgentDetailView.d.ts +2 -12
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +10 -42
- package/agent/AgentDetailView.js.map +1 -1
- package/agent/internal/agentToInput.d.ts.map +1 -1
- package/agent/internal/agentToInput.js +0 -8
- package/agent/internal/agentToInput.js.map +1 -1
- package/agent-instance/AgentInstanceList.d.ts.map +1 -1
- package/agent-instance/AgentInstanceList.js +2 -1
- package/agent-instance/AgentInstanceList.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +2 -1
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/attachment/AttachmentChipList.d.ts.map +1 -1
- package/attachment/AttachmentChipList.js +9 -8
- package/attachment/AttachmentChipList.js.map +1 -1
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +1 -1
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +2 -1
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +2 -1
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +2 -1
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +2 -1
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/ComposerToolbar.js +10 -7
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/ConfigureMenu.d.ts.map +1 -1
- package/composer/ConfigureMenu.js +2 -1
- package/composer/ConfigureMenu.js.map +1 -1
- package/composer/ContextChip.d.ts.map +1 -1
- package/composer/ContextChip.js +2 -1
- package/composer/ContextChip.js.map +1 -1
- package/composer/ContextPopover.d.ts.map +1 -1
- package/composer/ContextPopover.js +2 -1
- package/composer/ContextPopover.js.map +1 -1
- package/composer/SessionComposer.d.ts +13 -0
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +12 -2
- package/composer/SessionComposer.js.map +1 -1
- package/conversation/ConversationMediaAttachment.d.ts.map +1 -1
- package/conversation/ConversationMediaAttachment.js +2 -1
- package/conversation/ConversationMediaAttachment.js.map +1 -1
- package/conversation/ConversationTimelineView.d.ts.map +1 -1
- package/conversation/ConversationTimelineView.js +14 -4
- package/conversation/ConversationTimelineView.js.map +1 -1
- package/conversation/conversationPresentation.d.ts +28 -0
- package/conversation/conversationPresentation.d.ts.map +1 -1
- package/conversation/conversationPresentation.js +38 -1
- package/conversation/conversationPresentation.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.d.ts.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +6 -5
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardKPICards.d.ts.map +1 -1
- package/dashboard/DashboardKPICards.js +3 -1
- package/dashboard/DashboardKPICards.js.map +1 -1
- package/dependency-graph/DependencyTreeNode.d.ts.map +1 -1
- package/dependency-graph/DependencyTreeNode.js +1 -7
- package/dependency-graph/DependencyTreeNode.js.map +1 -1
- package/dependency-graph/types.d.ts +8 -20
- package/dependency-graph/types.d.ts.map +1 -1
- package/dependency-graph/useDependencyGraph.d.ts.map +1 -1
- package/dependency-graph/useDependencyGraph.js +2 -20
- package/dependency-graph/useDependencyGraph.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +2 -1
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +1 -1
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ArtifactRowView.d.ts.map +1 -1
- package/execution/ArtifactRowView.js +2 -1
- package/execution/ArtifactRowView.js.map +1 -1
- package/execution/FilePathLink.d.ts +4 -4
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +4 -4
- package/execution/FilePathLink.js.map +1 -1
- package/execution/McpToolDetail.d.ts.map +1 -1
- package/execution/McpToolDetail.js +2 -1
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/MessageAttachments.d.ts.map +1 -1
- package/execution/MessageAttachments.js +10 -8
- package/execution/MessageAttachments.js.map +1 -1
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +2 -1
- package/execution/MessageEntry.js.map +1 -1
- package/execution/PlanArtifactCard.d.ts.map +1 -1
- package/execution/PlanArtifactCard.js +7 -4
- package/execution/PlanArtifactCard.js.map +1 -1
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +1 -1
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +5 -1
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +6 -4
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/artifact-row-item.d.ts +1 -1
- package/execution/artifact-row-item.d.ts.map +1 -1
- package/file-reference/FileReferenceChipList.d.ts.map +1 -1
- package/file-reference/FileReferenceChipList.js +6 -1
- package/file-reference/FileReferenceChipList.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +6 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/ProviderBadge.d.ts.map +1 -1
- package/iam-policy/ProviderBadge.js +3 -2
- package/iam-policy/ProviderBadge.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +1 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -1
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/index.d.ts +0 -2
- package/index.d.ts.map +1 -1
- package/index.js +0 -6
- package/index.js.map +1 -1
- package/internal/truncated-text.d.ts +17 -0
- package/internal/truncated-text.d.ts.map +1 -0
- package/internal/truncated-text.js +27 -0
- package/internal/truncated-text.js.map +1 -0
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +4 -3
- package/invitation/InvitationManager.js.map +1 -1
- package/library/ScopeToggle.d.ts.map +1 -1
- package/library/ScopeToggle.js +10 -2
- package/library/ScopeToggle.js.map +1 -1
- package/library/VisibilitySelector.d.ts.map +1 -1
- package/library/VisibilitySelector.js +2 -1
- package/library/VisibilitySelector.js.map +1 -1
- package/library/useExportResource.d.ts +3 -4
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +1 -1
- package/library/useExportResource.js.map +1 -1
- package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
- package/manifest/EditResourceYamlDialog.js.map +1 -1
- package/mcp-server/McpServerConfigPanel.d.ts +30 -1
- package/mcp-server/McpServerConfigPanel.d.ts.map +1 -1
- package/mcp-server/McpServerConfigPanel.js +18 -8
- package/mcp-server/McpServerConfigPanel.js.map +1 -1
- package/mcp-server/McpServerConnectDialog.d.ts +12 -1
- package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +8 -7
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +4 -4
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +86 -5
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/mcp-server/McpToolSelector.d.ts.map +1 -1
- package/mcp-server/McpToolSelector.js +2 -1
- package/mcp-server/McpToolSelector.js.map +1 -1
- package/mcp-server/VendorApprovalBlockedNotice.d.ts +77 -0
- package/mcp-server/VendorApprovalBlockedNotice.d.ts.map +1 -0
- package/mcp-server/VendorApprovalBlockedNotice.js +62 -0
- package/mcp-server/VendorApprovalBlockedNotice.js.map +1 -0
- package/mcp-server/mcpServerSetupReducer.d.ts +18 -0
- package/mcp-server/mcpServerSetupReducer.d.ts.map +1 -1
- package/mcp-server/mcpServerSetupReducer.js +6 -0
- package/mcp-server/mcpServerSetupReducer.js.map +1 -1
- package/mcp-server/useMcpServerSetup.d.ts.map +1 -1
- package/mcp-server/useMcpServerSetup.js +7 -0
- package/mcp-server/useMcpServerSetup.js.map +1 -1
- package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppListPanel.js +2 -1
- package/oauth-app/OAuthAppListPanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +3 -2
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/pricing-governance/BaselineEditor.d.ts.map +1 -1
- package/pricing-governance/BaselineEditor.js +7 -1
- package/pricing-governance/BaselineEditor.js.map +1 -1
- package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -1
- package/pricing-governance/ModelCatalogPanel.js +2 -1
- package/pricing-governance/ModelCatalogPanel.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/pricing-governance/PricingGovernancePanel.d.ts.map +1 -1
- package/pricing-governance/PricingGovernancePanel.js +2 -1
- package/pricing-governance/PricingGovernancePanel.js.map +1 -1
- package/resource-workbench/components/StatusBadge.d.ts.map +1 -1
- package/resource-workbench/components/StatusBadge.js +2 -1
- package/resource-workbench/components/StatusBadge.js.map +1 -1
- package/schedule/CadenceField.d.ts.map +1 -1
- package/schedule/CadenceField.js +15 -8
- package/schedule/CadenceField.js.map +1 -1
- package/schedule/ScheduleRunsTable.d.ts.map +1 -1
- package/schedule/ScheduleRunsTable.js +3 -2
- package/schedule/ScheduleRunsTable.js.map +1 -1
- package/session/PlanEditor.d.ts.map +1 -1
- package/session/PlanEditor.js +3 -5
- package/session/PlanEditor.js.map +1 -1
- package/sharing/AgentShareList.d.ts.map +1 -1
- package/sharing/AgentShareList.js +3 -1
- package/sharing/AgentShareList.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +2 -1
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +3 -2
- package/skill/SkillDetailView.js.map +1 -1
- package/src/__tests__/helpers/open-menu.ts +88 -0
- package/src/__tests__/portal-container.test.tsx +3 -3
- package/src/activity/useRecentActivity.ts +3 -2
- package/src/agent/AgentDetailView.tsx +6 -130
- package/src/agent/internal/__tests__/agentToInput.test.ts +2 -11
- package/src/agent/internal/agentToInput.ts +0 -11
- package/src/agent-instance/AgentInstanceList.tsx +5 -6
- package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +5 -4
- package/src/api-key/ApiKeyListPanel.tsx +11 -3
- package/src/attachment/AttachmentChipList.tsx +74 -65
- package/src/attachment/AttachmentImageLightbox.tsx +5 -4
- package/src/attachment/__tests__/AttachmentChipList.test.tsx +4 -3
- package/src/channel/AgentChannelsPanel.tsx +5 -6
- package/src/channel/ChannelConversationsDialog.tsx +5 -3
- package/src/channel/ChannelTemplatesDialog.tsx +5 -6
- package/src/channel/__tests__/AgentChannelsPanel.test.tsx +14 -9
- package/src/channel-app/internal.tsx +5 -6
- package/src/composer/ComposerToolbar.tsx +122 -90
- package/src/composer/ConfigureMenu.tsx +33 -24
- package/src/composer/ContextChip.tsx +2 -3
- package/src/composer/ContextPopover.tsx +27 -18
- package/src/composer/SessionComposer.tsx +41 -9
- package/src/composer/__tests__/SessionComposer-agentSetupError.test.tsx +124 -0
- package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +4 -9
- package/src/conversation/ConversationMediaAttachment.tsx +2 -2
- package/src/conversation/ConversationTimelineView.tsx +19 -2
- package/src/conversation/__tests__/ConversationTimelineView.test.tsx +106 -3
- package/src/conversation/conversationPresentation.ts +52 -1
- package/src/cursor-accounts/MemberCoverageTable.tsx +15 -13
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +4 -4
- package/src/dashboard/DashboardKPICards.tsx +2 -1
- package/src/dependency-graph/DependencyTreeNode.tsx +1 -7
- package/src/dependency-graph/__tests__/useDependencyGraph.test.ts +18 -34
- package/src/dependency-graph/types.ts +8 -20
- package/src/dependency-graph/useDependencyGraph.ts +2 -22
- package/src/environment/EnvironmentVariableEditor.tsx +17 -6
- package/src/execution/ApprovalCard.tsx +1 -3
- package/src/execution/ArtifactRowView.tsx +68 -48
- package/src/execution/FilePathLink.tsx +43 -27
- package/src/execution/McpToolDetail.tsx +6 -2
- package/src/execution/MessageAttachments.tsx +57 -41
- package/src/execution/MessageEntry.tsx +22 -15
- package/src/execution/PlanArtifactCard.tsx +25 -18
- package/src/execution/ToolCallDetail.tsx +1 -4
- package/src/execution/ToolCallItem.tsx +18 -7
- package/src/execution/WriteBackCard.tsx +38 -29
- package/src/execution/__tests__/ArtifactRow.test.tsx +6 -2
- package/src/execution/__tests__/ArtifactRowView.test.tsx +5 -2
- package/src/execution/__tests__/FilePathLink.test.tsx +10 -6
- package/src/execution/__tests__/FileReviewCard.test.tsx +2 -1
- package/src/execution/__tests__/MessageEntry-attachments.test.tsx +3 -2
- package/src/execution/__tests__/MessageThread.test.tsx +6 -1
- package/src/execution/__tests__/artifact-row-tooltips.layout.test.tsx +115 -0
- package/src/execution/artifact-row-item.ts +1 -1
- package/src/file-reference/FileReferenceChipList.tsx +29 -17
- package/src/file-reference/__tests__/FileReferenceChipList.test.tsx +5 -2
- package/src/iam-policy/OrgMembersPanel.tsx +26 -19
- package/src/iam-policy/ProviderBadge.tsx +17 -10
- package/src/iam-policy/RoleSelector.tsx +0 -1
- package/src/identity-provider/IdentityProviderListPanel.tsx +11 -3
- package/src/index.ts +0 -82
- package/src/internal/__tests__/truncated-text.layout.test.tsx +68 -0
- package/src/internal/__tests__/truncated-text.test.tsx +33 -0
- package/src/internal/truncated-text.tsx +81 -0
- package/src/invitation/InvitationManager.tsx +18 -5
- package/src/library/ScopeToggle.tsx +14 -2
- package/src/library/VisibilitySelector.tsx +21 -14
- package/src/library/useExportResource.ts +3 -4
- package/src/manifest/EditResourceYamlDialog.tsx +1 -2
- package/src/manifest/__tests__/ApplyManifestDialog.test.tsx +2 -2
- package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +9 -9
- package/src/mcp-server/McpServerConfigPanel.tsx +79 -37
- package/src/mcp-server/McpServerConnectDialog.tsx +41 -5
- package/src/mcp-server/McpServerDetailView.tsx +23 -39
- package/src/mcp-server/McpServerPicker.tsx +99 -7
- package/src/mcp-server/McpToolSelector.tsx +12 -7
- package/src/mcp-server/VendorApprovalBlockedNotice.tsx +221 -0
- package/src/mcp-server/__tests__/McpServerPicker.test.tsx +504 -0
- package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +321 -0
- package/src/mcp-server/__tests__/VendorApprovalBlockedNotice.test.tsx +154 -0
- package/src/mcp-server/mcpServerSetupReducer.ts +24 -0
- package/src/mcp-server/useMcpServerSetup.ts +9 -0
- package/src/oauth-app/OAuthAppListPanel.tsx +11 -3
- package/src/platform-client/PlatformClientListPanel.tsx +35 -18
- package/src/pricing-governance/BaselineEditor.tsx +20 -0
- package/src/pricing-governance/ModelCatalogPanel.tsx +9 -5
- package/src/pricing-governance/PricingGovernanceConsole.tsx +9 -5
- package/src/pricing-governance/PricingGovernancePanel.tsx +13 -4
- package/src/pricing-governance/__tests__/ModelCatalogPanel.test.tsx +37 -0
- package/src/resource-workbench/components/StatusBadge.tsx +7 -3
- package/src/schedule/CadenceField.tsx +38 -27
- package/src/schedule/ScheduleRunsTable.tsx +23 -11
- package/src/schedule/__tests__/cadence-tooltips.layout.test.tsx +86 -0
- package/src/session/PlanEditor.tsx +9 -8
- package/src/sharing/AgentShareList.tsx +28 -22
- package/src/sharing/ShareAgentDialog.tsx +5 -6
- package/src/sharing/__tests__/AgentShareList.test.tsx +4 -4
- package/src/skill/SkillDetailView.tsx +23 -12
- package/src/version-history/VersionTimelineEntry.tsx +21 -12
- package/src/workflow/CanvasTransitionEdge.tsx +23 -16
- package/src/workflow/ExecutionActiveTaskIndicator.tsx +74 -59
- package/src/workflow/TaskPickerPopover.tsx +0 -1
- package/src/workflow/WorkflowCanvasEditor.tsx +95 -64
- package/src/workflow/WorkflowNode.tsx +13 -6
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +18 -11
- package/src/workflow/WorkflowTaskList.tsx +2 -2
- package/src/workflow/WorkflowVersionBadge.tsx +33 -18
- package/src/workflow/WorkflowVersionTimeline.tsx +7 -6
- package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +3 -1
- package/src/workflow/__tests__/structured-data-viewer.test.tsx +5 -2
- package/src/workflow/execution-comparison/ExecutionComparisonView.tsx +5 -3
- package/src/workflow/execution-comparison/TaskComparisonTable.tsx +12 -5
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +24 -15
- package/src/workflow/inspector/InspectorHeader.tsx +20 -11
- package/src/workflow/inspector/NestedTaskList.tsx +18 -11
- package/src/workflow/inspector/WorkflowSummaryPanel.tsx +5 -3
- package/src/workflow/inspector/tabs/BranchesTab.tsx +61 -31
- package/src/workflow/instance/WorkflowInstanceList.tsx +5 -6
- package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +5 -4
- package/src/workflow/node-shell/DiffBadge.tsx +18 -11
- package/src/workflow/node-shell/ExecutionBadge.tsx +73 -46
- package/src/workflow/node-shell/NodeActions.tsx +128 -94
- package/src/workflow/task-detail/StructuredDataViewer.tsx +4 -2
- package/src/workspace/EditorTabs.tsx +102 -85
- package/src/workspace/ExplorerTree.tsx +47 -30
- package/src/workspace/FileViewer.tsx +11 -3
- package/src/workspace/PanelChip.tsx +32 -23
- package/src/workspace/WorkspaceEditor.tsx +21 -9
- package/src/workspace/WorkspaceSummary.tsx +21 -12
- package/src/workspace/WorkspaceSurface.tsx +86 -61
- package/src/workspace/__tests__/EditorTabs.test.tsx +5 -2
- package/src/workspace/__tests__/WorkspaceSurface.test.tsx +5 -2
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +2 -1
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/CanvasTransitionEdge.d.ts.map +1 -1
- package/workflow/CanvasTransitionEdge.js +3 -2
- package/workflow/CanvasTransitionEdge.js.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.d.ts.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.js +12 -11
- package/workflow/ExecutionActiveTaskIndicator.js.map +1 -1
- package/workflow/TaskPickerPopover.js +1 -1
- package/workflow/TaskPickerPopover.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +9 -2
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowNode.d.ts.map +1 -1
- package/workflow/WorkflowNode.js +2 -1
- package/workflow/WorkflowNode.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +6 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowTaskList.js +2 -2
- package/workflow/WorkflowTaskList.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +2 -1
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +2 -1
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonView.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonView.js +2 -1
- package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.d.ts.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.js +2 -1
- package/workflow/execution-comparison/TaskComparisonTable.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +6 -4
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/inspector/InspectorHeader.d.ts.map +1 -1
- package/workflow/inspector/InspectorHeader.js +4 -2
- package/workflow/inspector/InspectorHeader.js.map +1 -1
- package/workflow/inspector/NestedTaskList.d.ts.map +1 -1
- package/workflow/inspector/NestedTaskList.js +2 -1
- package/workflow/inspector/NestedTaskList.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 +5 -2
- package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
- package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceList.js +2 -1
- package/workflow/instance/WorkflowInstanceList.js.map +1 -1
- package/workflow/node-shell/DiffBadge.d.ts.map +1 -1
- package/workflow/node-shell/DiffBadge.js +3 -2
- package/workflow/node-shell/DiffBadge.js.map +1 -1
- package/workflow/node-shell/ExecutionBadge.d.ts.map +1 -1
- package/workflow/node-shell/ExecutionBadge.js +5 -4
- package/workflow/node-shell/ExecutionBadge.js.map +1 -1
- package/workflow/node-shell/NodeActions.d.ts.map +1 -1
- package/workflow/node-shell/NodeActions.js +12 -11
- package/workflow/node-shell/NodeActions.js.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.js +5 -1
- package/workflow/task-detail/StructuredDataViewer.js.map +1 -1
- package/workspace/EditorTabs.d.ts.map +1 -1
- package/workspace/EditorTabs.js +38 -37
- package/workspace/EditorTabs.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/FileViewer.d.ts.map +1 -1
- package/workspace/FileViewer.js +2 -1
- package/workspace/FileViewer.js.map +1 -1
- package/workspace/PanelChip.d.ts.map +1 -1
- package/workspace/PanelChip.js +2 -1
- package/workspace/PanelChip.js.map +1 -1
- package/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/workspace/WorkspaceEditor.js +2 -1
- package/workspace/WorkspaceEditor.js.map +1 -1
- package/workspace/WorkspaceSummary.d.ts.map +1 -1
- package/workspace/WorkspaceSummary.js +7 -2
- package/workspace/WorkspaceSummary.js.map +1 -1
- package/workspace/WorkspaceSurface.d.ts.map +1 -1
- package/workspace/WorkspaceSurface.js +12 -11
- package/workspace/WorkspaceSurface.js.map +1 -1
- package/datastore/CollectionRecordsBrowser.d.ts +0 -34
- package/datastore/CollectionRecordsBrowser.d.ts.map +0 -1
- package/datastore/CollectionRecordsBrowser.js +0 -223
- package/datastore/CollectionRecordsBrowser.js.map +0 -1
- package/datastore/CollectionSchemaView.d.ts +0 -29
- package/datastore/CollectionSchemaView.d.ts.map +0 -1
- package/datastore/CollectionSchemaView.js +0 -93
- package/datastore/CollectionSchemaView.js.map +0 -1
- package/datastore/DatastoreDetailView.d.ts +0 -44
- package/datastore/DatastoreDetailView.d.ts.map +0 -1
- package/datastore/DatastoreDetailView.js +0 -76
- package/datastore/DatastoreDetailView.js.map +0 -1
- package/datastore/DatastoreSyncReport.d.ts +0 -19
- package/datastore/DatastoreSyncReport.d.ts.map +0 -1
- package/datastore/DatastoreSyncReport.js +0 -45
- package/datastore/DatastoreSyncReport.js.map +0 -1
- package/datastore/DeleteDatastoreDialog.d.ts +0 -35
- package/datastore/DeleteDatastoreDialog.d.ts.map +0 -1
- package/datastore/DeleteDatastoreDialog.js +0 -90
- package/datastore/DeleteDatastoreDialog.js.map +0 -1
- package/datastore/FieldValueControl.d.ts +0 -55
- package/datastore/FieldValueControl.d.ts.map +0 -1
- package/datastore/FieldValueControl.js +0 -138
- package/datastore/FieldValueControl.js.map +0 -1
- package/datastore/RecordFilterBuilder.d.ts +0 -37
- package/datastore/RecordFilterBuilder.d.ts.map +0 -1
- package/datastore/RecordFilterBuilder.js +0 -122
- package/datastore/RecordFilterBuilder.js.map +0 -1
- package/datastore/RecordFormPanel.d.ts +0 -45
- package/datastore/RecordFormPanel.d.ts.map +0 -1
- package/datastore/RecordFormPanel.js +0 -215
- package/datastore/RecordFormPanel.js.map +0 -1
- package/datastore/index.d.ts +0 -43
- package/datastore/index.d.ts.map +0 -1
- package/datastore/index.js +0 -22
- package/datastore/index.js.map +0 -1
- package/datastore/recordFilter.d.ts +0 -62
- package/datastore/recordFilter.d.ts.map +0 -1
- package/datastore/recordFilter.js +0 -104
- package/datastore/recordFilter.js.map +0 -1
- package/datastore/recordValues.d.ts +0 -85
- package/datastore/recordValues.d.ts.map +0 -1
- package/datastore/recordValues.js +0 -282
- package/datastore/recordValues.js.map +0 -1
- package/datastore/useDatastore.d.ts +0 -39
- package/datastore/useDatastore.d.ts.map +0 -1
- package/datastore/useDatastore.js +0 -44
- package/datastore/useDatastore.js.map +0 -1
- package/datastore/useDatastoreCount.d.ts +0 -50
- package/datastore/useDatastoreCount.d.ts.map +0 -1
- package/datastore/useDatastoreCount.js +0 -27
- package/datastore/useDatastoreCount.js.map +0 -1
- package/datastore/useDatastoreDescription.d.ts +0 -54
- package/datastore/useDatastoreDescription.d.ts.map +0 -1
- package/datastore/useDatastoreDescription.js +0 -50
- package/datastore/useDatastoreDescription.js.map +0 -1
- package/datastore/useDatastoreList.d.ts +0 -57
- package/datastore/useDatastoreList.d.ts.map +0 -1
- package/datastore/useDatastoreList.js +0 -29
- package/datastore/useDatastoreList.js.map +0 -1
- package/datastore/useDatastoreSearch.d.ts +0 -19
- package/datastore/useDatastoreSearch.d.ts.map +0 -1
- package/datastore/useDatastoreSearch.js +0 -22
- package/datastore/useDatastoreSearch.js.map +0 -1
- package/datastore/useDeleteDatastore.d.ts +0 -53
- package/datastore/useDeleteDatastore.d.ts.map +0 -1
- package/datastore/useDeleteDatastore.js +0 -40
- package/datastore/useDeleteDatastore.js.map +0 -1
- package/datastore/useDeleteRecord.d.ts +0 -34
- package/datastore/useDeleteRecord.d.ts.map +0 -1
- package/datastore/useDeleteRecord.js +0 -43
- package/datastore/useDeleteRecord.js.map +0 -1
- package/datastore/useInsertRecord.d.ts +0 -50
- package/datastore/useInsertRecord.d.ts.map +0 -1
- package/datastore/useInsertRecord.js +0 -55
- package/datastore/useInsertRecord.js.map +0 -1
- package/datastore/useRecordCollection.d.ts +0 -104
- package/datastore/useRecordCollection.d.ts.map +0 -1
- package/datastore/useRecordCollection.js +0 -136
- package/datastore/useRecordCollection.js.map +0 -1
- package/datastore/useRecordList.d.ts +0 -66
- package/datastore/useRecordList.d.ts.map +0 -1
- package/datastore/useRecordList.js +0 -58
- package/datastore/useRecordList.js.map +0 -1
- package/datastore/useUpdateRecord.d.ts +0 -52
- package/datastore/useUpdateRecord.d.ts.map +0 -1
- package/datastore/useUpdateRecord.js +0 -55
- package/datastore/useUpdateRecord.js.map +0 -1
- package/src/agent/__tests__/AgentDetailView.datastores.test.tsx +0 -166
- package/src/datastore/CollectionRecordsBrowser.tsx +0 -570
- package/src/datastore/CollectionSchemaView.tsx +0 -247
- package/src/datastore/DatastoreDetailView.tsx +0 -201
- package/src/datastore/DatastoreSyncReport.tsx +0 -105
- package/src/datastore/DeleteDatastoreDialog.tsx +0 -202
- package/src/datastore/FieldValueControl.tsx +0 -289
- package/src/datastore/RecordFilterBuilder.tsx +0 -422
- package/src/datastore/RecordFormPanel.tsx +0 -432
- package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +0 -245
- package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +0 -133
- package/src/datastore/__tests__/FieldValueControl.test.tsx +0 -160
- package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +0 -155
- package/src/datastore/__tests__/RecordFormPanel.test.tsx +0 -227
- package/src/datastore/__tests__/recordFilter.test.ts +0 -169
- package/src/datastore/__tests__/recordMutations.test.tsx +0 -195
- package/src/datastore/__tests__/recordValues.test.ts +0 -359
- package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +0 -142
- package/src/datastore/__tests__/useDatastoreDescription.test.tsx +0 -143
- package/src/datastore/__tests__/useRecordCollection.test.tsx +0 -250
- package/src/datastore/__tests__/useRecordList.test.tsx +0 -85
- package/src/datastore/index.ts +0 -111
- package/src/datastore/recordFilter.ts +0 -154
- package/src/datastore/recordValues.ts +0 -327
- package/src/datastore/useDatastore.ts +0 -67
- package/src/datastore/useDatastoreCount.ts +0 -69
- package/src/datastore/useDatastoreDescription.ts +0 -90
- package/src/datastore/useDatastoreList.ts +0 -79
- package/src/datastore/useDatastoreSearch.ts +0 -39
- package/src/datastore/useDeleteDatastore.ts +0 -87
- package/src/datastore/useDeleteRecord.ts +0 -77
- package/src/datastore/useInsertRecord.ts +0 -92
- package/src/datastore/useRecordCollection.ts +0 -256
- package/src/datastore/useRecordList.ts +0 -131
- package/src/datastore/useUpdateRecord.ts +0 -95
|
@@ -5,6 +5,7 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
7
7
|
import type { PlatformClient } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/api_pb";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import { usePlatformClientList } from "./usePlatformClientList.js";
|
|
9
10
|
import { useDeletePlatformClient } from "./useDeletePlatformClient.js";
|
|
10
11
|
|
|
@@ -239,12 +240,14 @@ function PlatformClientRow({
|
|
|
239
240
|
|
|
240
241
|
<div className="stg:hidden stg:sm:flex stg:shrink-0 stg:items-center stg:gap-3 stg:text-xs stg:text-muted-foreground">
|
|
241
242
|
{fingerprint && (
|
|
242
|
-
<
|
|
243
|
-
className="stg:font-mono"
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
243
|
+
<Tooltip>
|
|
244
|
+
<TooltipTrigger render={<span className="stg:font-mono" />}>
|
|
245
|
+
••••{fingerprint.slice(-4)}
|
|
246
|
+
</TooltipTrigger>
|
|
247
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
248
|
+
{`Secret fingerprint: ${fingerprint}`}
|
|
249
|
+
</TooltipContent>
|
|
250
|
+
</Tooltip>
|
|
248
251
|
)}
|
|
249
252
|
<ExpiryBadge spec={spec} />
|
|
250
253
|
{spec?.autoProvisionAccounts && (
|
|
@@ -253,9 +256,16 @@ function PlatformClientRow({
|
|
|
253
256
|
</span>
|
|
254
257
|
)}
|
|
255
258
|
{createdAt && (
|
|
256
|
-
<
|
|
257
|
-
|
|
258
|
-
|
|
259
|
+
<Tooltip>
|
|
260
|
+
<TooltipTrigger
|
|
261
|
+
render={<time dateTime={timestampDate(createdAt).toISOString()} />}
|
|
262
|
+
>
|
|
263
|
+
{formatShortDate(timestampDate(createdAt))}
|
|
264
|
+
</TooltipTrigger>
|
|
265
|
+
<TooltipContent side="top">
|
|
266
|
+
{`Created ${timestampDate(createdAt).toISOString()}`}
|
|
267
|
+
</TooltipContent>
|
|
268
|
+
</Tooltip>
|
|
259
269
|
)}
|
|
260
270
|
</div>
|
|
261
271
|
|
|
@@ -305,15 +315,22 @@ function ExpiryBadge({ spec }: { spec: PlatformClient["spec"] }) {
|
|
|
305
315
|
const date = timestampDate(spec.expiresAt);
|
|
306
316
|
const isExpired = date < new Date();
|
|
307
317
|
return (
|
|
308
|
-
<
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
318
|
+
<Tooltip>
|
|
319
|
+
<TooltipTrigger
|
|
320
|
+
render={
|
|
321
|
+
<time
|
|
322
|
+
dateTime={date.toISOString()}
|
|
323
|
+
className={cn(
|
|
324
|
+
"stg:text-[0.65rem]",
|
|
325
|
+
isExpired ? "stg:text-destructive stg:font-medium" : "stg:text-muted-foreground",
|
|
326
|
+
)}
|
|
327
|
+
/>
|
|
328
|
+
}
|
|
329
|
+
>
|
|
330
|
+
{isExpired ? "Expired" : `Exp ${formatShortDate(date)}`}
|
|
331
|
+
</TooltipTrigger>
|
|
332
|
+
<TooltipContent side="top">{`Expires ${date.toISOString()}`}</TooltipContent>
|
|
333
|
+
</Tooltip>
|
|
317
334
|
);
|
|
318
335
|
}
|
|
319
336
|
return null;
|
|
@@ -86,6 +86,8 @@ interface CatalogForm {
|
|
|
86
86
|
readonly speedTier: string;
|
|
87
87
|
readonly costTier: string;
|
|
88
88
|
readonly featured: boolean;
|
|
89
|
+
/** Comma-separated base-level wire ids (inbound aliases). */
|
|
90
|
+
readonly wireIds: string;
|
|
89
91
|
readonly input: string;
|
|
90
92
|
readonly output: string;
|
|
91
93
|
readonly cacheWrite: string;
|
|
@@ -105,6 +107,7 @@ const EMPTY_FORM: CatalogForm = {
|
|
|
105
107
|
speedTier: "fast",
|
|
106
108
|
costTier: "standard",
|
|
107
109
|
featured: false,
|
|
110
|
+
wireIds: "",
|
|
108
111
|
input: "",
|
|
109
112
|
output: "",
|
|
110
113
|
cacheWrite: "0",
|
|
@@ -126,6 +129,7 @@ function formFromBaseline(baseline: ModelPricingBaseline): CatalogForm {
|
|
|
126
129
|
speedTier: baseline.speedTier || "fast",
|
|
127
130
|
costTier: baseline.costTier || "standard",
|
|
128
131
|
featured: baseline.featured,
|
|
132
|
+
wireIds: baseline.wireIds.join(", "),
|
|
129
133
|
input: microsToDollarString(pricing?.inputPriceMicrosPerMillion ?? ZERO),
|
|
130
134
|
output: microsToDollarString(pricing?.outputPriceMicrosPerMillion ?? ZERO),
|
|
131
135
|
cacheWrite: microsToDollarString(pricing?.cacheWritePriceMicrosPerMillion ?? ZERO),
|
|
@@ -212,6 +216,10 @@ function buildBaseline(
|
|
|
212
216
|
speedTier: form.speedTier,
|
|
213
217
|
costTier: form.costTier,
|
|
214
218
|
featured: form.featured,
|
|
219
|
+
wireIds: form.wireIds
|
|
220
|
+
.split(",")
|
|
221
|
+
.map((w) => w.trim())
|
|
222
|
+
.filter((w) => w !== ""),
|
|
215
223
|
pricing: create(PricingBlockSchema, {
|
|
216
224
|
inputPriceMicrosPerMillion: input,
|
|
217
225
|
outputPriceMicrosPerMillion: output,
|
|
@@ -516,6 +524,18 @@ export function BaselineEditor({
|
|
|
516
524
|
</Field>
|
|
517
525
|
</div>
|
|
518
526
|
|
|
527
|
+
{/* Inbound aliases, editable on existing entries (unlike identity):
|
|
528
|
+
adding an alias to a live model is this field's primary use. */}
|
|
529
|
+
<Field label="Wire ids (comma-separated)">
|
|
530
|
+
<input
|
|
531
|
+
className={INPUT_CLASSES}
|
|
532
|
+
value={form.wireIds}
|
|
533
|
+
onChange={(e) => set("wireIds", e.target.value)}
|
|
534
|
+
placeholder="e.g. gemini-3-flash-preview"
|
|
535
|
+
disabled={isSubmitting}
|
|
536
|
+
/>
|
|
537
|
+
</Field>
|
|
538
|
+
|
|
519
539
|
<label className="stg:flex stg:cursor-pointer stg:items-center stg:gap-1.5 stg:text-xs stg:text-foreground">
|
|
520
540
|
<input
|
|
521
541
|
type="checkbox"
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
type ModelPricingBaseline,
|
|
9
9
|
} from "@stigmer/protos/ai/stigmer/billing/v1/model_pricing_baseline_pb";
|
|
10
10
|
import { Button } from "../button/index.js";
|
|
11
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
11
12
|
import { BaselineEditor } from "./BaselineEditor.js";
|
|
12
13
|
import { RetireConfirm } from "./RetireConfirm.js";
|
|
13
14
|
import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
|
|
@@ -232,13 +233,16 @@ function CatalogRow({
|
|
|
232
233
|
className="stg:grid stg:grid-cols-[2fr_1fr_1fr_1fr_1fr_auto] stg:items-center stg:gap-2 stg:px-3 stg:py-2 stg:text-xs"
|
|
233
234
|
>
|
|
234
235
|
<span role="cell" className="stg:min-w-0">
|
|
235
|
-
|
|
236
|
+
{/* The display name needs no tooltip: the model id it used to
|
|
237
|
+
reveal is printed on the line below, which shows its own
|
|
238
|
+
tooltip when clipped. */}
|
|
239
|
+
<span className="stg:block stg:truncate stg:font-medium stg:text-foreground">
|
|
236
240
|
{baseline.displayName || baseline.modelId}
|
|
237
241
|
</span>
|
|
238
|
-
<
|
|
239
|
-
{baseline.modelId}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
+
<TruncatedText
|
|
243
|
+
text={`${baseline.modelId}${baseline.featured ? " · featured" : ""}`}
|
|
244
|
+
className="stg:block stg:text-[11px] stg:text-muted-foreground"
|
|
245
|
+
/>
|
|
242
246
|
</span>
|
|
243
247
|
<span role="cell" className="stg:text-muted-foreground">
|
|
244
248
|
{baseline.harness}
|
|
@@ -12,6 +12,7 @@ import { ModelGovernanceDetail } from "./ModelGovernanceDetail.js";
|
|
|
12
12
|
import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
|
|
13
13
|
import { GovernanceBadge, PendingOverrideCard, RateCell } from "./governance-primitives.js";
|
|
14
14
|
import { INPUT_CLASSES } from "../internal/form-primitives.js";
|
|
15
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
15
16
|
import { ZERO } from "./pricing-format.js";
|
|
16
17
|
import { useDecidePricingOverride } from "./useDecidePricingOverride.js";
|
|
17
18
|
import { useRetireModelPricingBaseline } from "./useRetireModelPricingBaseline.js";
|
|
@@ -367,13 +368,16 @@ function ModelRow({
|
|
|
367
368
|
)}
|
|
368
369
|
>
|
|
369
370
|
<span className="stg:min-w-0">
|
|
370
|
-
|
|
371
|
+
{/* The display name needs no tooltip: the model id it used to
|
|
372
|
+
reveal is printed on the line below, which shows its own
|
|
373
|
+
tooltip when clipped. */}
|
|
374
|
+
<span className="stg:block stg:truncate stg:font-medium stg:text-foreground">
|
|
371
375
|
{baseline.displayName || baseline.modelId}
|
|
372
376
|
</span>
|
|
373
|
-
<
|
|
374
|
-
{baseline.modelId}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
+
<TruncatedText
|
|
378
|
+
text={`${baseline.modelId}${baseline.featured ? " · featured" : ""}`}
|
|
379
|
+
className="stg:block stg:text-[11px] stg:text-muted-foreground"
|
|
380
|
+
/>
|
|
377
381
|
</span>
|
|
378
382
|
<span className="stg:text-muted-foreground">{baseline.harness}</span>
|
|
379
383
|
<RateCell
|
|
@@ -5,6 +5,7 @@ import { getUserMessage, isPermissionDenied } from "@stigmer/sdk";
|
|
|
5
5
|
import type {
|
|
6
6
|
ModelPricingGovernanceEntry,
|
|
7
7
|
} from "@stigmer/protos/ai/stigmer/billing/v1/io_pb";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import { OperatorAccessNotice } from "./OperatorAccessNotice.js";
|
|
9
10
|
import { GovernanceBadge, PendingOverrideCard, RateCell } from "./governance-primitives.js";
|
|
10
11
|
import { usePricingGovernance } from "./usePricingGovernance.js";
|
|
@@ -140,10 +141,18 @@ function GovernanceRow({ entry }: { readonly entry: ModelPricingGovernanceEntry
|
|
|
140
141
|
return (
|
|
141
142
|
<div role="row"
|
|
142
143
|
className="stg:grid stg:grid-cols-[2fr_1fr_1fr_1fr_1fr] stg:items-center stg:gap-2 stg:border-b stg:border-border stg:px-3 stg:py-2 stg:text-xs stg:last:border-b-0">
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
<Tooltip>
|
|
145
|
+
<TooltipTrigger
|
|
146
|
+
render={
|
|
147
|
+
<span role="cell" className="stg:truncate stg:font-medium stg:text-foreground" />
|
|
148
|
+
}
|
|
149
|
+
>
|
|
150
|
+
{entry.displayName || entry.modelId}
|
|
151
|
+
</TooltipTrigger>
|
|
152
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
153
|
+
{entry.modelId}
|
|
154
|
+
</TooltipContent>
|
|
155
|
+
</Tooltip>
|
|
147
156
|
<span role="cell" className="stg:text-muted-foreground">{entry.harness}</span>
|
|
148
157
|
<RateCell
|
|
149
158
|
role="cell"
|
|
@@ -53,6 +53,7 @@ function sonnetBaseline(overrides: Record<string, unknown> = {}) {
|
|
|
53
53
|
costTier: "standard",
|
|
54
54
|
speedTier: "fast",
|
|
55
55
|
featured: true,
|
|
56
|
+
wireIds: ["claude-sonnet-4-6-preview"],
|
|
56
57
|
status: ModelPricingBaselineStatus.pricing_baseline_active,
|
|
57
58
|
pricing: create(PricingBlockSchema, {
|
|
58
59
|
inputPriceMicrosPerMillion: 3_000_000n,
|
|
@@ -169,6 +170,42 @@ describe("ModelCatalogPanel", () => {
|
|
|
169
170
|
expect(submitted.baseline.pricingVariants.fast.wireIds).toEqual([
|
|
170
171
|
"claude-sonnet-4-6-fast",
|
|
171
172
|
]);
|
|
173
|
+
// Base-level wire ids survive an unrelated edit — the form surfaces
|
|
174
|
+
// them precisely so a price edit can never silently erase them.
|
|
175
|
+
expect(submitted.baseline.wireIds).toEqual(["claude-sonnet-4-6-preview"]);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("edits base-level wire ids and submits the parsed list", async () => {
|
|
179
|
+
const user = userEvent.setup();
|
|
180
|
+
const upsertModelPricingBaseline = vi.fn().mockResolvedValue(sonnetBaseline());
|
|
181
|
+
const client = createMockStigmer({
|
|
182
|
+
listModelPricingBaselines: vi
|
|
183
|
+
.fn()
|
|
184
|
+
.mockResolvedValue({ baselines: [sonnetBaseline()] }),
|
|
185
|
+
upsertModelPricingBaseline,
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
render(<ModelCatalogPanel />, { wrapper: wrapper(client) });
|
|
189
|
+
await user.click(await screen.findByRole("button", { name: "Edit" }));
|
|
190
|
+
|
|
191
|
+
// The base "Wire ids" field comes before the variant's in DOM order.
|
|
192
|
+
const wireIdsField = screen.getAllByLabelText("Wire ids (comma-separated)")[0];
|
|
193
|
+
await user.clear(wireIdsField);
|
|
194
|
+
await user.type(
|
|
195
|
+
wireIdsField,
|
|
196
|
+
"claude-sonnet-4-6-preview, accounts/fireworks/models/sonnet-4p6",
|
|
197
|
+
);
|
|
198
|
+
await user.click(screen.getByRole("button", { name: "Review changes" }));
|
|
199
|
+
|
|
200
|
+
// Alias-only edits move no rates — the confirm step says so.
|
|
201
|
+
expect(await screen.findByText(/No rate changes/)).toBeTruthy();
|
|
202
|
+
await user.click(screen.getByRole("button", { name: "Apply revision" }));
|
|
203
|
+
await waitFor(() => expect(upsertModelPricingBaseline).toHaveBeenCalledTimes(1));
|
|
204
|
+
|
|
205
|
+
expect(upsertModelPricingBaseline.mock.calls[0][0].baseline.wireIds).toEqual([
|
|
206
|
+
"claude-sonnet-4-6-preview",
|
|
207
|
+
"accounts/fireworks/models/sonnet-4p6",
|
|
208
|
+
]);
|
|
172
209
|
});
|
|
173
210
|
|
|
174
211
|
it("rejects invalid rates client-side before any RPC", async () => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../../internal/tooltip.js";
|
|
4
5
|
import type { StatusPhase } from "../types.js";
|
|
5
6
|
|
|
6
7
|
/** Props for {@link StatusBadge}. */
|
|
@@ -69,9 +70,12 @@ export function StatusBadge({
|
|
|
69
70
|
if (!tooltip) return badge;
|
|
70
71
|
|
|
71
72
|
return (
|
|
72
|
-
<
|
|
73
|
-
{
|
|
74
|
-
|
|
73
|
+
<Tooltip>
|
|
74
|
+
<TooltipTrigger render={<span className="stg:inline-flex" />}>
|
|
75
|
+
{badge}
|
|
76
|
+
</TooltipTrigger>
|
|
77
|
+
<TooltipContent side="top">{tooltip}</TooltipContent>
|
|
78
|
+
</Tooltip>
|
|
75
79
|
);
|
|
76
80
|
}
|
|
77
81
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useId } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
5
6
|
import {
|
|
6
7
|
cadenceToCron,
|
|
7
8
|
describeCadence,
|
|
@@ -164,33 +165,43 @@ export function CadenceField({
|
|
|
164
165
|
// schedule with zero days is not expressible in cron.
|
|
165
166
|
const isLastSelected = isOn && value.days.length === 1;
|
|
166
167
|
return (
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
168
|
+
// The tooltip trigger is a wrapper span so the hint stays
|
|
169
|
+
// hoverable on the always-disabled last selected day — the
|
|
170
|
+
// one toggle whose state actually needs explaining.
|
|
171
|
+
<Tooltip key={label}>
|
|
172
|
+
<TooltipTrigger render={<span className="stg:inline-flex" />}>
|
|
173
|
+
<button
|
|
174
|
+
type="button"
|
|
175
|
+
aria-pressed={isOn}
|
|
176
|
+
aria-label={label}
|
|
177
|
+
disabled={disabled || isLastSelected}
|
|
178
|
+
onClick={() =>
|
|
179
|
+
onChange({
|
|
180
|
+
...value,
|
|
181
|
+
days: isOn
|
|
182
|
+
? value.days.filter((d) => d !== day)
|
|
183
|
+
: [...value.days, day].sort((a, b) => a - b),
|
|
184
|
+
})
|
|
185
|
+
}
|
|
186
|
+
className={cn(
|
|
187
|
+
"stg:inline-flex stg:h-7 stg:w-9 stg:items-center stg:justify-center stg:rounded-md stg:border stg:text-xs stg:font-medium stg:transition-colors",
|
|
188
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
189
|
+
"stg:disabled:pointer-events-none",
|
|
190
|
+
isOn
|
|
191
|
+
? "stg:border-primary stg:bg-primary stg:text-primary-foreground"
|
|
192
|
+
: "stg:border-input stg:bg-background stg:text-muted-foreground stg:hover:text-foreground",
|
|
193
|
+
isLastSelected && "stg:opacity-70",
|
|
194
|
+
)}
|
|
195
|
+
>
|
|
196
|
+
{label.slice(0, 3)}
|
|
197
|
+
</button>
|
|
198
|
+
</TooltipTrigger>
|
|
199
|
+
<TooltipContent side="top">
|
|
200
|
+
{isLastSelected
|
|
201
|
+
? "A weekly schedule needs at least one day"
|
|
202
|
+
: label}
|
|
203
|
+
</TooltipContent>
|
|
204
|
+
</Tooltip>
|
|
194
205
|
);
|
|
195
206
|
})}
|
|
196
207
|
</div>
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
12
12
|
import { ErrorMessage } from "../error/ErrorMessage.js";
|
|
13
13
|
import { Pagination } from "../internal/Pagination.js";
|
|
14
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
14
15
|
import { useScheduleRuns } from "./useScheduleRuns.js";
|
|
15
16
|
|
|
16
17
|
/** Props for {@link ScheduleRunsTable}. */
|
|
@@ -188,12 +189,17 @@ function RunTableRow({
|
|
|
188
189
|
<span role="cell" className="stg:hidden stg:text-xs stg:text-muted-foreground stg:sm:block">
|
|
189
190
|
{runOriginLabel(run.origin)}
|
|
190
191
|
</span>
|
|
191
|
-
<span
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
192
|
+
<span role="cell" className="stg:text-xs stg:text-muted-foreground">
|
|
193
|
+
{fireDate ? (
|
|
194
|
+
<Tooltip>
|
|
195
|
+
<TooltipTrigger render={<time dateTime={fireDate.toISOString()} />}>
|
|
196
|
+
{formatRelativeTime(fireDate, now)}
|
|
197
|
+
</TooltipTrigger>
|
|
198
|
+
<TooltipContent side="top">{fireDate.toLocaleString()}</TooltipContent>
|
|
199
|
+
</Tooltip>
|
|
200
|
+
) : (
|
|
201
|
+
"—"
|
|
202
|
+
)}
|
|
197
203
|
</span>
|
|
198
204
|
<span
|
|
199
205
|
role="cell"
|
|
@@ -313,11 +319,17 @@ function CompactRunRow({
|
|
|
313
319
|
{runOriginLabel(run.origin)}
|
|
314
320
|
</span>
|
|
315
321
|
<span className="stg:text-xs stg:text-muted-foreground-subtle">·</span>
|
|
316
|
-
<span
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
322
|
+
<span className="stg:text-xs stg:text-muted-foreground">
|
|
323
|
+
{fireDate ? (
|
|
324
|
+
<Tooltip>
|
|
325
|
+
<TooltipTrigger render={<time dateTime={fireDate.toISOString()} />}>
|
|
326
|
+
{formatRelativeTime(fireDate, now)}
|
|
327
|
+
</TooltipTrigger>
|
|
328
|
+
<TooltipContent side="top">{fireDate.toLocaleString()}</TooltipContent>
|
|
329
|
+
</Tooltip>
|
|
330
|
+
) : (
|
|
331
|
+
"—"
|
|
332
|
+
)}
|
|
321
333
|
</span>
|
|
322
334
|
</div>
|
|
323
335
|
{run.reason && (
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// The disabled-control tooltip contract from the native-title sweep
|
|
2
|
+
// (stigmer-cloud#268), pinned in a real Chromium on CadenceField's
|
|
3
|
+
// weekday toggles — the sweep's canonical "explanation on a disabled
|
|
4
|
+
// control" site. Browsers suppress pointer events on disabled form
|
|
5
|
+
// controls, so the old native `title` was unreachable by EVERY input
|
|
6
|
+
// method exactly when it mattered (the always-disabled last selected
|
|
7
|
+
// day). The fix hangs the house tooltip off a wrapper span; this suite
|
|
8
|
+
// proves a mouse user really gets the reason while the button is
|
|
9
|
+
// disabled.
|
|
10
|
+
|
|
11
|
+
import "../../../dist/styles.css";
|
|
12
|
+
|
|
13
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
14
|
+
import { render, cleanup } from "@testing-library/react";
|
|
15
|
+
import { userEvent } from "@vitest/browser/context";
|
|
16
|
+
import { CadenceField } from "../CadenceField.js";
|
|
17
|
+
|
|
18
|
+
function renderWeekly() {
|
|
19
|
+
const pane = document.createElement("div");
|
|
20
|
+
pane.className = "stgm";
|
|
21
|
+
pane.style.width = "480px";
|
|
22
|
+
document.body.appendChild(pane);
|
|
23
|
+
render(
|
|
24
|
+
<CadenceField
|
|
25
|
+
value={{ kind: "weekly", days: [1], hour: 9, minute: 0 }}
|
|
26
|
+
onChange={() => {}}
|
|
27
|
+
/>,
|
|
28
|
+
{ container: pane },
|
|
29
|
+
);
|
|
30
|
+
return pane;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
cleanup();
|
|
35
|
+
document.querySelectorAll(".stgm").forEach((node) => node.remove());
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe("CadenceField disabled-day tooltip", () => {
|
|
39
|
+
it("explains the locked last-selected day on hover while the button is disabled", async () => {
|
|
40
|
+
const pane = renderWeekly();
|
|
41
|
+
expect(pane.querySelector("[title]")).toBeNull();
|
|
42
|
+
|
|
43
|
+
const monday = Array.from(pane.querySelectorAll("button")).find(
|
|
44
|
+
(el) => el.getAttribute("aria-label") === "Monday",
|
|
45
|
+
);
|
|
46
|
+
expect(monday!.disabled).toBe(true);
|
|
47
|
+
|
|
48
|
+
// Hover the wrapper span — the disabled button itself receives no
|
|
49
|
+
// pointer events, which is the entire reason the wrapper exists.
|
|
50
|
+
const wrapper = monday!.parentElement!;
|
|
51
|
+
await userEvent.hover(wrapper);
|
|
52
|
+
await vi.waitFor(
|
|
53
|
+
() => {
|
|
54
|
+
const portaled = Array.from(document.body.children)
|
|
55
|
+
.filter((node) => node !== pane)
|
|
56
|
+
.map((node) => node.textContent ?? "")
|
|
57
|
+
.join(" ");
|
|
58
|
+
expect(portaled).toContain("A weekly schedule needs at least one day");
|
|
59
|
+
},
|
|
60
|
+
{ timeout: 3000, interval: 50 },
|
|
61
|
+
);
|
|
62
|
+
await userEvent.unhover(wrapper);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("names an enabled weekday on hover", async () => {
|
|
66
|
+
const pane = renderWeekly();
|
|
67
|
+
|
|
68
|
+
const tuesday = Array.from(pane.querySelectorAll("button")).find(
|
|
69
|
+
(el) => el.getAttribute("aria-label") === "Tuesday",
|
|
70
|
+
);
|
|
71
|
+
expect(tuesday!.disabled).toBe(false);
|
|
72
|
+
|
|
73
|
+
await userEvent.hover(tuesday!.parentElement!);
|
|
74
|
+
await vi.waitFor(
|
|
75
|
+
() => {
|
|
76
|
+
const portaled = Array.from(document.body.children)
|
|
77
|
+
.filter((node) => node !== pane)
|
|
78
|
+
.map((node) => node.textContent ?? "")
|
|
79
|
+
.join(" ");
|
|
80
|
+
expect(portaled).toContain("Tuesday");
|
|
81
|
+
},
|
|
82
|
+
{ timeout: 3000, interval: 50 },
|
|
83
|
+
);
|
|
84
|
+
await userEvent.unhover(tuesday!.parentElement!);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -153,17 +153,21 @@ export function PlanEditor({
|
|
|
153
153
|
onClick={() => setView("edit")}
|
|
154
154
|
label="Edit"
|
|
155
155
|
disabled={!canEdit}
|
|
156
|
-
title={
|
|
157
|
-
!canEdit
|
|
158
|
-
? "This plan is too large to edit in place — download it instead."
|
|
159
|
-
: undefined
|
|
160
|
-
}
|
|
161
156
|
/>
|
|
162
157
|
)}
|
|
163
158
|
</div>
|
|
164
159
|
<span className="stg:text-[0.65rem] stg:tabular-nums stg:text-muted-foreground-faint">
|
|
165
160
|
{formatArtifactSize(plan.artifact.sizeBytes)}
|
|
166
161
|
</span>
|
|
162
|
+
{/* The reason the Edit tab is disabled must be visible text: a
|
|
163
|
+
disabled tab leaves the tab order and drops pointer events, so
|
|
164
|
+
no hover- or focus-dependent hint can ever reach the user who
|
|
165
|
+
needs it. */}
|
|
166
|
+
{activeDraft !== undefined && !canEdit && (
|
|
167
|
+
<span className="stg:min-w-0 stg:text-[0.65rem] stg:text-muted-foreground">
|
|
168
|
+
This plan is too large to edit in place — download it instead.
|
|
169
|
+
</span>
|
|
170
|
+
)}
|
|
167
171
|
|
|
168
172
|
<div className="stg:ml-auto stg:flex stg:min-w-0 stg:flex-wrap stg:items-center stg:gap-3">
|
|
169
173
|
{activeDraft?.isEdited && (
|
|
@@ -312,13 +316,11 @@ function ViewTab({
|
|
|
312
316
|
onClick,
|
|
313
317
|
label,
|
|
314
318
|
disabled,
|
|
315
|
-
title,
|
|
316
319
|
}: {
|
|
317
320
|
readonly active: boolean;
|
|
318
321
|
readonly onClick: () => void;
|
|
319
322
|
readonly label: string;
|
|
320
323
|
readonly disabled?: boolean;
|
|
321
|
-
readonly title?: string;
|
|
322
324
|
}) {
|
|
323
325
|
return (
|
|
324
326
|
<button
|
|
@@ -327,7 +329,6 @@ function ViewTab({
|
|
|
327
329
|
aria-selected={active}
|
|
328
330
|
onClick={onClick}
|
|
329
331
|
disabled={disabled}
|
|
330
|
-
title={title}
|
|
331
332
|
className={cn(
|
|
332
333
|
"stg:rounded stg:px-2 stg:py-0.5 stg:text-[0.65rem] stg:font-medium stg:transition-colors",
|
|
333
334
|
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
@@ -15,6 +15,8 @@ import { ActionMenu } from "../action-menu/index.js";
|
|
|
15
15
|
import { Button } from "../button/Button.js";
|
|
16
16
|
import { EmptyState } from "../empty-state/EmptyState.js";
|
|
17
17
|
import { useCheckPermission } from "../iam-policy/useCheckPermission.js";
|
|
18
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
19
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
18
20
|
import { ConfirmDialog } from "../resource-detail/ConfirmDialog.js";
|
|
19
21
|
import { useConfirmAction } from "../resource-detail/useConfirmAction.js";
|
|
20
22
|
import { useCopyResource } from "../resource-detail/useCopyResource.js";
|
|
@@ -311,35 +313,39 @@ function ShareRow({
|
|
|
311
313
|
>
|
|
312
314
|
<td className="stg:px-4 stg:py-2.5">
|
|
313
315
|
<div className="stg:flex stg:min-w-0 stg:items-center stg:gap-2">
|
|
314
|
-
<
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
{meta?.name || slug || "\u2014"}
|
|
319
|
-
</span>
|
|
316
|
+
<TruncatedText
|
|
317
|
+
text={meta?.name || slug || "\u2014"}
|
|
318
|
+
className="stg:font-medium stg:text-foreground"
|
|
319
|
+
/>
|
|
320
320
|
{isCrossOrg && (
|
|
321
|
-
<
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
321
|
+
<Tooltip>
|
|
322
|
+
<TooltipTrigger
|
|
323
|
+
render={
|
|
324
|
+
<span
|
|
325
|
+
className={cn(
|
|
326
|
+
"stg:inline-flex stg:shrink-0 stg:items-center stg:rounded-md stg:px-1.5 stg:py-0.5",
|
|
327
|
+
"stg:text-[0.6rem] stg:font-medium stg:uppercase stg:tracking-wide",
|
|
328
|
+
"stg:bg-muted stg:text-muted-foreground stg:border stg:border-border",
|
|
329
|
+
)}
|
|
330
|
+
/>
|
|
331
|
+
}
|
|
332
|
+
>
|
|
333
|
+
Cross-org
|
|
334
|
+
</TooltipTrigger>
|
|
335
|
+
<TooltipContent side="top">
|
|
336
|
+
{`This share lives in ${org}; the agent lives in ${agent.metadata?.org}`}
|
|
337
|
+
</TooltipContent>
|
|
338
|
+
</Tooltip>
|
|
331
339
|
)}
|
|
332
340
|
</div>
|
|
333
341
|
</td>
|
|
334
342
|
|
|
335
343
|
<td className="stg:px-4 stg:py-2.5" onClick={(e) => e.stopPropagation()}>
|
|
336
344
|
<div className="stg:flex stg:min-w-0 stg:items-center stg:gap-1.5">
|
|
337
|
-
<
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
{displayPath}
|
|
342
|
-
</code>
|
|
345
|
+
<TruncatedText
|
|
346
|
+
text={displayPath}
|
|
347
|
+
className="stg:font-mono stg:text-xs stg:text-muted-foreground"
|
|
348
|
+
/>
|
|
343
349
|
<button
|
|
344
350
|
type="button"
|
|
345
351
|
onClick={handleCopyLink}
|