@stigmer/react 0.5.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/activity/group-activity.d.ts +13 -0
- package/activity/group-activity.d.ts.map +1 -0
- package/activity/group-activity.js +54 -0
- package/activity/group-activity.js.map +1 -0
- package/activity/index.d.ts +4 -0
- package/activity/index.d.ts.map +1 -0
- package/activity/index.js +3 -0
- package/activity/index.js.map +1 -0
- package/activity/types.d.ts +34 -0
- package/activity/types.d.ts.map +1 -0
- package/activity/types.js +2 -0
- package/activity/types.js.map +1 -0
- package/activity/useRecentActivity.d.ts +35 -0
- package/activity/useRecentActivity.d.ts.map +1 -0
- package/activity/useRecentActivity.js +73 -0
- package/activity/useRecentActivity.js.map +1 -0
- package/agent/AgentPicker.d.ts.map +1 -1
- package/agent/AgentPicker.js +4 -2
- package/agent/AgentPicker.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +1 -1
- package/billing/BillingSection.js.map +1 -1
- package/composer/ComposerToolbar.d.ts +5 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/ComposerToolbar.js +4 -3
- package/composer/ComposerToolbar.js.map +1 -1
- 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/InteractionModePicker.d.ts +40 -0
- package/composer/InteractionModePicker.d.ts.map +1 -0
- package/composer/InteractionModePicker.js +76 -0
- package/composer/InteractionModePicker.js.map +1 -0
- package/composer/SessionComposer.d.ts +64 -64
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +52 -11
- package/composer/SessionComposer.js.map +1 -1
- package/composer/__tests__/SessionComposer-memo.test.js +10 -5
- package/composer/__tests__/SessionComposer-memo.test.js.map +1 -1
- package/composer/index.d.ts +3 -1
- package/composer/index.d.ts.map +1 -1
- package/composer/index.js +1 -0
- package/composer/index.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts +19 -0
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -0
- package/dashboard/DashboardFailedRuns.js +35 -0
- package/dashboard/DashboardFailedRuns.js.map +1 -0
- package/dashboard/DashboardKPICards.d.ts +19 -0
- package/dashboard/DashboardKPICards.d.ts.map +1 -0
- package/dashboard/DashboardKPICards.js +80 -0
- package/dashboard/DashboardKPICards.js.map +1 -0
- package/dashboard/OperationalDashboard.d.ts +37 -0
- package/dashboard/OperationalDashboard.d.ts.map +1 -0
- package/dashboard/OperationalDashboard.js +48 -0
- package/dashboard/OperationalDashboard.js.map +1 -0
- package/dashboard/index.d.ts +8 -0
- package/dashboard/index.d.ts.map +1 -0
- package/dashboard/index.js +9 -0
- package/dashboard/index.js.map +1 -0
- package/dashboard/types.d.ts +49 -0
- package/dashboard/types.d.ts.map +1 -0
- package/dashboard/types.js +2 -0
- package/dashboard/types.js.map +1 -0
- package/dashboard/useAgentExecutionSummary.d.ts +33 -0
- package/dashboard/useAgentExecutionSummary.d.ts.map +1 -0
- package/dashboard/useAgentExecutionSummary.js +32 -0
- package/dashboard/useAgentExecutionSummary.js.map +1 -0
- package/dashboard/useDashboardFailedRuns.d.ts +18 -0
- package/dashboard/useDashboardFailedRuns.d.ts.map +1 -0
- package/dashboard/useDashboardFailedRuns.js +86 -0
- package/dashboard/useDashboardFailedRuns.js.map +1 -0
- package/dashboard/useDashboardSummary.d.ts +32 -0
- package/dashboard/useDashboardSummary.d.ts.map +1 -0
- package/dashboard/useDashboardSummary.js +67 -0
- package/dashboard/useDashboardSummary.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/execution/ContextGauge.d.ts +45 -0
- package/execution/ContextGauge.d.ts.map +1 -0
- package/execution/ContextGauge.js +82 -0
- package/execution/ContextGauge.js.map +1 -0
- package/execution/InteractionModeBadge.d.ts +24 -0
- package/execution/InteractionModeBadge.d.ts.map +1 -0
- package/execution/InteractionModeBadge.js +29 -0
- package/execution/InteractionModeBadge.js.map +1 -0
- package/execution/MessageThread.d.ts +33 -3
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -9
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanCompletionCard.d.ts +23 -0
- package/execution/PlanCompletionCard.d.ts.map +1 -0
- package/execution/PlanCompletionCard.js +28 -0
- package/execution/PlanCompletionCard.js.map +1 -0
- package/execution/SummarizationBadge.d.ts +30 -0
- package/execution/SummarizationBadge.d.ts.map +1 -0
- package/execution/SummarizationBadge.js +61 -0
- package/execution/SummarizationBadge.js.map +1 -0
- package/execution/SummarizationCard.d.ts +27 -0
- package/execution/SummarizationCard.d.ts.map +1 -0
- package/execution/SummarizationCard.js +47 -0
- package/execution/SummarizationCard.js.map +1 -0
- package/execution/__tests__/PlanCompletionCard.test.d.ts +2 -0
- package/execution/__tests__/PlanCompletionCard.test.d.ts.map +1 -0
- package/execution/__tests__/PlanCompletionCard.test.js +53 -0
- package/execution/__tests__/PlanCompletionCard.test.js.map +1 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts +2 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts.map +1 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.js +137 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.js.map +1 -0
- package/execution/__tests__/useContextWindow.test.d.ts +2 -0
- package/execution/__tests__/useContextWindow.test.d.ts.map +1 -0
- package/execution/__tests__/useContextWindow.test.js +121 -0
- package/execution/__tests__/useContextWindow.test.js.map +1 -0
- package/execution/index.d.ts +12 -0
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +6 -0
- package/execution/index.js.map +1 -1
- package/execution/useContextWindow.d.ts +71 -0
- package/execution/useContextWindow.d.ts.map +1 -0
- package/execution/useContextWindow.js +91 -0
- package/execution/useContextWindow.js.map +1 -0
- package/execution/useCreateAgentExecution.d.ts +9 -0
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js +15 -3
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/index.d.ts +11 -6
- package/index.d.ts.map +1 -1
- package/index.js +13 -3
- package/index.js.map +1 -1
- package/inline-edit/InlineEditKeyValue.d.ts +5 -1
- package/inline-edit/InlineEditKeyValue.d.ts.map +1 -1
- package/inline-edit/InlineEditKeyValue.js +3 -3
- package/inline-edit/InlineEditKeyValue.js.map +1 -1
- package/internal/VirtualizedThread.d.ts +2 -1
- package/internal/VirtualizedThread.d.ts.map +1 -1
- package/internal/VirtualizedThread.js +3 -2
- package/internal/VirtualizedThread.js.map +1 -1
- package/internal/store/index.d.ts +1 -0
- package/internal/store/index.d.ts.map +1 -1
- package/internal/store/index.js +1 -0
- package/internal/store/index.js.map +1 -1
- package/internal/store/workflow-execution-event-store.d.ts +92 -0
- package/internal/store/workflow-execution-event-store.d.ts.map +1 -0
- package/internal/store/workflow-execution-event-store.js +298 -0
- package/internal/store/workflow-execution-event-store.js.map +1 -0
- package/internal/useFetch.js +2 -2
- package/internal/useFetch.js.map +1 -1
- package/library/ScopeToggle.d.ts +13 -9
- package/library/ScopeToggle.d.ts.map +1 -1
- package/library/ScopeToggle.js +43 -22
- package/library/ScopeToggle.js.map +1 -1
- package/library/VisibilityToggle.js +14 -5
- package/library/VisibilityToggle.js.map +1 -1
- package/library/index.d.ts +1 -0
- package/library/index.d.ts.map +1 -1
- package/library/index.js +1 -0
- package/library/index.js.map +1 -1
- package/library/useExportResource.d.ts +3 -2
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +11 -6
- package/library/useExportResource.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +169 -58
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +4 -2
- package/mcp-server/McpServerPicker.js.map +1 -1
- 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 +16 -5
- package/provider.d.ts.map +1 -1
- package/provider.js +232 -22
- package/provider.js.map +1 -1
- package/resource-detail/ResourceDetailShell.d.ts +1 -1
- package/resource-detail/ResourceDetailShell.d.ts.map +1 -1
- package/resource-detail/ResourceDetailShell.js +6 -6
- package/resource-detail/ResourceDetailShell.js.map +1 -1
- package/resource-detail/types.d.ts +23 -0
- package/resource-detail/types.d.ts.map +1 -1
- package/resource-detail/useDeleteResource.d.ts +1 -1
- package/resource-detail/useDeleteResource.d.ts.map +1 -1
- package/resource-detail/useDeleteResource.js +5 -0
- package/resource-detail/useDeleteResource.js.map +1 -1
- package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -1
- package/resource-workbench/components/ResourceWorkbench.js +2 -1
- package/resource-workbench/components/ResourceWorkbench.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/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +1 -0
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +7 -0
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -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 +21 -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/session/useSessionUsage.d.ts.map +1 -1
- package/session/useSessionUsage.js +65 -4
- package/session/useSessionUsage.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +1 -4
- package/settings/UsageSection.js.map +1 -1
- package/skill/SkillPicker.d.ts.map +1 -1
- package/skill/SkillPicker.js +4 -2
- package/skill/SkillPicker.js.map +1 -1
- package/src/activity/group-activity.ts +65 -0
- package/src/activity/index.ts +13 -0
- package/src/activity/types.ts +35 -0
- package/src/activity/useRecentActivity.ts +131 -0
- package/src/agent/AgentPicker.tsx +6 -1
- package/src/billing/BillingSection.tsx +3 -2
- package/src/composer/ComposerToolbar.tsx +19 -1
- package/src/composer/ContextChip.tsx +20 -11
- package/src/composer/InteractionModePicker.tsx +189 -0
- package/src/composer/SessionComposer.tsx +137 -11
- package/src/composer/__tests__/SessionComposer-memo.test.ts +11 -6
- package/src/composer/index.ts +7 -0
- package/src/dashboard/DashboardFailedRuns.tsx +109 -0
- package/src/dashboard/DashboardKPICards.tsx +128 -0
- package/src/dashboard/OperationalDashboard.tsx +96 -0
- package/src/dashboard/index.ts +37 -0
- package/src/dashboard/types.ts +50 -0
- package/src/dashboard/useAgentExecutionSummary.ts +71 -0
- package/src/dashboard/useDashboardFailedRuns.ts +122 -0
- package/src/dashboard/useDashboardSummary.ts +109 -0
- package/src/environment/usePersonalEnvironment.ts +1 -0
- package/src/execution/ContextGauge.tsx +243 -0
- package/src/execution/InteractionModeBadge.tsx +70 -0
- package/src/execution/MessageThread.tsx +88 -3
- package/src/execution/PlanCompletionCard.tsx +105 -0
- package/src/execution/SummarizationBadge.tsx +188 -0
- package/src/execution/SummarizationCard.tsx +126 -0
- package/src/execution/__tests__/PlanCompletionCard.test.tsx +67 -0
- package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +197 -0
- package/src/execution/__tests__/useContextWindow.test.ts +167 -0
- package/src/execution/index.ts +22 -0
- package/src/execution/useContextWindow.ts +148 -0
- package/src/execution/useCreateAgentExecution.ts +26 -3
- package/src/index.ts +227 -0
- package/src/inline-edit/InlineEditKeyValue.tsx +23 -0
- package/src/internal/VirtualizedThread.tsx +4 -1
- package/src/internal/store/index.ts +6 -0
- package/src/internal/store/workflow-execution-event-store.ts +391 -0
- package/src/internal/useFetch.ts +2 -2
- package/src/library/ScopeToggle.tsx +88 -20
- package/src/library/VisibilityToggle.tsx +54 -13
- package/src/library/index.ts +2 -0
- package/src/library/useExportResource.ts +12 -9
- package/src/mcp-server/McpServerDetailView.tsx +509 -203
- package/src/mcp-server/McpServerPicker.tsx +6 -1
- 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 +264 -26
- package/src/resource-detail/ResourceDetailShell.tsx +21 -4
- package/src/resource-detail/types.ts +25 -0
- package/src/resource-detail/useDeleteResource.ts +6 -1
- package/src/resource-workbench/components/ResourceWorkbench.tsx +4 -0
- 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/useNewSessionFlow.ts +1 -0
- package/src/session/useSessionConversation.ts +13 -64
- package/src/session/useSessionPageFlow.ts +29 -7
- package/src/session/useSessionSearch.ts +149 -0
- package/src/session/useSessionUsage.ts +72 -4
- package/src/settings/UsageSection.tsx +1 -9
- package/src/skill/SkillPicker.tsx +6 -1
- package/src/workflow/ApprovalFormBuilder.tsx +1017 -0
- package/src/workflow/BranchConditionBuilder.tsx +451 -0
- package/src/workflow/CanvasActionsContext.ts +12 -0
- package/src/workflow/CanvasContextMenu.tsx +364 -0
- package/src/workflow/CanvasTaskNode.tsx +372 -0
- package/src/workflow/CanvasTransitionEdge.tsx +122 -0
- package/src/workflow/CostByWorkflowChart.tsx +120 -0
- package/src/workflow/ExecutionSummaryWidget.tsx +194 -0
- package/src/workflow/ExecutionTrendChart.tsx +157 -0
- package/src/workflow/FailedRunsWidget.tsx +109 -0
- package/src/workflow/PendingApprovalsWidget.tsx +115 -0
- package/src/workflow/TaskConfigForm.tsx +618 -0
- package/src/workflow/TaskKindRegistryContext.ts +36 -0
- package/src/workflow/TaskPickerPopover.tsx +326 -0
- package/src/workflow/WorkflowArchitectDialog.tsx +505 -0
- package/src/workflow/WorkflowCanvasEditor.tsx +651 -0
- package/src/workflow/WorkflowCanvasInner.tsx +160 -0
- package/src/workflow/WorkflowDashboard.tsx +124 -0
- package/src/workflow/WorkflowDetailView.tsx +527 -0
- package/src/workflow/WorkflowEditorView.tsx +547 -0
- package/src/workflow/WorkflowExecutionApprovalCard.tsx +129 -0
- package/src/workflow/WorkflowExecutionArtifactPanel.tsx +112 -0
- package/src/workflow/WorkflowExecutionCostPanel.tsx +131 -0
- package/src/workflow/WorkflowExecutionHeader.tsx +194 -0
- package/src/workflow/WorkflowExecutionPhaseBadge.tsx +188 -0
- package/src/workflow/WorkflowExecutionTaskPanel.tsx +135 -0
- package/src/workflow/WorkflowExecutionTimeline.tsx +118 -0
- package/src/workflow/WorkflowExecutionTimelineEvent.tsx +488 -0
- package/src/workflow/WorkflowExecutionViewer.tsx +248 -0
- package/src/workflow/WorkflowInspectorPanel.tsx +568 -0
- package/src/workflow/WorkflowRefinePanel.tsx +411 -0
- package/src/workflow/WorkflowRepairCard.tsx +433 -0
- package/src/workflow/WorkflowRunDialog.tsx +220 -0
- package/src/workflow/WorkflowRunForm.tsx +245 -0
- package/src/workflow/WorkflowTaskList.tsx +177 -0
- package/src/workflow/WorkflowTaskPalette.tsx +248 -0
- package/src/workflow/WorkflowTopologyGraph.tsx +250 -0
- package/src/workflow/WorkflowYamlEditor.tsx +271 -0
- package/src/workflow/__tests__/starter-workflow-yaml.test.ts +57 -0
- package/src/workflow/canvas-constants.ts +87 -0
- package/src/workflow/canvas-icons.tsx +36 -0
- package/src/workflow/extract-workflow-yaml.ts +87 -0
- package/src/workflow/graph-commands.ts +675 -0
- package/src/workflow/index.ts +375 -0
- package/src/workflow/serialize-workflow-yaml.ts +546 -0
- package/src/workflow/starter-workflow-yaml.ts +29 -0
- package/src/workflow/types.ts +99 -0
- package/src/workflow/useCanvasKeyboardShortcuts.ts +134 -0
- package/src/workflow/useDiagnoseExecutionFlow.ts +378 -0
- package/src/workflow/useGraphHistory.ts +138 -0
- package/src/workflow/usePendingApprovals.ts +89 -0
- package/src/workflow/useRefineWorkflowFlow.ts +321 -0
- package/src/workflow/useResolveAgentExecutionSession.ts +57 -0
- package/src/workflow/useRunWorkflowFlow.ts +235 -0
- package/src/workflow/useTaskKindRegistry.ts +135 -0
- package/src/workflow/useWorkflow.ts +78 -0
- package/src/workflow/useWorkflowArchitectFlow.ts +303 -0
- package/src/workflow/useWorkflowCanvas.ts +882 -0
- package/src/workflow/useWorkflowCount.ts +66 -0
- package/src/workflow/useWorkflowDashboardSummary.ts +71 -0
- package/src/workflow/useWorkflowEditor.ts +106 -0
- package/src/workflow/useWorkflowExecution.ts +67 -0
- package/src/workflow/useWorkflowExecutionActions.ts +179 -0
- package/src/workflow/useWorkflowExecutionArtifacts.ts +57 -0
- package/src/workflow/useWorkflowExecutionEventLog.ts +111 -0
- package/src/workflow/useWorkflowExecutionEventStream.ts +244 -0
- package/src/workflow/useWorkflowExecutionList.ts +121 -0
- package/src/workflow/useWorkflowInstances.ts +62 -0
- package/src/workflow/useWorkflowList.ts +79 -0
- package/src/workflow/useWorkflowSave.ts +84 -0
- package/src/workflow/useWorkflowTopology.ts +229 -0
- package/src/workflow/useWorkflowValidation.ts +329 -0
- package/src/workflow/useWorkflowYaml.ts +49 -0
- package/src/workflow/workflow-graph-conversions.ts +796 -0
- package/src/workflow/workflow-graph-model.ts +83 -0
- package/src/workflow/workflow-yaml-diff.ts +132 -0
- package/styles.css +1 -1
- package/workflow/ApprovalFormBuilder.d.ts +24 -0
- package/workflow/ApprovalFormBuilder.d.ts.map +1 -0
- package/workflow/ApprovalFormBuilder.js +347 -0
- package/workflow/ApprovalFormBuilder.js.map +1 -0
- package/workflow/BranchConditionBuilder.d.ts +29 -0
- package/workflow/BranchConditionBuilder.d.ts.map +1 -0
- package/workflow/BranchConditionBuilder.js +170 -0
- package/workflow/BranchConditionBuilder.js.map +1 -0
- package/workflow/CanvasActionsContext.d.ts +8 -0
- package/workflow/CanvasActionsContext.d.ts.map +1 -0
- package/workflow/CanvasActionsContext.js +4 -0
- package/workflow/CanvasActionsContext.js.map +1 -0
- package/workflow/CanvasContextMenu.d.ts +59 -0
- package/workflow/CanvasContextMenu.d.ts.map +1 -0
- package/workflow/CanvasContextMenu.js +98 -0
- package/workflow/CanvasContextMenu.js.map +1 -0
- package/workflow/CanvasTaskNode.d.ts +21 -0
- package/workflow/CanvasTaskNode.d.ts.map +1 -0
- package/workflow/CanvasTaskNode.js +125 -0
- package/workflow/CanvasTaskNode.js.map +1 -0
- package/workflow/CanvasTransitionEdge.d.ts +24 -0
- package/workflow/CanvasTransitionEdge.d.ts.map +1 -0
- package/workflow/CanvasTransitionEdge.js +50 -0
- package/workflow/CanvasTransitionEdge.js.map +1 -0
- package/workflow/CostByWorkflowChart.d.ts +15 -0
- package/workflow/CostByWorkflowChart.d.ts.map +1 -0
- package/workflow/CostByWorkflowChart.js +45 -0
- package/workflow/CostByWorkflowChart.js.map +1 -0
- package/workflow/ExecutionSummaryWidget.d.ts +16 -0
- package/workflow/ExecutionSummaryWidget.d.ts.map +1 -0
- package/workflow/ExecutionSummaryWidget.js +93 -0
- package/workflow/ExecutionSummaryWidget.js.map +1 -0
- package/workflow/ExecutionTrendChart.d.ts +14 -0
- package/workflow/ExecutionTrendChart.d.ts.map +1 -0
- package/workflow/ExecutionTrendChart.js +67 -0
- package/workflow/ExecutionTrendChart.js.map +1 -0
- package/workflow/FailedRunsWidget.d.ts +19 -0
- package/workflow/FailedRunsWidget.d.ts.map +1 -0
- package/workflow/FailedRunsWidget.js +37 -0
- package/workflow/FailedRunsWidget.js.map +1 -0
- package/workflow/PendingApprovalsWidget.d.ts +19 -0
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -0
- package/workflow/PendingApprovalsWidget.js +35 -0
- package/workflow/PendingApprovalsWidget.js.map +1 -0
- package/workflow/TaskConfigForm.d.ts +29 -0
- package/workflow/TaskConfigForm.d.ts.map +1 -0
- package/workflow/TaskConfigForm.js +230 -0
- package/workflow/TaskConfigForm.js.map +1 -0
- package/workflow/TaskKindRegistryContext.d.ts +24 -0
- package/workflow/TaskKindRegistryContext.d.ts.map +1 -0
- package/workflow/TaskKindRegistryContext.js +25 -0
- package/workflow/TaskKindRegistryContext.js.map +1 -0
- package/workflow/TaskPickerPopover.d.ts +33 -0
- package/workflow/TaskPickerPopover.d.ts.map +1 -0
- package/workflow/TaskPickerPopover.js +110 -0
- package/workflow/TaskPickerPopover.js.map +1 -0
- package/workflow/WorkflowArchitectDialog.d.ts +48 -0
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -0
- package/workflow/WorkflowArchitectDialog.js +129 -0
- package/workflow/WorkflowArchitectDialog.js.map +1 -0
- package/workflow/WorkflowCanvasEditor.d.ts +38 -0
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -0
- package/workflow/WorkflowCanvasEditor.js +287 -0
- package/workflow/WorkflowCanvasEditor.js.map +1 -0
- package/workflow/WorkflowCanvasInner.d.ts +32 -0
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -0
- package/workflow/WorkflowCanvasInner.js +49 -0
- package/workflow/WorkflowCanvasInner.js.map +1 -0
- package/workflow/WorkflowDashboard.d.ts +35 -0
- package/workflow/WorkflowDashboard.d.ts.map +1 -0
- package/workflow/WorkflowDashboard.js +59 -0
- package/workflow/WorkflowDashboard.js.map +1 -0
- package/workflow/WorkflowDetailView.d.ts +63 -0
- package/workflow/WorkflowDetailView.d.ts.map +1 -0
- package/workflow/WorkflowDetailView.js +202 -0
- package/workflow/WorkflowDetailView.js.map +1 -0
- package/workflow/WorkflowEditorView.d.ts +43 -0
- package/workflow/WorkflowEditorView.d.ts.map +1 -0
- package/workflow/WorkflowEditorView.js +165 -0
- package/workflow/WorkflowEditorView.js.map +1 -0
- package/workflow/WorkflowExecutionApprovalCard.d.ts +27 -0
- package/workflow/WorkflowExecutionApprovalCard.d.ts.map +1 -0
- package/workflow/WorkflowExecutionApprovalCard.js +32 -0
- package/workflow/WorkflowExecutionApprovalCard.js.map +1 -0
- package/workflow/WorkflowExecutionArtifactPanel.d.ts +15 -0
- package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +1 -0
- package/workflow/WorkflowExecutionArtifactPanel.js +53 -0
- package/workflow/WorkflowExecutionArtifactPanel.js.map +1 -0
- package/workflow/WorkflowExecutionCostPanel.d.ts +18 -0
- package/workflow/WorkflowExecutionCostPanel.d.ts.map +1 -0
- package/workflow/WorkflowExecutionCostPanel.js +44 -0
- package/workflow/WorkflowExecutionCostPanel.js.map +1 -0
- package/workflow/WorkflowExecutionHeader.d.ts +26 -0
- package/workflow/WorkflowExecutionHeader.d.ts.map +1 -0
- package/workflow/WorkflowExecutionHeader.js +68 -0
- package/workflow/WorkflowExecutionHeader.js.map +1 -0
- package/workflow/WorkflowExecutionPhaseBadge.d.ts +23 -0
- package/workflow/WorkflowExecutionPhaseBadge.d.ts.map +1 -0
- package/workflow/WorkflowExecutionPhaseBadge.js +99 -0
- package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -0
- package/workflow/WorkflowExecutionTaskPanel.d.ts +24 -0
- package/workflow/WorkflowExecutionTaskPanel.d.ts.map +1 -0
- package/workflow/WorkflowExecutionTaskPanel.js +59 -0
- package/workflow/WorkflowExecutionTaskPanel.js.map +1 -0
- package/workflow/WorkflowExecutionTimeline.d.ts +27 -0
- package/workflow/WorkflowExecutionTimeline.d.ts.map +1 -0
- package/workflow/WorkflowExecutionTimeline.js +51 -0
- package/workflow/WorkflowExecutionTimeline.js.map +1 -0
- package/workflow/WorkflowExecutionTimelineEvent.d.ts +18 -0
- package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +1 -0
- package/workflow/WorkflowExecutionTimelineEvent.js +210 -0
- package/workflow/WorkflowExecutionTimelineEvent.js.map +1 -0
- package/workflow/WorkflowExecutionViewer.d.ts +45 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -0
- package/workflow/WorkflowExecutionViewer.js +75 -0
- package/workflow/WorkflowExecutionViewer.js.map +1 -0
- package/workflow/WorkflowInspectorPanel.d.ts +46 -0
- package/workflow/WorkflowInspectorPanel.d.ts.map +1 -0
- package/workflow/WorkflowInspectorPanel.js +152 -0
- package/workflow/WorkflowInspectorPanel.js.map +1 -0
- package/workflow/WorkflowRefinePanel.d.ts +30 -0
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -0
- package/workflow/WorkflowRefinePanel.js +107 -0
- package/workflow/WorkflowRefinePanel.js.map +1 -0
- package/workflow/WorkflowRepairCard.d.ts +35 -0
- package/workflow/WorkflowRepairCard.d.ts.map +1 -0
- package/workflow/WorkflowRepairCard.js +113 -0
- package/workflow/WorkflowRepairCard.js.map +1 -0
- package/workflow/WorkflowRunDialog.d.ts +51 -0
- package/workflow/WorkflowRunDialog.d.ts.map +1 -0
- package/workflow/WorkflowRunDialog.js +75 -0
- package/workflow/WorkflowRunDialog.js.map +1 -0
- package/workflow/WorkflowRunForm.d.ts +62 -0
- package/workflow/WorkflowRunForm.d.ts.map +1 -0
- package/workflow/WorkflowRunForm.js +64 -0
- package/workflow/WorkflowRunForm.js.map +1 -0
- package/workflow/WorkflowTaskList.d.ts +25 -0
- package/workflow/WorkflowTaskList.d.ts.map +1 -0
- package/workflow/WorkflowTaskList.js +89 -0
- package/workflow/WorkflowTaskList.js.map +1 -0
- package/workflow/WorkflowTaskPalette.d.ts +22 -0
- package/workflow/WorkflowTaskPalette.d.ts.map +1 -0
- package/workflow/WorkflowTaskPalette.js +83 -0
- package/workflow/WorkflowTaskPalette.js.map +1 -0
- package/workflow/WorkflowTopologyGraph.d.ts +22 -0
- package/workflow/WorkflowTopologyGraph.d.ts.map +1 -0
- package/workflow/WorkflowTopologyGraph.js +123 -0
- package/workflow/WorkflowTopologyGraph.js.map +1 -0
- package/workflow/WorkflowYamlEditor.d.ts +43 -0
- package/workflow/WorkflowYamlEditor.d.ts.map +1 -0
- package/workflow/WorkflowYamlEditor.js +215 -0
- package/workflow/WorkflowYamlEditor.js.map +1 -0
- package/workflow/__tests__/starter-workflow-yaml.test.d.ts +2 -0
- package/workflow/__tests__/starter-workflow-yaml.test.d.ts.map +1 -0
- package/workflow/__tests__/starter-workflow-yaml.test.js +44 -0
- package/workflow/__tests__/starter-workflow-yaml.test.js.map +1 -0
- package/workflow/canvas-constants.d.ts +56 -0
- package/workflow/canvas-constants.d.ts.map +1 -0
- package/workflow/canvas-constants.js +74 -0
- package/workflow/canvas-constants.js.map +1 -0
- package/workflow/canvas-icons.d.ts +13 -0
- package/workflow/canvas-icons.d.ts.map +1 -0
- package/workflow/canvas-icons.js +21 -0
- package/workflow/canvas-icons.js.map +1 -0
- package/workflow/extract-workflow-yaml.d.ts +22 -0
- package/workflow/extract-workflow-yaml.d.ts.map +1 -0
- package/workflow/extract-workflow-yaml.js +63 -0
- package/workflow/extract-workflow-yaml.js.map +1 -0
- package/workflow/graph-commands.d.ts +209 -0
- package/workflow/graph-commands.d.ts.map +1 -0
- package/workflow/graph-commands.js +516 -0
- package/workflow/graph-commands.js.map +1 -0
- package/workflow/index.d.ts +66 -0
- package/workflow/index.d.ts.map +1 -0
- package/workflow/index.js +88 -0
- package/workflow/index.js.map +1 -0
- package/workflow/serialize-workflow-yaml.d.ts +39 -0
- package/workflow/serialize-workflow-yaml.d.ts.map +1 -0
- package/workflow/serialize-workflow-yaml.js +413 -0
- package/workflow/serialize-workflow-yaml.js.map +1 -0
- package/workflow/starter-workflow-yaml.d.ts +12 -0
- package/workflow/starter-workflow-yaml.d.ts.map +1 -0
- package/workflow/starter-workflow-yaml.js +30 -0
- package/workflow/starter-workflow-yaml.js.map +1 -0
- package/workflow/types.d.ts +80 -0
- package/workflow/types.d.ts.map +1 -0
- package/workflow/types.js +2 -0
- package/workflow/types.js.map +1 -0
- package/workflow/useCanvasKeyboardShortcuts.d.ts +34 -0
- package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -0
- package/workflow/useCanvasKeyboardShortcuts.js +108 -0
- package/workflow/useCanvasKeyboardShortcuts.js.map +1 -0
- package/workflow/useDiagnoseExecutionFlow.d.ts +87 -0
- package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -0
- package/workflow/useDiagnoseExecutionFlow.js +257 -0
- package/workflow/useDiagnoseExecutionFlow.js.map +1 -0
- package/workflow/useGraphHistory.d.ts +28 -0
- package/workflow/useGraphHistory.d.ts.map +1 -0
- package/workflow/useGraphHistory.js +106 -0
- package/workflow/useGraphHistory.js.map +1 -0
- package/workflow/usePendingApprovals.d.ts +35 -0
- package/workflow/usePendingApprovals.d.ts.map +1 -0
- package/workflow/usePendingApprovals.js +50 -0
- package/workflow/usePendingApprovals.js.map +1 -0
- package/workflow/useRefineWorkflowFlow.d.ts +75 -0
- package/workflow/useRefineWorkflowFlow.d.ts.map +1 -0
- package/workflow/useRefineWorkflowFlow.js +216 -0
- package/workflow/useRefineWorkflowFlow.js.map +1 -0
- package/workflow/useResolveAgentExecutionSession.d.ts +33 -0
- package/workflow/useResolveAgentExecutionSession.d.ts.map +1 -0
- package/workflow/useResolveAgentExecutionSession.js +37 -0
- package/workflow/useResolveAgentExecutionSession.js.map +1 -0
- package/workflow/useRunWorkflowFlow.d.ts +82 -0
- package/workflow/useRunWorkflowFlow.d.ts.map +1 -0
- package/workflow/useRunWorkflowFlow.js +145 -0
- package/workflow/useRunWorkflowFlow.js.map +1 -0
- package/workflow/useTaskKindRegistry.d.ts +96 -0
- package/workflow/useTaskKindRegistry.d.ts.map +1 -0
- package/workflow/useTaskKindRegistry.js +75 -0
- package/workflow/useTaskKindRegistry.js.map +1 -0
- package/workflow/useWorkflow.d.ts +47 -0
- package/workflow/useWorkflow.d.ts.map +1 -0
- package/workflow/useWorkflow.js +53 -0
- package/workflow/useWorkflow.js.map +1 -0
- package/workflow/useWorkflowArchitectFlow.d.ts +96 -0
- package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -0
- package/workflow/useWorkflowArchitectFlow.js +179 -0
- package/workflow/useWorkflowArchitectFlow.js.map +1 -0
- package/workflow/useWorkflowCanvas.d.ts +66 -0
- package/workflow/useWorkflowCanvas.d.ts.map +1 -0
- package/workflow/useWorkflowCanvas.js +628 -0
- package/workflow/useWorkflowCanvas.js.map +1 -0
- package/workflow/useWorkflowCount.d.ts +47 -0
- package/workflow/useWorkflowCount.d.ts.map +1 -0
- package/workflow/useWorkflowCount.js +26 -0
- package/workflow/useWorkflowCount.js.map +1 -0
- package/workflow/useWorkflowDashboardSummary.d.ts +34 -0
- package/workflow/useWorkflowDashboardSummary.d.ts.map +1 -0
- package/workflow/useWorkflowDashboardSummary.js +33 -0
- package/workflow/useWorkflowDashboardSummary.js.map +1 -0
- package/workflow/useWorkflowEditor.d.ts +45 -0
- package/workflow/useWorkflowEditor.d.ts.map +1 -0
- package/workflow/useWorkflowEditor.js +52 -0
- package/workflow/useWorkflowEditor.js.map +1 -0
- package/workflow/useWorkflowExecution.d.ts +37 -0
- package/workflow/useWorkflowExecution.d.ts.map +1 -0
- package/workflow/useWorkflowExecution.js +43 -0
- package/workflow/useWorkflowExecution.js.map +1 -0
- package/workflow/useWorkflowExecutionActions.d.ts +41 -0
- package/workflow/useWorkflowExecutionActions.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionActions.js +86 -0
- package/workflow/useWorkflowExecutionActions.js.map +1 -0
- package/workflow/useWorkflowExecutionArtifacts.d.ts +26 -0
- package/workflow/useWorkflowExecutionArtifacts.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionArtifacts.js +29 -0
- package/workflow/useWorkflowExecutionArtifacts.js.map +1 -0
- package/workflow/useWorkflowExecutionEventLog.d.ts +47 -0
- package/workflow/useWorkflowExecutionEventLog.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionEventLog.js +59 -0
- package/workflow/useWorkflowExecutionEventLog.js.map +1 -0
- package/workflow/useWorkflowExecutionEventStream.d.ts +61 -0
- package/workflow/useWorkflowExecutionEventStream.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionEventStream.js +161 -0
- package/workflow/useWorkflowExecutionEventStream.js.map +1 -0
- package/workflow/useWorkflowExecutionList.d.ts +49 -0
- package/workflow/useWorkflowExecutionList.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionList.js +65 -0
- package/workflow/useWorkflowExecutionList.js.map +1 -0
- package/workflow/useWorkflowInstances.d.ts +30 -0
- package/workflow/useWorkflowInstances.d.ts.map +1 -0
- package/workflow/useWorkflowInstances.js +33 -0
- package/workflow/useWorkflowInstances.js.map +1 -0
- package/workflow/useWorkflowList.d.ts +57 -0
- package/workflow/useWorkflowList.d.ts.map +1 -0
- package/workflow/useWorkflowList.js +29 -0
- package/workflow/useWorkflowList.js.map +1 -0
- package/workflow/useWorkflowSave.d.ts +25 -0
- package/workflow/useWorkflowSave.d.ts.map +1 -0
- package/workflow/useWorkflowSave.js +61 -0
- package/workflow/useWorkflowSave.js.map +1 -0
- package/workflow/useWorkflowTopology.d.ts +40 -0
- package/workflow/useWorkflowTopology.d.ts.map +1 -0
- package/workflow/useWorkflowTopology.js +163 -0
- package/workflow/useWorkflowTopology.js.map +1 -0
- package/workflow/useWorkflowValidation.d.ts +27 -0
- package/workflow/useWorkflowValidation.d.ts.map +1 -0
- package/workflow/useWorkflowValidation.js +253 -0
- package/workflow/useWorkflowValidation.js.map +1 -0
- package/workflow/useWorkflowYaml.d.ts +26 -0
- package/workflow/useWorkflowYaml.d.ts.map +1 -0
- package/workflow/useWorkflowYaml.js +26 -0
- package/workflow/useWorkflowYaml.js.map +1 -0
- package/workflow/workflow-graph-conversions.d.ts +70 -0
- package/workflow/workflow-graph-conversions.d.ts.map +1 -0
- package/workflow/workflow-graph-conversions.js +634 -0
- package/workflow/workflow-graph-conversions.js.map +1 -0
- package/workflow/workflow-graph-model.d.ts +83 -0
- package/workflow/workflow-graph-model.d.ts.map +1 -0
- package/workflow/workflow-graph-model.js +5 -0
- package/workflow/workflow-graph-model.js.map +1 -0
- package/workflow/workflow-yaml-diff.d.ts +24 -0
- package/workflow/workflow-yaml-diff.d.ts.map +1 -0
- package/workflow/workflow-yaml-diff.js +96 -0
- package/workflow/workflow-yaml-diff.js.map +1 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
startTransition,
|
|
5
|
+
useCallback,
|
|
6
|
+
useEffect,
|
|
7
|
+
useRef,
|
|
8
|
+
useState,
|
|
9
|
+
useSyncExternalStore,
|
|
10
|
+
} from "react";
|
|
11
|
+
import type { WorkflowExecutionEvent } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
|
|
12
|
+
import type { WorkflowEventType } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
|
|
13
|
+
import { create } from "@bufbuild/protobuf";
|
|
14
|
+
import {
|
|
15
|
+
GetEventLogRequestSchema,
|
|
16
|
+
SubscribeEventsRequestSchema,
|
|
17
|
+
} from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
|
|
18
|
+
import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
|
|
19
|
+
import { useStigmer } from "../hooks";
|
|
20
|
+
import { toError } from "../internal/toError";
|
|
21
|
+
import {
|
|
22
|
+
WorkflowExecutionEventStore,
|
|
23
|
+
type WorkflowEventStreamState,
|
|
24
|
+
type DerivedTaskState,
|
|
25
|
+
type DerivedCostSummary,
|
|
26
|
+
} from "../internal/store";
|
|
27
|
+
|
|
28
|
+
/** Options for {@link useWorkflowExecutionEventStream}. */
|
|
29
|
+
export interface UseWorkflowExecutionEventStreamOptions {
|
|
30
|
+
/** Filter to specific event types for the subscription. */
|
|
31
|
+
readonly eventTypes?: readonly WorkflowEventType[];
|
|
32
|
+
/**
|
|
33
|
+
* External store instance. When provided, the hook writes to this
|
|
34
|
+
* store instead of creating an internal one. Useful for sharing
|
|
35
|
+
* event state across multiple components.
|
|
36
|
+
*/
|
|
37
|
+
readonly store?: WorkflowExecutionEventStore;
|
|
38
|
+
/**
|
|
39
|
+
* The current execution phase. When provided, the hook uses this to
|
|
40
|
+
* decide between live streaming (non-terminal) and batch loading
|
|
41
|
+
* (terminal). When omitted, defaults to live streaming.
|
|
42
|
+
*/
|
|
43
|
+
readonly executionPhase?: ExecutionPhase;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Return value of {@link useWorkflowExecutionEventStream}. */
|
|
47
|
+
export interface UseWorkflowExecutionEventStreamReturn {
|
|
48
|
+
/** All accumulated events, ordered by sequence_number ascending. */
|
|
49
|
+
readonly events: readonly WorkflowExecutionEvent[];
|
|
50
|
+
/** Derived task states from the event log. */
|
|
51
|
+
readonly taskStates: ReadonlyMap<string, DerivedTaskState>;
|
|
52
|
+
/** Derived cost/budget summary from the latest checkpoint or aggregation. */
|
|
53
|
+
readonly costSummary: DerivedCostSummary;
|
|
54
|
+
/** Stream lifecycle state. */
|
|
55
|
+
readonly streamState: WorkflowEventStreamState;
|
|
56
|
+
/** Total tasks declared in the execution_started event. */
|
|
57
|
+
readonly totalTasks: number;
|
|
58
|
+
/** `true` while receiving live events. */
|
|
59
|
+
readonly isStreaming: boolean;
|
|
60
|
+
/** `true` while connecting to the event stream. */
|
|
61
|
+
readonly isConnecting: boolean;
|
|
62
|
+
/** Error from the last failed stream attempt, or `null`. */
|
|
63
|
+
readonly error: Error | null;
|
|
64
|
+
/** Re-establish the stream subscription. */
|
|
65
|
+
readonly reconnect: () => void;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const TERMINAL_PHASES = new Set<ExecutionPhase>([
|
|
69
|
+
ExecutionPhase.EXECUTION_COMPLETED,
|
|
70
|
+
ExecutionPhase.EXECUTION_FAILED,
|
|
71
|
+
ExecutionPhase.EXECUTION_CANCELLED,
|
|
72
|
+
ExecutionPhase.EXECUTION_TERMINATED,
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Behavior hook that manages a live event stream subscription for a
|
|
77
|
+
* workflow execution, or batch-loads events for completed executions.
|
|
78
|
+
*
|
|
79
|
+
* Internally maintains a {@link WorkflowExecutionEventStore} and
|
|
80
|
+
* exposes its state via `useSyncExternalStore` for efficient React
|
|
81
|
+
* integration.
|
|
82
|
+
*
|
|
83
|
+
* For running executions: subscribes via `subscribeEvents` with
|
|
84
|
+
* replay+live-tail. On disconnect, reconnects from the last received
|
|
85
|
+
* sequence number.
|
|
86
|
+
*
|
|
87
|
+
* For terminal executions: loads the full event log via paginated
|
|
88
|
+
* `getEventLog` calls.
|
|
89
|
+
*
|
|
90
|
+
* Pass `null` for `executionId` to skip (stable no-op).
|
|
91
|
+
*/
|
|
92
|
+
export function useWorkflowExecutionEventStream(
|
|
93
|
+
executionId: string | null,
|
|
94
|
+
options?: UseWorkflowExecutionEventStreamOptions,
|
|
95
|
+
): UseWorkflowExecutionEventStreamReturn {
|
|
96
|
+
const stigmer = useStigmer();
|
|
97
|
+
|
|
98
|
+
const internalStoreRef = useRef<WorkflowExecutionEventStore | null>(null);
|
|
99
|
+
if (!options?.store && !internalStoreRef.current) {
|
|
100
|
+
internalStoreRef.current = new WorkflowExecutionEventStore();
|
|
101
|
+
}
|
|
102
|
+
const store = options?.store ?? internalStoreRef.current!;
|
|
103
|
+
|
|
104
|
+
const [connectKey, setConnectKey] = useState(0);
|
|
105
|
+
const reconnect = useCallback(() => {
|
|
106
|
+
setConnectKey((k) => k + 1);
|
|
107
|
+
}, []);
|
|
108
|
+
|
|
109
|
+
const eventTypes = options?.eventTypes;
|
|
110
|
+
const executionPhase = options?.executionPhase;
|
|
111
|
+
|
|
112
|
+
// Stable ref for values that should not trigger re-subscription
|
|
113
|
+
const storeRef = useRef(store);
|
|
114
|
+
storeRef.current = store;
|
|
115
|
+
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
if (!executionId) {
|
|
118
|
+
store.reset();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const abortController = new AbortController();
|
|
123
|
+
const currentStore = storeRef.current;
|
|
124
|
+
const isTerminal = executionPhase !== undefined && TERMINAL_PHASES.has(executionPhase);
|
|
125
|
+
|
|
126
|
+
if (isTerminal) {
|
|
127
|
+
// Batch-load all events for completed executions
|
|
128
|
+
currentStore.setStreamState({ stage: "connecting", executionId });
|
|
129
|
+
|
|
130
|
+
(async () => {
|
|
131
|
+
try {
|
|
132
|
+
let afterSequence = BigInt(0);
|
|
133
|
+
let hasMore = true;
|
|
134
|
+
|
|
135
|
+
while (hasMore && !abortController.signal.aborted) {
|
|
136
|
+
const resp = await stigmer.workflowExecution.getEventLog(
|
|
137
|
+
create(GetEventLogRequestSchema, {
|
|
138
|
+
executionId,
|
|
139
|
+
afterSequence,
|
|
140
|
+
eventTypes: eventTypes ? [...eventTypes] : [],
|
|
141
|
+
pageSize: 500,
|
|
142
|
+
}),
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
if (abortController.signal.aborted) return;
|
|
146
|
+
|
|
147
|
+
startTransition(() => {
|
|
148
|
+
currentStore.appendEvents(resp.events);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
hasMore = resp.hasMore;
|
|
152
|
+
afterSequence = resp.latestSequence;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (!abortController.signal.aborted) {
|
|
156
|
+
currentStore.setStreamState({ stage: "complete", executionId });
|
|
157
|
+
}
|
|
158
|
+
} catch (err) {
|
|
159
|
+
if (abortController.signal.aborted) return;
|
|
160
|
+
currentStore.setStreamState({
|
|
161
|
+
stage: "error",
|
|
162
|
+
executionId,
|
|
163
|
+
error: toError(err),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
})();
|
|
167
|
+
} else {
|
|
168
|
+
// Live-stream events for running executions
|
|
169
|
+
currentStore.setStreamState({ stage: "connecting", executionId });
|
|
170
|
+
|
|
171
|
+
(async () => {
|
|
172
|
+
try {
|
|
173
|
+
const afterSequence = currentStore.getLatestSequence();
|
|
174
|
+
|
|
175
|
+
for await (const event of stigmer.workflowExecution.subscribeEvents(
|
|
176
|
+
create(SubscribeEventsRequestSchema, {
|
|
177
|
+
executionId,
|
|
178
|
+
afterSequence,
|
|
179
|
+
eventTypes: eventTypes ? [...eventTypes] : [],
|
|
180
|
+
}),
|
|
181
|
+
abortController.signal,
|
|
182
|
+
)) {
|
|
183
|
+
if (abortController.signal.aborted) return;
|
|
184
|
+
|
|
185
|
+
startTransition(() => {
|
|
186
|
+
currentStore.appendEvents([event]);
|
|
187
|
+
if (currentStore.getStreamState().stage === "connecting") {
|
|
188
|
+
currentStore.setStreamState({ stage: "streaming", executionId });
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (!abortController.signal.aborted) {
|
|
194
|
+
currentStore.setStreamState({ stage: "complete", executionId });
|
|
195
|
+
}
|
|
196
|
+
} catch (err) {
|
|
197
|
+
if (abortController.signal.aborted) return;
|
|
198
|
+
|
|
199
|
+
const error = toError(err);
|
|
200
|
+
const isUnimplemented =
|
|
201
|
+
error.message.includes("UNIMPLEMENTED") ||
|
|
202
|
+
error.message.includes("unimplemented");
|
|
203
|
+
|
|
204
|
+
if (isUnimplemented) {
|
|
205
|
+
currentStore.setStreamState({ stage: "unsupported", executionId });
|
|
206
|
+
} else {
|
|
207
|
+
currentStore.setStreamState({
|
|
208
|
+
stage: "error",
|
|
209
|
+
executionId,
|
|
210
|
+
error,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
})();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return () => {
|
|
218
|
+
abortController.abort();
|
|
219
|
+
};
|
|
220
|
+
}, [executionId, stigmer, connectKey, executionPhase]);
|
|
221
|
+
|
|
222
|
+
// Read from store via useSyncExternalStore
|
|
223
|
+
const events = useSyncExternalStore(store.subscribe, store.getEvents);
|
|
224
|
+
const taskStates = useSyncExternalStore(store.subscribe, store.getTaskStates);
|
|
225
|
+
const costSummary = useSyncExternalStore(store.subscribe, store.getCostSummary);
|
|
226
|
+
const streamState = useSyncExternalStore(store.subscribe, store.getStreamState);
|
|
227
|
+
const totalTasks = useSyncExternalStore(store.subscribe, store.getTotalTasks);
|
|
228
|
+
|
|
229
|
+
const isStreaming = streamState.stage === "streaming";
|
|
230
|
+
const isConnecting = streamState.stage === "connecting";
|
|
231
|
+
const error = streamState.stage === "error" ? streamState.error : null;
|
|
232
|
+
|
|
233
|
+
return {
|
|
234
|
+
events,
|
|
235
|
+
taskStates,
|
|
236
|
+
costSummary,
|
|
237
|
+
streamState,
|
|
238
|
+
totalTasks,
|
|
239
|
+
isStreaming,
|
|
240
|
+
isConnecting,
|
|
241
|
+
error,
|
|
242
|
+
reconnect,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import type { WorkflowExecution } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
4
|
+
import { create } from "@bufbuild/protobuf";
|
|
5
|
+
import {
|
|
6
|
+
ListWorkflowExecutionsRequestSchema,
|
|
7
|
+
ListWorkflowExecutionsByWorkflowRequestSchema,
|
|
8
|
+
} from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
|
|
9
|
+
import { useStigmer } from "../hooks";
|
|
10
|
+
import { useFetch } from "../internal/useFetch";
|
|
11
|
+
|
|
12
|
+
/** Options for {@link useWorkflowExecutionList}. */
|
|
13
|
+
export interface UseWorkflowExecutionListOptions {
|
|
14
|
+
/** Maximum executions per page. @default 20 */
|
|
15
|
+
readonly pageSize?: number;
|
|
16
|
+
/** Opaque page token for cursor-based pagination. */
|
|
17
|
+
readonly pageToken?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Workflow or WorkflowInstance ID to scope executions.
|
|
20
|
+
* When omitted, lists all executions across all workflows.
|
|
21
|
+
*/
|
|
22
|
+
readonly workflowId?: string | null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Return value of {@link useWorkflowExecutionList}. */
|
|
26
|
+
export interface UseWorkflowExecutionListReturn {
|
|
27
|
+
/** Execution entries for the current page. */
|
|
28
|
+
readonly executions: readonly WorkflowExecution[];
|
|
29
|
+
/** Total pages available at the current page size. */
|
|
30
|
+
readonly totalPages: number;
|
|
31
|
+
/** `true` while the initial fetch or a refetch is in flight. */
|
|
32
|
+
readonly isLoading: boolean;
|
|
33
|
+
/** `true` while a background refetch is in flight and stale data is shown. */
|
|
34
|
+
readonly isRefetching: boolean;
|
|
35
|
+
/** Error from the last failed request, or `null` when healthy. */
|
|
36
|
+
readonly error: Error | null;
|
|
37
|
+
/** Discard cached data and re-fetch from the server. */
|
|
38
|
+
readonly refetch: () => void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface ExecutionListData {
|
|
42
|
+
executions: readonly WorkflowExecution[];
|
|
43
|
+
totalPages: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const INITIAL_DATA: ExecutionListData = {
|
|
47
|
+
executions: [],
|
|
48
|
+
totalPages: 0,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Data hook that fetches a paginated list of workflow executions.
|
|
53
|
+
*
|
|
54
|
+
* When `workflowId` is provided, fetches executions for that specific
|
|
55
|
+
* workflow via `listByWorkflow()`. When omitted, fetches all executions
|
|
56
|
+
* across all workflows via `list()`.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* // All executions
|
|
61
|
+
* const { executions, isLoading } = useWorkflowExecutionList();
|
|
62
|
+
*
|
|
63
|
+
* // Executions for a specific workflow
|
|
64
|
+
* const { executions } = useWorkflowExecutionList({
|
|
65
|
+
* workflowId: workflow.metadata?.id,
|
|
66
|
+
* pageSize: 10,
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export function useWorkflowExecutionList(
|
|
71
|
+
options?: UseWorkflowExecutionListOptions,
|
|
72
|
+
): UseWorkflowExecutionListReturn {
|
|
73
|
+
const stigmer = useStigmer();
|
|
74
|
+
const pageSize = options?.pageSize ?? 20;
|
|
75
|
+
const pageToken = options?.pageToken ?? "";
|
|
76
|
+
const workflowId = options?.workflowId ?? null;
|
|
77
|
+
|
|
78
|
+
const fetchFn = async () => {
|
|
79
|
+
if (workflowId) {
|
|
80
|
+
const resp = await stigmer.workflowExecution.listByWorkflow(
|
|
81
|
+
create(ListWorkflowExecutionsByWorkflowRequestSchema, {
|
|
82
|
+
workflowId,
|
|
83
|
+
pageSize,
|
|
84
|
+
pageToken,
|
|
85
|
+
}),
|
|
86
|
+
);
|
|
87
|
+
return {
|
|
88
|
+
executions: [...resp.entries],
|
|
89
|
+
totalPages: resp.totalPages,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const resp = await stigmer.workflowExecution.list(
|
|
94
|
+
create(ListWorkflowExecutionsRequestSchema, {
|
|
95
|
+
pageSize,
|
|
96
|
+
pageToken,
|
|
97
|
+
}),
|
|
98
|
+
);
|
|
99
|
+
return {
|
|
100
|
+
executions: [...resp.entries],
|
|
101
|
+
totalPages: resp.totalPages,
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const {
|
|
106
|
+
data,
|
|
107
|
+
isLoading,
|
|
108
|
+
isRefetching,
|
|
109
|
+
error,
|
|
110
|
+
refetch,
|
|
111
|
+
} = useFetch<ExecutionListData>(fetchFn, [stigmer, workflowId, pageSize, pageToken], INITIAL_DATA);
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
executions: data.executions,
|
|
115
|
+
totalPages: data.totalPages,
|
|
116
|
+
isLoading,
|
|
117
|
+
isRefetching,
|
|
118
|
+
error,
|
|
119
|
+
refetch,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
|
|
4
|
+
import { create } from "@bufbuild/protobuf";
|
|
5
|
+
import { GetWorkflowInstancesByWorkflowRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/io_pb";
|
|
6
|
+
import { useStigmer } from "../hooks";
|
|
7
|
+
import { useFetch } from "../internal/useFetch";
|
|
8
|
+
|
|
9
|
+
/** Return value of {@link useWorkflowInstances}. */
|
|
10
|
+
export interface UseWorkflowInstancesReturn {
|
|
11
|
+
/** Instances for the given workflow, or empty array while loading. */
|
|
12
|
+
readonly instances: readonly WorkflowInstance[];
|
|
13
|
+
/** `true` while the initial fetch or a refetch is in flight. */
|
|
14
|
+
readonly isLoading: boolean;
|
|
15
|
+
/** `true` while a background refetch is in flight and stale data is shown. */
|
|
16
|
+
readonly isRefetching: boolean;
|
|
17
|
+
/** Error from the last failed request, or `null` when healthy. */
|
|
18
|
+
readonly error: Error | null;
|
|
19
|
+
/** Discard cached data and re-fetch instances from the server. */
|
|
20
|
+
readonly refetch: () => void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Data hook that fetches all instances for a specific workflow.
|
|
25
|
+
*
|
|
26
|
+
* Wraps `stigmer.workflowInstance.getByWorkflow()` with loading
|
|
27
|
+
* and error state management. Used on the Workflow detail page
|
|
28
|
+
* "Instances" tab to show environment-bound deployments.
|
|
29
|
+
*
|
|
30
|
+
* Pass `null` as `workflowId` to skip fetching (stable no-op).
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* const { instances, isLoading } = useWorkflowInstances(workflow.metadata?.id);
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function useWorkflowInstances(
|
|
38
|
+
workflowId: string | null | undefined,
|
|
39
|
+
): UseWorkflowInstancesReturn {
|
|
40
|
+
const stigmer = useStigmer();
|
|
41
|
+
|
|
42
|
+
const fetchFn = workflowId
|
|
43
|
+
? async () => {
|
|
44
|
+
const resp = await stigmer.workflowInstance.getByWorkflow(
|
|
45
|
+
create(GetWorkflowInstancesByWorkflowRequestSchema, {
|
|
46
|
+
workflowId,
|
|
47
|
+
}),
|
|
48
|
+
);
|
|
49
|
+
return resp.entries ? [...resp.entries] : [];
|
|
50
|
+
}
|
|
51
|
+
: null;
|
|
52
|
+
|
|
53
|
+
const {
|
|
54
|
+
data: instances,
|
|
55
|
+
isLoading,
|
|
56
|
+
isRefetching,
|
|
57
|
+
error,
|
|
58
|
+
refetch,
|
|
59
|
+
} = useFetch<readonly WorkflowInstance[]>(fetchFn, [workflowId, stigmer], []);
|
|
60
|
+
|
|
61
|
+
return { instances, isLoading, isRefetching, error, refetch };
|
|
62
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import type { SearchResult } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
|
|
5
|
+
import { useStigmer } from "../hooks";
|
|
6
|
+
import { useResourceList, type ResourceListScope } from "../search";
|
|
7
|
+
|
|
8
|
+
/** Options for {@link useWorkflowList}. */
|
|
9
|
+
export interface UseWorkflowListOptions {
|
|
10
|
+
/** Maximum workflows per page. @default 20 */
|
|
11
|
+
readonly pageSize?: number;
|
|
12
|
+
/** Page number (1-indexed). @default 1 */
|
|
13
|
+
readonly page?: number;
|
|
14
|
+
/** Text query to filter workflows by name, description, or tags. */
|
|
15
|
+
readonly query?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Controls which workflows are visible.
|
|
18
|
+
*
|
|
19
|
+
* - `"org"` — only workflows owned by the given organization.
|
|
20
|
+
* - `"all"` — includes public/platform workflows.
|
|
21
|
+
*
|
|
22
|
+
* @default "org"
|
|
23
|
+
*/
|
|
24
|
+
readonly scope?: ResourceListScope;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Return value of {@link useWorkflowList}. */
|
|
28
|
+
export interface UseWorkflowListReturn {
|
|
29
|
+
/** Paginated workflow entries for the current page. */
|
|
30
|
+
readonly workflows: readonly SearchResult[];
|
|
31
|
+
/** Total number of workflows matching the current filters. */
|
|
32
|
+
readonly totalCount: number;
|
|
33
|
+
/** Total pages available at the current page size. */
|
|
34
|
+
readonly totalPages: number;
|
|
35
|
+
/** The current page number (mirrors the `page` option). */
|
|
36
|
+
readonly currentPage: number;
|
|
37
|
+
/** `true` while the initial fetch or a refetch is in flight. */
|
|
38
|
+
readonly isLoading: boolean;
|
|
39
|
+
/** Error from the last failed request, or `null` when healthy. */
|
|
40
|
+
readonly error: Error | null;
|
|
41
|
+
/** Discard cached data and re-fetch the current page from the server. */
|
|
42
|
+
readonly refetch: () => void;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Data hook that fetches a paginated list of workflows for the Workflows section.
|
|
47
|
+
*
|
|
48
|
+
* Wraps `stigmer.workflow.list()` with pagination, scope filtering,
|
|
49
|
+
* and text search. All parameters are externally controlled — the
|
|
50
|
+
* consumer manages page state, query debouncing, and scope toggling.
|
|
51
|
+
*
|
|
52
|
+
* Pass `null` as `org` to skip fetching (stable no-op).
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* const { workflows, totalCount, isLoading } = useWorkflowList("acme", {
|
|
57
|
+
* page: 1,
|
|
58
|
+
* pageSize: 20,
|
|
59
|
+
* scope: "org",
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function useWorkflowList(
|
|
64
|
+
org: string | null,
|
|
65
|
+
options?: UseWorkflowListOptions,
|
|
66
|
+
): UseWorkflowListReturn {
|
|
67
|
+
const stigmer = useStigmer();
|
|
68
|
+
|
|
69
|
+
const listFn = useCallback(
|
|
70
|
+
(params: Parameters<typeof stigmer.workflow.list>[0]) =>
|
|
71
|
+
stigmer.workflow.list(params),
|
|
72
|
+
[stigmer],
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const { entries, totalCount, totalPages, currentPage, isLoading, error, refetch } =
|
|
76
|
+
useResourceList(listFn, org, options);
|
|
77
|
+
|
|
78
|
+
return { workflows: entries, totalCount, totalPages, currentPage, isLoading, error, refetch };
|
|
79
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { useStigmer } from "../hooks";
|
|
5
|
+
import { parseWorkflowYaml } from "./serialize-workflow-yaml";
|
|
6
|
+
|
|
7
|
+
/** Return value of {@link useWorkflowSave}. */
|
|
8
|
+
export interface UseWorkflowSaveReturn {
|
|
9
|
+
/**
|
|
10
|
+
* Parse the YAML and call `workflow.apply()` on the server.
|
|
11
|
+
* Returns `true` on success, `false` on failure (check `error`).
|
|
12
|
+
*/
|
|
13
|
+
readonly save: (yaml: string) => Promise<boolean>;
|
|
14
|
+
/** `true` while a save request is in flight. */
|
|
15
|
+
readonly isSaving: boolean;
|
|
16
|
+
/** Error from the last failed save, or `null` on success. */
|
|
17
|
+
readonly error: Error | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Behavior hook that persists workflow YAML to the server via `apply()`.
|
|
22
|
+
*
|
|
23
|
+
* Parses the YAML into a `WorkflowInput`, calls `stigmer.workflow.apply()`,
|
|
24
|
+
* and returns success/failure state. Handles UNIMPLEMENTED gracefully
|
|
25
|
+
* (backend not yet deployed) with a descriptive error message.
|
|
26
|
+
*
|
|
27
|
+
* @param org - Organization slug for the target workflow.
|
|
28
|
+
*
|
|
29
|
+
* @since T10 (YAML Editor with Graph Preview)
|
|
30
|
+
*/
|
|
31
|
+
export function useWorkflowSave(org: string): UseWorkflowSaveReturn {
|
|
32
|
+
const stigmer = useStigmer();
|
|
33
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
34
|
+
const [error, setError] = useState<Error | null>(null);
|
|
35
|
+
const orgRef = useRef(org);
|
|
36
|
+
orgRef.current = org;
|
|
37
|
+
|
|
38
|
+
const save = useCallback(
|
|
39
|
+
async (yaml: string): Promise<boolean> => {
|
|
40
|
+
setIsSaving(true);
|
|
41
|
+
setError(null);
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
const input = parseWorkflowYaml(yaml, orgRef.current);
|
|
45
|
+
await stigmer.workflow.apply(input);
|
|
46
|
+
return true;
|
|
47
|
+
} catch (err) {
|
|
48
|
+
const wrapped =
|
|
49
|
+
err instanceof Error ? err : new Error(String(err));
|
|
50
|
+
|
|
51
|
+
if (isUnimplementedError(err)) {
|
|
52
|
+
setError(
|
|
53
|
+
new Error(
|
|
54
|
+
"Workflow save is not yet available on this server. " +
|
|
55
|
+
"The workflow was validated locally but could not be persisted.",
|
|
56
|
+
),
|
|
57
|
+
);
|
|
58
|
+
} else {
|
|
59
|
+
setError(wrapped);
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
} finally {
|
|
63
|
+
setIsSaving(false);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
[stigmer],
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
return useMemo(() => ({ save, isSaving, error }), [save, isSaving, error]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Detect gRPC UNIMPLEMENTED (code 12) from a Connect error or
|
|
74
|
+
* a StigmerError wrapping one. The SDK's CODE_MAP doesn't include
|
|
75
|
+
* Unimplemented so it surfaces as "unknown" — check connectCode.
|
|
76
|
+
*/
|
|
77
|
+
function isUnimplementedError(err: unknown): boolean {
|
|
78
|
+
if (!err || typeof err !== "object") return false;
|
|
79
|
+
if ("connectCode" in err && (err as { connectCode: number }).connectCode === 12) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
const msg = (err as { message?: string }).message ?? "";
|
|
83
|
+
return msg.includes("[unimplemented]") || msg.includes("UNIMPLEMENTED");
|
|
84
|
+
}
|