@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
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { screen, waitFor } from "@testing-library/react";
|
|
2
|
+
import userEvent from "@testing-library/user-event";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Open a Base UI floating-trigger popup (action menu, dropdown) the way a
|
|
6
|
+
* real pointer does, and fail with the exact stage that died.
|
|
7
|
+
*
|
|
8
|
+
* WHY THIS EXISTS (oss#483): Base UI commits a trigger's interactive props
|
|
9
|
+
* (open handlers, `aria-expanded`) one store-notification cycle AFTER the
|
|
10
|
+
* button first appears in the DOM. A test that clicks immediately after
|
|
11
|
+
* render can hit that window — the click lands on a not-yet-wired button
|
|
12
|
+
* and the open is never attempted. Invisible at human speed, the window
|
|
13
|
+
* widens under CI load into intermittent "menu never opened" timeouts
|
|
14
|
+
* (~5% per attempt under CPU starvation; mechanism pinned by probing
|
|
15
|
+
* `aria-expanded` synchronously after the click: `null`, with the menu
|
|
16
|
+
* root's `onOpenChange` never firing). The readiness stage below closes
|
|
17
|
+
* the race by construction; the pointer-fidelity click keeps the test on
|
|
18
|
+
* the open path real users exercise.
|
|
19
|
+
*
|
|
20
|
+
* Failure semantics: each stage throws a named error, so a CI log
|
|
21
|
+
* pinpoints WHICH link broke (trigger never wired / open never happened /
|
|
22
|
+
* items never rendered) instead of an opaque 8s query timeout. There are
|
|
23
|
+
* deliberately NO retries: a helper that re-clicks would mask genuine
|
|
24
|
+
* open-path regressions in the SDK.
|
|
25
|
+
*
|
|
26
|
+
* Caveat: `userEvent` deadlocks under `vi.useFakeTimers()` unless
|
|
27
|
+
* configured with `advanceTimers` — don't call this helper from
|
|
28
|
+
* fake-timer tests (none of the menu suites use them today).
|
|
29
|
+
*
|
|
30
|
+
* Not a `.test` file and inside `__tests__` deliberately: vitest does not
|
|
31
|
+
* collect it, and the build/typedoc excludes keep it out of the published
|
|
32
|
+
* package.
|
|
33
|
+
*/
|
|
34
|
+
export async function openMenu(trigger: HTMLElement): Promise<void> {
|
|
35
|
+
await openFloatingTrigger(trigger, "menuitem");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Trigger-generic core: Base UI selects/comboboxes share the same wiring
|
|
40
|
+
* lifecycle and the same latent race (their popup items are `option`
|
|
41
|
+
* instead of `menuitem`). Widen to an exported `openSelect` if that family
|
|
42
|
+
* ever needs it — do not fork the stages.
|
|
43
|
+
*/
|
|
44
|
+
async function openFloatingTrigger(
|
|
45
|
+
trigger: HTMLElement,
|
|
46
|
+
itemRole: "menuitem" | "option",
|
|
47
|
+
): Promise<void> {
|
|
48
|
+
// Stage 1 — trigger wiring. `aria-expanded` arrives in the same props
|
|
49
|
+
// merge as the open handlers, so its presence is the observable signal
|
|
50
|
+
// that the button is actually clickable-as-a-trigger.
|
|
51
|
+
await waitFor(() => {
|
|
52
|
+
if (!trigger.hasAttribute("aria-expanded")) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`openMenu stage "trigger-wiring": trigger is rendered but Base UI ` +
|
|
55
|
+
`has not attached its interactive props yet (no aria-expanded). ` +
|
|
56
|
+
`Trigger: ${describeTrigger(trigger)}`,
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Stage 2 — the click, with full pointer + focus fidelity (pointerdown,
|
|
62
|
+
// mousedown, focus, pointerup, mouseup, click) so the primary
|
|
63
|
+
// mousedown-open path is exercised, not the bare-click fallback.
|
|
64
|
+
await userEvent.click(trigger);
|
|
65
|
+
|
|
66
|
+
// Stage 3 — the open must register on the trigger itself.
|
|
67
|
+
await waitFor(() => {
|
|
68
|
+
if (trigger.getAttribute("aria-expanded") !== "true") {
|
|
69
|
+
throw new Error(
|
|
70
|
+
`openMenu stage "open": the click was dispatched but the trigger ` +
|
|
71
|
+
`never reported open (aria-expanded=` +
|
|
72
|
+
`${JSON.stringify(trigger.getAttribute("aria-expanded"))}). ` +
|
|
73
|
+
`Trigger: ${describeTrigger(trigger)}`,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Stage 4 — items must be queryable. findAllByRole (not waitFor) so a
|
|
79
|
+
// timeout here still produces testing-library's DOM dump.
|
|
80
|
+
await screen.findAllByRole(itemRole);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function describeTrigger(trigger: HTMLElement): string {
|
|
84
|
+
const label = trigger.getAttribute("aria-label") ?? trigger.textContent;
|
|
85
|
+
return `<${trigger.tagName.toLowerCase()} aria-label=${JSON.stringify(
|
|
86
|
+
label,
|
|
87
|
+
)} connected=${trigger.isConnected}>`;
|
|
88
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { describe, it, expect, beforeAll, afterEach } from "vitest";
|
|
2
2
|
import { render, renderHook, screen, cleanup } from "@testing-library/react";
|
|
3
|
-
import { fireEvent } from "@testing-library/react";
|
|
4
3
|
import type { Stigmer } from "@stigmer/sdk";
|
|
5
4
|
import { StigmerProvider } from "../provider";
|
|
6
5
|
import { useStigmerPortalContainer } from "../portal-container";
|
|
7
6
|
import { Menu, MenuTrigger, MenuContent, MenuItem } from "../internal/menu";
|
|
7
|
+
import { openMenu } from "./helpers/open-menu";
|
|
8
8
|
|
|
9
9
|
// Regression tests for stigmer-cloud#271: Base UI treats an EXPLICIT
|
|
10
10
|
// `container={null}` as "wait for a container" and renders the popup
|
|
@@ -85,9 +85,9 @@ describe("standalone portal rendering (no StigmerProvider)", () => {
|
|
|
85
85
|
</Menu>,
|
|
86
86
|
);
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
await openMenu(screen.getByRole("button", { name: "Open actions" }));
|
|
89
89
|
|
|
90
|
-
const item =
|
|
90
|
+
const item = screen.getByRole("menuitem", { name: "Rename" });
|
|
91
91
|
|
|
92
92
|
// Portaled for real: in the document, but NOT inside the render
|
|
93
93
|
// container — Base UI appended it to document.body.
|
|
@@ -60,8 +60,9 @@ const EPOCH = new Date(0);
|
|
|
60
60
|
* - Fallback to `specAudit.createdAt` for documents without status updates
|
|
61
61
|
* - Pagination / trimming to the requested page size
|
|
62
62
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
63
|
+
* Both editions implement the RPC with identical merge/projection semantics
|
|
64
|
+
* (the OSS server since stigmer#461; it is single-tenant, so the caller sees
|
|
65
|
+
* every stored resource and the org filter is a no-op there).
|
|
65
66
|
*/
|
|
66
67
|
export function useRecentActivity(
|
|
67
68
|
options?: UseRecentActivityOptions,
|
|
@@ -4,7 +4,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
6
6
|
import type {
|
|
7
|
-
DatastoreUsage,
|
|
8
7
|
McpServerUsage,
|
|
9
8
|
SubAgent,
|
|
10
9
|
} from "@stigmer/protos/ai/stigmer/agentic/agent/v1/spec_pb";
|
|
@@ -17,7 +16,6 @@ import { useUpdateAgent } from "./useUpdateAgent.js";
|
|
|
17
16
|
import { agentToInput } from "./internal/agentToInput.js";
|
|
18
17
|
import { toError } from "../internal/toError.js";
|
|
19
18
|
import { ErrorMessage } from "../error/ErrorMessage.js";
|
|
20
|
-
import { DatastoreIcon } from "../datastore/DatastoreDetailView.js";
|
|
21
19
|
import { VisibilityBadge } from "../library/VisibilitySelector.js";
|
|
22
20
|
import { useManageAccess } from "../access/useManageAccess.js";
|
|
23
21
|
import { AgentShareList } from "../sharing/AgentShareList.js";
|
|
@@ -61,13 +59,6 @@ export interface AgentDetailViewProps {
|
|
|
61
59
|
* Provides `org` and `slug` of the referenced skill.
|
|
62
60
|
*/
|
|
63
61
|
readonly onSkillClick?: (ref: { org: string; slug: string }) => void;
|
|
64
|
-
/**
|
|
65
|
-
* Called when a datastore reference is clicked.
|
|
66
|
-
* Provides `org` and `slug` of the referenced datastore so the
|
|
67
|
-
* consumer can wire navigation. When the reference has no explicit
|
|
68
|
-
* org, the agent's own org is used as fallback.
|
|
69
|
-
*/
|
|
70
|
-
readonly onDatastoreClick?: (ref: { org: string; slug: string }) => void;
|
|
71
62
|
/**
|
|
72
63
|
* Called once when the agent resource has been fetched successfully.
|
|
73
64
|
* Provides the resource display name for use cases like breadcrumbs,
|
|
@@ -186,7 +177,7 @@ export interface AgentDetailViewProps {
|
|
|
186
177
|
* Fetches the agent via {@link useAgent} internally and renders its
|
|
187
178
|
* full configuration inside a {@link ResourceDetailShell}: a
|
|
188
179
|
* standardized header with action bar, followed by structured content
|
|
189
|
-
* sections (instructions, MCP server usages, skills,
|
|
180
|
+
* sections (instructions, MCP server usages, skills,
|
|
190
181
|
* sub-agents, and environment variables). Sections with no data are
|
|
191
182
|
* omitted entirely — reducing visual noise per Nielsen heuristic #8.
|
|
192
183
|
*
|
|
@@ -225,7 +216,6 @@ export function AgentDetailView({
|
|
|
225
216
|
slug,
|
|
226
217
|
onMcpServerClick,
|
|
227
218
|
onSkillClick,
|
|
228
|
-
onDatastoreClick,
|
|
229
219
|
onResourceLoad,
|
|
230
220
|
primaryAction,
|
|
231
221
|
actions,
|
|
@@ -249,8 +239,8 @@ export function AgentDetailView({
|
|
|
249
239
|
|
|
250
240
|
// Last failed inline save, attributed to the field that was edited so
|
|
251
241
|
// only that section shows the message. The backend's message is the
|
|
252
|
-
// UX (DD-006):
|
|
253
|
-
//
|
|
242
|
+
// UX (DD-006): server refusals arrive as actionable FAILED_PRECONDITION
|
|
243
|
+
// messages.
|
|
254
244
|
const [saveError, setSaveError] = useState<{
|
|
255
245
|
field: string;
|
|
256
246
|
message: string;
|
|
@@ -314,11 +304,9 @@ export function AgentDetailView({
|
|
|
314
304
|
onMcpServerClick?.(node.ref);
|
|
315
305
|
} else if (node.kind === "skill") {
|
|
316
306
|
onSkillClick?.(node.ref);
|
|
317
|
-
} else if (node.kind === "datastore") {
|
|
318
|
-
onDatastoreClick?.(node.ref);
|
|
319
307
|
}
|
|
320
308
|
},
|
|
321
|
-
[onMcpServerClick, onSkillClick
|
|
309
|
+
[onMcpServerClick, onSkillClick],
|
|
322
310
|
);
|
|
323
311
|
|
|
324
312
|
const onResourceLoadRef = useRef(onResourceLoad);
|
|
@@ -456,7 +444,6 @@ export function AgentDetailView({
|
|
|
456
444
|
description={spec?.description}
|
|
457
445
|
onMcpServerClick={onMcpServerClick}
|
|
458
446
|
onSkillClick={onSkillClick}
|
|
459
|
-
onDatastoreClick={onDatastoreClick}
|
|
460
447
|
editable={editable}
|
|
461
448
|
isSaving={isUpdating}
|
|
462
449
|
saveField={saveField}
|
|
@@ -496,7 +483,6 @@ function AgentOverview({
|
|
|
496
483
|
description,
|
|
497
484
|
onMcpServerClick,
|
|
498
485
|
onSkillClick,
|
|
499
|
-
onDatastoreClick,
|
|
500
486
|
editable,
|
|
501
487
|
isSaving,
|
|
502
488
|
saveField,
|
|
@@ -508,7 +494,6 @@ function AgentOverview({
|
|
|
508
494
|
readonly description?: string;
|
|
509
495
|
readonly onMcpServerClick?: (ref: { org: string; slug: string }) => void;
|
|
510
496
|
readonly onSkillClick?: (ref: { org: string; slug: string }) => void;
|
|
511
|
-
readonly onDatastoreClick?: (ref: { org: string; slug: string }) => void;
|
|
512
497
|
readonly editable?: boolean;
|
|
513
498
|
readonly isSaving?: boolean;
|
|
514
499
|
readonly saveField?: <K extends keyof import("@stigmer/sdk").AgentInput>(
|
|
@@ -519,8 +504,8 @@ function AgentOverview({
|
|
|
519
504
|
readonly clearSaveError?: () => void;
|
|
520
505
|
}) {
|
|
521
506
|
// The failed save's message, shown only under the section that owns
|
|
522
|
-
// the field — a rejection of
|
|
523
|
-
//
|
|
507
|
+
// the field — a rejection of one section's edit must not appear under
|
|
508
|
+
// another section's editor.
|
|
524
509
|
const errorFor = (field: keyof import("@stigmer/sdk").AgentInput) =>
|
|
525
510
|
saveError?.field === field ? saveError.message : undefined;
|
|
526
511
|
const handleInstructionsSave = useCallback(
|
|
@@ -548,15 +533,6 @@ function AgentOverview({
|
|
|
548
533
|
[saveField],
|
|
549
534
|
);
|
|
550
535
|
|
|
551
|
-
const handleDatastoresSave = useCallback(
|
|
552
|
-
async (refs: ResourceRefRow[]) =>
|
|
553
|
-
saveField?.(
|
|
554
|
-
"datastoreUsages",
|
|
555
|
-
refs.map((r) => ({ datastoreRef: { org: r.org, slug: r.slug } })),
|
|
556
|
-
) ?? false,
|
|
557
|
-
[saveField],
|
|
558
|
-
);
|
|
559
|
-
|
|
560
536
|
const handleEnvSave = useCallback(
|
|
561
537
|
async (rows: KeyValueRow[]) => {
|
|
562
538
|
const env: Record<string, { isSecret?: boolean; description?: string; optional?: boolean }> = {};
|
|
@@ -600,19 +576,6 @@ function AgentOverview({
|
|
|
600
576
|
[spec?.skillRefs, agentOrg],
|
|
601
577
|
);
|
|
602
578
|
|
|
603
|
-
const datastoreRefRows: ResourceRefRow[] = useMemo(
|
|
604
|
-
() =>
|
|
605
|
-
(spec?.datastoreUsages ?? []).map((usage) => ({
|
|
606
|
-
org: usage.datastoreRef?.org || agentOrg,
|
|
607
|
-
slug: usage.datastoreRef?.slug ?? "",
|
|
608
|
-
label:
|
|
609
|
-
usage.datastoreRef?.org && usage.datastoreRef.org !== agentOrg
|
|
610
|
-
? `${usage.datastoreRef.org}/${usage.datastoreRef.slug}`
|
|
611
|
-
: usage.datastoreRef?.slug ?? "",
|
|
612
|
-
})),
|
|
613
|
-
[spec?.datastoreUsages, agentOrg],
|
|
614
|
-
);
|
|
615
|
-
|
|
616
579
|
const envRows: KeyValueRow[] = useMemo(
|
|
617
580
|
() =>
|
|
618
581
|
Object.entries(spec?.env ?? {})
|
|
@@ -631,13 +594,11 @@ function AgentOverview({
|
|
|
631
594
|
const showInstructions = editable || !!spec?.instructions;
|
|
632
595
|
const showMcpServers = editable || (spec && spec.mcpServerUsages.length > 0);
|
|
633
596
|
const showSkills = editable || (spec && spec.skillRefs.length > 0);
|
|
634
|
-
const showDatastores = editable || (spec && spec.datastoreUsages.length > 0);
|
|
635
597
|
const showSubAgents = editable || (spec && spec.subAgents.length > 0);
|
|
636
598
|
const showEnv = editable || (spec?.env && Object.keys(spec.env).length > 0);
|
|
637
599
|
|
|
638
600
|
const [mcpEditing, setMcpEditing] = useState(false);
|
|
639
601
|
const [skillsEditing, setSkillsEditing] = useState(false);
|
|
640
|
-
const [datastoresEditing, setDatastoresEditing] = useState(false);
|
|
641
602
|
const [envEditing, setEnvEditing] = useState(false);
|
|
642
603
|
|
|
643
604
|
// Entering edit mode discards the previous attempt's error — the
|
|
@@ -656,13 +617,6 @@ function AgentOverview({
|
|
|
656
617
|
},
|
|
657
618
|
[clearSaveError],
|
|
658
619
|
);
|
|
659
|
-
const handleDatastoresEditingChange = useCallback(
|
|
660
|
-
(editing: boolean) => {
|
|
661
|
-
if (editing) clearSaveError?.();
|
|
662
|
-
setDatastoresEditing(editing);
|
|
663
|
-
},
|
|
664
|
-
[clearSaveError],
|
|
665
|
-
);
|
|
666
620
|
const handleEnvEditingChange = useCallback(
|
|
667
621
|
(editing: boolean) => {
|
|
668
622
|
if (editing) clearSaveError?.();
|
|
@@ -765,31 +719,6 @@ function AgentOverview({
|
|
|
765
719
|
</Section>
|
|
766
720
|
)}
|
|
767
721
|
|
|
768
|
-
{showDatastores && (
|
|
769
|
-
<Section title="Datastores" count={spec?.datastoreUsages.length} onEdit={editable ? () => handleDatastoresEditingChange(!datastoresEditing) : undefined}>
|
|
770
|
-
{editable ? (
|
|
771
|
-
<InlineEditResourceList
|
|
772
|
-
value={datastoreRefRows}
|
|
773
|
-
onSave={handleDatastoresSave}
|
|
774
|
-
isSaving={isSaving}
|
|
775
|
-
error={errorFor("datastoreUsages")}
|
|
776
|
-
editing={datastoresEditing}
|
|
777
|
-
onEditingChange={handleDatastoresEditingChange}
|
|
778
|
-
onItemClick={onDatastoreClick ? (ref) => onDatastoreClick({ org: ref.org, slug: ref.slug }) : undefined}
|
|
779
|
-
itemIcon={<DatastoreIcon className="stg:size-4" />}
|
|
780
|
-
resourceLabel="datastore"
|
|
781
|
-
defaultOrg={agentOrg}
|
|
782
|
-
/>
|
|
783
|
-
) : (
|
|
784
|
-
<DatastoresContent
|
|
785
|
-
usages={spec?.datastoreUsages ?? []}
|
|
786
|
-
defaultOrg={agentOrg}
|
|
787
|
-
onDatastoreClick={onDatastoreClick}
|
|
788
|
-
/>
|
|
789
|
-
)}
|
|
790
|
-
</Section>
|
|
791
|
-
)}
|
|
792
|
-
|
|
793
722
|
{showSubAgents && (
|
|
794
723
|
<SubAgentsSection
|
|
795
724
|
subAgents={spec?.subAgents ?? []}
|
|
@@ -986,59 +915,6 @@ function SkillsContent({
|
|
|
986
915
|
);
|
|
987
916
|
}
|
|
988
917
|
|
|
989
|
-
function DatastoresContent({
|
|
990
|
-
usages,
|
|
991
|
-
defaultOrg,
|
|
992
|
-
onDatastoreClick,
|
|
993
|
-
}: {
|
|
994
|
-
readonly usages: readonly DatastoreUsage[];
|
|
995
|
-
readonly defaultOrg: string;
|
|
996
|
-
readonly onDatastoreClick?: (ref: { org: string; slug: string }) => void;
|
|
997
|
-
}) {
|
|
998
|
-
return (
|
|
999
|
-
<div className="stg:flex stg:flex-col">
|
|
1000
|
-
{usages.map((usage, index) => {
|
|
1001
|
-
const ref = usage.datastoreRef;
|
|
1002
|
-
if (!ref) return null;
|
|
1003
|
-
|
|
1004
|
-
const refOrg = ref.org || defaultOrg;
|
|
1005
|
-
const label =
|
|
1006
|
-
ref.org && ref.org !== defaultOrg
|
|
1007
|
-
? `${ref.org}/${ref.slug}`
|
|
1008
|
-
: ref.slug;
|
|
1009
|
-
|
|
1010
|
-
const row = (
|
|
1011
|
-
<div className="stg:flex stg:items-center stg:gap-3">
|
|
1012
|
-
<DatastoreIcon className="stg:size-4 stg:shrink-0 stg:text-muted-foreground" />
|
|
1013
|
-
<span className="stg:text-sm stg:font-medium stg:text-foreground">
|
|
1014
|
-
{label}
|
|
1015
|
-
</span>
|
|
1016
|
-
</div>
|
|
1017
|
-
);
|
|
1018
|
-
|
|
1019
|
-
return onDatastoreClick ? (
|
|
1020
|
-
<button
|
|
1021
|
-
key={ref.slug || index}
|
|
1022
|
-
type="button"
|
|
1023
|
-
onClick={() => onDatastoreClick({ org: refOrg, slug: ref.slug })}
|
|
1024
|
-
className={cn(
|
|
1025
|
-
"stg:w-full stg:rounded-md stg:px-3 stg:py-2 stg:text-left stg:transition-colors",
|
|
1026
|
-
"stg:hover:bg-accent-hover",
|
|
1027
|
-
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-inset stg:focus-visible:ring-ring",
|
|
1028
|
-
)}
|
|
1029
|
-
>
|
|
1030
|
-
{row}
|
|
1031
|
-
</button>
|
|
1032
|
-
) : (
|
|
1033
|
-
<div key={ref.slug || index} className="stg:px-3 stg:py-2">
|
|
1034
|
-
{row}
|
|
1035
|
-
</div>
|
|
1036
|
-
);
|
|
1037
|
-
})}
|
|
1038
|
-
</div>
|
|
1039
|
-
);
|
|
1040
|
-
}
|
|
1041
|
-
|
|
1042
918
|
interface SubAgentDraft {
|
|
1043
919
|
name: string;
|
|
1044
920
|
description: string;
|
|
@@ -9,7 +9,7 @@ import { agentToInput } from "../agentToInput";
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Regression guard for stigmer/stigmer#319 — the console agent editor
|
|
12
|
-
* silently deleting
|
|
12
|
+
* silently deleting an unmapped spec field on save.
|
|
13
13
|
*
|
|
14
14
|
* `agentToInput()` reconstructs a full `AgentInput` from a fetched Agent
|
|
15
15
|
* so inline edits can re-submit the whole spec (the backend does full
|
|
@@ -91,19 +91,10 @@ function fullyPopulatedAgent(): Agent {
|
|
|
91
91
|
env: {
|
|
92
92
|
CLINIC_API_KEY: {
|
|
93
93
|
isSecret: true,
|
|
94
|
-
description: "
|
|
94
|
+
description: "Clinic API credential",
|
|
95
95
|
},
|
|
96
96
|
REGION: { optional: true },
|
|
97
97
|
},
|
|
98
|
-
datastoreUsages: [
|
|
99
|
-
{
|
|
100
|
-
datastoreRef: {
|
|
101
|
-
org: "acme",
|
|
102
|
-
slug: "clinic-records",
|
|
103
|
-
kind: ApiResourceKind.datastore,
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
98
|
},
|
|
108
99
|
});
|
|
109
100
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
2
2
|
import type {
|
|
3
3
|
AgentInput,
|
|
4
|
-
DatastoreUsageInput,
|
|
5
4
|
EnvVarDeclarationInput,
|
|
6
5
|
McpServerUsageInput,
|
|
7
6
|
SubAgentInput,
|
|
@@ -73,15 +72,6 @@ export function agentToInput(agent: Agent): AgentInput {
|
|
|
73
72
|
modelOverride: sa.modelOverride || undefined,
|
|
74
73
|
}));
|
|
75
74
|
|
|
76
|
-
const datastoreUsages: DatastoreUsageInput[] | undefined =
|
|
77
|
-
spec?.datastoreUsages?.map((usage) => ({
|
|
78
|
-
datastoreRef: {
|
|
79
|
-
org: usage.datastoreRef?.org ?? "",
|
|
80
|
-
slug: usage.datastoreRef?.slug ?? "",
|
|
81
|
-
version: usage.datastoreRef?.version || undefined,
|
|
82
|
-
},
|
|
83
|
-
}));
|
|
84
|
-
|
|
85
75
|
let env: Record<string, EnvVarDeclarationInput> | undefined;
|
|
86
76
|
if (spec?.env && Object.keys(spec.env).length > 0) {
|
|
87
77
|
env = {};
|
|
@@ -108,6 +98,5 @@ export function agentToInput(agent: Agent): AgentInput {
|
|
|
108
98
|
skillRefs: skillRefs?.length ? skillRefs : undefined,
|
|
109
99
|
subAgents: subAgents?.length ? subAgents : undefined,
|
|
110
100
|
env,
|
|
111
|
-
datastoreUsages: datastoreUsages?.length ? datastoreUsages : undefined,
|
|
112
101
|
};
|
|
113
102
|
}
|
|
@@ -11,6 +11,7 @@ import { Button } from "../button/Button.js";
|
|
|
11
11
|
import { useEnvironmentList } from "../environment/useEnvironmentList.js";
|
|
12
12
|
import { ResourceVisibilityControl } from "../library/ResourceVisibilityControl.js";
|
|
13
13
|
import { useCheckPermission } from "../iam-policy/useCheckPermission.js";
|
|
14
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
14
15
|
import { AgentInstanceEmptyState } from "./AgentInstanceEmptyState.js";
|
|
15
16
|
|
|
16
17
|
/** Label marking a user's auto-managed personal instance. */
|
|
@@ -216,12 +217,10 @@ function InstanceRow({
|
|
|
216
217
|
<td className="stg:px-4 stg:py-2.5">
|
|
217
218
|
<div className="stg:min-w-0">
|
|
218
219
|
<div className="stg:flex stg:min-w-0 stg:items-center stg:gap-2">
|
|
219
|
-
<
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
{meta?.name || meta?.slug || "\u2014"}
|
|
224
|
-
</span>
|
|
220
|
+
<TruncatedText
|
|
221
|
+
text={meta?.name || meta?.slug || "\u2014"}
|
|
222
|
+
className="stg:font-medium stg:text-foreground"
|
|
223
|
+
/>
|
|
225
224
|
{isPersonal && (
|
|
226
225
|
<span
|
|
227
226
|
className={cn(
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeAll, afterEach } from "vitest";
|
|
2
2
|
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
|
|
3
3
|
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
4
|
+
import { openMenu } from "../../__tests__/helpers/open-menu";
|
|
4
5
|
import { AgentInstanceList } from "../AgentInstanceList";
|
|
5
6
|
|
|
6
7
|
// Isolate the row-actions behavior under test from the data, environment,
|
|
@@ -79,7 +80,7 @@ describe("AgentInstanceList row actions", () => {
|
|
|
79
80
|
|
|
80
81
|
// No always-visible action buttons; the row shows a single kebab.
|
|
81
82
|
expect(screen.queryByRole("button", { name: "Start session" })).toBeNull();
|
|
82
|
-
|
|
83
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
83
84
|
|
|
84
85
|
expect(
|
|
85
86
|
await screen.findByRole("menuitem", { name: "Start session" }),
|
|
@@ -100,7 +101,7 @@ describe("AgentInstanceList row actions", () => {
|
|
|
100
101
|
/>,
|
|
101
102
|
);
|
|
102
103
|
|
|
103
|
-
|
|
104
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
104
105
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Start session" }));
|
|
105
106
|
|
|
106
107
|
expect(onStart).toHaveBeenCalledTimes(1);
|
|
@@ -120,7 +121,7 @@ describe("AgentInstanceList row actions", () => {
|
|
|
120
121
|
/>,
|
|
121
122
|
);
|
|
122
123
|
|
|
123
|
-
|
|
124
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
124
125
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Delete" }));
|
|
125
126
|
|
|
126
127
|
expect(onDelete).toHaveBeenCalledWith(inst);
|
|
@@ -138,7 +139,7 @@ describe("AgentInstanceList row actions", () => {
|
|
|
138
139
|
/>,
|
|
139
140
|
);
|
|
140
141
|
|
|
141
|
-
|
|
142
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
142
143
|
expect(
|
|
143
144
|
await screen.findByRole("menuitem", { name: "Start session" }),
|
|
144
145
|
).toBeTruthy();
|
|
@@ -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 { ApiKey } from "@stigmer/protos/ai/stigmer/iam/apikey/v1/api_pb";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import { useApiKeyList } from "./useApiKeyList.js";
|
|
9
10
|
import { useDeleteApiKey } from "./useDeleteApiKey.js";
|
|
10
11
|
|
|
@@ -242,9 +243,16 @@ function ApiKeyRow({
|
|
|
242
243
|
{/* Metadata columns */}
|
|
243
244
|
<div className="stg:hidden stg:sm:flex stg:shrink-0 stg:items-center stg:gap-4 stg:text-xs stg:text-muted-foreground">
|
|
244
245
|
{createdAt && (
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
<Tooltip>
|
|
247
|
+
<TooltipTrigger
|
|
248
|
+
render={<time dateTime={timestampDate(createdAt).toISOString()} />}
|
|
249
|
+
>
|
|
250
|
+
{formatShortDate(timestampDate(createdAt))}
|
|
251
|
+
</TooltipTrigger>
|
|
252
|
+
<TooltipContent side="top">
|
|
253
|
+
{`Created ${timestampDate(createdAt).toISOString()}`}
|
|
254
|
+
</TooltipContent>
|
|
255
|
+
</Tooltip>
|
|
248
256
|
)}
|
|
249
257
|
<span>
|
|
250
258
|
{neverExpires
|