@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
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/io_pb";
|
|
10
10
|
import type { CursorMemberSpend } from "@stigmer/protos/ai/stigmer/platform/cursoraccount/v1/cursor_account_pb";
|
|
11
11
|
import { Button } from "../button/index.js";
|
|
12
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
12
13
|
import { StateBadge } from "./badges.js";
|
|
13
14
|
import { formatPoolPercent, formatSpendMicros } from "./cursor-account-format.js";
|
|
14
15
|
import type { CursorAccountCoverage } from "./cursor-account-coverage.js";
|
|
@@ -225,9 +226,9 @@ function CoverageGroup({
|
|
|
225
226
|
* The member-identity cell shared by key rows and gap rows. The email is
|
|
226
227
|
* the row's identity, so it must be fully readable: it wraps onto more
|
|
227
228
|
* lines when the column is narrow (emails are unbroken strings, so they
|
|
228
|
-
* need explicit word-breaking)
|
|
229
|
-
*
|
|
230
|
-
*
|
|
229
|
+
* need explicit word-breaking), unlike the other text cells which
|
|
230
|
+
* truncate. The secondary name line stays truncated — it is display
|
|
231
|
+
* sugar, not identity.
|
|
231
232
|
*/
|
|
232
233
|
function MemberCell({
|
|
233
234
|
email,
|
|
@@ -238,7 +239,9 @@ function MemberCell({
|
|
|
238
239
|
}) {
|
|
239
240
|
return (
|
|
240
241
|
<span role="cell" className="stg:min-w-0">
|
|
241
|
-
|
|
242
|
+
{/* No tooltip: break-words shows the full email, so a hover hint
|
|
243
|
+
would only repeat what is already visible. */}
|
|
244
|
+
<span className="stg:block stg:break-words stg:font-medium stg:text-foreground">
|
|
242
245
|
{email}
|
|
243
246
|
</span>
|
|
244
247
|
{name && (
|
|
@@ -273,16 +276,15 @@ function KeyRow({
|
|
|
273
276
|
<div role="row" className={cn(ROW_GRID, "stg:border-t stg:border-border-muted stg:text-xs")}>
|
|
274
277
|
<MemberCell email={key.boundEmail} />
|
|
275
278
|
<span role="cell" className="stg:min-w-0">
|
|
276
|
-
<
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
{key.cursorKeyName || "unnamed key"}
|
|
281
|
-
</span>
|
|
279
|
+
<TruncatedText
|
|
280
|
+
text={key.cursorKeyName || "unnamed key"}
|
|
281
|
+
className="stg:block stg:text-muted-foreground"
|
|
282
|
+
/>
|
|
282
283
|
{key.label && (
|
|
283
|
-
<
|
|
284
|
-
{key.label}
|
|
285
|
-
|
|
284
|
+
<TruncatedText
|
|
285
|
+
text={key.label}
|
|
286
|
+
className="stg:block stg:text-[11px] stg:text-muted-foreground"
|
|
287
|
+
/>
|
|
286
288
|
)}
|
|
287
289
|
</span>
|
|
288
290
|
<SpendCells spend={keyView.spend} />
|
|
@@ -237,10 +237,10 @@ describe("CursorAccountsConsole", () => {
|
|
|
237
237
|
expect(screen.getByText(/On the team — key held/)).toBeTruthy();
|
|
238
238
|
expect(screen.getByText("zane@scenar.ai")).toBeTruthy();
|
|
239
239
|
expect(screen.getByText("stigmer-prod")).toBeTruthy();
|
|
240
|
-
// The email is the row's identity:
|
|
241
|
-
//
|
|
242
|
-
|
|
243
|
-
expect(
|
|
240
|
+
// The email is the row's identity: the cell wraps rather than
|
|
241
|
+
// truncates, so the full value is always visible text on both row
|
|
242
|
+
// kinds — and never a native title (banned, stigmer-cloud#268).
|
|
243
|
+
expect(document.querySelector("[title]")).toBeNull();
|
|
244
244
|
expect(screen.getByText("$0.17")).toBeTruthy(); // included, 169342 micro-USD
|
|
245
245
|
expect(screen.getByText("Active")).toBeTruthy();
|
|
246
246
|
// Category 2: on the team, no key — server-joined spend on the gap row.
|
|
@@ -103,11 +103,12 @@ export const DashboardKPICards = memo(function DashboardKPICards({
|
|
|
103
103
|
<div className={cn("stg:grid stg:gap-3 stg:sm:grid-cols-2 stg:lg:grid-cols-4", className)}>
|
|
104
104
|
{STAT_CARDS.map((card) => {
|
|
105
105
|
const breakdown = card.getBreakdown(summary);
|
|
106
|
+
// No tooltip on the card: the breakdown is rendered visibly below
|
|
107
|
+
// the value, so the old title only repeated on-screen text.
|
|
106
108
|
return (
|
|
107
109
|
<div
|
|
108
110
|
key={card.label}
|
|
109
111
|
className="stg:rounded-lg stg:border stg:border-border stg:bg-card stg:px-4 stg:py-3"
|
|
110
|
-
title={breakdown ?? undefined}
|
|
111
112
|
>
|
|
112
113
|
<p className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
113
114
|
{card.label}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useState, type KeyboardEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
-
import { DatastoreIcon } from "../datastore/DatastoreDetailView.js";
|
|
6
5
|
import type { DependencyNode, NodeKind } from "./types.js";
|
|
7
6
|
|
|
8
7
|
interface DependencyTreeNodeProps {
|
|
@@ -16,7 +15,6 @@ const KIND_LABELS: Record<NodeKind, string> = {
|
|
|
16
15
|
agent: "Agent",
|
|
17
16
|
"mcp-server": "MCP",
|
|
18
17
|
skill: "Skill",
|
|
19
|
-
datastore: "Datastore",
|
|
20
18
|
"sub-agent": "Sub-Agent",
|
|
21
19
|
};
|
|
22
20
|
|
|
@@ -182,9 +180,7 @@ function kindBadgeClasses(kind: NodeKind): string {
|
|
|
182
180
|
case "skill":
|
|
183
181
|
return "stg:bg-[var(--stgm-status-pending-subtle)] stg:text-[var(--stgm-status-pending)]";
|
|
184
182
|
// Badges borrow status hues as category colors (skill=pending,
|
|
185
|
-
// sub-agent=ready)
|
|
186
|
-
case "datastore":
|
|
187
|
-
return "stg:bg-[var(--stgm-status-degraded-subtle)] stg:text-[var(--stgm-status-degraded)]";
|
|
183
|
+
// sub-agent=ready).
|
|
188
184
|
case "sub-agent":
|
|
189
185
|
return "stg:bg-[var(--stgm-status-ready-subtle)] stg:text-[var(--stgm-status-ready)]";
|
|
190
186
|
case "agent":
|
|
@@ -211,8 +207,6 @@ function NodeIcon({
|
|
|
211
207
|
return <McpServerIcon className={className} />;
|
|
212
208
|
case "skill":
|
|
213
209
|
return <SkillIcon className={className} />;
|
|
214
|
-
case "datastore":
|
|
215
|
-
return <DatastoreIcon className={className} />;
|
|
216
210
|
}
|
|
217
211
|
}
|
|
218
212
|
|
|
@@ -15,48 +15,46 @@ function graphFor(spec: Parameters<typeof useDependencyGraph>[0]["spec"]) {
|
|
|
15
15
|
return result.current;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
describe("useDependencyGraph
|
|
19
|
-
it("derives a
|
|
18
|
+
describe("useDependencyGraph", () => {
|
|
19
|
+
it("derives a skill node with a navigation ref", () => {
|
|
20
20
|
const { tree, isEmpty } = graphFor({
|
|
21
21
|
...emptySpec,
|
|
22
|
-
|
|
23
|
-
{ datastoreRef: { org: "acme", slug: "clinic-records" } },
|
|
24
|
-
],
|
|
22
|
+
skillRefs: [{ org: "acme", slug: "triage-guide" }],
|
|
25
23
|
});
|
|
26
24
|
|
|
27
|
-
// A
|
|
25
|
+
// A skill-only agent has dependencies — the tab must appear.
|
|
28
26
|
expect(isEmpty).toBe(false);
|
|
29
27
|
expect(tree).not.toBeNull();
|
|
30
28
|
expect(tree!.nodeCount).toBe(2);
|
|
31
29
|
|
|
32
30
|
const node = tree!.root.children[0];
|
|
33
31
|
expect(node).toMatchObject({
|
|
34
|
-
id: "
|
|
35
|
-
kind: "
|
|
36
|
-
label: "
|
|
37
|
-
ref: { org: "acme", slug: "
|
|
32
|
+
id: "skill:triage-guide",
|
|
33
|
+
kind: "skill",
|
|
34
|
+
label: "triage-guide",
|
|
35
|
+
ref: { org: "acme", slug: "triage-guide" },
|
|
38
36
|
});
|
|
39
37
|
// Same-org ref gets no qualified label.
|
|
40
38
|
expect(node.qualifiedLabel).toBeUndefined();
|
|
41
39
|
});
|
|
42
40
|
|
|
43
|
-
it("qualifies cross-org
|
|
41
|
+
it("qualifies cross-org labels and falls back to the agent org for empty refs", () => {
|
|
44
42
|
const { tree } = graphFor({
|
|
45
43
|
...emptySpec,
|
|
46
|
-
|
|
47
|
-
{
|
|
48
|
-
{
|
|
44
|
+
skillRefs: [
|
|
45
|
+
{ org: "partner", slug: "shared-guide" },
|
|
46
|
+
{ org: "", slug: "local-guide" },
|
|
49
47
|
],
|
|
50
48
|
});
|
|
51
49
|
|
|
52
50
|
const [crossOrg, relative] = tree!.root.children;
|
|
53
|
-
expect(crossOrg.qualifiedLabel).toBe("partner/shared-
|
|
54
|
-
expect(crossOrg.ref).toEqual({ org: "partner", slug: "shared-
|
|
51
|
+
expect(crossOrg.qualifiedLabel).toBe("partner/shared-guide");
|
|
52
|
+
expect(crossOrg.ref).toEqual({ org: "partner", slug: "shared-guide" });
|
|
55
53
|
expect(relative.qualifiedLabel).toBeUndefined();
|
|
56
|
-
expect(relative.ref).toEqual({ org: "acme", slug: "local-
|
|
54
|
+
expect(relative.ref).toEqual({ org: "acme", slug: "local-guide" });
|
|
57
55
|
});
|
|
58
56
|
|
|
59
|
-
it("orders children to mirror the Overview sections: MCP, skills,
|
|
57
|
+
it("orders children to mirror the Overview sections: MCP, skills, sub-agents", () => {
|
|
60
58
|
const { tree } = graphFor({
|
|
61
59
|
mcpServerUsages: [
|
|
62
60
|
{
|
|
@@ -75,32 +73,18 @@ describe("useDependencyGraph — datastore nodes", () => {
|
|
|
75
73
|
modelOverride: "",
|
|
76
74
|
},
|
|
77
75
|
],
|
|
78
|
-
datastoreUsages: [
|
|
79
|
-
{ datastoreRef: { org: "acme", slug: "clinic-records" } },
|
|
80
|
-
],
|
|
81
76
|
});
|
|
82
77
|
|
|
83
78
|
expect(tree!.root.children.map((c) => c.kind)).toEqual([
|
|
84
79
|
"mcp-server",
|
|
85
80
|
"skill",
|
|
86
|
-
"datastore",
|
|
87
81
|
"sub-agent",
|
|
88
82
|
]);
|
|
89
|
-
expect(tree!.nodeCount).toBe(
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("accepts specs without the datastoreUsages field (pre-existing public callers)", () => {
|
|
93
|
-
const { tree, isEmpty } = graphFor({
|
|
94
|
-
...emptySpec,
|
|
95
|
-
skillRefs: [{ org: "acme", slug: "triage-guide" }],
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
expect(isEmpty).toBe(false);
|
|
99
|
-
expect(tree!.root.children.map((c) => c.kind)).toEqual(["skill"]);
|
|
83
|
+
expect(tree!.nodeCount).toBe(4);
|
|
100
84
|
});
|
|
101
85
|
|
|
102
86
|
it("stays empty when no dependencies exist at all", () => {
|
|
103
|
-
const { tree, isEmpty } = graphFor(
|
|
87
|
+
const { tree, isEmpty } = graphFor(emptySpec);
|
|
104
88
|
|
|
105
89
|
expect(isEmpty).toBe(true);
|
|
106
90
|
expect(tree).toBeNull();
|
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* - `"agent"` — the root agent (always the tree root)
|
|
5
5
|
* - `"mcp-server"` — an MCP server referenced via `mcpServerUsages` or `mcpAccess`
|
|
6
6
|
* - `"skill"` — a skill referenced via `skillRefs`
|
|
7
|
-
* - `"datastore"` — a datastore referenced via `datastoreUsages`
|
|
8
7
|
* - `"sub-agent"` — an inline sub-agent definition with its own dependencies
|
|
9
8
|
*/
|
|
10
|
-
export type NodeKind = "agent" | "mcp-server" | "skill" | "
|
|
9
|
+
export type NodeKind = "agent" | "mcp-server" | "skill" | "sub-agent";
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* A single node in the agent dependency tree.
|
|
@@ -16,9 +15,9 @@ export type NodeKind = "agent" | "mcp-server" | "skill" | "datastore" | "sub-age
|
|
|
16
15
|
* (MCP servers and skills they access). Edges are implicit in the
|
|
17
16
|
* parent-child relationship — no separate edge type is needed.
|
|
18
17
|
*
|
|
19
|
-
* Nodes are navigable when `ref` is defined (MCP servers
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* Nodes are navigable when `ref` is defined (MCP servers and skills).
|
|
19
|
+
* Sub-agent nodes have no `ref` because they are inline definitions
|
|
20
|
+
* within the agent spec, not standalone resources.
|
|
22
21
|
*/
|
|
23
22
|
export interface DependencyNode {
|
|
24
23
|
/**
|
|
@@ -47,9 +46,9 @@ export interface DependencyNode {
|
|
|
47
46
|
/** Child nodes. Empty array for leaf nodes (MCP servers, skills). */
|
|
48
47
|
readonly children: readonly DependencyNode[];
|
|
49
48
|
/**
|
|
50
|
-
* Navigation reference for clickable nodes. Defined for MCP servers
|
|
51
|
-
*
|
|
52
|
-
*
|
|
49
|
+
* Navigation reference for clickable nodes. Defined for MCP servers
|
|
50
|
+
* and skills (standalone resources). Undefined for sub-agents (inline
|
|
51
|
+
* definitions) and the root agent.
|
|
53
52
|
*/
|
|
54
53
|
readonly ref?: { readonly org: string; readonly slug: string };
|
|
55
54
|
}
|
|
@@ -71,7 +70,7 @@ export interface DependencyGraphProps {
|
|
|
71
70
|
/**
|
|
72
71
|
* Called when a navigable node is clicked. The `node.ref` field
|
|
73
72
|
* contains the `org` and `slug` for routing. Only fired for nodes
|
|
74
|
-
* where `ref` is defined (MCP servers
|
|
73
|
+
* where `ref` is defined (MCP servers and skills).
|
|
75
74
|
*/
|
|
76
75
|
readonly onNodeClick?: (node: DependencyNode) => void;
|
|
77
76
|
/**
|
|
@@ -120,17 +119,6 @@ export interface UseDependencyGraphOptions {
|
|
|
120
119
|
}[];
|
|
121
120
|
readonly modelOverride: string;
|
|
122
121
|
}[];
|
|
123
|
-
/**
|
|
124
|
-
* Datastore attachments (`spec.datastoreUsages`). Optional because
|
|
125
|
-
* this hook is a public SDK export: callers passing hand-built spec
|
|
126
|
-
* objects written before the field existed must keep compiling.
|
|
127
|
-
*/
|
|
128
|
-
readonly datastoreUsages?: readonly {
|
|
129
|
-
readonly datastoreRef?: {
|
|
130
|
-
readonly org: string;
|
|
131
|
-
readonly slug: string;
|
|
132
|
-
};
|
|
133
|
-
}[];
|
|
134
122
|
} | undefined;
|
|
135
123
|
}
|
|
136
124
|
|
|
@@ -41,12 +41,10 @@ export function useDependencyGraph({
|
|
|
41
41
|
if (!spec) return { tree: null, isEmpty: true };
|
|
42
42
|
|
|
43
43
|
const { mcpServerUsages, skillRefs, subAgents } = spec;
|
|
44
|
-
const datastoreUsages = spec.datastoreUsages ?? [];
|
|
45
44
|
|
|
46
45
|
const hasDeps =
|
|
47
46
|
mcpServerUsages.length > 0 ||
|
|
48
47
|
skillRefs.length > 0 ||
|
|
49
|
-
datastoreUsages.length > 0 ||
|
|
50
48
|
subAgents.length > 0;
|
|
51
49
|
|
|
52
50
|
if (!hasDeps) return { tree: null, isEmpty: true };
|
|
@@ -94,24 +92,6 @@ export function useDependencyGraph({
|
|
|
94
92
|
};
|
|
95
93
|
});
|
|
96
94
|
|
|
97
|
-
const datastoreNodes: DependencyNode[] = datastoreUsages
|
|
98
|
-
.filter((u) => u.datastoreRef)
|
|
99
|
-
.map((usage) => {
|
|
100
|
-
nodeCount++;
|
|
101
|
-
const ref = usage.datastoreRef!;
|
|
102
|
-
return {
|
|
103
|
-
id: `datastore:${ref.slug}`,
|
|
104
|
-
kind: "datastore" as const,
|
|
105
|
-
label: ref.slug,
|
|
106
|
-
qualifiedLabel:
|
|
107
|
-
ref.org && ref.org !== agentOrg
|
|
108
|
-
? `${ref.org}/${ref.slug}`
|
|
109
|
-
: undefined,
|
|
110
|
-
children: [],
|
|
111
|
-
ref: { org: ref.org || agentOrg, slug: ref.slug },
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
|
|
115
95
|
const subAgentNodes: DependencyNode[] = subAgents.map((sa) => {
|
|
116
96
|
nodeCount++;
|
|
117
97
|
|
|
@@ -164,12 +144,12 @@ export function useDependencyGraph({
|
|
|
164
144
|
});
|
|
165
145
|
|
|
166
146
|
// Child ordering mirrors the Overview sections: MCP servers,
|
|
167
|
-
// skills,
|
|
147
|
+
// skills, then sub-agents.
|
|
168
148
|
const root: DependencyNode = {
|
|
169
149
|
id: `agent:${agentName}`,
|
|
170
150
|
kind: "agent",
|
|
171
151
|
label: agentName,
|
|
172
|
-
children: [...mcpNodes, ...skillNodes, ...
|
|
152
|
+
children: [...mcpNodes, ...skillNodes, ...subAgentNodes],
|
|
173
153
|
};
|
|
174
154
|
|
|
175
155
|
return {
|
|
@@ -12,6 +12,7 @@ import { getUserMessage, type EnvVarInput } from "@stigmer/sdk";
|
|
|
12
12
|
import type { Environment } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
|
|
13
13
|
import { useStigmer } from "../hooks.js";
|
|
14
14
|
import { toError } from "../internal/toError.js";
|
|
15
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
15
16
|
import { PermissionGate } from "../iam-policy/PermissionGate.js";
|
|
16
17
|
import { useUpdateEnvironmentVariables } from "./useUpdateEnvironmentVariables.js";
|
|
17
18
|
import { useRemoveEnvironmentVariables } from "./useRemoveEnvironmentVariables.js";
|
|
@@ -390,12 +391,22 @@ function VariableRow({
|
|
|
390
391
|
<div className="stg:group stg:flex stg:items-center stg:gap-3 stg:py-2">
|
|
391
392
|
{/* Key + badge */}
|
|
392
393
|
<div className="stg:flex stg:shrink-0 stg:items-baseline stg:gap-1.5">
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
394
|
+
{variable.description ? (
|
|
395
|
+
<Tooltip>
|
|
396
|
+
<TooltipTrigger
|
|
397
|
+
render={
|
|
398
|
+
<span className="stg:font-mono stg:text-xs stg:font-medium stg:text-foreground" />
|
|
399
|
+
}
|
|
400
|
+
>
|
|
401
|
+
{variable.key}
|
|
402
|
+
</TooltipTrigger>
|
|
403
|
+
<TooltipContent side="top">{variable.description}</TooltipContent>
|
|
404
|
+
</Tooltip>
|
|
405
|
+
) : (
|
|
406
|
+
<span className="stg:font-mono stg:text-xs stg:font-medium stg:text-foreground">
|
|
407
|
+
{variable.key}
|
|
408
|
+
</span>
|
|
409
|
+
)}
|
|
399
410
|
{variable.isSecret && (
|
|
400
411
|
<span className="stg:text-[0.55rem] stg:uppercase stg:tracking-wider stg:text-muted-foreground-subtle">
|
|
401
412
|
secret
|
|
@@ -407,12 +407,10 @@ export function ApprovalCardBody({
|
|
|
407
407
|
</div>
|
|
408
408
|
|
|
409
409
|
{/* De-emphasized provenance, trailing the decision it explains. Only the
|
|
410
|
-
informative reasons reach here (see showGateReason)
|
|
411
|
-
on hover. */}
|
|
410
|
+
informative reasons reach here (see showGateReason). */}
|
|
412
411
|
{showGateReason && (
|
|
413
412
|
<p
|
|
414
413
|
className="stg:text-[11px] stg:italic stg:text-muted-foreground"
|
|
415
|
-
title={gateReason ?? undefined}
|
|
416
414
|
data-cursor-target="approval-gate-reason"
|
|
417
415
|
>
|
|
418
416
|
{gateReason}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
7
7
|
import { FileTypeIcon, FolderTypeIcon } from "../internal/file-icons/index.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import type { ArtifactRowItem } from "./artifact-row-item.js";
|
|
9
10
|
import { formatArtifactSize } from "./artifact-utils.js";
|
|
10
11
|
|
|
@@ -59,54 +60,73 @@ export function ArtifactRowView({
|
|
|
59
60
|
}: ArtifactRowViewProps) {
|
|
60
61
|
return (
|
|
61
62
|
<li className={cn("stg:group stg:flex stg:items-stretch", className)}>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
63
|
+
{/* The open button is its own tooltip trigger (hover and keyboard focus
|
|
64
|
+
both reveal the full path); the Download button's trigger is a
|
|
65
|
+
wrapper span so the hint survives the in-flight `disabled` state
|
|
66
|
+
(browsers suppress pointer events on disabled form controls, so a
|
|
67
|
+
disabled button can never open its own tooltip). */}
|
|
68
|
+
<Tooltip>
|
|
69
|
+
<TooltipTrigger
|
|
70
|
+
render={
|
|
71
|
+
<button
|
|
72
|
+
type="button"
|
|
73
|
+
onClick={onOpen}
|
|
74
|
+
onDoubleClick={onActivate}
|
|
75
|
+
className={cn(
|
|
76
|
+
"stg:flex stg:min-w-0 stg:flex-1 stg:items-center stg:gap-2 stg:px-2 stg:py-1 stg:text-left stg:text-xs stg:text-muted-foreground stg:transition-colors",
|
|
77
|
+
"stg:hover:bg-muted stg:hover:text-foreground",
|
|
78
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-inset stg:focus-visible:ring-ring",
|
|
79
|
+
)}
|
|
80
|
+
/>
|
|
81
|
+
}
|
|
82
|
+
>
|
|
83
|
+
<span className="stg:shrink-0 stg:text-muted-foreground">
|
|
84
|
+
{item.isDirectory ? (
|
|
85
|
+
<FolderTypeIcon open={false} />
|
|
86
|
+
) : (
|
|
87
|
+
<FileTypeIcon fileName={item.name} />
|
|
88
|
+
)}
|
|
89
|
+
</span>
|
|
90
|
+
<span className="stg:min-w-0 stg:flex-1 stg:truncate stg:text-foreground">
|
|
91
|
+
{item.name}
|
|
92
|
+
{item.isDirectory && "/"}
|
|
93
|
+
{item.subtitlePath && (
|
|
94
|
+
<span className="stg:ml-1.5 stg:text-[0.65rem] stg:text-muted-foreground">
|
|
95
|
+
{item.subtitlePath}
|
|
96
|
+
</span>
|
|
97
|
+
)}
|
|
98
|
+
</span>
|
|
99
|
+
<span className="stg:shrink-0 stg:tabular-nums stg:text-[0.65rem] stg:text-muted-foreground-faint">
|
|
100
|
+
{formatArtifactSize(item.sizeBytes)}
|
|
101
|
+
</span>
|
|
102
|
+
</TooltipTrigger>
|
|
103
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
104
|
+
{item.tooltip}
|
|
105
|
+
</TooltipContent>
|
|
106
|
+
</Tooltip>
|
|
107
|
+
<Tooltip>
|
|
108
|
+
<TooltipTrigger render={<span className="stg:flex stg:shrink-0" />}>
|
|
109
|
+
<button
|
|
110
|
+
type="button"
|
|
111
|
+
onClick={onDownload}
|
|
112
|
+
disabled={isDownloading}
|
|
113
|
+
aria-label={
|
|
114
|
+
isDownloading ? `Preparing ${item.name}` : `Download ${item.name}`
|
|
115
|
+
}
|
|
116
|
+
className={cn(
|
|
117
|
+
"stg:flex stg:shrink-0 stg:items-center stg:px-2 stg:text-muted-foreground stg:opacity-0 stg:transition-opacity",
|
|
118
|
+
"stg:group-hover:opacity-100 stg:focus-visible:opacity-100",
|
|
119
|
+
"stg:hover:text-foreground stg:disabled:opacity-50",
|
|
120
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-inset stg:focus-visible:ring-ring",
|
|
121
|
+
)}
|
|
122
|
+
>
|
|
123
|
+
<DownloadIcon />
|
|
124
|
+
</button>
|
|
125
|
+
</TooltipTrigger>
|
|
126
|
+
<TooltipContent side="top">
|
|
127
|
+
{item.isDirectory ? "Download ZIP" : "Download"}
|
|
128
|
+
</TooltipContent>
|
|
129
|
+
</Tooltip>
|
|
110
130
|
</li>
|
|
111
131
|
);
|
|
112
132
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useContext, useMemo, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
5
6
|
import { FilePathContext } from "./FilePathContext.js";
|
|
6
7
|
import { resolvePathAction, splitDisplayPath } from "./file-path-resolver.js";
|
|
7
8
|
|
|
@@ -18,9 +19,9 @@ export interface FilePathLinkProps {
|
|
|
18
19
|
readonly path: string;
|
|
19
20
|
/**
|
|
20
21
|
* How much of the directory prefix to show. Defaults to `"hide"` (file name
|
|
21
|
-
* only); the full path is always available on hover
|
|
22
|
-
* where the surrounding directory aids comprehension (diff headers,
|
|
23
|
-
* multi-file changes list).
|
|
22
|
+
* only); the full path is always available on the hover/focus tooltip. Use
|
|
23
|
+
* `"dim"` where the surrounding directory aids comprehension (diff headers,
|
|
24
|
+
* the multi-file changes list).
|
|
24
25
|
*/
|
|
25
26
|
readonly dirDisplay?: FilePathDirDisplay;
|
|
26
27
|
/** Additional CSS class names for the root element. */
|
|
@@ -35,7 +36,7 @@ const COPIED_FEEDBACK_MS = 2000;
|
|
|
35
36
|
*
|
|
36
37
|
* **Filename-first.** It shows the base name prominently and never clips it;
|
|
37
38
|
* the directory is optional (`dirDisplay`) and dimmed, and the *full* path is
|
|
38
|
-
* always available on hover
|
|
39
|
+
* always available on the hover/focus tooltip (and to screen readers via
|
|
39
40
|
* `aria-label`). This fixes the prior behaviour, where a single `truncate` on
|
|
40
41
|
* the whole path clipped the file name — the one part that identifies the
|
|
41
42
|
* change — and surfaced only the action verb on hover.
|
|
@@ -75,7 +76,6 @@ export function FilePathLink({
|
|
|
75
76
|
// path. The action verb moves into the aria-label so hover surfaces the path,
|
|
76
77
|
// not "Copy path".
|
|
77
78
|
const fullPath = resolved.action === "copy" ? resolved.value : path;
|
|
78
|
-
const title = fullPath;
|
|
79
79
|
const ariaLabel = `${resolved.tooltip}: ${fullPath}`;
|
|
80
80
|
|
|
81
81
|
const handleCopy = useCallback(() => {
|
|
@@ -143,32 +143,48 @@ export function FilePathLink({
|
|
|
143
143
|
// in-app viewer) and only calls `preventDefault` when the handler took it.
|
|
144
144
|
if (resolved.action === "link") {
|
|
145
145
|
return (
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
146
|
+
<Tooltip>
|
|
147
|
+
<TooltipTrigger
|
|
148
|
+
render={
|
|
149
|
+
<a
|
|
150
|
+
href={resolved.url}
|
|
151
|
+
target="_blank"
|
|
152
|
+
rel="noopener noreferrer"
|
|
153
|
+
onClick={handleClick}
|
|
154
|
+
aria-label={ariaLabel}
|
|
155
|
+
className={cn(sharedClasses, "stg:group/fpl")}
|
|
156
|
+
/>
|
|
157
|
+
}
|
|
158
|
+
>
|
|
159
|
+
{label}
|
|
160
|
+
<ExternalLinkIcon />
|
|
161
|
+
</TooltipTrigger>
|
|
162
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
163
|
+
{fullPath}
|
|
164
|
+
</TooltipContent>
|
|
165
|
+
</Tooltip>
|
|
158
166
|
);
|
|
159
167
|
}
|
|
160
168
|
|
|
161
169
|
return (
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
<Tooltip>
|
|
171
|
+
<TooltipTrigger
|
|
172
|
+
render={
|
|
173
|
+
<button
|
|
174
|
+
type="button"
|
|
175
|
+
onClick={handleClick}
|
|
176
|
+
aria-label={ariaLabel}
|
|
177
|
+
className={cn(sharedClasses, "stg:group/fpl stg:cursor-pointer")}
|
|
178
|
+
/>
|
|
179
|
+
}
|
|
180
|
+
>
|
|
181
|
+
{label}
|
|
182
|
+
{!copied && <CopyIcon />}
|
|
183
|
+
</TooltipTrigger>
|
|
184
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
185
|
+
{fullPath}
|
|
186
|
+
</TooltipContent>
|
|
187
|
+
</Tooltip>
|
|
172
188
|
);
|
|
173
189
|
}
|
|
174
190
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useMemo, useState } from "react";
|
|
4
4
|
import type { ToolCall } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
6
7
|
import { formatDuration } from "./ToolCallDetail.js";
|
|
7
8
|
import { humanizeToolName } from "./tool-categories.js";
|
|
8
9
|
import {
|
|
@@ -301,8 +302,11 @@ function ScalarRow({ label, value }: { label: string; value: string }) {
|
|
|
301
302
|
</pre>
|
|
302
303
|
</dd>
|
|
303
304
|
) : (
|
|
304
|
-
<dd className="stg:min-w-0
|
|
305
|
-
|
|
305
|
+
<dd className="stg:min-w-0">
|
|
306
|
+
<TruncatedText
|
|
307
|
+
text={value}
|
|
308
|
+
className="stg:block stg:font-mono stg:text-foreground"
|
|
309
|
+
/>
|
|
306
310
|
</dd>
|
|
307
311
|
)}
|
|
308
312
|
</>
|