@stigmer/react 0.4.8 → 0.5.1
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/composer/ContextChip.d.ts +7 -2
- package/composer/ContextChip.d.ts.map +1 -1
- package/composer/ContextChip.js +2 -1
- package/composer/ContextChip.js.map +1 -1
- package/composer/SessionComposer.d.ts +11 -0
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +33 -4
- package/composer/SessionComposer.js.map +1 -1
- 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/environment/usePersonalEnvironment.d.ts.map +1 -1
- package/environment/usePersonalEnvironment.js +1 -0
- package/environment/usePersonalEnvironment.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 +32 -12
- package/index.d.ts.map +1 -1
- package/index.js +30 -10
- 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 +33 -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/internal/useFetch.js +2 -2
- package/internal/useFetch.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 +235 -43
- 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/ModelRegistryContext.d.ts +2 -0
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js +1 -0
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.d.ts.map +1 -1
- package/models/ModelSelector.js +2 -2
- package/models/ModelSelector.js.map +1 -1
- package/models/__tests__/useModelRegistry.test.js +4 -3
- package/models/__tests__/useModelRegistry.test.js.map +1 -1
- package/models/useModelRegistry.d.ts +2 -0
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/package.json +8 -4
- package/provider.d.ts.map +1 -1
- package/provider.js +69 -22
- 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/session/__tests__/session-spec-converters.test.d.ts +2 -0
- package/session/__tests__/session-spec-converters.test.d.ts.map +1 -0
- package/session/__tests__/session-spec-converters.test.js +162 -0
- package/session/__tests__/session-spec-converters.test.js.map +1 -0
- package/session/__tests__/useNewSessionFlow.test.js +2 -2
- package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
- package/session/__tests__/usePersistedModel.test.js +1 -1
- package/session/__tests__/usePersistedModel.test.js.map +1 -1
- package/session/group-sessions.d.ts +17 -0
- package/session/group-sessions.d.ts.map +1 -1
- package/session/group-sessions.js +46 -0
- package/session/group-sessions.js.map +1 -1
- package/session/index.d.ts +4 -2
- package/session/index.d.ts.map +1 -1
- package/session/index.js +2 -1
- package/session/index.js.map +1 -1
- package/session/session-spec-converters.d.ts +24 -0
- package/session/session-spec-converters.d.ts.map +1 -0
- package/session/session-spec-converters.js +72 -0
- package/session/session-spec-converters.js.map +1 -0
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +1 -56
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +5 -0
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +20 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionSearch.d.ts +57 -0
- package/session/useSessionSearch.d.ts.map +1 -0
- package/session/useSessionSearch.js +94 -0
- package/session/useSessionSearch.js.map +1 -0
- 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/composer/ContextChip.tsx +20 -11
- package/src/composer/SessionComposer.tsx +52 -3
- 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/environment/usePersonalEnvironment.ts +1 -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 +275 -8
- package/src/inline-edit/InlineEditImage.tsx +208 -0
- package/src/inline-edit/InlineEditKeyValue.tsx +301 -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/internal/useFetch.ts +2 -2
- 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 +816 -155
- 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/ModelRegistryContext.ts +3 -0
- package/src/models/ModelSelector.tsx +25 -2
- package/src/models/__tests__/useModelRegistry.test.tsx +5 -3
- package/src/models/useModelRegistry.ts +5 -2
- package/src/provider.tsx +69 -18
- 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/session/__tests__/session-spec-converters.test.ts +185 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +2 -2
- package/src/session/__tests__/usePersistedModel.test.tsx +1 -1
- package/src/session/group-sessions.ts +65 -0
- package/src/session/index.ts +8 -2
- package/src/session/session-spec-converters.ts +86 -0
- package/src/session/useSessionConversation.ts +5 -64
- package/src/session/useSessionPageFlow.ts +28 -7
- package/src/session/useSessionSearch.ts +149 -0
- 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,297 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { getUserMessage } from "@stigmer/sdk";
|
|
6
|
+
import type { McpServerInput } from "@stigmer/sdk";
|
|
7
|
+
import { serializeMcpServerInputYaml } from "../../library/serialize-resource-yaml";
|
|
8
|
+
import type { McpServerWizardData } from "./types";
|
|
9
|
+
|
|
10
|
+
/** Props for {@link ReviewStep}. */
|
|
11
|
+
export interface ReviewStepProps {
|
|
12
|
+
readonly org: string;
|
|
13
|
+
readonly data: McpServerWizardData;
|
|
14
|
+
readonly isCreating: boolean;
|
|
15
|
+
readonly error: Error | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Wizard step 3: Review and create.
|
|
20
|
+
*
|
|
21
|
+
* Shows a summary card with key configuration details and a full
|
|
22
|
+
* YAML preview of the MCP server that will be created. The "Create"
|
|
23
|
+
* action is in the WizardNav footer, not in this component.
|
|
24
|
+
*/
|
|
25
|
+
export function ReviewStep({
|
|
26
|
+
org,
|
|
27
|
+
data,
|
|
28
|
+
isCreating,
|
|
29
|
+
error,
|
|
30
|
+
}: ReviewStepProps) {
|
|
31
|
+
const mcpServerInput = useMemo(
|
|
32
|
+
() => buildMcpServerInput(org, data),
|
|
33
|
+
[org, data],
|
|
34
|
+
);
|
|
35
|
+
const yamlPreview = useMemo(
|
|
36
|
+
() => serializeMcpServerInputYaml(mcpServerInput),
|
|
37
|
+
[mcpServerInput],
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
const transportSummary =
|
|
41
|
+
data.transportType === "http"
|
|
42
|
+
? data.httpUrl || "(no URL)"
|
|
43
|
+
: `${data.stdioCommand}${data.stdioArgs ? ` ${data.stdioArgs}` : ""}` || "(no command)";
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div className="flex flex-col gap-6">
|
|
47
|
+
<div>
|
|
48
|
+
<h2 className="text-lg font-semibold text-foreground">
|
|
49
|
+
Review & Create
|
|
50
|
+
</h2>
|
|
51
|
+
<p className="mt-1 text-sm text-muted-foreground">
|
|
52
|
+
Review the MCP server configuration below, then create it.
|
|
53
|
+
</p>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
{/* Summary card */}
|
|
57
|
+
<div className="rounded-lg border border-border p-4">
|
|
58
|
+
<dl className="grid gap-x-6 gap-y-3 text-sm sm:grid-cols-2">
|
|
59
|
+
<SummaryItem label="Name" value={data.name} />
|
|
60
|
+
<SummaryItem label="Slug" value={data.slug} mono />
|
|
61
|
+
<SummaryItem label="Organization" value={org} mono />
|
|
62
|
+
<SummaryItem
|
|
63
|
+
label="Visibility"
|
|
64
|
+
value={data.visibility === "public" ? "Public" : "Private"}
|
|
65
|
+
/>
|
|
66
|
+
<SummaryItem
|
|
67
|
+
label="Transport"
|
|
68
|
+
value={data.transportType === "http" ? "HTTP" : "Stdio"}
|
|
69
|
+
/>
|
|
70
|
+
<SummaryItem
|
|
71
|
+
label={data.transportType === "http" ? "URL" : "Command"}
|
|
72
|
+
value={transportSummary}
|
|
73
|
+
mono
|
|
74
|
+
/>
|
|
75
|
+
{data.description && (
|
|
76
|
+
<SummaryItem
|
|
77
|
+
label="Description"
|
|
78
|
+
value={data.description}
|
|
79
|
+
className="sm:col-span-2"
|
|
80
|
+
/>
|
|
81
|
+
)}
|
|
82
|
+
{data.env.length > 0 && (
|
|
83
|
+
<SummaryItem
|
|
84
|
+
label="Env Variables"
|
|
85
|
+
value={`${data.env.length} declared`}
|
|
86
|
+
/>
|
|
87
|
+
)}
|
|
88
|
+
{data.authEnabled && data.authOAuthAppSlug && (
|
|
89
|
+
<SummaryItem
|
|
90
|
+
label="OAuth"
|
|
91
|
+
value={
|
|
92
|
+
data.authOAuthAppOrg
|
|
93
|
+
? `${data.authOAuthAppOrg}/${data.authOAuthAppSlug}`
|
|
94
|
+
: data.authOAuthAppSlug
|
|
95
|
+
}
|
|
96
|
+
mono
|
|
97
|
+
/>
|
|
98
|
+
)}
|
|
99
|
+
</dl>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
{/* YAML preview */}
|
|
103
|
+
<div className="space-y-2">
|
|
104
|
+
<h3 className="text-xs font-medium uppercase tracking-wider text-muted-foreground">
|
|
105
|
+
YAML Preview
|
|
106
|
+
</h3>
|
|
107
|
+
<div className="max-h-80 overflow-auto rounded-lg border border-border bg-muted-faint">
|
|
108
|
+
<pre className="p-4 font-mono text-xs leading-relaxed text-foreground">
|
|
109
|
+
{yamlPreview}
|
|
110
|
+
</pre>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
{/* Error display */}
|
|
115
|
+
{error && (
|
|
116
|
+
<div
|
|
117
|
+
className="rounded-md border border-destructive bg-muted-faint px-4 py-3"
|
|
118
|
+
role="alert"
|
|
119
|
+
>
|
|
120
|
+
<p className="text-sm font-medium text-destructive">
|
|
121
|
+
Failed to create MCP server
|
|
122
|
+
</p>
|
|
123
|
+
<p className="mt-1 text-xs text-muted-foreground">
|
|
124
|
+
{getUserMessage(error)}
|
|
125
|
+
</p>
|
|
126
|
+
</div>
|
|
127
|
+
)}
|
|
128
|
+
|
|
129
|
+
{/* Creating state */}
|
|
130
|
+
{isCreating && (
|
|
131
|
+
<p className="text-sm text-muted-foreground" aria-live="polite">
|
|
132
|
+
Creating MCP server…
|
|
133
|
+
</p>
|
|
134
|
+
)}
|
|
135
|
+
</div>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
// Summary item
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
|
|
143
|
+
function SummaryItem({
|
|
144
|
+
label,
|
|
145
|
+
value,
|
|
146
|
+
mono,
|
|
147
|
+
className,
|
|
148
|
+
}: {
|
|
149
|
+
readonly label: string;
|
|
150
|
+
readonly value: string;
|
|
151
|
+
readonly mono?: boolean;
|
|
152
|
+
readonly className?: string;
|
|
153
|
+
}) {
|
|
154
|
+
return (
|
|
155
|
+
<div className={className}>
|
|
156
|
+
<dt className="text-xs text-muted-foreground">{label}</dt>
|
|
157
|
+
<dd
|
|
158
|
+
className={cn(
|
|
159
|
+
"mt-0.5 text-sm text-foreground",
|
|
160
|
+
mono && "font-mono",
|
|
161
|
+
)}
|
|
162
|
+
>
|
|
163
|
+
{value}
|
|
164
|
+
</dd>
|
|
165
|
+
</div>
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// ---------------------------------------------------------------------------
|
|
170
|
+
// buildMcpServerInput
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Transforms wizard data into the SDK `McpServerInput` shape for submission.
|
|
175
|
+
* Exported for reuse by `McpServerCreationWizard`.
|
|
176
|
+
*/
|
|
177
|
+
export function buildMcpServerInput(
|
|
178
|
+
org: string,
|
|
179
|
+
data: McpServerWizardData,
|
|
180
|
+
): McpServerInput {
|
|
181
|
+
const input: McpServerInput = {
|
|
182
|
+
name: data.name.trim(),
|
|
183
|
+
org,
|
|
184
|
+
...(data.slug && { slug: data.slug }),
|
|
185
|
+
...(data.description && { description: data.description.trim() }),
|
|
186
|
+
...(data.iconUrl && { iconUrl: data.iconUrl.trim() }),
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
if (data.transportType === "http" && data.httpUrl) {
|
|
190
|
+
const http: McpServerInput["http"] = {
|
|
191
|
+
url: data.httpUrl.trim(),
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
const headers = buildHeadersMap(data.httpHeaders);
|
|
195
|
+
if (headers) {
|
|
196
|
+
http.headers = headers;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (data.httpTimeoutSeconds > 0) {
|
|
200
|
+
http.timeoutSeconds = data.httpTimeoutSeconds;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
input.http = http;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (data.transportType === "stdio" && data.stdioCommand) {
|
|
207
|
+
const stdio: McpServerInput["stdio"] = {
|
|
208
|
+
command: data.stdioCommand.trim(),
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const args = parseSpaceSeparated(data.stdioArgs);
|
|
212
|
+
if (args.length > 0) {
|
|
213
|
+
stdio.args = args;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (data.stdioWorkingDir.trim()) {
|
|
217
|
+
stdio.workingDir = data.stdioWorkingDir.trim();
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
input.stdio = stdio;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
if (data.env.length > 0) {
|
|
224
|
+
const env: NonNullable<McpServerInput["env"]> = {};
|
|
225
|
+
for (const entry of data.env) {
|
|
226
|
+
if (!entry.key) continue;
|
|
227
|
+
env[entry.key] = {
|
|
228
|
+
...(entry.isSecret && { isSecret: true }),
|
|
229
|
+
...(entry.description && { description: entry.description }),
|
|
230
|
+
...(entry.optional && { optional: true }),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (Object.keys(env).length > 0) {
|
|
234
|
+
input.env = env;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (data.authEnabled) {
|
|
239
|
+
const auth: NonNullable<McpServerInput["auth"]> = {};
|
|
240
|
+
|
|
241
|
+
if (data.authOAuthAppSlug) {
|
|
242
|
+
auth.oauthAppRef = {
|
|
243
|
+
org: data.authOAuthAppOrg,
|
|
244
|
+
slug: data.authOAuthAppSlug,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
if (data.authTargetEnvVar) {
|
|
248
|
+
auth.targetEnvVar = data.authTargetEnvVar;
|
|
249
|
+
}
|
|
250
|
+
if (data.authTokenLifetimeHint) {
|
|
251
|
+
auth.tokenLifetimeHint = data.authTokenLifetimeHint;
|
|
252
|
+
}
|
|
253
|
+
const scopes = parseCommaSeparated(data.authScopeHints);
|
|
254
|
+
if (scopes.length > 0) {
|
|
255
|
+
auth.scopeHints = scopes;
|
|
256
|
+
}
|
|
257
|
+
if (data.authDiscoveryUrl) {
|
|
258
|
+
auth.discoveryUrl = data.authDiscoveryUrl;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (Object.keys(auth).length > 0) {
|
|
262
|
+
input.auth = auth;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return input;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
// Helpers
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
|
|
273
|
+
function buildHeadersMap(
|
|
274
|
+
entries: readonly { key: string; value: string }[],
|
|
275
|
+
): Record<string, string> | undefined {
|
|
276
|
+
const map: Record<string, string> = {};
|
|
277
|
+
for (const entry of entries) {
|
|
278
|
+
if (entry.key.trim()) {
|
|
279
|
+
map[entry.key.trim()] = entry.value;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return Object.keys(map).length > 0 ? map : undefined;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function parseSpaceSeparated(input: string): string[] {
|
|
286
|
+
return input
|
|
287
|
+
.trim()
|
|
288
|
+
.split(/\s+/)
|
|
289
|
+
.filter(Boolean);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function parseCommaSeparated(input: string): string[] {
|
|
293
|
+
return input
|
|
294
|
+
.split(",")
|
|
295
|
+
.map((s) => s.trim())
|
|
296
|
+
.filter(Boolean);
|
|
297
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { EnvVarEntry, KeyValueEntry } from "../../resource-creation/types";
|
|
2
|
+
|
|
3
|
+
export type { EnvVarEntry, KeyValueEntry } from "../../resource-creation/types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Accumulated form state for the MCP server creation wizard.
|
|
7
|
+
*
|
|
8
|
+
* Each field corresponds to a property on `McpServerInput`. The wizard
|
|
9
|
+
* builds this incrementally across steps, then transforms it into
|
|
10
|
+
* a `McpServerInput` for submission on the final step.
|
|
11
|
+
*/
|
|
12
|
+
export interface McpServerWizardData {
|
|
13
|
+
// --- Step 1: Identity & Transport ---
|
|
14
|
+
/** MCP server display name (required). */
|
|
15
|
+
readonly name: string;
|
|
16
|
+
/** URL-friendly slug (auto-derived from name, editable). */
|
|
17
|
+
readonly slug: string;
|
|
18
|
+
/** Whether the slug has been manually edited by the user. */
|
|
19
|
+
readonly slugTouched: boolean;
|
|
20
|
+
/** Short description (optional). */
|
|
21
|
+
readonly description: string;
|
|
22
|
+
/** Icon URL (optional). */
|
|
23
|
+
readonly iconUrl: string;
|
|
24
|
+
/** Resource visibility. */
|
|
25
|
+
readonly visibility: "private" | "public";
|
|
26
|
+
/** Selected transport type. */
|
|
27
|
+
readonly transportType: "http" | "stdio";
|
|
28
|
+
/** HTTP server URL. */
|
|
29
|
+
readonly httpUrl: string;
|
|
30
|
+
/** HTTP custom headers. */
|
|
31
|
+
readonly httpHeaders: KeyValueEntry[];
|
|
32
|
+
/** HTTP request timeout in seconds (0 = default). */
|
|
33
|
+
readonly httpTimeoutSeconds: number;
|
|
34
|
+
/** Stdio command to execute. */
|
|
35
|
+
readonly stdioCommand: string;
|
|
36
|
+
/** Stdio command arguments (space-separated string, split on submit). */
|
|
37
|
+
readonly stdioArgs: string;
|
|
38
|
+
/** Stdio working directory. */
|
|
39
|
+
readonly stdioWorkingDir: string;
|
|
40
|
+
|
|
41
|
+
// --- Step 2: Environment & Auth ---
|
|
42
|
+
/** Environment variable declarations. */
|
|
43
|
+
readonly env: EnvVarEntry[];
|
|
44
|
+
/** Whether OAuth auth configuration is enabled. */
|
|
45
|
+
readonly authEnabled: boolean;
|
|
46
|
+
/** OAuth app reference — organization slug. */
|
|
47
|
+
readonly authOAuthAppOrg: string;
|
|
48
|
+
/** OAuth app reference — app slug. */
|
|
49
|
+
readonly authOAuthAppSlug: string;
|
|
50
|
+
/** Env var that receives the OAuth token. */
|
|
51
|
+
readonly authTargetEnvVar: string;
|
|
52
|
+
/** Token lifetime hint (e.g. "1h", "never"). */
|
|
53
|
+
readonly authTokenLifetimeHint: string;
|
|
54
|
+
/** OAuth scope hints (comma-separated, split on submit). */
|
|
55
|
+
readonly authScopeHints: string;
|
|
56
|
+
/** OAuth discovery URL. */
|
|
57
|
+
readonly authDiscoveryUrl: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Creates the initial empty wizard data. */
|
|
61
|
+
export function createInitialMcpServerWizardData(): McpServerWizardData {
|
|
62
|
+
return {
|
|
63
|
+
name: "",
|
|
64
|
+
slug: "",
|
|
65
|
+
slugTouched: false,
|
|
66
|
+
description: "",
|
|
67
|
+
iconUrl: "",
|
|
68
|
+
visibility: "private",
|
|
69
|
+
transportType: "http",
|
|
70
|
+
httpUrl: "",
|
|
71
|
+
httpHeaders: [],
|
|
72
|
+
httpTimeoutSeconds: 0,
|
|
73
|
+
stdioCommand: "",
|
|
74
|
+
stdioArgs: "",
|
|
75
|
+
stdioWorkingDir: "",
|
|
76
|
+
env: [],
|
|
77
|
+
authEnabled: false,
|
|
78
|
+
authOAuthAppOrg: "",
|
|
79
|
+
authOAuthAppSlug: "",
|
|
80
|
+
authTargetEnvVar: "",
|
|
81
|
+
authTokenLifetimeHint: "",
|
|
82
|
+
authScopeHints: "",
|
|
83
|
+
authDiscoveryUrl: "",
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import type { McpServerInput } from "@stigmer/sdk";
|
|
5
|
+
import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
6
|
+
import { useStigmer } from "../hooks";
|
|
7
|
+
import { toError } from "../internal/toError";
|
|
8
|
+
|
|
9
|
+
/** Return value of {@link useCreateMcpServer}. */
|
|
10
|
+
export interface UseCreateMcpServerReturn {
|
|
11
|
+
/**
|
|
12
|
+
* Submit a {@link McpServerInput} to create (or upsert) an MCP server blueprint.
|
|
13
|
+
*
|
|
14
|
+
* Uses `stigmer.mcpServer.apply()` — the idempotent upsert operation.
|
|
15
|
+
* Resolves with the server-created/updated `McpServer` proto including
|
|
16
|
+
* populated metadata (id, slug, audit timestamps).
|
|
17
|
+
*/
|
|
18
|
+
readonly create: (input: McpServerInput) => Promise<McpServer>;
|
|
19
|
+
/** `true` while the apply request is in flight. */
|
|
20
|
+
readonly isCreating: boolean;
|
|
21
|
+
/** Error from the last failed create, or `null` when healthy. */
|
|
22
|
+
readonly error: Error | null;
|
|
23
|
+
/** Reset `error` to `null`. */
|
|
24
|
+
readonly clearError: () => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Behavior hook that wraps `mcpServer.apply()` with loading and error state.
|
|
29
|
+
*
|
|
30
|
+
* Creates an MCP server blueprint from a {@link McpServerInput}. Uses
|
|
31
|
+
* `apply()` (upsert) rather than `create()` so re-submissions are
|
|
32
|
+
* idempotent — matching the CLI's `stigmer apply` semantics.
|
|
33
|
+
*
|
|
34
|
+
* Follows the established SDK mutation hook pattern: `isCreating` flag,
|
|
35
|
+
* `error` state, `clearError` reset, result returned from the promise
|
|
36
|
+
* (not stored in hook state).
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```tsx
|
|
40
|
+
* const { create, isCreating, error, clearError } = useCreateMcpServer();
|
|
41
|
+
*
|
|
42
|
+
* const server = await create({
|
|
43
|
+
* name: "github",
|
|
44
|
+
* org: "acme",
|
|
45
|
+
* http: { url: "https://mcp.github.com/sse" },
|
|
46
|
+
* env: { GITHUB_TOKEN: { isSecret: true, description: "GitHub PAT" } },
|
|
47
|
+
* });
|
|
48
|
+
* // server.metadata?.slug → "github"
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function useCreateMcpServer(): UseCreateMcpServerReturn {
|
|
52
|
+
const stigmer = useStigmer();
|
|
53
|
+
const [isCreating, setIsCreating] = useState(false);
|
|
54
|
+
const [error, setError] = useState<Error | null>(null);
|
|
55
|
+
|
|
56
|
+
const clearError = useCallback(() => setError(null), []);
|
|
57
|
+
|
|
58
|
+
const create = useCallback(
|
|
59
|
+
async (input: McpServerInput): Promise<McpServer> => {
|
|
60
|
+
setIsCreating(true);
|
|
61
|
+
setError(null);
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
return await stigmer.mcpServer.apply(input);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
setError(toError(err));
|
|
67
|
+
throw err;
|
|
68
|
+
} finally {
|
|
69
|
+
setIsCreating(false);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
[stigmer],
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
return { create, isCreating, error, clearError };
|
|
76
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
5
|
+
import type { McpServerInput } from "@stigmer/sdk";
|
|
6
|
+
import { useStigmer } from "../hooks";
|
|
7
|
+
import { toError } from "../internal/toError";
|
|
8
|
+
|
|
9
|
+
/** Return value of {@link useUpdateMcpServer}. */
|
|
10
|
+
export interface UseUpdateMcpServerReturn {
|
|
11
|
+
/** Update an existing MCP server with a full input. Returns the updated resource. */
|
|
12
|
+
readonly update: (input: McpServerInput) => Promise<McpServer>;
|
|
13
|
+
/** `true` while the update RPC is in flight. */
|
|
14
|
+
readonly isUpdating: boolean;
|
|
15
|
+
/** Error from the last failed update, or `null` when healthy. */
|
|
16
|
+
readonly error: Error | null;
|
|
17
|
+
/** Clear the error state. */
|
|
18
|
+
readonly clearError: () => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Mutation hook that updates an existing MCP Server resource.
|
|
23
|
+
*
|
|
24
|
+
* Wraps `stigmer.mcpServer.update(input)` with loading and error state.
|
|
25
|
+
* The caller must provide a **complete** `McpServerInput` — the backend
|
|
26
|
+
* performs full spec replacement. Use `mcpServerToInput()` to reconstruct
|
|
27
|
+
* the input from a fetched server, modify the desired field, and pass
|
|
28
|
+
* the result here.
|
|
29
|
+
*/
|
|
30
|
+
export function useUpdateMcpServer(): UseUpdateMcpServerReturn {
|
|
31
|
+
const stigmer = useStigmer();
|
|
32
|
+
const [isUpdating, setIsUpdating] = useState(false);
|
|
33
|
+
const [error, setError] = useState<Error | null>(null);
|
|
34
|
+
|
|
35
|
+
const clearError = useCallback(() => setError(null), []);
|
|
36
|
+
|
|
37
|
+
const update = useCallback(
|
|
38
|
+
async (input: McpServerInput): Promise<McpServer> => {
|
|
39
|
+
setIsUpdating(true);
|
|
40
|
+
setError(null);
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
return await stigmer.mcpServer.update(input);
|
|
44
|
+
} catch (err) {
|
|
45
|
+
setError(toError(err));
|
|
46
|
+
throw err;
|
|
47
|
+
} finally {
|
|
48
|
+
setIsUpdating(false);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
[stigmer],
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
return { update, isUpdating, error, clearError };
|
|
55
|
+
}
|
|
@@ -8,6 +8,8 @@ export interface ModelRegistryState {
|
|
|
8
8
|
readonly models: readonly ModelInfo[];
|
|
9
9
|
readonly isLoading: boolean;
|
|
10
10
|
readonly error: Error | null;
|
|
11
|
+
/** Retry fetching the model registry. No-op while a fetch is in flight. */
|
|
12
|
+
readonly refetch: () => void;
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
/**
|
|
@@ -21,6 +23,7 @@ export const ModelRegistryContext = createContext<ModelRegistryState>({
|
|
|
21
23
|
models: [],
|
|
22
24
|
isLoading: true,
|
|
23
25
|
error: null,
|
|
26
|
+
refetch: () => {},
|
|
24
27
|
});
|
|
25
28
|
|
|
26
29
|
/**
|
|
@@ -119,7 +119,7 @@ export function ModelSelector({
|
|
|
119
119
|
}
|
|
120
120
|
}, [initialHarness, isHarnessLocked]);
|
|
121
121
|
|
|
122
|
-
const { models, featured, defaultModel, getModel, byProvider } = useModelRegistry(
|
|
122
|
+
const { models, featured, defaultModel, getModel, byProvider, isLoading, error, refetch } = useModelRegistry(
|
|
123
123
|
{ harness: activeHarness },
|
|
124
124
|
);
|
|
125
125
|
|
|
@@ -393,7 +393,30 @@ export function ModelSelector({
|
|
|
393
393
|
aria-label="Available models"
|
|
394
394
|
className="max-h-72 overflow-y-auto p-1"
|
|
395
395
|
>
|
|
396
|
-
{visibleModels.length === 0 && (
|
|
396
|
+
{visibleModels.length === 0 && isLoading && (
|
|
397
|
+
<div className="flex items-center justify-center gap-2 px-2 py-3">
|
|
398
|
+
<div className="size-3 animate-spin rounded-full border border-muted border-t-primary" />
|
|
399
|
+
<span className="text-xs text-muted-foreground">Loading models…</span>
|
|
400
|
+
</div>
|
|
401
|
+
)}
|
|
402
|
+
|
|
403
|
+
{visibleModels.length === 0 && !isLoading && error != null && (
|
|
404
|
+
<div className="flex flex-col items-center gap-1.5 px-2 py-3">
|
|
405
|
+
<span className="text-xs text-muted-foreground">Failed to load models</span>
|
|
406
|
+
<button
|
|
407
|
+
type="button"
|
|
408
|
+
className={cn(
|
|
409
|
+
"rounded-md border border-border bg-background px-2.5 py-1 text-xs text-foreground",
|
|
410
|
+
"hover:bg-accent-hover transition-colors cursor-pointer",
|
|
411
|
+
)}
|
|
412
|
+
onClick={refetch}
|
|
413
|
+
>
|
|
414
|
+
Retry
|
|
415
|
+
</button>
|
|
416
|
+
</div>
|
|
417
|
+
)}
|
|
418
|
+
|
|
419
|
+
{visibleModels.length === 0 && !isLoading && error == null && (
|
|
397
420
|
<div className="px-2 py-3 text-center text-xs text-muted-foreground">
|
|
398
421
|
No models found
|
|
399
422
|
</div>
|
|
@@ -90,8 +90,10 @@ const TEST_REGISTRY_JSON = {
|
|
|
90
90
|
|
|
91
91
|
const TEST_MODELS: readonly ModelInfo[] = parseRegistryJson(TEST_REGISTRY_JSON);
|
|
92
92
|
|
|
93
|
+
const noopRefetch = () => {};
|
|
94
|
+
|
|
93
95
|
function createWrapper(models: readonly ModelInfo[] = TEST_MODELS) {
|
|
94
|
-
const state: ModelRegistryState = { models, isLoading: false, error: null };
|
|
96
|
+
const state: ModelRegistryState = { models, isLoading: false, error: null, refetch: noopRefetch };
|
|
95
97
|
return function Wrapper({ children }: { children: ReactNode }) {
|
|
96
98
|
return (
|
|
97
99
|
<ModelRegistryContext.Provider value={state}>
|
|
@@ -285,7 +287,7 @@ describe("useModelRegistry", () => {
|
|
|
285
287
|
|
|
286
288
|
describe("loading state", () => {
|
|
287
289
|
it("exposes isLoading from context", () => {
|
|
288
|
-
const loadingState: ModelRegistryState = { models: [], isLoading: true, error: null };
|
|
290
|
+
const loadingState: ModelRegistryState = { models: [], isLoading: true, error: null, refetch: noopRefetch };
|
|
289
291
|
const wrapper = ({ children }: { children: ReactNode }) => (
|
|
290
292
|
<ModelRegistryContext.Provider value={loadingState}>
|
|
291
293
|
{children}
|
|
@@ -298,7 +300,7 @@ describe("useModelRegistry", () => {
|
|
|
298
300
|
|
|
299
301
|
it("exposes error from context", () => {
|
|
300
302
|
const err = new Error("fetch failed");
|
|
301
|
-
const errorState: ModelRegistryState = { models: [], isLoading: false, error: err };
|
|
303
|
+
const errorState: ModelRegistryState = { models: [], isLoading: false, error: err, refetch: noopRefetch };
|
|
302
304
|
const wrapper = ({ children }: { children: ReactNode }) => (
|
|
303
305
|
<ModelRegistryContext.Provider value={errorState}>
|
|
304
306
|
{children}
|
|
@@ -55,6 +55,8 @@ export interface UseModelRegistryReturn {
|
|
|
55
55
|
readonly isLoading: boolean;
|
|
56
56
|
/** Non-null if the API fetch failed. Models will be empty in this case. */
|
|
57
57
|
readonly error: Error | null;
|
|
58
|
+
/** Retry fetching the model registry. No-op while a fetch is in flight. */
|
|
59
|
+
readonly refetch: () => void;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
/**
|
|
@@ -85,7 +87,7 @@ export interface UseModelRegistryReturn {
|
|
|
85
87
|
*/
|
|
86
88
|
export function useModelRegistry(options?: UseModelRegistryOptions): UseModelRegistryReturn {
|
|
87
89
|
const harness = options?.harness;
|
|
88
|
-
const { models: allModels, isLoading, error } = useModelRegistryContext();
|
|
90
|
+
const { models: allModels, isLoading, error, refetch } = useModelRegistryContext();
|
|
89
91
|
|
|
90
92
|
return useMemo(() => {
|
|
91
93
|
const isUnified = harness === undefined;
|
|
@@ -143,6 +145,7 @@ export function useModelRegistry(options?: UseModelRegistryOptions): UseModelReg
|
|
|
143
145
|
getByKey: (key: string) => byCompoundKey.get(key),
|
|
144
146
|
isLoading,
|
|
145
147
|
error,
|
|
148
|
+
refetch,
|
|
146
149
|
};
|
|
147
|
-
}, [harness, allModels, isLoading, error]);
|
|
150
|
+
}, [harness, allModels, isLoading, error, refetch]);
|
|
148
151
|
}
|