@stigmer/react 0.4.7 → 0.5.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/action-menu/ActionMenu.d.ts +64 -0
- package/action-menu/ActionMenu.d.ts.map +1 -0
- package/action-menu/ActionMenu.js +78 -0
- package/action-menu/ActionMenu.js.map +1 -0
- package/action-menu/index.d.ts +3 -0
- package/action-menu/index.d.ts.map +1 -0
- package/action-menu/index.js +2 -0
- package/action-menu/index.js.map +1 -0
- package/action-menu/types.d.ts +65 -0
- package/action-menu/types.d.ts.map +1 -0
- package/action-menu/types.js +2 -0
- package/action-menu/types.js.map +1 -0
- package/agent/AgentCreationWizard.d.ts +55 -0
- package/agent/AgentCreationWizard.d.ts.map +1 -0
- package/agent/AgentCreationWizard.js +115 -0
- package/agent/AgentCreationWizard.js.map +1 -0
- package/agent/AgentDetailView.d.ts +77 -9
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +265 -87
- package/agent/AgentDetailView.js.map +1 -1
- package/agent/index.d.ts +8 -0
- package/agent/index.d.ts.map +1 -1
- package/agent/index.js +4 -0
- package/agent/index.js.map +1 -1
- package/agent/internal/agentToInput.d.ts +12 -0
- package/agent/internal/agentToInput.d.ts.map +1 -0
- package/agent/internal/agentToInput.js +72 -0
- package/agent/internal/agentToInput.js.map +1 -0
- package/agent/steps/CapabilitiesStep.d.ts +16 -0
- package/agent/steps/CapabilitiesStep.d.ts.map +1 -0
- package/agent/steps/CapabilitiesStep.js +80 -0
- package/agent/steps/CapabilitiesStep.js.map +1 -0
- package/agent/steps/IdentityStep.d.ts +18 -0
- package/agent/steps/IdentityStep.d.ts.map +1 -0
- package/agent/steps/IdentityStep.js +43 -0
- package/agent/steps/IdentityStep.js.map +1 -0
- package/agent/steps/ReviewStep.d.ts +23 -0
- package/agent/steps/ReviewStep.d.ts.map +1 -0
- package/agent/steps/ReviewStep.js +73 -0
- package/agent/steps/ReviewStep.js.map +1 -0
- package/agent/steps/types.d.ts +35 -0
- package/agent/steps/types.d.ts.map +1 -0
- package/agent/steps/types.js +16 -0
- package/agent/steps/types.js.map +1 -0
- package/agent/useCreateAgent.d.ts +45 -0
- package/agent/useCreateAgent.d.ts.map +1 -0
- package/agent/useCreateAgent.js +50 -0
- package/agent/useCreateAgent.js.map +1 -0
- package/agent/useUpdateAgent.d.ts +24 -0
- package/agent/useUpdateAgent.d.ts.map +1 -0
- package/agent/useUpdateAgent.js +35 -0
- package/agent/useUpdateAgent.js.map +1 -0
- package/dependency-graph/DependencyGraph.d.ts +37 -0
- package/dependency-graph/DependencyGraph.d.ts.map +1 -0
- package/dependency-graph/DependencyGraph.js +88 -0
- package/dependency-graph/DependencyGraph.js.map +1 -0
- package/dependency-graph/DependencyTreeNode.d.ts +23 -0
- package/dependency-graph/DependencyTreeNode.d.ts.map +1 -0
- package/dependency-graph/DependencyTreeNode.js +99 -0
- package/dependency-graph/DependencyTreeNode.js.map +1 -0
- package/dependency-graph/index.d.ts +4 -0
- package/dependency-graph/index.d.ts.map +1 -0
- package/dependency-graph/index.js +5 -0
- package/dependency-graph/index.js.map +1 -0
- package/dependency-graph/types.d.ts +130 -0
- package/dependency-graph/types.d.ts.map +1 -0
- package/dependency-graph/types.js +2 -0
- package/dependency-graph/types.js.map +1 -0
- package/dependency-graph/useDependencyGraph.d.ts +27 -0
- package/dependency-graph/useDependencyGraph.d.ts.map +1 -0
- package/dependency-graph/useDependencyGraph.js +129 -0
- package/dependency-graph/useDependencyGraph.js.map +1 -0
- package/empty-state/EmptyState.d.ts +29 -0
- package/empty-state/EmptyState.d.ts.map +1 -0
- package/empty-state/EmptyState.js +45 -0
- package/empty-state/EmptyState.js.map +1 -0
- package/empty-state/index.d.ts +4 -0
- package/empty-state/index.d.ts.map +1 -0
- package/empty-state/index.js +3 -0
- package/empty-state/index.js.map +1 -0
- package/empty-state/types.d.ts +73 -0
- package/empty-state/types.d.ts.map +1 -0
- package/empty-state/types.js +2 -0
- package/empty-state/types.js.map +1 -0
- package/empty-state/useEmptyState.d.ts +18 -0
- package/empty-state/useEmptyState.d.ts.map +1 -0
- package/empty-state/useEmptyState.js +72 -0
- package/empty-state/useEmptyState.js.map +1 -0
- package/execution/MessageThread.d.ts +1 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +22 -12
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts +23 -9
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +30 -14
- package/execution/SetupProgress.js.map +1 -1
- package/execution/__tests__/thread-keys.test.js +82 -0
- package/execution/__tests__/thread-keys.test.js.map +1 -1
- package/feedback/StigmerToaster.d.ts +18 -0
- package/feedback/StigmerToaster.d.ts.map +1 -0
- package/feedback/StigmerToaster.js +31 -0
- package/feedback/StigmerToaster.js.map +1 -0
- package/feedback/index.d.ts +4 -0
- package/feedback/index.d.ts.map +1 -0
- package/feedback/index.js +3 -0
- package/feedback/index.js.map +1 -0
- package/feedback/toast.d.ts +14 -0
- package/feedback/toast.d.ts.map +1 -0
- package/feedback/toast.js +14 -0
- package/feedback/toast.js.map +1 -0
- package/feedback/types.d.ts +4 -0
- package/feedback/types.d.ts.map +1 -0
- package/feedback/types.js +2 -0
- package/feedback/types.js.map +1 -0
- package/index.d.ts +30 -10
- package/index.d.ts.map +1 -1
- package/index.js +29 -9
- package/index.js.map +1 -1
- package/inline-edit/InlineEditImage.d.ts +20 -0
- package/inline-edit/InlineEditImage.d.ts.map +1 -0
- package/inline-edit/InlineEditImage.js +85 -0
- package/inline-edit/InlineEditImage.js.map +1 -0
- package/inline-edit/InlineEditKeyValue.d.ts +29 -0
- package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
- package/inline-edit/InlineEditKeyValue.js +67 -0
- package/inline-edit/InlineEditKeyValue.js.map +1 -0
- package/inline-edit/InlineEditResourceList.d.ts +34 -0
- package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
- package/inline-edit/InlineEditResourceList.js +99 -0
- package/inline-edit/InlineEditResourceList.js.map +1 -0
- package/inline-edit/InlineEditSelect.d.ts +18 -0
- package/inline-edit/InlineEditSelect.d.ts.map +1 -0
- package/inline-edit/InlineEditSelect.js +54 -0
- package/inline-edit/InlineEditSelect.js.map +1 -0
- package/inline-edit/InlineEditText.d.ts +23 -0
- package/inline-edit/InlineEditText.d.ts.map +1 -0
- package/inline-edit/InlineEditText.js +79 -0
- package/inline-edit/InlineEditText.js.map +1 -0
- package/inline-edit/InlineEditTextarea.d.ts +22 -0
- package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
- package/inline-edit/InlineEditTextarea.js +83 -0
- package/inline-edit/InlineEditTextarea.js.map +1 -0
- package/inline-edit/index.d.ts +16 -0
- package/inline-edit/index.d.ts.map +1 -0
- package/inline-edit/index.js +8 -0
- package/inline-edit/index.js.map +1 -0
- package/inline-edit/types.d.ts +42 -0
- package/inline-edit/types.d.ts.map +1 -0
- package/inline-edit/types.js +2 -0
- package/inline-edit/types.js.map +1 -0
- package/inline-edit/useInlineFieldSave.d.ts +23 -0
- package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
- package/inline-edit/useInlineFieldSave.js +44 -0
- package/inline-edit/useInlineFieldSave.js.map +1 -0
- package/internal/Tabs.d.ts +4 -38
- package/internal/Tabs.d.ts.map +1 -1
- package/internal/Tabs.js +3 -62
- package/internal/Tabs.js.map +1 -1
- package/library/ImportResourceDialog.d.ts +43 -0
- package/library/ImportResourceDialog.d.ts.map +1 -0
- package/library/ImportResourceDialog.js +90 -0
- package/library/ImportResourceDialog.js.map +1 -0
- package/library/index.d.ts +7 -4
- package/library/index.d.ts.map +1 -1
- package/library/index.js +4 -2
- package/library/index.js.map +1 -1
- package/library/serialize-resource-yaml.d.ts +53 -0
- package/library/serialize-resource-yaml.d.ts.map +1 -1
- package/library/serialize-resource-yaml.js +275 -0
- package/library/serialize-resource-yaml.js.map +1 -1
- package/library/useExportResource.d.ts +56 -0
- package/library/useExportResource.d.ts.map +1 -0
- package/library/useExportResource.js +137 -0
- package/library/useExportResource.js.map +1 -0
- package/library/useImportResource.d.ts +84 -0
- package/library/useImportResource.d.ts.map +1 -0
- package/library/useImportResource.js +188 -0
- package/library/useImportResource.js.map +1 -0
- package/mcp-server/McpServerCreationWizard.d.ts +55 -0
- package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
- package/mcp-server/McpServerCreationWizard.js +121 -0
- package/mcp-server/McpServerCreationWizard.js.map +1 -0
- package/mcp-server/McpServerDetailView.d.ts +21 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +113 -20
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/index.d.ts +8 -0
- package/mcp-server/index.d.ts.map +1 -1
- package/mcp-server/index.js +4 -0
- package/mcp-server/index.js.map +1 -1
- package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
- package/mcp-server/internal/mcpServerToInput.js +81 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -0
- package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
- package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
- package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
- package/mcp-server/steps/IdentityTransportStep.js +73 -0
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
- package/mcp-server/steps/ReviewStep.d.ts +23 -0
- package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
- package/mcp-server/steps/ReviewStep.js +137 -0
- package/mcp-server/steps/ReviewStep.js.map +1 -0
- package/mcp-server/steps/types.d.ts +56 -0
- package/mcp-server/steps/types.d.ts.map +1 -0
- package/mcp-server/steps/types.js +27 -0
- package/mcp-server/steps/types.js.map +1 -0
- package/mcp-server/useCreateMcpServer.d.ts +45 -0
- package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
- package/mcp-server/useCreateMcpServer.js +50 -0
- package/mcp-server/useCreateMcpServer.js.map +1 -0
- package/mcp-server/useUpdateMcpServer.d.ts +24 -0
- package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
- package/mcp-server/useUpdateMcpServer.js +35 -0
- package/mcp-server/useUpdateMcpServer.js.map +1 -0
- package/models/registry.d.ts +4 -1
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +6 -2
- package/models/registry.js.map +1 -1
- package/package.json +8 -4
- package/provider.js +1 -1
- package/provider.js.map +1 -1
- package/resource-creation/CreationPicker.d.ts +60 -0
- package/resource-creation/CreationPicker.d.ts.map +1 -0
- package/resource-creation/CreationPicker.js +74 -0
- package/resource-creation/CreationPicker.js.map +1 -0
- package/resource-creation/StepIndicator.d.ts +28 -0
- package/resource-creation/StepIndicator.d.ts.map +1 -0
- package/resource-creation/StepIndicator.js +40 -0
- package/resource-creation/StepIndicator.js.map +1 -0
- package/resource-creation/TemplateCard.d.ts +24 -0
- package/resource-creation/TemplateCard.d.ts.map +1 -0
- package/resource-creation/TemplateCard.js +68 -0
- package/resource-creation/TemplateCard.js.map +1 -0
- package/resource-creation/TemplateGallery.d.ts +43 -0
- package/resource-creation/TemplateGallery.d.ts.map +1 -0
- package/resource-creation/TemplateGallery.js +78 -0
- package/resource-creation/TemplateGallery.js.map +1 -0
- package/resource-creation/WizardNav.d.ts +31 -0
- package/resource-creation/WizardNav.d.ts.map +1 -0
- package/resource-creation/WizardNav.js +29 -0
- package/resource-creation/WizardNav.js.map +1 -0
- package/resource-creation/WizardShell.d.ts +41 -0
- package/resource-creation/WizardShell.d.ts.map +1 -0
- package/resource-creation/WizardShell.js +55 -0
- package/resource-creation/WizardShell.js.map +1 -0
- package/resource-creation/index.d.ts +21 -0
- package/resource-creation/index.d.ts.map +1 -0
- package/resource-creation/index.js +14 -0
- package/resource-creation/index.js.map +1 -0
- package/resource-creation/templates/agent-templates.d.ts +15 -0
- package/resource-creation/templates/agent-templates.d.ts.map +1 -0
- package/resource-creation/templates/agent-templates.js +148 -0
- package/resource-creation/templates/agent-templates.js.map +1 -0
- package/resource-creation/templates/index.d.ts +5 -0
- package/resource-creation/templates/index.d.ts.map +1 -0
- package/resource-creation/templates/index.js +5 -0
- package/resource-creation/templates/index.js.map +1 -0
- package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
- package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
- package/resource-creation/templates/mcp-server-templates.js +92 -0
- package/resource-creation/templates/mcp-server-templates.js.map +1 -0
- package/resource-creation/templates/types.d.ts +48 -0
- package/resource-creation/templates/types.d.ts.map +1 -0
- package/resource-creation/templates/types.js +16 -0
- package/resource-creation/templates/types.js.map +1 -0
- package/resource-creation/types.d.ts +88 -0
- package/resource-creation/types.d.ts.map +1 -0
- package/resource-creation/types.js +2 -0
- package/resource-creation/types.js.map +1 -0
- package/resource-creation/useTemplateFilter.d.ts +43 -0
- package/resource-creation/useTemplateFilter.d.ts.map +1 -0
- package/resource-creation/useTemplateFilter.js +73 -0
- package/resource-creation/useTemplateFilter.js.map +1 -0
- package/resource-creation/useWizardState.d.ts +67 -0
- package/resource-creation/useWizardState.d.ts.map +1 -0
- package/resource-creation/useWizardState.js +143 -0
- package/resource-creation/useWizardState.js.map +1 -0
- package/resource-detail/ConfirmDialog.d.ts +44 -0
- package/resource-detail/ConfirmDialog.d.ts.map +1 -0
- package/resource-detail/ConfirmDialog.js +62 -0
- package/resource-detail/ConfirmDialog.js.map +1 -0
- package/resource-detail/ResourceActionBar.d.ts +42 -0
- package/resource-detail/ResourceActionBar.d.ts.map +1 -0
- package/resource-detail/ResourceActionBar.js +64 -0
- package/resource-detail/ResourceActionBar.js.map +1 -0
- package/resource-detail/ResourceDetailShell.d.ts +36 -0
- package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
- package/resource-detail/ResourceDetailShell.js +65 -0
- package/resource-detail/ResourceDetailShell.js.map +1 -0
- package/resource-detail/Section.d.ts +18 -0
- package/resource-detail/Section.d.ts.map +1 -0
- package/resource-detail/Section.js +18 -0
- package/resource-detail/Section.js.map +1 -0
- package/resource-detail/index.d.ts +15 -0
- package/resource-detail/index.d.ts.map +1 -0
- package/resource-detail/index.js +10 -0
- package/resource-detail/index.js.map +1 -0
- package/resource-detail/types.d.ts +146 -0
- package/resource-detail/types.d.ts.map +1 -0
- package/resource-detail/types.js +2 -0
- package/resource-detail/types.js.map +1 -0
- package/resource-detail/useConfirmAction.d.ts +41 -0
- package/resource-detail/useConfirmAction.d.ts.map +1 -0
- package/resource-detail/useConfirmAction.js +30 -0
- package/resource-detail/useConfirmAction.js.map +1 -0
- package/resource-detail/useCopyResource.d.ts +28 -0
- package/resource-detail/useCopyResource.d.ts.map +1 -0
- package/resource-detail/useCopyResource.js +46 -0
- package/resource-detail/useCopyResource.js.map +1 -0
- package/resource-detail/useDeleteResource.d.ts +40 -0
- package/resource-detail/useDeleteResource.d.ts.map +1 -0
- package/resource-detail/useDeleteResource.js +83 -0
- package/resource-detail/useDeleteResource.js.map +1 -0
- package/resource-detail/useDetailTabs.d.ts +46 -0
- package/resource-detail/useDetailTabs.d.ts.map +1 -0
- package/resource-detail/useDetailTabs.js +47 -0
- package/resource-detail/useDetailTabs.js.map +1 -0
- package/resource-workbench/components/BulkActionBar.d.ts +36 -0
- package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
- package/resource-workbench/components/BulkActionBar.js +35 -0
- package/resource-workbench/components/BulkActionBar.js.map +1 -0
- package/resource-workbench/components/ColumnHeader.d.ts +23 -0
- package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
- package/resource-workbench/components/ColumnHeader.js +25 -0
- package/resource-workbench/components/ColumnHeader.js.map +1 -0
- package/resource-workbench/components/FilterBar.d.ts +33 -0
- package/resource-workbench/components/FilterBar.d.ts.map +1 -0
- package/resource-workbench/components/FilterBar.js +72 -0
- package/resource-workbench/components/FilterBar.js.map +1 -0
- package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
- package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
- package/resource-workbench/components/ResourceAvatar.js +51 -0
- package/resource-workbench/components/ResourceAvatar.js.map +1 -0
- package/resource-workbench/components/ResourceCards.d.ts +39 -0
- package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
- package/resource-workbench/components/ResourceCards.js +41 -0
- package/resource-workbench/components/ResourceCards.js.map +1 -0
- package/resource-workbench/components/ResourceInspector.d.ts +26 -0
- package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
- package/resource-workbench/components/ResourceInspector.js +22 -0
- package/resource-workbench/components/ResourceInspector.js.map +1 -0
- package/resource-workbench/components/ResourceList.d.ts +39 -0
- package/resource-workbench/components/ResourceList.d.ts.map +1 -0
- package/resource-workbench/components/ResourceList.js +41 -0
- package/resource-workbench/components/ResourceList.js.map +1 -0
- package/resource-workbench/components/ResourceTable.d.ts +47 -0
- package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
- package/resource-workbench/components/ResourceTable.js +78 -0
- package/resource-workbench/components/ResourceTable.js.map +1 -0
- package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
- package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
- package/resource-workbench/components/ResourceWorkbench.js +170 -0
- package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
- package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
- package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
- package/resource-workbench/components/SelectionCheckbox.js +16 -0
- package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
- package/resource-workbench/components/StatusBadge.d.ts +31 -0
- package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
- package/resource-workbench/components/StatusBadge.js +75 -0
- package/resource-workbench/components/StatusBadge.js.map +1 -0
- package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
- package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
- package/resource-workbench/components/ViewSwitcher.js +37 -0
- package/resource-workbench/components/ViewSwitcher.js.map +1 -0
- package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
- package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
- package/resource-workbench/hooks/useResourceCollection.js +133 -0
- package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
- package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
- package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
- package/resource-workbench/hooks/useResourceFilters.js +105 -0
- package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
- package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
- package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
- package/resource-workbench/hooks/useResourceSelection.js +123 -0
- package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
- package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
- package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
- package/resource-workbench/hooks/useViewPreference.js +60 -0
- package/resource-workbench/hooks/useViewPreference.js.map +1 -0
- package/resource-workbench/index.d.ts +34 -0
- package/resource-workbench/index.d.ts.map +1 -0
- package/resource-workbench/index.js +19 -0
- package/resource-workbench/index.js.map +1 -0
- package/resource-workbench/types.d.ts +165 -0
- package/resource-workbench/types.d.ts.map +1 -0
- package/resource-workbench/types.js +2 -0
- package/resource-workbench/types.js.map +1 -0
- package/runner/RunnerDetailView.d.ts +44 -0
- package/runner/RunnerDetailView.d.ts.map +1 -0
- package/runner/RunnerDetailView.js +154 -0
- package/runner/RunnerDetailView.js.map +1 -0
- package/runner/RunnerListPanel.d.ts +26 -1
- package/runner/RunnerListPanel.d.ts.map +1 -1
- package/runner/RunnerListPanel.js +68 -46
- package/runner/RunnerListPanel.js.map +1 -1
- package/runner/index.d.ts +7 -1
- package/runner/index.d.ts.map +1 -1
- package/runner/index.js +3 -0
- package/runner/index.js.map +1 -1
- package/runner/shared.d.ts +31 -0
- package/runner/shared.d.ts.map +1 -0
- package/runner/shared.js +55 -0
- package/runner/shared.js.map +1 -0
- package/runner/useRunner.d.ts +37 -0
- package/runner/useRunner.d.ts.map +1 -0
- package/runner/useRunner.js +24 -0
- package/runner/useRunner.js.map +1 -0
- package/session/__tests__/group-sessions.test.js +3 -3
- package/session/__tests__/group-sessions.test.js.map +1 -1
- package/skill/SkillDetailView.d.ts +70 -7
- package/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +107 -39
- package/skill/SkillDetailView.js.map +1 -1
- package/skill/SkillDiffDialog.d.ts +42 -0
- package/skill/SkillDiffDialog.d.ts.map +1 -0
- package/skill/SkillDiffDialog.js +72 -0
- package/skill/SkillDiffDialog.js.map +1 -0
- package/skill/SkillFileBrowser.d.ts +31 -0
- package/skill/SkillFileBrowser.d.ts.map +1 -0
- package/skill/SkillFileBrowser.js +105 -0
- package/skill/SkillFileBrowser.js.map +1 -0
- package/skill/SkillUploader.d.ts +39 -0
- package/skill/SkillUploader.d.ts.map +1 -0
- package/skill/SkillUploader.js +141 -0
- package/skill/SkillUploader.js.map +1 -0
- package/skill/index.d.ts +18 -0
- package/skill/index.d.ts.map +1 -1
- package/skill/index.js +9 -0
- package/skill/index.js.map +1 -1
- package/skill/internal/computeArtifactHash.d.ts +9 -0
- package/skill/internal/computeArtifactHash.d.ts.map +1 -0
- package/skill/internal/computeArtifactHash.js +14 -0
- package/skill/internal/computeArtifactHash.js.map +1 -0
- package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
- package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
- package/skill/internal/fetchAndUnpackArtifact.js +34 -0
- package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
- package/skill/usePushSkill.d.ts +53 -0
- package/skill/usePushSkill.d.ts.map +1 -0
- package/skill/usePushSkill.js +57 -0
- package/skill/usePushSkill.js.map +1 -0
- package/skill/useSkillArtifact.d.ts +37 -0
- package/skill/useSkillArtifact.d.ts.map +1 -0
- package/skill/useSkillArtifact.js +76 -0
- package/skill/useSkillArtifact.js.map +1 -0
- package/skill/useSkillDiff.d.ts +31 -0
- package/skill/useSkillDiff.d.ts.map +1 -0
- package/skill/useSkillDiff.js +97 -0
- package/skill/useSkillDiff.js.map +1 -0
- package/skill/useSkillDuplicateCheck.d.ts +34 -0
- package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
- package/skill/useSkillDuplicateCheck.js +58 -0
- package/skill/useSkillDuplicateCheck.js.map +1 -0
- package/skill/useSkillUpload.d.ts +69 -0
- package/skill/useSkillUpload.d.ts.map +1 -0
- package/skill/useSkillUpload.js +157 -0
- package/skill/useSkillUpload.js.map +1 -0
- package/skill/useSkillVersions.d.ts +46 -0
- package/skill/useSkillVersions.d.ts.map +1 -0
- package/skill/useSkillVersions.js +104 -0
- package/skill/useSkillVersions.js.map +1 -0
- package/src/action-menu/ActionMenu.tsx +151 -0
- package/src/action-menu/index.ts +9 -0
- package/src/action-menu/types.ts +70 -0
- package/src/agent/AgentCreationWizard.tsx +201 -0
- package/src/agent/AgentDetailView.tsx +817 -321
- package/src/agent/index.ts +16 -0
- package/src/agent/internal/agentToInput.ts +95 -0
- package/src/agent/steps/CapabilitiesStep.tsx +363 -0
- package/src/agent/steps/IdentityStep.tsx +259 -0
- package/src/agent/steps/ReviewStep.tsx +211 -0
- package/src/agent/steps/types.ts +53 -0
- package/src/agent/useCreateAgent.ts +76 -0
- package/src/agent/useUpdateAgent.ts +55 -0
- package/src/dependency-graph/DependencyGraph.tsx +153 -0
- package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
- package/src/dependency-graph/index.ts +15 -0
- package/src/dependency-graph/types.ts +131 -0
- package/src/dependency-graph/useDependencyGraph.ts +158 -0
- package/src/empty-state/EmptyState.tsx +90 -0
- package/src/empty-state/index.ts +9 -0
- package/src/empty-state/types.ts +81 -0
- package/src/empty-state/useEmptyState.ts +85 -0
- package/src/execution/MessageThread.tsx +26 -15
- package/src/execution/SetupProgress.tsx +35 -14
- package/src/execution/__tests__/thread-keys.test.ts +101 -0
- package/src/feedback/StigmerToaster.tsx +45 -0
- package/src/feedback/index.ts +3 -0
- package/src/feedback/toast.ts +13 -0
- package/src/feedback/types.ts +7 -0
- package/src/index.ts +270 -8
- package/src/inline-edit/InlineEditImage.tsx +208 -0
- package/src/inline-edit/InlineEditKeyValue.tsx +278 -0
- package/src/inline-edit/InlineEditResourceList.tsx +325 -0
- package/src/inline-edit/InlineEditSelect.tsx +150 -0
- package/src/inline-edit/InlineEditText.tsx +211 -0
- package/src/inline-edit/InlineEditTextarea.tsx +209 -0
- package/src/inline-edit/index.ts +28 -0
- package/src/inline-edit/types.ts +47 -0
- package/src/inline-edit/useInlineFieldSave.ts +62 -0
- package/src/internal/Tabs.tsx +4 -164
- package/src/library/ImportResourceDialog.tsx +227 -0
- package/src/library/index.ts +18 -8
- package/src/library/serialize-resource-yaml.ts +356 -0
- package/src/library/useExportResource.ts +183 -0
- package/src/library/useImportResource.ts +253 -0
- package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
- package/src/mcp-server/McpServerDetailView.tsx +392 -105
- package/src/mcp-server/index.ts +16 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
- package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
- package/src/mcp-server/steps/ReviewStep.tsx +297 -0
- package/src/mcp-server/steps/types.ts +85 -0
- package/src/mcp-server/useCreateMcpServer.ts +76 -0
- package/src/mcp-server/useUpdateMcpServer.ts +55 -0
- package/src/models/registry.ts +10 -2
- package/src/provider.tsx +1 -1
- package/src/resource-creation/CreationPicker.tsx +292 -0
- package/src/resource-creation/StepIndicator.tsx +156 -0
- package/src/resource-creation/TemplateCard.tsx +143 -0
- package/src/resource-creation/TemplateGallery.tsx +222 -0
- package/src/resource-creation/WizardNav.tsx +163 -0
- package/src/resource-creation/WizardShell.tsx +124 -0
- package/src/resource-creation/index.ts +45 -0
- package/src/resource-creation/templates/agent-templates.ts +160 -0
- package/src/resource-creation/templates/index.ts +7 -0
- package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
- package/src/resource-creation/templates/types.ts +64 -0
- package/src/resource-creation/types.ts +105 -0
- package/src/resource-creation/useTemplateFilter.ts +117 -0
- package/src/resource-creation/useWizardState.ts +223 -0
- package/src/resource-detail/ConfirmDialog.tsx +127 -0
- package/src/resource-detail/ResourceActionBar.tsx +157 -0
- package/src/resource-detail/ResourceDetailShell.tsx +184 -0
- package/src/resource-detail/Section.tsx +78 -0
- package/src/resource-detail/index.ts +34 -0
- package/src/resource-detail/types.ts +177 -0
- package/src/resource-detail/useConfirmAction.ts +70 -0
- package/src/resource-detail/useCopyResource.ts +74 -0
- package/src/resource-detail/useDeleteResource.ts +110 -0
- package/src/resource-detail/useDetailTabs.ts +93 -0
- package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
- package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
- package/src/resource-workbench/components/FilterBar.tsx +173 -0
- package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
- package/src/resource-workbench/components/ResourceCards.tsx +126 -0
- package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
- package/src/resource-workbench/components/ResourceList.tsx +121 -0
- package/src/resource-workbench/components/ResourceTable.tsx +222 -0
- package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
- package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
- package/src/resource-workbench/components/StatusBadge.tsx +119 -0
- package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
- package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
- package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
- package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
- package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
- package/src/resource-workbench/index.ts +73 -0
- package/src/resource-workbench/types.ts +220 -0
- package/src/runner/RunnerDetailView.tsx +410 -0
- package/src/runner/RunnerListPanel.tsx +126 -111
- package/src/runner/index.ts +13 -1
- package/src/runner/shared.tsx +124 -0
- package/src/runner/useRunner.ts +59 -0
- package/src/session/__tests__/group-sessions.test.ts +5 -3
- package/src/skill/SkillDetailView.tsx +371 -165
- package/src/skill/SkillDiffDialog.tsx +213 -0
- package/src/skill/SkillFileBrowser.tsx +289 -0
- package/src/skill/SkillUploader.tsx +481 -0
- package/src/skill/index.ts +34 -0
- package/src/skill/internal/computeArtifactHash.ts +13 -0
- package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
- package/src/skill/usePushSkill.ts +101 -0
- package/src/skill/useSkillArtifact.ts +107 -0
- package/src/skill/useSkillDiff.ts +128 -0
- package/src/skill/useSkillDuplicateCheck.ts +92 -0
- package/src/skill/useSkillUpload.ts +231 -0
- package/src/skill/useSkillVersions.ts +165 -0
- package/src/styles.css +28 -0
- package/src/tabs/Tabs.tsx +184 -0
- package/src/tabs/index.ts +2 -0
- package/src/version-history/DiffFileList.tsx +111 -0
- package/src/version-history/DiffSummary.tsx +61 -0
- package/src/version-history/DiffViewer.tsx +163 -0
- package/src/version-history/MultiFileDiffView.tsx +114 -0
- package/src/version-history/VersionTimeline.tsx +232 -0
- package/src/version-history/VersionTimelineEntry.tsx +254 -0
- package/src/version-history/computeDiff.ts +61 -0
- package/src/version-history/computeMultiFileDiff.ts +97 -0
- package/src/version-history/index.ts +22 -0
- package/src/version-history/types.ts +129 -0
- package/styles.css +1 -1
- package/tabs/Tabs.d.ts +58 -0
- package/tabs/Tabs.d.ts.map +1 -0
- package/tabs/Tabs.js +80 -0
- package/tabs/Tabs.js.map +1 -0
- package/tabs/index.d.ts +3 -0
- package/tabs/index.d.ts.map +1 -0
- package/tabs/index.js +2 -0
- package/tabs/index.js.map +1 -0
- package/version-history/DiffFileList.d.ts +22 -0
- package/version-history/DiffFileList.d.ts.map +1 -0
- package/version-history/DiffFileList.js +37 -0
- package/version-history/DiffFileList.js.map +1 -0
- package/version-history/DiffSummary.d.ts +21 -0
- package/version-history/DiffSummary.d.ts.map +1 -0
- package/version-history/DiffSummary.js +16 -0
- package/version-history/DiffSummary.js.map +1 -0
- package/version-history/DiffViewer.d.ts +31 -0
- package/version-history/DiffViewer.d.ts.map +1 -0
- package/version-history/DiffViewer.js +60 -0
- package/version-history/DiffViewer.js.map +1 -0
- package/version-history/MultiFileDiffView.d.ts +30 -0
- package/version-history/MultiFileDiffView.d.ts.map +1 -0
- package/version-history/MultiFileDiffView.js +40 -0
- package/version-history/MultiFileDiffView.js.map +1 -0
- package/version-history/VersionTimeline.d.ts +29 -0
- package/version-history/VersionTimeline.d.ts.map +1 -0
- package/version-history/VersionTimeline.js +87 -0
- package/version-history/VersionTimeline.js.map +1 -0
- package/version-history/VersionTimelineEntry.d.ts +22 -0
- package/version-history/VersionTimelineEntry.d.ts.map +1 -0
- package/version-history/VersionTimelineEntry.js +98 -0
- package/version-history/VersionTimelineEntry.js.map +1 -0
- package/version-history/computeDiff.d.ts +16 -0
- package/version-history/computeDiff.d.ts.map +1 -0
- package/version-history/computeDiff.js +54 -0
- package/version-history/computeDiff.js.map +1 -0
- package/version-history/computeMultiFileDiff.d.ts +15 -0
- package/version-history/computeMultiFileDiff.d.ts.map +1 -0
- package/version-history/computeMultiFileDiff.js +83 -0
- package/version-history/computeMultiFileDiff.js.map +1 -0
- package/version-history/index.d.ts +14 -0
- package/version-history/index.d.ts.map +1 -0
- package/version-history/index.js +9 -0
- package/version-history/index.js.map +1 -0
- package/version-history/types.d.ts +106 -0
- package/version-history/types.d.ts.map +1 -0
- package/version-history/types.js +2 -0
- package/version-history/types.js.map +1 -0
- package/library/ResourceListView.d.ts +0 -174
- package/library/ResourceListView.d.ts.map +0 -1
- package/library/ResourceListView.js +0 -318
- package/library/ResourceListView.js.map +0 -1
- package/src/library/ResourceListView.tsx +0 -956
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import type {
|
|
5
|
+
DependencyNode,
|
|
6
|
+
DependencyTree,
|
|
7
|
+
UseDependencyGraphOptions,
|
|
8
|
+
UseDependencyGraphReturn,
|
|
9
|
+
} from "./types";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Pure transformation hook that converts an `AgentSpec` into a
|
|
13
|
+
* {@link DependencyTree} for rendering.
|
|
14
|
+
*
|
|
15
|
+
* No data fetching, no side effects — the tree is computed entirely
|
|
16
|
+
* from the spec fields already available via {@link useAgent}. The
|
|
17
|
+
* result is memoized and only recomputes when the spec reference
|
|
18
|
+
* changes.
|
|
19
|
+
*
|
|
20
|
+
* Returns `null` for `tree` when `spec` is `undefined` (loading state).
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* const { tree, isEmpty } = useDependencyGraph({
|
|
25
|
+
* agentName: agent.metadata.name,
|
|
26
|
+
* agentOrg: agent.metadata.org,
|
|
27
|
+
* spec: agent.spec,
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* if (!isEmpty && tree) {
|
|
31
|
+
* return <DependencyGraph tree={tree} onNodeClick={handleClick} />;
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function useDependencyGraph({
|
|
36
|
+
agentName,
|
|
37
|
+
agentOrg,
|
|
38
|
+
spec,
|
|
39
|
+
}: UseDependencyGraphOptions): UseDependencyGraphReturn {
|
|
40
|
+
return useMemo(() => {
|
|
41
|
+
if (!spec) return { tree: null, isEmpty: true };
|
|
42
|
+
|
|
43
|
+
const { mcpServerUsages, skillRefs, subAgents } = spec;
|
|
44
|
+
|
|
45
|
+
const hasDeps =
|
|
46
|
+
mcpServerUsages.length > 0 ||
|
|
47
|
+
skillRefs.length > 0 ||
|
|
48
|
+
subAgents.length > 0;
|
|
49
|
+
|
|
50
|
+
if (!hasDeps) return { tree: null, isEmpty: true };
|
|
51
|
+
|
|
52
|
+
let nodeCount = 1; // root
|
|
53
|
+
|
|
54
|
+
const mcpNodes: DependencyNode[] = mcpServerUsages
|
|
55
|
+
.filter((u) => u.mcpServerRef)
|
|
56
|
+
.map((usage) => {
|
|
57
|
+
nodeCount++;
|
|
58
|
+
const ref = usage.mcpServerRef!;
|
|
59
|
+
const toolCount = usage.enabledTools.length;
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
id: `mcp-server:${ref.slug}`,
|
|
63
|
+
kind: "mcp-server" as const,
|
|
64
|
+
label: ref.slug,
|
|
65
|
+
qualifiedLabel:
|
|
66
|
+
ref.org && ref.org !== agentOrg
|
|
67
|
+
? `${ref.org}/${ref.slug}`
|
|
68
|
+
: undefined,
|
|
69
|
+
metadata: {
|
|
70
|
+
tools:
|
|
71
|
+
toolCount > 0
|
|
72
|
+
? `${toolCount} ${toolCount === 1 ? "tool" : "tools"}`
|
|
73
|
+
: "all tools",
|
|
74
|
+
},
|
|
75
|
+
children: [],
|
|
76
|
+
ref: { org: ref.org || agentOrg, slug: ref.slug },
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const skillNodes: DependencyNode[] = skillRefs.map((ref) => {
|
|
81
|
+
nodeCount++;
|
|
82
|
+
return {
|
|
83
|
+
id: `skill:${ref.slug}`,
|
|
84
|
+
kind: "skill" as const,
|
|
85
|
+
label: ref.slug,
|
|
86
|
+
qualifiedLabel:
|
|
87
|
+
ref.org && ref.org !== agentOrg
|
|
88
|
+
? `${ref.org}/${ref.slug}`
|
|
89
|
+
: undefined,
|
|
90
|
+
children: [],
|
|
91
|
+
ref: { org: ref.org || agentOrg, slug: ref.slug },
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const subAgentNodes: DependencyNode[] = subAgents.map((sa) => {
|
|
96
|
+
nodeCount++;
|
|
97
|
+
|
|
98
|
+
const saMcpNodes: DependencyNode[] = sa.mcpAccess.map((access) => {
|
|
99
|
+
nodeCount++;
|
|
100
|
+
const toolCount = access.enabledTools.length;
|
|
101
|
+
return {
|
|
102
|
+
id: `sub-agent:${sa.name}:mcp-server:${access.mcpServer}`,
|
|
103
|
+
kind: "mcp-server" as const,
|
|
104
|
+
label: access.mcpServer,
|
|
105
|
+
metadata: {
|
|
106
|
+
tools:
|
|
107
|
+
toolCount > 0
|
|
108
|
+
? `${toolCount} ${toolCount === 1 ? "tool" : "tools"}`
|
|
109
|
+
: "all tools",
|
|
110
|
+
},
|
|
111
|
+
children: [],
|
|
112
|
+
ref: { org: agentOrg, slug: access.mcpServer },
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const saSkillNodes: DependencyNode[] = sa.skillRefs.map((ref) => {
|
|
117
|
+
nodeCount++;
|
|
118
|
+
return {
|
|
119
|
+
id: `sub-agent:${sa.name}:skill:${ref.slug}`,
|
|
120
|
+
kind: "skill" as const,
|
|
121
|
+
label: ref.slug,
|
|
122
|
+
qualifiedLabel:
|
|
123
|
+
ref.org && ref.org !== agentOrg
|
|
124
|
+
? `${ref.org}/${ref.slug}`
|
|
125
|
+
: undefined,
|
|
126
|
+
children: [],
|
|
127
|
+
ref: { org: ref.org || agentOrg, slug: ref.slug },
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const metadata: Record<string, string> = {};
|
|
132
|
+
if (sa.modelOverride) {
|
|
133
|
+
metadata.model = sa.modelOverride;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
id: `sub-agent:${sa.name}`,
|
|
138
|
+
kind: "sub-agent" as const,
|
|
139
|
+
label: sa.name,
|
|
140
|
+
description: sa.description || undefined,
|
|
141
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
142
|
+
children: [...saMcpNodes, ...saSkillNodes],
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
const root: DependencyNode = {
|
|
147
|
+
id: `agent:${agentName}`,
|
|
148
|
+
kind: "agent",
|
|
149
|
+
label: agentName,
|
|
150
|
+
children: [...mcpNodes, ...skillNodes, ...subAgentNodes],
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
tree: { root, nodeCount },
|
|
155
|
+
isEmpty: false,
|
|
156
|
+
};
|
|
157
|
+
}, [agentName, agentOrg, spec]);
|
|
158
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { useEmptyState } from "./useEmptyState";
|
|
5
|
+
import type { EmptyStateProps } from "./types";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A semantic, accessible empty state component supporting four distinct
|
|
9
|
+
* variants: first-use, zero-results, permission, and error.
|
|
10
|
+
*
|
|
11
|
+
* Each variant provides appropriate default icons, copy, and ARIA roles.
|
|
12
|
+
* All defaults can be overridden via props. The `icon` prop accepts any
|
|
13
|
+
* ReactNode for full visual customization.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <EmptyState
|
|
18
|
+
* variant="first-use"
|
|
19
|
+
* resourceLabel="agents"
|
|
20
|
+
* action={{ label: "Create agent", onClick: handleCreate }}
|
|
21
|
+
* />
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* <EmptyState
|
|
27
|
+
* variant="error"
|
|
28
|
+
* errorMessage="Network request failed"
|
|
29
|
+
* action={{ label: "Retry", onClick: handleRetry }}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function EmptyState({
|
|
34
|
+
variant,
|
|
35
|
+
resourceLabel,
|
|
36
|
+
icon,
|
|
37
|
+
title,
|
|
38
|
+
description,
|
|
39
|
+
errorMessage,
|
|
40
|
+
action,
|
|
41
|
+
children,
|
|
42
|
+
className,
|
|
43
|
+
}: EmptyStateProps) {
|
|
44
|
+
const resolved = useEmptyState({
|
|
45
|
+
variant,
|
|
46
|
+
resourceLabel,
|
|
47
|
+
title,
|
|
48
|
+
description,
|
|
49
|
+
errorMessage,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<div
|
|
54
|
+
role={resolved.role}
|
|
55
|
+
className={cn(
|
|
56
|
+
"flex flex-col items-center gap-3 py-12 text-center",
|
|
57
|
+
className,
|
|
58
|
+
)}
|
|
59
|
+
>
|
|
60
|
+
<div className="text-muted-foreground-faint">
|
|
61
|
+
{icon ?? resolved.defaultIcon}
|
|
62
|
+
</div>
|
|
63
|
+
<div className="flex flex-col gap-1">
|
|
64
|
+
<p className="text-sm font-medium text-muted-foreground">
|
|
65
|
+
{resolved.title}
|
|
66
|
+
</p>
|
|
67
|
+
<p className="max-w-sm text-xs text-muted-foreground-subtle">
|
|
68
|
+
{resolved.description}
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
{children
|
|
72
|
+
? <div className="mt-1">{children}</div>
|
|
73
|
+
: action && (
|
|
74
|
+
<button
|
|
75
|
+
type="button"
|
|
76
|
+
onClick={action.onClick}
|
|
77
|
+
className={cn(
|
|
78
|
+
"mt-1 inline-flex items-center rounded-md px-3 py-1.5 text-xs font-medium",
|
|
79
|
+
variant === "error"
|
|
80
|
+
? "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground"
|
|
81
|
+
: "bg-primary text-primary-foreground hover:bg-primary-hover",
|
|
82
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
83
|
+
)}
|
|
84
|
+
>
|
|
85
|
+
{action.label}
|
|
86
|
+
</button>
|
|
87
|
+
)}
|
|
88
|
+
</div>
|
|
89
|
+
);
|
|
90
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Semantic variant for an empty state, each representing a distinct
|
|
5
|
+
* reason why no content is visible.
|
|
6
|
+
*/
|
|
7
|
+
export type EmptyStateVariant =
|
|
8
|
+
| "first-use"
|
|
9
|
+
| "zero-results"
|
|
10
|
+
| "permission"
|
|
11
|
+
| "error";
|
|
12
|
+
|
|
13
|
+
/** Action rendered as a button within the empty state. */
|
|
14
|
+
export interface EmptyStateAction {
|
|
15
|
+
/** Button label. */
|
|
16
|
+
readonly label: string;
|
|
17
|
+
/** Click handler. */
|
|
18
|
+
readonly onClick: () => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Options for the {@link useEmptyState} behavior hook. */
|
|
22
|
+
export interface UseEmptyStateOptions {
|
|
23
|
+
/** The semantic reason no content is shown. */
|
|
24
|
+
readonly variant: EmptyStateVariant;
|
|
25
|
+
/**
|
|
26
|
+
* Human-readable label for the resource type (e.g. "agents", "skills").
|
|
27
|
+
* Used to generate contextual default copy.
|
|
28
|
+
*/
|
|
29
|
+
readonly resourceLabel?: string;
|
|
30
|
+
/** Custom title override. When provided, replaces the generated default. */
|
|
31
|
+
readonly title?: string;
|
|
32
|
+
/** Custom description override. When provided, replaces the generated default. */
|
|
33
|
+
readonly description?: string;
|
|
34
|
+
/** Error message to display — relevant for the "error" variant. */
|
|
35
|
+
readonly errorMessage?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Return value of the {@link useEmptyState} behavior hook. */
|
|
39
|
+
export interface UseEmptyStateReturn {
|
|
40
|
+
/** Resolved title text. */
|
|
41
|
+
readonly title: string;
|
|
42
|
+
/** Resolved description text. */
|
|
43
|
+
readonly description: string;
|
|
44
|
+
/** Suggested default icon for the variant (as a ReactNode). */
|
|
45
|
+
readonly defaultIcon: ReactNode;
|
|
46
|
+
/** The ARIA role appropriate for this variant. */
|
|
47
|
+
readonly role: "status" | "alert";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Props for the styled {@link EmptyState} component. */
|
|
51
|
+
export interface EmptyStateProps {
|
|
52
|
+
/**
|
|
53
|
+
* The semantic reason no content is shown.
|
|
54
|
+
* Determines default icon, copy, and ARIA role.
|
|
55
|
+
*/
|
|
56
|
+
readonly variant: EmptyStateVariant;
|
|
57
|
+
/**
|
|
58
|
+
* Human-readable label for the resource type (e.g. "agents", "skills").
|
|
59
|
+
* Used to generate contextual default copy.
|
|
60
|
+
*/
|
|
61
|
+
readonly resourceLabel?: string;
|
|
62
|
+
/** Custom icon to display. Defaults to a variant-appropriate Lucide icon. */
|
|
63
|
+
readonly icon?: ReactNode;
|
|
64
|
+
/** Custom title override. */
|
|
65
|
+
readonly title?: string;
|
|
66
|
+
/** Custom description override. */
|
|
67
|
+
readonly description?: string;
|
|
68
|
+
/** Error message — only used when variant is "error". */
|
|
69
|
+
readonly errorMessage?: string;
|
|
70
|
+
/** Primary action button. */
|
|
71
|
+
readonly action?: EmptyStateAction;
|
|
72
|
+
/**
|
|
73
|
+
* Custom action slot content. When provided, renders in the action
|
|
74
|
+
* area (centered, below the description) instead of the `action` button.
|
|
75
|
+
* Use this when you need full control over the CTA element — e.g. a
|
|
76
|
+
* `<Link>` for client-side routing or a button with an icon.
|
|
77
|
+
*/
|
|
78
|
+
readonly children?: ReactNode;
|
|
79
|
+
/** Additional CSS classes for the root container. */
|
|
80
|
+
readonly className?: string;
|
|
81
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { useMemo, createElement } from "react";
|
|
2
|
+
import { Package, SearchX, Lock, AlertCircle } from "lucide-react";
|
|
3
|
+
import type { UseEmptyStateOptions, UseEmptyStateReturn } from "./types";
|
|
4
|
+
|
|
5
|
+
const ICON_CLASSES = "h-10 w-10";
|
|
6
|
+
|
|
7
|
+
function resolveDefaults(
|
|
8
|
+
variant: UseEmptyStateOptions["variant"],
|
|
9
|
+
resourceLabel: string,
|
|
10
|
+
): { title: string; description: string } {
|
|
11
|
+
switch (variant) {
|
|
12
|
+
case "first-use":
|
|
13
|
+
return {
|
|
14
|
+
title: `No ${resourceLabel} yet`,
|
|
15
|
+
description: `Create ${resourceLabel === "agents" ? "an agent" : `a ${resourceLabel.replace(/s$/, "")}`} to get started.`,
|
|
16
|
+
};
|
|
17
|
+
case "zero-results":
|
|
18
|
+
return {
|
|
19
|
+
title: "No results found",
|
|
20
|
+
description: "Try adjusting your search or filters.",
|
|
21
|
+
};
|
|
22
|
+
case "permission":
|
|
23
|
+
return {
|
|
24
|
+
title: `No access to ${resourceLabel}`,
|
|
25
|
+
description:
|
|
26
|
+
"You don't have permission to view these resources. Contact your organization admin.",
|
|
27
|
+
};
|
|
28
|
+
case "error":
|
|
29
|
+
return {
|
|
30
|
+
title: "Something went wrong",
|
|
31
|
+
description: "We couldn't load this content. Please try again.",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function resolveIcon(variant: UseEmptyStateOptions["variant"]) {
|
|
37
|
+
switch (variant) {
|
|
38
|
+
case "first-use":
|
|
39
|
+
return createElement(Package, { className: ICON_CLASSES });
|
|
40
|
+
case "zero-results":
|
|
41
|
+
return createElement(SearchX, { className: ICON_CLASSES });
|
|
42
|
+
case "permission":
|
|
43
|
+
return createElement(Lock, { className: ICON_CLASSES });
|
|
44
|
+
case "error":
|
|
45
|
+
return createElement(AlertCircle, { className: ICON_CLASSES });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function resolveRole(
|
|
50
|
+
variant: UseEmptyStateOptions["variant"],
|
|
51
|
+
): "status" | "alert" {
|
|
52
|
+
return variant === "error" ? "alert" : "status";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Behavior hook that resolves empty state copy, icon, and accessibility
|
|
57
|
+
* attributes based on the semantic variant and optional overrides.
|
|
58
|
+
*
|
|
59
|
+
* Use this hook when you want full rendering control but need the
|
|
60
|
+
* variant-aware logic (default copy, icons, ARIA roles).
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* const { title, description, defaultIcon, role } = useEmptyState({
|
|
65
|
+
* variant: "first-use",
|
|
66
|
+
* resourceLabel: "agents",
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function useEmptyState(options: UseEmptyStateOptions): UseEmptyStateReturn {
|
|
71
|
+
const { variant, resourceLabel = "resources", title, description, errorMessage } = options;
|
|
72
|
+
|
|
73
|
+
return useMemo(() => {
|
|
74
|
+
const defaults = resolveDefaults(variant, resourceLabel);
|
|
75
|
+
return {
|
|
76
|
+
title: title ?? defaults.title,
|
|
77
|
+
description:
|
|
78
|
+
variant === "error" && errorMessage
|
|
79
|
+
? errorMessage
|
|
80
|
+
: (description ?? defaults.description),
|
|
81
|
+
defaultIcon: resolveIcon(variant),
|
|
82
|
+
role: resolveRole(variant),
|
|
83
|
+
};
|
|
84
|
+
}, [variant, resourceLabel, title, description, errorMessage]);
|
|
85
|
+
}
|
|
@@ -129,7 +129,7 @@ export type ThreadItem =
|
|
|
129
129
|
| { readonly kind: "sub-agent"; readonly subAgentExecution: SubAgentExecution; readonly key: string }
|
|
130
130
|
| { readonly kind: "phase-badge"; readonly phase: ExecutionPhase; readonly key: string }
|
|
131
131
|
| { readonly kind: "approval-request"; readonly pendingApproval: PendingApproval; readonly key: string }
|
|
132
|
-
| { readonly kind: "setup-progress"; readonly workspaceEntries: readonly WorkspaceEntry[]; readonly serverPhase?: string; readonly key: string };
|
|
132
|
+
| { readonly kind: "setup-progress"; readonly workspaceEntries: readonly WorkspaceEntry[]; readonly serverPhase?: string; readonly isAwaitingResponse?: boolean; readonly key: string };
|
|
133
133
|
|
|
134
134
|
function hasAiMessages(execution: AgentExecution): boolean {
|
|
135
135
|
const messages = execution.status?.messages;
|
|
@@ -257,20 +257,30 @@ export function buildThreadItems(
|
|
|
257
257
|
const lastPhase =
|
|
258
258
|
lastExec?.status?.phase ?? ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED;
|
|
259
259
|
|
|
260
|
-
if (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
lastPhase === ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
260
|
+
if (activeStreamExecution && !hasAiMessages(activeStreamExecution)) {
|
|
261
|
+
const isPending =
|
|
262
|
+
lastPhase === ExecutionPhase.EXECUTION_PENDING ||
|
|
263
|
+
lastPhase === ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED;
|
|
264
|
+
const isInProgressNoMessages =
|
|
265
|
+
lastPhase === ExecutionPhase.EXECUTION_IN_PROGRESS;
|
|
266
|
+
|
|
267
|
+
if (isPending) {
|
|
268
|
+
const serverPhase =
|
|
269
|
+
activeStreamExecution.status?.setupProgress?.currentPhase || undefined;
|
|
270
|
+
items.push({
|
|
271
|
+
kind: "setup-progress",
|
|
272
|
+
workspaceEntries: workspaceEntries ?? [],
|
|
273
|
+
serverPhase,
|
|
274
|
+
key: "setup-progress",
|
|
275
|
+
});
|
|
276
|
+
} else if (isInProgressNoMessages) {
|
|
277
|
+
items.push({
|
|
278
|
+
kind: "setup-progress",
|
|
279
|
+
workspaceEntries: workspaceEntries ?? [],
|
|
280
|
+
isAwaitingResponse: true,
|
|
281
|
+
key: "setup-progress",
|
|
282
|
+
});
|
|
283
|
+
}
|
|
274
284
|
}
|
|
275
285
|
|
|
276
286
|
if (
|
|
@@ -557,6 +567,7 @@ export function ThreadItemRenderer({
|
|
|
557
567
|
<SetupProgress
|
|
558
568
|
workspaceEntries={item.workspaceEntries}
|
|
559
569
|
serverPhase={item.serverPhase}
|
|
570
|
+
isAwaitingResponse={item.isAwaitingResponse}
|
|
560
571
|
/>
|
|
561
572
|
);
|
|
562
573
|
}
|
|
@@ -22,6 +22,13 @@ export interface SetupProgressProps {
|
|
|
22
22
|
* step sequence derived from `workspaceEntries`.
|
|
23
23
|
*/
|
|
24
24
|
readonly serverPhase?: string;
|
|
25
|
+
/**
|
|
26
|
+
* When `true`, the execution has moved past `PENDING` into
|
|
27
|
+
* `IN_PROGRESS` but the agent has not yet produced any AI messages.
|
|
28
|
+
* Renders a static "Thinking\u2026" label instead of the setup
|
|
29
|
+
* phase sequence or server-reported phase.
|
|
30
|
+
*/
|
|
31
|
+
readonly isAwaitingResponse?: boolean;
|
|
25
32
|
/** Additional CSS class names for the root container. */
|
|
26
33
|
readonly className?: string;
|
|
27
34
|
}
|
|
@@ -66,33 +73,41 @@ function buildSteps(
|
|
|
66
73
|
|
|
67
74
|
/**
|
|
68
75
|
* Animated inline indicator shown in the message thread while an
|
|
69
|
-
* execution
|
|
76
|
+
* execution has not yet produced AI messages.
|
|
77
|
+
*
|
|
78
|
+
* Operates in three modes (highest-priority first):
|
|
70
79
|
*
|
|
71
|
-
* **
|
|
72
|
-
* `
|
|
73
|
-
*
|
|
80
|
+
* 1. **Awaiting response** — `isAwaitingResponse` is `true`. The
|
|
81
|
+
* execution has moved past `PENDING` into `IN_PROGRESS` but no AI
|
|
82
|
+
* messages have arrived yet. Shows a static "Thinking\u2026" label.
|
|
74
83
|
*
|
|
75
|
-
* **
|
|
76
|
-
*
|
|
77
|
-
*
|
|
84
|
+
* 2. **Server-driven** — `serverPhase` is non-empty. Renders the
|
|
85
|
+
* server-reported `setup_progress.current_phase` label directly.
|
|
86
|
+
*
|
|
87
|
+
* 3. **Timer-based fallback** — neither of the above. Cycles through
|
|
88
|
+
* contextual status messages derived from `workspaceEntries`.
|
|
78
89
|
*
|
|
79
90
|
* All visual properties flow through `--stgm-*` tokens.
|
|
80
91
|
*
|
|
81
92
|
* @example
|
|
82
93
|
* ```tsx
|
|
83
|
-
* //
|
|
94
|
+
* // Awaiting response (IN_PROGRESS, no messages yet)
|
|
95
|
+
* <SetupProgress isAwaitingResponse />
|
|
96
|
+
*
|
|
97
|
+
* // Server-driven (preferred during PENDING)
|
|
84
98
|
* <SetupProgress serverPhase={execution.status?.setupProgress?.currentPhase} />
|
|
85
99
|
*
|
|
86
|
-
* //
|
|
100
|
+
* // Timer fallback (PENDING, no server phase available)
|
|
87
101
|
* <SetupProgress workspaceEntries={session.spec?.workspaceEntries} />
|
|
88
102
|
* ```
|
|
89
103
|
*/
|
|
90
104
|
export const SetupProgress = memo(function SetupProgress({
|
|
91
105
|
workspaceEntries,
|
|
92
106
|
serverPhase,
|
|
107
|
+
isAwaitingResponse,
|
|
93
108
|
className,
|
|
94
109
|
}: SetupProgressProps) {
|
|
95
|
-
const useServerPhase = !!serverPhase;
|
|
110
|
+
const useServerPhase = !isAwaitingResponse && !!serverPhase;
|
|
96
111
|
|
|
97
112
|
/* ── Timer-based fallback state ─────────────────────────────────── */
|
|
98
113
|
const steps = useMemo(() => buildSteps(workspaceEntries), [workspaceEntries]);
|
|
@@ -103,7 +118,7 @@ export const SetupProgress = memo(function SetupProgress({
|
|
|
103
118
|
}, [steps]);
|
|
104
119
|
|
|
105
120
|
useEffect(() => {
|
|
106
|
-
if (useServerPhase) return;
|
|
121
|
+
if (isAwaitingResponse || useServerPhase) return;
|
|
107
122
|
if (stepIndex >= steps.length - 1) return;
|
|
108
123
|
|
|
109
124
|
const timer = setTimeout(() => {
|
|
@@ -111,11 +126,17 @@ export const SetupProgress = memo(function SetupProgress({
|
|
|
111
126
|
}, steps[stepIndex].durationMs);
|
|
112
127
|
|
|
113
128
|
return () => clearTimeout(timer);
|
|
114
|
-
}, [useServerPhase, stepIndex, steps]);
|
|
129
|
+
}, [isAwaitingResponse, useServerPhase, stepIndex, steps]);
|
|
115
130
|
|
|
116
131
|
/* ── Resolve display message ────────────────────────────────────── */
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
let currentMessage: string;
|
|
133
|
+
if (isAwaitingResponse) {
|
|
134
|
+
currentMessage = "Thinking\u2026";
|
|
135
|
+
} else if (serverPhase) {
|
|
136
|
+
currentMessage = serverPhase;
|
|
137
|
+
} else {
|
|
138
|
+
currentMessage = steps[Math.min(stepIndex, steps.length - 1)].message;
|
|
139
|
+
}
|
|
119
140
|
|
|
120
141
|
return (
|
|
121
142
|
<div
|
|
@@ -406,4 +406,105 @@ describe("buildThreadItems key generation", () => {
|
|
|
406
406
|
|
|
407
407
|
expect(items[0].key).toBe("_e0-m0");
|
|
408
408
|
});
|
|
409
|
+
|
|
410
|
+
describe("setup-progress indicator lifecycle", () => {
|
|
411
|
+
it("shows setup-progress during PENDING with no AI messages", () => {
|
|
412
|
+
const exec = makeExecution({
|
|
413
|
+
id: "exec-pending",
|
|
414
|
+
specMessage: "Hello",
|
|
415
|
+
phase: ExecutionPhase.EXECUTION_PENDING,
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
const items = buildThreadItems([], exec, null, false, undefined);
|
|
419
|
+
const setupItem = items.find((i) => i.kind === "setup-progress");
|
|
420
|
+
|
|
421
|
+
expect(setupItem).toBeDefined();
|
|
422
|
+
expect(setupItem!.key).toBe("setup-progress");
|
|
423
|
+
if (setupItem?.kind === "setup-progress") {
|
|
424
|
+
expect(setupItem.isAwaitingResponse).toBeFalsy();
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
it("shows setup-progress with isAwaitingResponse during IN_PROGRESS with no AI messages", () => {
|
|
429
|
+
const exec = makeExecution({
|
|
430
|
+
id: "exec-in-progress",
|
|
431
|
+
specMessage: "Hello",
|
|
432
|
+
phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
const items = buildThreadItems([], exec, null, false, undefined);
|
|
436
|
+
const setupItem = items.find((i) => i.kind === "setup-progress");
|
|
437
|
+
|
|
438
|
+
expect(setupItem).toBeDefined();
|
|
439
|
+
expect(setupItem!.key).toBe("setup-progress");
|
|
440
|
+
if (setupItem?.kind === "setup-progress") {
|
|
441
|
+
expect(setupItem.isAwaitingResponse).toBe(true);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
it("hides setup-progress once AI messages arrive during IN_PROGRESS", () => {
|
|
446
|
+
const exec = makeExecution({
|
|
447
|
+
id: "exec-streaming",
|
|
448
|
+
specMessage: "Hello",
|
|
449
|
+
phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
|
|
450
|
+
messages: [
|
|
451
|
+
makeMessage(MessageType.MESSAGE_AI, "Here's my response"),
|
|
452
|
+
],
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
const items = buildThreadItems([], exec, null, false, undefined);
|
|
456
|
+
const setupItem = items.find((i) => i.kind === "setup-progress");
|
|
457
|
+
|
|
458
|
+
expect(setupItem).toBeUndefined();
|
|
459
|
+
});
|
|
460
|
+
|
|
461
|
+
it("hides setup-progress for terminal phases even without AI messages", () => {
|
|
462
|
+
const exec = makeExecution({
|
|
463
|
+
id: "exec-failed",
|
|
464
|
+
specMessage: "Hello",
|
|
465
|
+
phase: ExecutionPhase.EXECUTION_FAILED,
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
const items = buildThreadItems([], exec, null, false, undefined);
|
|
469
|
+
const setupItem = items.find((i) => i.kind === "setup-progress");
|
|
470
|
+
|
|
471
|
+
expect(setupItem).toBeUndefined();
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
it("does not show setup-progress for completed executions (not active stream)", () => {
|
|
475
|
+
const exec = makeExecution({
|
|
476
|
+
id: "exec-done",
|
|
477
|
+
specMessage: "Hello",
|
|
478
|
+
phase: ExecutionPhase.EXECUTION_PENDING,
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
const items = buildThreadItems([exec], null, null, false, undefined);
|
|
482
|
+
const setupItem = items.find((i) => i.kind === "setup-progress");
|
|
483
|
+
|
|
484
|
+
expect(setupItem).toBeUndefined();
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
it("preserves stable key across PENDING → IN_PROGRESS transition", () => {
|
|
488
|
+
const pendingExec = makeExecution({
|
|
489
|
+
id: "exec-transition",
|
|
490
|
+
specMessage: "Hello",
|
|
491
|
+
phase: ExecutionPhase.EXECUTION_PENDING,
|
|
492
|
+
});
|
|
493
|
+
const itemsPending = buildThreadItems([], pendingExec, null, false, undefined);
|
|
494
|
+
|
|
495
|
+
const inProgressExec = makeExecution({
|
|
496
|
+
id: "exec-transition",
|
|
497
|
+
specMessage: "Hello",
|
|
498
|
+
phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
|
|
499
|
+
});
|
|
500
|
+
const itemsInProgress = buildThreadItems([], inProgressExec, null, false, undefined);
|
|
501
|
+
|
|
502
|
+
const pendingSetup = itemsPending.find((i) => i.kind === "setup-progress");
|
|
503
|
+
const inProgressSetup = itemsInProgress.find((i) => i.kind === "setup-progress");
|
|
504
|
+
|
|
505
|
+
expect(pendingSetup).toBeDefined();
|
|
506
|
+
expect(inProgressSetup).toBeDefined();
|
|
507
|
+
expect(pendingSetup!.key).toBe(inProgressSetup!.key);
|
|
508
|
+
});
|
|
509
|
+
});
|
|
409
510
|
});
|