@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
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { cn } from "@stigmer/theme";
|
|
4
|
-
import { toJson } from "@bufbuild/protobuf";
|
|
5
|
-
import { ValueSchema } from "@bufbuild/protobuf/wkt";
|
|
6
|
-
import {
|
|
7
|
-
FieldType,
|
|
8
|
-
type CollectionDeclaration,
|
|
9
|
-
type DatastoreAuthorization,
|
|
10
|
-
type DatastoreSpec,
|
|
11
|
-
type DatastoreSubject,
|
|
12
|
-
} from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
|
|
13
|
-
import { Section } from "../resource-detail/Section.js";
|
|
14
|
-
import { formatFieldValue } from "./recordValues.js";
|
|
15
|
-
|
|
16
|
-
/** Props for {@link CollectionSchemaView}. */
|
|
17
|
-
export interface CollectionSchemaViewProps {
|
|
18
|
-
/** The datastore spec — the authoritative source for structure (DD-008 SD-5). */
|
|
19
|
-
readonly spec: DatastoreSpec;
|
|
20
|
-
/** Additional CSS classes for the root container. */
|
|
21
|
-
readonly className?: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Structural view of a datastore's declared schema, rendered from the
|
|
26
|
-
* loaded resource spec: per-collection typed field tables, the declared
|
|
27
|
-
* constraints with their authored messages (the operator's own copy —
|
|
28
|
-
* the same bytes agents relay), and the authorization block summary
|
|
29
|
-
* (roles, bindings, `default_role` — operator-facing state the
|
|
30
|
-
* describe projection deliberately excludes).
|
|
31
|
-
*
|
|
32
|
-
* Read-only by design: schema changes go through YAML apply, the one
|
|
33
|
-
* write path for structure.
|
|
34
|
-
*
|
|
35
|
-
* All visual properties flow through `--stgm-*` design tokens.
|
|
36
|
-
* Zero Console dependencies — safe for platform builder embedding.
|
|
37
|
-
*/
|
|
38
|
-
export function CollectionSchemaView({ spec, className }: CollectionSchemaViewProps) {
|
|
39
|
-
return (
|
|
40
|
-
<div className={cn("stg:flex stg:flex-col stg:gap-6", className)}>
|
|
41
|
-
<AuthorizationSummary authorization={spec.authorization} timezone={spec.timezone} />
|
|
42
|
-
{spec.collections.map((coll) => (
|
|
43
|
-
<CollectionSchema key={coll.name} collection={coll} />
|
|
44
|
-
))}
|
|
45
|
-
</div>
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
// Authorization block summary
|
|
51
|
-
// ---------------------------------------------------------------------------
|
|
52
|
-
|
|
53
|
-
function AuthorizationSummary({
|
|
54
|
-
authorization,
|
|
55
|
-
timezone,
|
|
56
|
-
}: {
|
|
57
|
-
readonly authorization: DatastoreAuthorization | undefined;
|
|
58
|
-
readonly timezone: string;
|
|
59
|
-
}) {
|
|
60
|
-
const roles = authorization?.roles ?? [];
|
|
61
|
-
const bindings = authorization?.bindings ?? [];
|
|
62
|
-
const defaultRole = authorization?.defaultRole ?? "";
|
|
63
|
-
|
|
64
|
-
return (
|
|
65
|
-
<Section title="Authorization">
|
|
66
|
-
<div className="stg:flex stg:flex-col stg:gap-3 stg:p-3 stg:text-sm">
|
|
67
|
-
<div className="stg:flex stg:flex-wrap stg:items-center stg:gap-2">
|
|
68
|
-
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">Roles</span>
|
|
69
|
-
{roles.length === 0 ? (
|
|
70
|
-
<span className="stg:text-xs stg:text-muted-foreground">none declared</span>
|
|
71
|
-
) : (
|
|
72
|
-
roles.map((r) => (
|
|
73
|
-
<span
|
|
74
|
-
key={r.name}
|
|
75
|
-
className="stg:rounded-full stg:bg-muted stg:px-2 stg:py-0.5 stg:text-xs stg:font-medium stg:text-foreground"
|
|
76
|
-
>
|
|
77
|
-
{r.name}
|
|
78
|
-
</span>
|
|
79
|
-
))
|
|
80
|
-
)}
|
|
81
|
-
</div>
|
|
82
|
-
<div className="stg:flex stg:flex-wrap stg:items-center stg:gap-2">
|
|
83
|
-
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">Default role</span>
|
|
84
|
-
{defaultRole ? (
|
|
85
|
-
<span className="stg:rounded-full stg:bg-muted stg:px-2 stg:py-0.5 stg:text-xs stg:font-medium stg:text-foreground">
|
|
86
|
-
{defaultRole}
|
|
87
|
-
</span>
|
|
88
|
-
) : (
|
|
89
|
-
<span className="stg:text-xs stg:text-muted-foreground">
|
|
90
|
-
none — unbound callers are denied
|
|
91
|
-
</span>
|
|
92
|
-
)}
|
|
93
|
-
</div>
|
|
94
|
-
{bindings.length > 0 && (
|
|
95
|
-
<div className="stg:flex stg:flex-col stg:gap-1">
|
|
96
|
-
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">
|
|
97
|
-
Bindings ({bindings.length})
|
|
98
|
-
</span>
|
|
99
|
-
<ul className="stg:flex stg:flex-col stg:gap-0.5">
|
|
100
|
-
{bindings.map((b, i) => (
|
|
101
|
-
<li key={i} className="stg:text-xs stg:text-foreground">
|
|
102
|
-
<code className="stg:font-mono">{formatSubject(b.subject)}</code>
|
|
103
|
-
<span className="stg:text-muted-foreground"> → </span>
|
|
104
|
-
{b.role}
|
|
105
|
-
</li>
|
|
106
|
-
))}
|
|
107
|
-
</ul>
|
|
108
|
-
</div>
|
|
109
|
-
)}
|
|
110
|
-
{timezone && (
|
|
111
|
-
<div className="stg:flex stg:items-center stg:gap-2">
|
|
112
|
-
<span className="stg:text-xs stg:font-medium stg:text-muted-foreground">Timezone</span>
|
|
113
|
-
<span className="stg:text-xs stg:text-foreground">{timezone}</span>
|
|
114
|
-
</div>
|
|
115
|
-
)}
|
|
116
|
-
</div>
|
|
117
|
-
</Section>
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Plain kind+value rendering of a datastore subject (DD-008 SD-3: the
|
|
123
|
-
* grant system is the privacy boundary; display is honest).
|
|
124
|
-
*/
|
|
125
|
-
export function formatSubject(subject: DatastoreSubject | undefined): string {
|
|
126
|
-
switch (subject?.kind.case) {
|
|
127
|
-
case "channelSender": {
|
|
128
|
-
const s = subject.kind.value;
|
|
129
|
-
return `${s.senderKind}:${s.value}`;
|
|
130
|
-
}
|
|
131
|
-
case "principal": {
|
|
132
|
-
const p = subject.kind.value;
|
|
133
|
-
return `${p.kind}/${p.id}`;
|
|
134
|
-
}
|
|
135
|
-
default:
|
|
136
|
-
return "unknown";
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// ---------------------------------------------------------------------------
|
|
141
|
-
// Per-collection schema
|
|
142
|
-
// ---------------------------------------------------------------------------
|
|
143
|
-
|
|
144
|
-
const CONSTRAINT_KIND_LABELS = {
|
|
145
|
-
uniques: "unique",
|
|
146
|
-
checks: "check",
|
|
147
|
-
exists: "exists",
|
|
148
|
-
notExists: "not exists",
|
|
149
|
-
} as const;
|
|
150
|
-
|
|
151
|
-
function CollectionSchema({ collection }: { readonly collection: CollectionDeclaration }) {
|
|
152
|
-
const constraints = [
|
|
153
|
-
...collection.uniques.map((c) => ({
|
|
154
|
-
kind: CONSTRAINT_KIND_LABELS.uniques,
|
|
155
|
-
name: c.name,
|
|
156
|
-
fields: c.fields.join(", "),
|
|
157
|
-
message: c.message,
|
|
158
|
-
})),
|
|
159
|
-
...collection.checks.map((c) => ({
|
|
160
|
-
kind: CONSTRAINT_KIND_LABELS.checks,
|
|
161
|
-
name: c.name,
|
|
162
|
-
fields: "",
|
|
163
|
-
message: c.message,
|
|
164
|
-
})),
|
|
165
|
-
...collection.exists.map((c) => ({
|
|
166
|
-
kind: CONSTRAINT_KIND_LABELS.exists,
|
|
167
|
-
name: c.name,
|
|
168
|
-
fields: c.collection,
|
|
169
|
-
message: c.message,
|
|
170
|
-
})),
|
|
171
|
-
...collection.notExists.map((c) => ({
|
|
172
|
-
kind: CONSTRAINT_KIND_LABELS.notExists,
|
|
173
|
-
name: c.name,
|
|
174
|
-
fields: c.collection,
|
|
175
|
-
message: c.message,
|
|
176
|
-
})),
|
|
177
|
-
];
|
|
178
|
-
|
|
179
|
-
return (
|
|
180
|
-
<Section title={collection.name} count={collection.fields.length}>
|
|
181
|
-
<div className="stg:flex stg:flex-col">
|
|
182
|
-
{collection.description && (
|
|
183
|
-
<p className="stg:border-b stg:border-border stg:px-3 stg:py-2 stg:text-xs stg:text-muted-foreground">
|
|
184
|
-
{collection.description}
|
|
185
|
-
</p>
|
|
186
|
-
)}
|
|
187
|
-
|
|
188
|
-
<table className="stg:w-full stg:text-left stg:text-xs">
|
|
189
|
-
<thead>
|
|
190
|
-
<tr className="stg:border-b stg:border-border stg:text-muted-foreground">
|
|
191
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Field</th>
|
|
192
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Type</th>
|
|
193
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Required</th>
|
|
194
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Default</th>
|
|
195
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Description</th>
|
|
196
|
-
</tr>
|
|
197
|
-
</thead>
|
|
198
|
-
<tbody>
|
|
199
|
-
{collection.fields.map((f) => (
|
|
200
|
-
<tr key={f.name} className="stg:border-b stg:border-border stg:last:border-b-0">
|
|
201
|
-
<td className="stg:px-3 stg:py-2 stg:font-mono stg:text-foreground">{f.name}</td>
|
|
202
|
-
<td className="stg:px-3 stg:py-2 stg:text-foreground">
|
|
203
|
-
{FieldType[f.type]}
|
|
204
|
-
{f.enumValues.length > 0 && (
|
|
205
|
-
<span className="stg:text-muted-foreground">
|
|
206
|
-
{" "}
|
|
207
|
-
({f.enumValues.join(" | ")})
|
|
208
|
-
</span>
|
|
209
|
-
)}
|
|
210
|
-
</td>
|
|
211
|
-
<td className="stg:px-3 stg:py-2 stg:text-muted-foreground">{f.required ? "yes" : ""}</td>
|
|
212
|
-
<td className="stg:px-3 stg:py-2 stg:font-mono stg:text-muted-foreground">
|
|
213
|
-
{f.default !== undefined
|
|
214
|
-
? formatFieldValue(f.type, toJson(ValueSchema, f.default))
|
|
215
|
-
: ""}
|
|
216
|
-
</td>
|
|
217
|
-
<td className="stg:px-3 stg:py-2 stg:text-muted-foreground">{f.description}</td>
|
|
218
|
-
</tr>
|
|
219
|
-
))}
|
|
220
|
-
</tbody>
|
|
221
|
-
</table>
|
|
222
|
-
|
|
223
|
-
{constraints.length > 0 && (
|
|
224
|
-
<div className="stg:border-t stg:border-border">
|
|
225
|
-
<h4 className="stg:px-3 stg:pt-2 stg:text-xs stg:font-medium stg:uppercase stg:tracking-wider stg:text-muted-foreground">
|
|
226
|
-
Constraints
|
|
227
|
-
</h4>
|
|
228
|
-
<ul className="stg:flex stg:flex-col stg:gap-1 stg:p-3">
|
|
229
|
-
{constraints.map((c) => (
|
|
230
|
-
<li key={`${c.kind}:${c.name}`} className="stg:flex stg:flex-wrap stg:items-baseline stg:gap-2 stg:text-xs">
|
|
231
|
-
<span className="stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-medium stg:text-muted-foreground">
|
|
232
|
-
{c.kind}
|
|
233
|
-
</span>
|
|
234
|
-
<code className="stg:font-mono stg:text-foreground">{c.name}</code>
|
|
235
|
-
{c.fields && <span className="stg:text-muted-foreground">({c.fields})</span>}
|
|
236
|
-
{c.message && (
|
|
237
|
-
<span className="stg:text-muted-foreground">— “{c.message}”</span>
|
|
238
|
-
)}
|
|
239
|
-
</li>
|
|
240
|
-
))}
|
|
241
|
-
</ul>
|
|
242
|
-
</div>
|
|
243
|
-
)}
|
|
244
|
-
</div>
|
|
245
|
-
</Section>
|
|
246
|
-
);
|
|
247
|
-
}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
4
|
-
import { cn } from "@stigmer/theme";
|
|
5
|
-
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
6
|
-
import type { Datastore } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
|
|
7
|
-
import { ErrorMessage } from "../error/ErrorMessage.js";
|
|
8
|
-
import { ResourceDetailShell } from "../resource-detail/ResourceDetailShell.js";
|
|
9
|
-
import type { DetailAction, ResourceHeaderMeta } from "../resource-detail/types.js";
|
|
10
|
-
import { CollectionRecordsBrowser } from "./CollectionRecordsBrowser.js";
|
|
11
|
-
import { CollectionSchemaView } from "./CollectionSchemaView.js";
|
|
12
|
-
import { DatastoreSyncReport } from "./DatastoreSyncReport.js";
|
|
13
|
-
import { useDatastore } from "./useDatastore.js";
|
|
14
|
-
|
|
15
|
-
/** The detail view's tabs. */
|
|
16
|
-
export type DatastoreDetailTab = "overview" | "records";
|
|
17
|
-
|
|
18
|
-
/** Props for {@link DatastoreDetailView}. */
|
|
19
|
-
export interface DatastoreDetailViewProps {
|
|
20
|
-
/** Organization slug. */
|
|
21
|
-
readonly org: string;
|
|
22
|
-
/** Datastore slug. */
|
|
23
|
-
readonly slug: string;
|
|
24
|
-
/** Primary action rendered as a visible button. */
|
|
25
|
-
readonly primaryAction?: DetailAction;
|
|
26
|
-
/** Overflow actions (Edit YAML / Export / Delete — assembled at the page level). */
|
|
27
|
-
readonly actions?: readonly DetailAction[];
|
|
28
|
-
/** Called when the datastore loads or reloads (e.g. breadcrumb label sync). */
|
|
29
|
-
readonly onResourceLoad?: (datastore: Datastore) => void;
|
|
30
|
-
/** Initial tab for uncontrolled usage. @default "overview" */
|
|
31
|
-
readonly defaultTab?: DatastoreDetailTab;
|
|
32
|
-
/** Controlled active tab. Uncontrolled (internal state) when omitted. */
|
|
33
|
-
readonly activeTab?: DatastoreDetailTab;
|
|
34
|
-
/** Tab-change callback for controlled usage. */
|
|
35
|
-
readonly onTabChange?: (tab: DatastoreDetailTab) => void;
|
|
36
|
-
/** Additional CSS classes for the root container. */
|
|
37
|
-
readonly className?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Self-contained detail view for a Datastore — the Library-resource
|
|
42
|
-
* home (DD-008 SD-1): an **Overview** tab (schema, authorization
|
|
43
|
-
* summary, and the sync-report health strip — all from the loaded
|
|
44
|
-
* resource, the authoritative source for structure and health) and a
|
|
45
|
-
* **Records** tab (the browser, whose caller-effective verbs come from
|
|
46
|
-
* `describeDatastore`). No version-history affordance —
|
|
47
|
-
* `is_versioned: false` (DD-003).
|
|
48
|
-
*
|
|
49
|
-
* Handles loading, error, and not-found states automatically.
|
|
50
|
-
* Zero Console dependencies — safe for platform builder embedding.
|
|
51
|
-
* All visual properties flow through `--stgm-*` design tokens.
|
|
52
|
-
*/
|
|
53
|
-
export function DatastoreDetailView({
|
|
54
|
-
org,
|
|
55
|
-
slug,
|
|
56
|
-
primaryAction,
|
|
57
|
-
actions,
|
|
58
|
-
onResourceLoad,
|
|
59
|
-
defaultTab = "overview",
|
|
60
|
-
activeTab,
|
|
61
|
-
onTabChange,
|
|
62
|
-
className,
|
|
63
|
-
}: DatastoreDetailViewProps) {
|
|
64
|
-
const { datastore, isLoading, error, refetch } = useDatastore(org, slug);
|
|
65
|
-
|
|
66
|
-
const [internalTab, setInternalTab] = useState<DatastoreDetailTab>(defaultTab);
|
|
67
|
-
const tab = activeTab ?? internalTab;
|
|
68
|
-
const setTab = onTabChange ?? setInternalTab;
|
|
69
|
-
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
if (datastore) onResourceLoad?.(datastore);
|
|
72
|
-
}, [datastore, onResourceLoad]);
|
|
73
|
-
|
|
74
|
-
if (isLoading) return <LoadingSkeleton className={className} />;
|
|
75
|
-
if (error)
|
|
76
|
-
return <ErrorMessage error={error} retry={refetch} className={className} />;
|
|
77
|
-
if (!datastore) return <NotFoundState className={className} />;
|
|
78
|
-
|
|
79
|
-
const meta = datastore.metadata;
|
|
80
|
-
const spec = datastore.spec;
|
|
81
|
-
const status = datastore.status;
|
|
82
|
-
const specAudit = status?.audit?.specAudit;
|
|
83
|
-
|
|
84
|
-
const headerMeta: ResourceHeaderMeta = {
|
|
85
|
-
name: meta?.name || meta?.slug || "Untitled",
|
|
86
|
-
id: meta?.id || "",
|
|
87
|
-
org: meta?.org,
|
|
88
|
-
slug: meta?.slug,
|
|
89
|
-
description: spec?.description,
|
|
90
|
-
icon: <DatastoreIcon className="stg:size-6 stg:text-muted-foreground" />,
|
|
91
|
-
createdAt: specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null,
|
|
92
|
-
updatedAt: specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null,
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
return (
|
|
96
|
-
<ResourceDetailShell
|
|
97
|
-
header={headerMeta}
|
|
98
|
-
primaryAction={primaryAction}
|
|
99
|
-
actions={actions}
|
|
100
|
-
tabs={[
|
|
101
|
-
{ id: "overview", label: "Overview" },
|
|
102
|
-
{ id: "records", label: "Records" },
|
|
103
|
-
]}
|
|
104
|
-
activeTab={tab}
|
|
105
|
-
onTabChange={(id) => setTab(id as DatastoreDetailTab)}
|
|
106
|
-
tabsAriaLabel="Datastore sections"
|
|
107
|
-
className={className}
|
|
108
|
-
>
|
|
109
|
-
{tab === "overview" ? (
|
|
110
|
-
<div className="stg:flex stg:flex-col stg:gap-6">
|
|
111
|
-
{status && <DatastoreSyncReport status={status} />}
|
|
112
|
-
{spec && <CollectionSchemaView spec={spec} />}
|
|
113
|
-
</div>
|
|
114
|
-
) : (
|
|
115
|
-
spec &&
|
|
116
|
-
meta && (
|
|
117
|
-
<CollectionRecordsBrowser
|
|
118
|
-
org={meta.org}
|
|
119
|
-
datastoreSlug={meta.slug}
|
|
120
|
-
spec={spec}
|
|
121
|
-
/>
|
|
122
|
-
)
|
|
123
|
-
)}
|
|
124
|
-
</ResourceDetailShell>
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
// Non-happy states
|
|
130
|
-
// ---------------------------------------------------------------------------
|
|
131
|
-
|
|
132
|
-
function LoadingSkeleton({ className }: { readonly className?: string }) {
|
|
133
|
-
return (
|
|
134
|
-
<div
|
|
135
|
-
className={cn("stg:flex stg:flex-col stg:gap-6", className)}
|
|
136
|
-
aria-busy="true"
|
|
137
|
-
aria-label="Loading datastore details"
|
|
138
|
-
>
|
|
139
|
-
<div className="stg:flex stg:items-start stg:gap-3">
|
|
140
|
-
<div className="stg:mt-1 stg:size-6 stg:shrink-0 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
141
|
-
<div className="stg:flex-1 stg:space-y-2">
|
|
142
|
-
<div className="stg:h-5 stg:w-48 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
143
|
-
<div className="stg:h-3 stg:w-64 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
144
|
-
</div>
|
|
145
|
-
</div>
|
|
146
|
-
<div className="stg:space-y-2">
|
|
147
|
-
<div className="stg:h-3 stg:w-28 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
148
|
-
<div
|
|
149
|
-
className="stg:animate-pulse stg:rounded-lg stg:border stg:border-border stg:bg-muted-faint"
|
|
150
|
-
style={{ height: "160px" }}
|
|
151
|
-
/>
|
|
152
|
-
</div>
|
|
153
|
-
<div className="stg:space-y-2">
|
|
154
|
-
<div className="stg:h-3 stg:w-20 stg:animate-pulse stg:rounded stg:bg-muted" />
|
|
155
|
-
<div
|
|
156
|
-
className="stg:animate-pulse stg:rounded-lg stg:border stg:border-border stg:bg-muted-faint"
|
|
157
|
-
style={{ height: "240px" }}
|
|
158
|
-
/>
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
function NotFoundState({ className }: { readonly className?: string }) {
|
|
165
|
-
return (
|
|
166
|
-
<div
|
|
167
|
-
role="status"
|
|
168
|
-
className={cn("stg:flex stg:flex-col stg:items-center stg:gap-2 stg:py-12 stg:text-center", className)}
|
|
169
|
-
>
|
|
170
|
-
<DatastoreIcon className="stg:size-10 stg:text-muted-foreground-faint" />
|
|
171
|
-
<p className="stg:text-sm stg:font-medium stg:text-muted-foreground">Datastore not found</p>
|
|
172
|
-
<p className="stg:text-xs stg:text-muted-foreground-subtle">
|
|
173
|
-
This datastore doesn't exist or you don't have access to it.
|
|
174
|
-
</p>
|
|
175
|
-
</div>
|
|
176
|
-
);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// ---------------------------------------------------------------------------
|
|
180
|
-
// Icon (inline SVG — no icon-library dependency)
|
|
181
|
-
// ---------------------------------------------------------------------------
|
|
182
|
-
|
|
183
|
-
/** Database-cylinder icon shared by the detail view's states. */
|
|
184
|
-
export function DatastoreIcon({ className }: { readonly className?: string }) {
|
|
185
|
-
return (
|
|
186
|
-
<svg
|
|
187
|
-
className={className}
|
|
188
|
-
viewBox="0 0 24 24"
|
|
189
|
-
fill="none"
|
|
190
|
-
stroke="currentColor"
|
|
191
|
-
strokeWidth="1.5"
|
|
192
|
-
strokeLinecap="round"
|
|
193
|
-
strokeLinejoin="round"
|
|
194
|
-
aria-hidden="true"
|
|
195
|
-
>
|
|
196
|
-
<ellipse cx="12" cy="5" rx="8" ry="3" />
|
|
197
|
-
<path d="M4 5v6c0 1.66 3.58 3 8 3s8-1.34 8-3V5" />
|
|
198
|
-
<path d="M4 11v6c0 1.66 3.58 3 8 3s8-1.34 8-3v-6" />
|
|
199
|
-
</svg>
|
|
200
|
-
);
|
|
201
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
4
|
-
import {
|
|
5
|
-
CollectionMaterializationState,
|
|
6
|
-
DatastoreSyncOutcome,
|
|
7
|
-
type DatastoreStatus,
|
|
8
|
-
} from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/status_pb";
|
|
9
|
-
import { Section } from "../resource-detail/Section.js";
|
|
10
|
-
import { StatusBadge } from "../resource-workbench/components/StatusBadge.js";
|
|
11
|
-
|
|
12
|
-
/** Props for {@link DatastoreSyncReport}. */
|
|
13
|
-
export interface DatastoreSyncReportProps {
|
|
14
|
-
/** The datastore status — the authoritative source for health (DD-008 SD-5). */
|
|
15
|
-
readonly status: DatastoreStatus;
|
|
16
|
-
/** Additional CSS classes for the root container. */
|
|
17
|
-
readonly className?: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The Overview health strip: projects `DatastoreStatus` — last apply
|
|
22
|
-
* outcome, per-collection materialization state, and record counts —
|
|
23
|
-
* so the operator can confirm an apply landed without leaving the
|
|
24
|
-
* console (the cutover choreography's verification surface, DD-009).
|
|
25
|
-
*
|
|
26
|
-
* All visual properties flow through `--stgm-*` design tokens.
|
|
27
|
-
* Zero Console dependencies — safe for platform builder embedding.
|
|
28
|
-
*/
|
|
29
|
-
export function DatastoreSyncReport({ status, className }: DatastoreSyncReportProps) {
|
|
30
|
-
const syncedAt = status.lastSyncedAt
|
|
31
|
-
? timestampDate(status.lastSyncedAt).toLocaleString()
|
|
32
|
-
: null;
|
|
33
|
-
|
|
34
|
-
return (
|
|
35
|
-
<Section title="Sync report" className={className}>
|
|
36
|
-
<div className="stg:flex stg:flex-col">
|
|
37
|
-
<div className="stg:flex stg:flex-wrap stg:items-center stg:gap-2 stg:border-b stg:border-border stg:px-3 stg:py-2">
|
|
38
|
-
<SyncOutcomeBadge outcome={status.lastSyncOutcome} />
|
|
39
|
-
{syncedAt && (
|
|
40
|
-
<span className="stg:text-xs stg:text-muted-foreground">last synced {syncedAt}</span>
|
|
41
|
-
)}
|
|
42
|
-
</div>
|
|
43
|
-
{status.collections.length === 0 ? (
|
|
44
|
-
<p className="stg:px-3 stg:py-2 stg:text-xs stg:text-muted-foreground">
|
|
45
|
-
No collections have been synced yet.
|
|
46
|
-
</p>
|
|
47
|
-
) : (
|
|
48
|
-
<table className="stg:w-full stg:text-left stg:text-xs">
|
|
49
|
-
<thead>
|
|
50
|
-
<tr className="stg:border-b stg:border-border stg:text-muted-foreground">
|
|
51
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">Collection</th>
|
|
52
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:font-medium">State</th>
|
|
53
|
-
<th scope="col" className="stg:px-3 stg:py-2 stg:text-right stg:font-medium">Records</th>
|
|
54
|
-
</tr>
|
|
55
|
-
</thead>
|
|
56
|
-
<tbody>
|
|
57
|
-
{status.collections.map((coll) => (
|
|
58
|
-
<tr key={coll.name} className="stg:border-b stg:border-border stg:last:border-b-0">
|
|
59
|
-
<td className="stg:px-3 stg:py-2 stg:font-mono stg:text-foreground">{coll.name}</td>
|
|
60
|
-
<td className="stg:px-3 stg:py-2">
|
|
61
|
-
<MaterializationBadge state={coll.state} />
|
|
62
|
-
</td>
|
|
63
|
-
<td className="stg:px-3 stg:py-2 stg:text-right stg:tabular-nums stg:text-foreground">
|
|
64
|
-
{String(coll.recordCount)}
|
|
65
|
-
</td>
|
|
66
|
-
</tr>
|
|
67
|
-
))}
|
|
68
|
-
</tbody>
|
|
69
|
-
</table>
|
|
70
|
-
)}
|
|
71
|
-
</div>
|
|
72
|
-
</Section>
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function SyncOutcomeBadge({ outcome }: { readonly outcome: DatastoreSyncOutcome }) {
|
|
77
|
-
switch (outcome) {
|
|
78
|
-
case DatastoreSyncOutcome.synced:
|
|
79
|
-
return <StatusBadge phase="ready" label="synced" />;
|
|
80
|
-
case DatastoreSyncOutcome.rejected:
|
|
81
|
-
return <StatusBadge phase="failed" label="rejected" />;
|
|
82
|
-
default:
|
|
83
|
-
return <StatusBadge phase="draft" label="never synced" />;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function MaterializationBadge({ state }: { readonly state: CollectionMaterializationState }) {
|
|
88
|
-
switch (state) {
|
|
89
|
-
case CollectionMaterializationState.active:
|
|
90
|
-
return <StatusBadge phase="ready" label="active" />;
|
|
91
|
-
case CollectionMaterializationState.pending:
|
|
92
|
-
return <StatusBadge phase="pending" label="pending" />;
|
|
93
|
-
case CollectionMaterializationState.removed:
|
|
94
|
-
// Removed from the spec; data retained until datastore delete.
|
|
95
|
-
return (
|
|
96
|
-
<StatusBadge
|
|
97
|
-
phase="disabled"
|
|
98
|
-
label="removed"
|
|
99
|
-
tooltip="Removed from the spec — records retained until the datastore is deleted"
|
|
100
|
-
/>
|
|
101
|
-
);
|
|
102
|
-
default:
|
|
103
|
-
return <StatusBadge phase="draft" label="unknown" />;
|
|
104
|
-
}
|
|
105
|
-
}
|