@stigmer/react 0.5.1 → 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/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 +53 -64
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +20 -8
- 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/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 +9 -4
- package/index.d.ts.map +1 -1
- package/index.js +12 -2
- package/index.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/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 +25 -13
- 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/package.json +16 -5
- package/provider.d.ts.map +1 -1
- package/provider.js +164 -1
- 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/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 +1 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +1 -0
- package/session/useSessionPageFlow.js.map +1 -1
- 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/InteractionModePicker.tsx +189 -0
- package/src/composer/SessionComposer.tsx +85 -8
- 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/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 +222 -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/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 +80 -148
- package/src/mcp-server/McpServerPicker.tsx +6 -1
- package/src/provider.tsx +195 -8
- 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/useNewSessionFlow.ts +1 -0
- package/src/session/useSessionConversation.ts +8 -0
- package/src/session/useSessionPageFlow.ts +1 -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,546 @@
|
|
|
1
|
+
import { stringify as stringifyYaml, parse as parseYaml } from "yaml";
|
|
2
|
+
import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
|
|
3
|
+
import type {
|
|
4
|
+
WorkflowSpec,
|
|
5
|
+
WorkflowTask,
|
|
6
|
+
WorkflowBudget,
|
|
7
|
+
WorkflowDocument,
|
|
8
|
+
} from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/spec_pb";
|
|
9
|
+
import { WorkflowTaskKind, BudgetExceededPolicy } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
|
|
10
|
+
import type { EnvVarDeclaration } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/spec_pb";
|
|
11
|
+
import type {
|
|
12
|
+
WorkflowInput,
|
|
13
|
+
WorkflowTaskInput,
|
|
14
|
+
WorkflowDocumentInput,
|
|
15
|
+
ExportInput,
|
|
16
|
+
FlowControlInput,
|
|
17
|
+
} from "@stigmer/sdk";
|
|
18
|
+
import type { JsonObject } from "@bufbuild/protobuf";
|
|
19
|
+
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Proto → YAML (serialize)
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Serializes a proto `Workflow` into the canonical Stigmer YAML format.
|
|
26
|
+
*
|
|
27
|
+
* The output uses snake_case field names and is round-trip compatible
|
|
28
|
+
* with {@link parseWorkflowYaml}. Only emits `apiVersion`, `kind`,
|
|
29
|
+
* `metadata`, and `spec` — the `status` field is system-managed.
|
|
30
|
+
*
|
|
31
|
+
* @param workflow - The proto `Workflow` resource to serialize.
|
|
32
|
+
* @returns A YAML string suitable for editing and re-applying.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const yaml = serializeWorkflowYaml(workflow);
|
|
37
|
+
* // Edit yaml...
|
|
38
|
+
* const input = parseWorkflowYaml(yaml, "acme");
|
|
39
|
+
* await stigmer.workflow.apply(input);
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @since T10 (YAML Editor with Graph Preview)
|
|
43
|
+
*/
|
|
44
|
+
export function serializeWorkflowYaml(workflow: Workflow): string {
|
|
45
|
+
const doc: Record<string, unknown> = {
|
|
46
|
+
apiVersion: workflow.apiVersion || "agentic.stigmer.ai/v1",
|
|
47
|
+
kind: workflow.kind || "Workflow",
|
|
48
|
+
metadata: buildMetadata(workflow),
|
|
49
|
+
spec: buildWorkflowSpec(workflow.spec),
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return stringifyYaml(doc, { lineWidth: 0, blockQuote: "literal" });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// YAML → WorkflowInput (parse)
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Parses a Stigmer Workflow YAML string into a `WorkflowInput` suitable
|
|
61
|
+
* for `stigmer.workflow.apply()`.
|
|
62
|
+
*
|
|
63
|
+
* Handles snake_case → camelCase conversion for all nested structures
|
|
64
|
+
* including tasks, env declarations, budget, and flow control.
|
|
65
|
+
*
|
|
66
|
+
* @param content - Raw YAML content string.
|
|
67
|
+
* @param org - Target organization slug. Overrides `metadata.org` in the YAML.
|
|
68
|
+
* @returns A `WorkflowInput` ready for the SDK apply/update call.
|
|
69
|
+
* @throws {Error} When the YAML is malformed or missing required fields.
|
|
70
|
+
*
|
|
71
|
+
* @since T10 (YAML Editor with Graph Preview)
|
|
72
|
+
*/
|
|
73
|
+
export function parseWorkflowYaml(
|
|
74
|
+
content: string,
|
|
75
|
+
org: string,
|
|
76
|
+
): WorkflowInput {
|
|
77
|
+
const raw = parseYamlSafe(content);
|
|
78
|
+
validateWorkflowStructure(raw);
|
|
79
|
+
|
|
80
|
+
const metadata = raw.metadata as Record<string, unknown>;
|
|
81
|
+
const spec = raw.spec as Record<string, unknown>;
|
|
82
|
+
|
|
83
|
+
const name = requireString(metadata, "name", "metadata.name");
|
|
84
|
+
const slug = optString(metadata, "slug");
|
|
85
|
+
|
|
86
|
+
const labels = optStringRecord(metadata, "labels");
|
|
87
|
+
|
|
88
|
+
const document = extractDocument(spec);
|
|
89
|
+
const tasks = extractTasks(spec);
|
|
90
|
+
const env = extractEnv(spec);
|
|
91
|
+
const budget = extractBudget(spec);
|
|
92
|
+
const description = optString(spec, "description");
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
name,
|
|
96
|
+
org,
|
|
97
|
+
...(slug !== undefined && { slug }),
|
|
98
|
+
...(labels !== undefined && { labels }),
|
|
99
|
+
...(description !== undefined && { description }),
|
|
100
|
+
document,
|
|
101
|
+
tasks,
|
|
102
|
+
...(env !== undefined && { env }),
|
|
103
|
+
...(budget !== undefined && { budget }),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Serialize helpers: proto → plain object
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
function buildMetadata(workflow: Workflow): Record<string, unknown> {
|
|
112
|
+
const m = workflow.metadata;
|
|
113
|
+
if (!m) return {};
|
|
114
|
+
|
|
115
|
+
const result: Record<string, unknown> = { name: m.name };
|
|
116
|
+
|
|
117
|
+
if (m.org) result.org = m.org;
|
|
118
|
+
if (m.slug && m.slug !== m.name) result.slug = m.slug;
|
|
119
|
+
if (m.labels && Object.keys(m.labels).length > 0) {
|
|
120
|
+
result.labels = { ...m.labels };
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function buildWorkflowSpec(
|
|
127
|
+
spec: WorkflowSpec | undefined,
|
|
128
|
+
): Record<string, unknown> {
|
|
129
|
+
if (!spec) return {};
|
|
130
|
+
|
|
131
|
+
const result: Record<string, unknown> = {};
|
|
132
|
+
|
|
133
|
+
if (spec.description) result.description = spec.description;
|
|
134
|
+
if (spec.document) result.document = buildDocument(spec.document);
|
|
135
|
+
if (spec.tasks.length > 0) {
|
|
136
|
+
result.tasks = spec.tasks.map(buildTask);
|
|
137
|
+
}
|
|
138
|
+
if (spec.env && Object.keys(spec.env).length > 0) {
|
|
139
|
+
result.env = buildEnvMap(spec.env);
|
|
140
|
+
}
|
|
141
|
+
if (spec.budget && hasBudgetValues(spec.budget)) {
|
|
142
|
+
result.budget = buildBudget(spec.budget);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function buildDocument(doc: WorkflowDocument): Record<string, unknown> {
|
|
149
|
+
const result: Record<string, unknown> = {};
|
|
150
|
+
|
|
151
|
+
if (doc.dsl) result.dsl = doc.dsl;
|
|
152
|
+
if (doc.namespace) result.namespace = doc.namespace;
|
|
153
|
+
if (doc.name) result.name = doc.name;
|
|
154
|
+
if (doc.version) result.version = doc.version;
|
|
155
|
+
if (doc.description) result.description = doc.description;
|
|
156
|
+
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function buildTask(task: WorkflowTask): Record<string, unknown> {
|
|
161
|
+
const result: Record<string, unknown> = {
|
|
162
|
+
name: task.name,
|
|
163
|
+
kind: taskKindToString(task.kind),
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
if (task.taskConfig && Object.keys(task.taskConfig).length > 0) {
|
|
167
|
+
result.task_config = structToPlain(task.taskConfig);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (task.export?.as) {
|
|
171
|
+
result.export = { as: task.export.as };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (task.flow?.then) {
|
|
175
|
+
result.flow = { then: task.flow.then };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function buildEnvMap(
|
|
182
|
+
env: Record<string, EnvVarDeclaration>,
|
|
183
|
+
): Record<string, Record<string, unknown>> {
|
|
184
|
+
const result: Record<string, Record<string, unknown>> = {};
|
|
185
|
+
|
|
186
|
+
for (const [key, decl] of Object.entries(env)) {
|
|
187
|
+
const entry: Record<string, unknown> = {};
|
|
188
|
+
if (decl.isSecret) entry.is_secret = true;
|
|
189
|
+
if (decl.description) entry.description = decl.description;
|
|
190
|
+
if (decl.optional) entry.optional = true;
|
|
191
|
+
result[key] = entry;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function buildBudget(budget: WorkflowBudget): Record<string, unknown> {
|
|
198
|
+
const result: Record<string, unknown> = {};
|
|
199
|
+
|
|
200
|
+
const costMicros = Number(budget.maxCostMicros);
|
|
201
|
+
const totalTokens = Number(budget.maxTotalTokens);
|
|
202
|
+
|
|
203
|
+
if (costMicros > 0) result.max_cost_micros = costMicros;
|
|
204
|
+
if (totalTokens > 0) result.max_total_tokens = totalTokens;
|
|
205
|
+
if (budget.maxDurationSeconds > 0) {
|
|
206
|
+
result.max_duration_seconds = budget.maxDurationSeconds;
|
|
207
|
+
}
|
|
208
|
+
if (
|
|
209
|
+
budget.onExceeded !== BudgetExceededPolicy.budget_exceeded_policy_unspecified
|
|
210
|
+
) {
|
|
211
|
+
result.on_exceeded = budgetPolicyToString(budget.onExceeded);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function hasBudgetValues(budget: WorkflowBudget): boolean {
|
|
218
|
+
return (
|
|
219
|
+
Number(budget.maxCostMicros) > 0 ||
|
|
220
|
+
Number(budget.maxTotalTokens) > 0 ||
|
|
221
|
+
budget.maxDurationSeconds > 0
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
// Parse helpers: plain object → WorkflowInput
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
|
|
229
|
+
function parseYamlSafe(content: string): Record<string, unknown> {
|
|
230
|
+
let parsed: unknown;
|
|
231
|
+
try {
|
|
232
|
+
parsed = parseYaml(content);
|
|
233
|
+
} catch {
|
|
234
|
+
throw new Error("Failed to parse content as YAML.");
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (!isObj(parsed)) {
|
|
238
|
+
throw new Error("YAML must be a mapping document, not a scalar or list.");
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return parsed;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function validateWorkflowStructure(doc: Record<string, unknown>): void {
|
|
245
|
+
const kind = doc.kind;
|
|
246
|
+
if (typeof kind === "string" && kind !== "Workflow") {
|
|
247
|
+
throw new Error(
|
|
248
|
+
`Expected resource kind "Workflow", got "${kind}".`,
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (!isObj(doc.metadata)) {
|
|
253
|
+
throw new Error("Workflow YAML is missing required field: metadata.");
|
|
254
|
+
}
|
|
255
|
+
if (!isObj(doc.spec)) {
|
|
256
|
+
throw new Error("Workflow YAML is missing required field: spec.");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function extractDocument(
|
|
261
|
+
spec: Record<string, unknown>,
|
|
262
|
+
): WorkflowDocumentInput {
|
|
263
|
+
const raw = spec.document;
|
|
264
|
+
if (!isObj(raw)) {
|
|
265
|
+
throw new Error("Workflow YAML is missing required field: spec.document.");
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
dsl: optString(raw, "dsl") ?? "1.0.0",
|
|
270
|
+
namespace: requireString(raw, "namespace", "spec.document.namespace"),
|
|
271
|
+
name: requireString(raw, "name", "spec.document.name"),
|
|
272
|
+
version: requireString(raw, "version", "spec.document.version"),
|
|
273
|
+
...(raw.description && typeof raw.description === "string"
|
|
274
|
+
? { description: raw.description }
|
|
275
|
+
: {}),
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function extractTasks(
|
|
280
|
+
spec: Record<string, unknown>,
|
|
281
|
+
): WorkflowTaskInput[] {
|
|
282
|
+
const raw = spec.tasks;
|
|
283
|
+
if (!Array.isArray(raw) || raw.length === 0) {
|
|
284
|
+
throw new Error(
|
|
285
|
+
"Workflow YAML is missing required field: spec.tasks (must be a non-empty list).",
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return raw.filter(isObj).map((entry, idx): WorkflowTaskInput => {
|
|
290
|
+
const name = entry.name;
|
|
291
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
292
|
+
throw new Error(
|
|
293
|
+
`Workflow YAML: task at index ${idx} is missing required field: name.`,
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const kindStr = entry.kind;
|
|
298
|
+
if (typeof kindStr !== "string" || kindStr.length === 0) {
|
|
299
|
+
throw new Error(
|
|
300
|
+
`Workflow YAML: task "${name}" is missing required field: kind.`,
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const kindEnum = stringToTaskKind(kindStr);
|
|
305
|
+
if (kindEnum === undefined) {
|
|
306
|
+
throw new Error(
|
|
307
|
+
`Workflow YAML: task "${name}" has unknown kind "${kindStr}".`,
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const taskConfig =
|
|
312
|
+
(entry.task_config ?? entry.taskConfig) as JsonObject | undefined;
|
|
313
|
+
if (!isObj(taskConfig)) {
|
|
314
|
+
throw new Error(
|
|
315
|
+
`Workflow YAML: task "${name}" is missing required field: task_config.`,
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const exportBlock = entry.export ?? entry.export;
|
|
320
|
+
const flowBlock = entry.flow;
|
|
321
|
+
|
|
322
|
+
const result: WorkflowTaskInput = {
|
|
323
|
+
name,
|
|
324
|
+
kind: kindEnum,
|
|
325
|
+
taskConfig: taskConfig as JsonObject,
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
if (isObj(exportBlock)) {
|
|
329
|
+
const asVal = (exportBlock as Record<string, unknown>).as;
|
|
330
|
+
if (typeof asVal === "string" && asVal.length > 0) {
|
|
331
|
+
(result as { export?: ExportInput }).export = { as: asVal };
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (isObj(flowBlock)) {
|
|
336
|
+
const thenVal = (flowBlock as Record<string, unknown>).then;
|
|
337
|
+
if (typeof thenVal === "string" && thenVal.length > 0) {
|
|
338
|
+
(result as { flow?: FlowControlInput }).flow = { then: thenVal };
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return result;
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function extractEnv(
|
|
347
|
+
spec: Record<string, unknown>,
|
|
348
|
+
): WorkflowInput["env"] | undefined {
|
|
349
|
+
const raw = spec.env;
|
|
350
|
+
if (!isObj(raw)) return undefined;
|
|
351
|
+
|
|
352
|
+
const result: NonNullable<WorkflowInput["env"]> = {};
|
|
353
|
+
let hasEntries = false;
|
|
354
|
+
|
|
355
|
+
for (const [key, val] of Object.entries(raw)) {
|
|
356
|
+
if (!isObj(val)) continue;
|
|
357
|
+
|
|
358
|
+
const isSecret = val.is_secret ?? val.isSecret;
|
|
359
|
+
const description = val.description;
|
|
360
|
+
const optional = val.optional;
|
|
361
|
+
|
|
362
|
+
result[key] = {
|
|
363
|
+
...(typeof isSecret === "boolean" && { isSecret }),
|
|
364
|
+
...(typeof description === "string" && { description }),
|
|
365
|
+
...(typeof optional === "boolean" && { optional }),
|
|
366
|
+
};
|
|
367
|
+
hasEntries = true;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return hasEntries ? result : undefined;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function extractBudget(
|
|
374
|
+
spec: Record<string, unknown>,
|
|
375
|
+
): WorkflowInput["budget"] | undefined {
|
|
376
|
+
const raw = spec.budget;
|
|
377
|
+
if (!isObj(raw)) return undefined;
|
|
378
|
+
|
|
379
|
+
const maxCostMicros =
|
|
380
|
+
toBigIntSafe(raw.max_cost_micros ?? raw.maxCostMicros);
|
|
381
|
+
const maxTotalTokens =
|
|
382
|
+
toBigIntSafe(raw.max_total_tokens ?? raw.maxTotalTokens);
|
|
383
|
+
const maxDurationSeconds = toNumberSafe(
|
|
384
|
+
raw.max_duration_seconds ?? raw.maxDurationSeconds,
|
|
385
|
+
);
|
|
386
|
+
const onExceededStr = raw.on_exceeded ?? raw.onExceeded;
|
|
387
|
+
const onExceeded =
|
|
388
|
+
typeof onExceededStr === "string"
|
|
389
|
+
? stringToBudgetPolicy(onExceededStr)
|
|
390
|
+
: undefined;
|
|
391
|
+
|
|
392
|
+
const hasValues =
|
|
393
|
+
(maxCostMicros !== undefined && maxCostMicros > BigInt(0)) ||
|
|
394
|
+
(maxTotalTokens !== undefined && maxTotalTokens > BigInt(0)) ||
|
|
395
|
+
(maxDurationSeconds !== undefined && maxDurationSeconds > 0);
|
|
396
|
+
|
|
397
|
+
if (!hasValues) return undefined;
|
|
398
|
+
|
|
399
|
+
return {
|
|
400
|
+
...(maxCostMicros !== undefined && { maxCostMicros }),
|
|
401
|
+
...(maxTotalTokens !== undefined && { maxTotalTokens }),
|
|
402
|
+
...(maxDurationSeconds !== undefined && { maxDurationSeconds }),
|
|
403
|
+
...(onExceeded !== undefined && { onExceeded }),
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// ---------------------------------------------------------------------------
|
|
408
|
+
// Enum ↔ string conversion
|
|
409
|
+
// ---------------------------------------------------------------------------
|
|
410
|
+
|
|
411
|
+
const TASK_KIND_STRINGS: ReadonlyMap<WorkflowTaskKind, string> = new Map(
|
|
412
|
+
Object.entries(WorkflowTaskKind)
|
|
413
|
+
.filter(
|
|
414
|
+
(entry): entry is [string, WorkflowTaskKind] =>
|
|
415
|
+
typeof entry[1] === "number" &&
|
|
416
|
+
entry[1] !== WorkflowTaskKind.workflow_task_kind_unspecified,
|
|
417
|
+
)
|
|
418
|
+
.map(([name, value]) => [value, name]),
|
|
419
|
+
);
|
|
420
|
+
|
|
421
|
+
const STRING_TO_TASK_KIND: ReadonlyMap<string, WorkflowTaskKind> = new Map(
|
|
422
|
+
Array.from(TASK_KIND_STRINGS.entries()).map(([value, name]) => [name, value]),
|
|
423
|
+
);
|
|
424
|
+
|
|
425
|
+
function taskKindToString(kind: WorkflowTaskKind): string {
|
|
426
|
+
return TASK_KIND_STRINGS.get(kind) ?? `unknown_${kind}`;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
function stringToTaskKind(str: string): WorkflowTaskKind | undefined {
|
|
430
|
+
return STRING_TO_TASK_KIND.get(str);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
const BUDGET_POLICY_STRINGS: ReadonlyMap<BudgetExceededPolicy, string> =
|
|
434
|
+
new Map([
|
|
435
|
+
[BudgetExceededPolicy.budget_exceeded_terminate, "budget_exceeded_terminate"],
|
|
436
|
+
[
|
|
437
|
+
BudgetExceededPolicy.budget_exceeded_human_review,
|
|
438
|
+
"budget_exceeded_human_review",
|
|
439
|
+
],
|
|
440
|
+
[BudgetExceededPolicy.budget_exceeded_warn, "budget_exceeded_warn"],
|
|
441
|
+
]);
|
|
442
|
+
|
|
443
|
+
const STRING_TO_BUDGET_POLICY: ReadonlyMap<string, BudgetExceededPolicy> =
|
|
444
|
+
new Map(
|
|
445
|
+
Array.from(BUDGET_POLICY_STRINGS.entries()).map(([v, n]) => [n, v]),
|
|
446
|
+
);
|
|
447
|
+
|
|
448
|
+
function budgetPolicyToString(policy: BudgetExceededPolicy): string {
|
|
449
|
+
return BUDGET_POLICY_STRINGS.get(policy) ?? "budget_exceeded_policy_unspecified";
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
function stringToBudgetPolicy(
|
|
453
|
+
str: string,
|
|
454
|
+
): BudgetExceededPolicy | undefined {
|
|
455
|
+
return STRING_TO_BUDGET_POLICY.get(str);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// ---------------------------------------------------------------------------
|
|
459
|
+
// Struct / primitive helpers
|
|
460
|
+
// ---------------------------------------------------------------------------
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Converts a protobuf Struct (or JsonObject) to a plain JS object,
|
|
464
|
+
* handling BigInt → number conversion for YAML serialization.
|
|
465
|
+
*/
|
|
466
|
+
function structToPlain(obj: unknown): unknown {
|
|
467
|
+
if (obj === null || obj === undefined) return obj;
|
|
468
|
+
if (typeof obj === "bigint") return Number(obj);
|
|
469
|
+
if (typeof obj !== "object") return obj;
|
|
470
|
+
|
|
471
|
+
if (Array.isArray(obj)) {
|
|
472
|
+
return obj.map(structToPlain);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
const result: Record<string, unknown> = {};
|
|
476
|
+
for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {
|
|
477
|
+
result[k] = structToPlain(v);
|
|
478
|
+
}
|
|
479
|
+
return result;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function isObj(value: unknown): value is Record<string, unknown> {
|
|
483
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
function requireString(
|
|
487
|
+
obj: Record<string, unknown>,
|
|
488
|
+
key: string,
|
|
489
|
+
displayPath: string,
|
|
490
|
+
): string {
|
|
491
|
+
const val = obj[key];
|
|
492
|
+
if (typeof val !== "string" || val.length === 0) {
|
|
493
|
+
throw new Error(
|
|
494
|
+
`Workflow YAML is missing required field: ${displayPath}.`,
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
return val;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
function optString(
|
|
501
|
+
obj: Record<string, unknown>,
|
|
502
|
+
key: string,
|
|
503
|
+
): string | undefined {
|
|
504
|
+
const val = obj[key];
|
|
505
|
+
return typeof val === "string" && val.length > 0 ? val : undefined;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
function optStringRecord(
|
|
509
|
+
obj: Record<string, unknown>,
|
|
510
|
+
key: string,
|
|
511
|
+
): Record<string, string> | undefined {
|
|
512
|
+
const val = obj[key];
|
|
513
|
+
if (!isObj(val)) return undefined;
|
|
514
|
+
|
|
515
|
+
const result: Record<string, string> = {};
|
|
516
|
+
let hasEntries = false;
|
|
517
|
+
for (const [k, v] of Object.entries(val)) {
|
|
518
|
+
if (typeof v === "string") {
|
|
519
|
+
result[k] = v;
|
|
520
|
+
hasEntries = true;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return hasEntries ? result : undefined;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
function toBigIntSafe(val: unknown): bigint | undefined {
|
|
527
|
+
if (typeof val === "bigint") return val;
|
|
528
|
+
if (typeof val === "number" && Number.isFinite(val)) return BigInt(Math.round(val));
|
|
529
|
+
if (typeof val === "string") {
|
|
530
|
+
try {
|
|
531
|
+
return BigInt(val);
|
|
532
|
+
} catch {
|
|
533
|
+
return undefined;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
return undefined;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
function toNumberSafe(val: unknown): number | undefined {
|
|
540
|
+
if (typeof val === "number" && Number.isFinite(val)) return val;
|
|
541
|
+
if (typeof val === "string") {
|
|
542
|
+
const n = Number(val);
|
|
543
|
+
return Number.isFinite(n) ? n : undefined;
|
|
544
|
+
}
|
|
545
|
+
return undefined;
|
|
546
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal valid workflow YAML used as the starting point when creating
|
|
3
|
+
* a new workflow from the visual editor or code editor.
|
|
4
|
+
*
|
|
5
|
+
* Uses the full envelope format (`apiVersion` / `kind` / `metadata` / `spec`)
|
|
6
|
+
* so `yamlToGraph()` can parse it in visual mode without errors.
|
|
7
|
+
*
|
|
8
|
+
* Includes a single `agent_call` task so the user sees a meaningful
|
|
9
|
+
* canvas node immediately rather than an empty graph.
|
|
10
|
+
*/
|
|
11
|
+
export const STARTER_WORKFLOW_YAML = `apiVersion: agentic.stigmer.ai/v1
|
|
12
|
+
kind: Workflow
|
|
13
|
+
metadata:
|
|
14
|
+
name: my-workflow
|
|
15
|
+
spec:
|
|
16
|
+
description: A new workflow
|
|
17
|
+
document:
|
|
18
|
+
dsl: "1.0.0"
|
|
19
|
+
namespace: default
|
|
20
|
+
name: my-workflow
|
|
21
|
+
version: "0.1.0"
|
|
22
|
+
tasks:
|
|
23
|
+
- name: step_1
|
|
24
|
+
kind: agent_call
|
|
25
|
+
task_config:
|
|
26
|
+
agent_ref: "org/agent-slug"
|
|
27
|
+
flow:
|
|
28
|
+
then: end
|
|
29
|
+
`;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript representation of a TaskKindDescriptor from the task kind registry.
|
|
3
|
+
*
|
|
4
|
+
* Each descriptor provides complete metadata for a single workflow task kind,
|
|
5
|
+
* enabling UI form generation, YAML editor autocomplete, task palette
|
|
6
|
+
* rendering, and client-side pre-validation.
|
|
7
|
+
*
|
|
8
|
+
* @since T04 (Task Schema Registry)
|
|
9
|
+
*/
|
|
10
|
+
export interface TaskKindDescriptor {
|
|
11
|
+
/** Workflow task kind identifier (e.g., "llm_call", "human_input"). */
|
|
12
|
+
readonly kind: string;
|
|
13
|
+
/** Human-readable display name (e.g., "LLM Call", "Human Input"). */
|
|
14
|
+
readonly displayName: string;
|
|
15
|
+
/** One-line description of what this task kind does. */
|
|
16
|
+
readonly description: string;
|
|
17
|
+
/** Functional category for palette grouping and filtering. */
|
|
18
|
+
readonly category: TaskKindCategory;
|
|
19
|
+
/** Lucide icon name for UI rendering. */
|
|
20
|
+
readonly icon: string;
|
|
21
|
+
/** Fully-qualified proto message type for the task config. */
|
|
22
|
+
readonly configProtoType: string;
|
|
23
|
+
/** Ordered field descriptors for form rendering. */
|
|
24
|
+
readonly fields: readonly TaskFieldDescriptor[];
|
|
25
|
+
/** Logical field groups for form section rendering. */
|
|
26
|
+
readonly fieldGroups: readonly TaskFieldGroup[];
|
|
27
|
+
/** JSON Schema (draft 2020-12) for the task_config payload. */
|
|
28
|
+
readonly configJsonSchema: Record<string, unknown>;
|
|
29
|
+
/** JSON Schema describing the task's output shape. */
|
|
30
|
+
readonly outputJsonSchema?: Record<string, unknown>;
|
|
31
|
+
/** YAML code examples demonstrating common usage patterns. */
|
|
32
|
+
readonly yamlExamples?: readonly string[];
|
|
33
|
+
/** Documentation URL path (relative to docs root). */
|
|
34
|
+
readonly documentationUrl: string;
|
|
35
|
+
/** Whether this task kind invokes AI models. */
|
|
36
|
+
readonly isAiNative: boolean;
|
|
37
|
+
/** Whether this task kind requires external service connectivity. */
|
|
38
|
+
readonly requiresExternalService: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Functional category for grouping task kinds in the UI. */
|
|
42
|
+
export type TaskKindCategory =
|
|
43
|
+
| "control_flow"
|
|
44
|
+
| "invocation"
|
|
45
|
+
| "ai"
|
|
46
|
+
| "data"
|
|
47
|
+
| "governance"
|
|
48
|
+
| "event"
|
|
49
|
+
| "unspecified";
|
|
50
|
+
|
|
51
|
+
/** Describes a single field in a task configuration message. */
|
|
52
|
+
export interface TaskFieldDescriptor {
|
|
53
|
+
/** Proto field name (snake_case). */
|
|
54
|
+
readonly name: string;
|
|
55
|
+
/** Human-readable label for form rendering. */
|
|
56
|
+
readonly displayName: string;
|
|
57
|
+
/** Field description from proto comments. */
|
|
58
|
+
readonly description: string;
|
|
59
|
+
/** Data type for rendering the appropriate form control. */
|
|
60
|
+
readonly type: TaskFieldType;
|
|
61
|
+
/** Whether the field is required. */
|
|
62
|
+
readonly required: boolean;
|
|
63
|
+
/** Whether the field accepts ${ } expression interpolation. */
|
|
64
|
+
readonly isExpression?: boolean;
|
|
65
|
+
/** Default value as a JSON-encoded string. */
|
|
66
|
+
readonly defaultValue?: string;
|
|
67
|
+
/** Valid enum values when type is "enum". */
|
|
68
|
+
readonly enumValues?: readonly string[];
|
|
69
|
+
/** Group this field belongs to for form section rendering. */
|
|
70
|
+
readonly groupId?: string;
|
|
71
|
+
/** Proto field number for stable identification. */
|
|
72
|
+
readonly fieldNumber: number;
|
|
73
|
+
/** For repeated: the element type. For message: the nested type name. */
|
|
74
|
+
readonly elementType?: string;
|
|
75
|
+
/** Human-readable validation constraint descriptions. */
|
|
76
|
+
readonly validationHints?: readonly string[];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Data type of a task configuration field. */
|
|
80
|
+
export type TaskFieldType =
|
|
81
|
+
| "string"
|
|
82
|
+
| "int32"
|
|
83
|
+
| "float"
|
|
84
|
+
| "bool"
|
|
85
|
+
| "enum"
|
|
86
|
+
| "struct"
|
|
87
|
+
| "repeated"
|
|
88
|
+
| "map"
|
|
89
|
+
| "message";
|
|
90
|
+
|
|
91
|
+
/** Logical grouping of fields for form section rendering. */
|
|
92
|
+
export interface TaskFieldGroup {
|
|
93
|
+
/** Group identifier. */
|
|
94
|
+
readonly id: string;
|
|
95
|
+
/** Human-readable label for the group section header. */
|
|
96
|
+
readonly displayName: string;
|
|
97
|
+
/** Optional description shown below the group header. */
|
|
98
|
+
readonly description?: string;
|
|
99
|
+
}
|