@stigmer/react 0.5.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. package/activity/group-activity.d.ts +13 -0
  2. package/activity/group-activity.d.ts.map +1 -0
  3. package/activity/group-activity.js +54 -0
  4. package/activity/group-activity.js.map +1 -0
  5. package/activity/index.d.ts +4 -0
  6. package/activity/index.d.ts.map +1 -0
  7. package/activity/index.js +3 -0
  8. package/activity/index.js.map +1 -0
  9. package/activity/types.d.ts +34 -0
  10. package/activity/types.d.ts.map +1 -0
  11. package/activity/types.js +2 -0
  12. package/activity/types.js.map +1 -0
  13. package/activity/useRecentActivity.d.ts +35 -0
  14. package/activity/useRecentActivity.d.ts.map +1 -0
  15. package/activity/useRecentActivity.js +73 -0
  16. package/activity/useRecentActivity.js.map +1 -0
  17. package/agent/AgentPicker.d.ts.map +1 -1
  18. package/agent/AgentPicker.js +4 -2
  19. package/agent/AgentPicker.js.map +1 -1
  20. package/billing/BillingSection.d.ts.map +1 -1
  21. package/billing/BillingSection.js +1 -1
  22. package/billing/BillingSection.js.map +1 -1
  23. package/composer/ComposerToolbar.d.ts +5 -1
  24. package/composer/ComposerToolbar.d.ts.map +1 -1
  25. package/composer/ComposerToolbar.js +4 -3
  26. package/composer/ComposerToolbar.js.map +1 -1
  27. package/composer/InteractionModePicker.d.ts +40 -0
  28. package/composer/InteractionModePicker.d.ts.map +1 -0
  29. package/composer/InteractionModePicker.js +76 -0
  30. package/composer/InteractionModePicker.js.map +1 -0
  31. package/composer/SessionComposer.d.ts +53 -64
  32. package/composer/SessionComposer.d.ts.map +1 -1
  33. package/composer/SessionComposer.js +20 -8
  34. package/composer/SessionComposer.js.map +1 -1
  35. package/composer/__tests__/SessionComposer-memo.test.js +10 -5
  36. package/composer/__tests__/SessionComposer-memo.test.js.map +1 -1
  37. package/composer/index.d.ts +3 -1
  38. package/composer/index.d.ts.map +1 -1
  39. package/composer/index.js +1 -0
  40. package/composer/index.js.map +1 -1
  41. package/dashboard/DashboardFailedRuns.d.ts +19 -0
  42. package/dashboard/DashboardFailedRuns.d.ts.map +1 -0
  43. package/dashboard/DashboardFailedRuns.js +35 -0
  44. package/dashboard/DashboardFailedRuns.js.map +1 -0
  45. package/dashboard/DashboardKPICards.d.ts +19 -0
  46. package/dashboard/DashboardKPICards.d.ts.map +1 -0
  47. package/dashboard/DashboardKPICards.js +80 -0
  48. package/dashboard/DashboardKPICards.js.map +1 -0
  49. package/dashboard/OperationalDashboard.d.ts +37 -0
  50. package/dashboard/OperationalDashboard.d.ts.map +1 -0
  51. package/dashboard/OperationalDashboard.js +48 -0
  52. package/dashboard/OperationalDashboard.js.map +1 -0
  53. package/dashboard/index.d.ts +8 -0
  54. package/dashboard/index.d.ts.map +1 -0
  55. package/dashboard/index.js +9 -0
  56. package/dashboard/index.js.map +1 -0
  57. package/dashboard/types.d.ts +49 -0
  58. package/dashboard/types.d.ts.map +1 -0
  59. package/dashboard/types.js +2 -0
  60. package/dashboard/types.js.map +1 -0
  61. package/dashboard/useAgentExecutionSummary.d.ts +33 -0
  62. package/dashboard/useAgentExecutionSummary.d.ts.map +1 -0
  63. package/dashboard/useAgentExecutionSummary.js +32 -0
  64. package/dashboard/useAgentExecutionSummary.js.map +1 -0
  65. package/dashboard/useDashboardFailedRuns.d.ts +18 -0
  66. package/dashboard/useDashboardFailedRuns.d.ts.map +1 -0
  67. package/dashboard/useDashboardFailedRuns.js +86 -0
  68. package/dashboard/useDashboardFailedRuns.js.map +1 -0
  69. package/dashboard/useDashboardSummary.d.ts +32 -0
  70. package/dashboard/useDashboardSummary.d.ts.map +1 -0
  71. package/dashboard/useDashboardSummary.js +67 -0
  72. package/dashboard/useDashboardSummary.js.map +1 -0
  73. package/execution/ContextGauge.d.ts +45 -0
  74. package/execution/ContextGauge.d.ts.map +1 -0
  75. package/execution/ContextGauge.js +82 -0
  76. package/execution/ContextGauge.js.map +1 -0
  77. package/execution/InteractionModeBadge.d.ts +24 -0
  78. package/execution/InteractionModeBadge.d.ts.map +1 -0
  79. package/execution/InteractionModeBadge.js +29 -0
  80. package/execution/InteractionModeBadge.js.map +1 -0
  81. package/execution/MessageThread.d.ts +33 -3
  82. package/execution/MessageThread.d.ts.map +1 -1
  83. package/execution/MessageThread.js +51 -9
  84. package/execution/MessageThread.js.map +1 -1
  85. package/execution/PlanCompletionCard.d.ts +23 -0
  86. package/execution/PlanCompletionCard.d.ts.map +1 -0
  87. package/execution/PlanCompletionCard.js +28 -0
  88. package/execution/PlanCompletionCard.js.map +1 -0
  89. package/execution/SummarizationBadge.d.ts +30 -0
  90. package/execution/SummarizationBadge.d.ts.map +1 -0
  91. package/execution/SummarizationBadge.js +61 -0
  92. package/execution/SummarizationBadge.js.map +1 -0
  93. package/execution/SummarizationCard.d.ts +27 -0
  94. package/execution/SummarizationCard.d.ts.map +1 -0
  95. package/execution/SummarizationCard.js +47 -0
  96. package/execution/SummarizationCard.js.map +1 -0
  97. package/execution/__tests__/PlanCompletionCard.test.d.ts +2 -0
  98. package/execution/__tests__/PlanCompletionCard.test.d.ts.map +1 -0
  99. package/execution/__tests__/PlanCompletionCard.test.js +53 -0
  100. package/execution/__tests__/PlanCompletionCard.test.js.map +1 -0
  101. package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts +2 -0
  102. package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts.map +1 -0
  103. package/execution/__tests__/buildThreadItems-plan-completion.test.js +137 -0
  104. package/execution/__tests__/buildThreadItems-plan-completion.test.js.map +1 -0
  105. package/execution/__tests__/useContextWindow.test.d.ts +2 -0
  106. package/execution/__tests__/useContextWindow.test.d.ts.map +1 -0
  107. package/execution/__tests__/useContextWindow.test.js +121 -0
  108. package/execution/__tests__/useContextWindow.test.js.map +1 -0
  109. package/execution/index.d.ts +12 -0
  110. package/execution/index.d.ts.map +1 -1
  111. package/execution/index.js +6 -0
  112. package/execution/index.js.map +1 -1
  113. package/execution/useContextWindow.d.ts +71 -0
  114. package/execution/useContextWindow.d.ts.map +1 -0
  115. package/execution/useContextWindow.js +91 -0
  116. package/execution/useContextWindow.js.map +1 -0
  117. package/execution/useCreateAgentExecution.d.ts +9 -0
  118. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  119. package/execution/useCreateAgentExecution.js +15 -3
  120. package/execution/useCreateAgentExecution.js.map +1 -1
  121. package/index.d.ts +9 -4
  122. package/index.d.ts.map +1 -1
  123. package/index.js +12 -2
  124. package/index.js.map +1 -1
  125. package/internal/VirtualizedThread.d.ts +2 -1
  126. package/internal/VirtualizedThread.d.ts.map +1 -1
  127. package/internal/VirtualizedThread.js +3 -2
  128. package/internal/VirtualizedThread.js.map +1 -1
  129. package/internal/store/index.d.ts +1 -0
  130. package/internal/store/index.d.ts.map +1 -1
  131. package/internal/store/index.js +1 -0
  132. package/internal/store/index.js.map +1 -1
  133. package/internal/store/workflow-execution-event-store.d.ts +92 -0
  134. package/internal/store/workflow-execution-event-store.d.ts.map +1 -0
  135. package/internal/store/workflow-execution-event-store.js +298 -0
  136. package/internal/store/workflow-execution-event-store.js.map +1 -0
  137. package/library/ScopeToggle.d.ts +13 -9
  138. package/library/ScopeToggle.d.ts.map +1 -1
  139. package/library/ScopeToggle.js +43 -22
  140. package/library/ScopeToggle.js.map +1 -1
  141. package/library/VisibilityToggle.js +14 -5
  142. package/library/VisibilityToggle.js.map +1 -1
  143. package/library/index.d.ts +1 -0
  144. package/library/index.d.ts.map +1 -1
  145. package/library/index.js +1 -0
  146. package/library/index.js.map +1 -1
  147. package/library/useExportResource.d.ts +3 -2
  148. package/library/useExportResource.d.ts.map +1 -1
  149. package/library/useExportResource.js +11 -6
  150. package/library/useExportResource.js.map +1 -1
  151. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  152. package/mcp-server/McpServerDetailView.js +25 -13
  153. package/mcp-server/McpServerDetailView.js.map +1 -1
  154. package/mcp-server/McpServerPicker.d.ts.map +1 -1
  155. package/mcp-server/McpServerPicker.js +4 -2
  156. package/mcp-server/McpServerPicker.js.map +1 -1
  157. package/package.json +16 -5
  158. package/provider.d.ts.map +1 -1
  159. package/provider.js +164 -1
  160. package/provider.js.map +1 -1
  161. package/resource-detail/ResourceDetailShell.d.ts +1 -1
  162. package/resource-detail/ResourceDetailShell.d.ts.map +1 -1
  163. package/resource-detail/ResourceDetailShell.js +6 -6
  164. package/resource-detail/ResourceDetailShell.js.map +1 -1
  165. package/resource-detail/types.d.ts +23 -0
  166. package/resource-detail/types.d.ts.map +1 -1
  167. package/resource-detail/useDeleteResource.d.ts +1 -1
  168. package/resource-detail/useDeleteResource.d.ts.map +1 -1
  169. package/resource-detail/useDeleteResource.js +5 -0
  170. package/resource-detail/useDeleteResource.js.map +1 -1
  171. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -1
  172. package/resource-workbench/components/ResourceWorkbench.js +2 -1
  173. package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
  174. package/session/useNewSessionFlow.d.ts.map +1 -1
  175. package/session/useNewSessionFlow.js +1 -0
  176. package/session/useNewSessionFlow.js.map +1 -1
  177. package/session/useSessionConversation.d.ts +7 -0
  178. package/session/useSessionConversation.d.ts.map +1 -1
  179. package/session/useSessionConversation.js +1 -0
  180. package/session/useSessionConversation.js.map +1 -1
  181. package/session/useSessionPageFlow.d.ts.map +1 -1
  182. package/session/useSessionPageFlow.js +1 -0
  183. package/session/useSessionPageFlow.js.map +1 -1
  184. package/session/useSessionUsage.d.ts.map +1 -1
  185. package/session/useSessionUsage.js +65 -4
  186. package/session/useSessionUsage.js.map +1 -1
  187. package/settings/UsageSection.d.ts.map +1 -1
  188. package/settings/UsageSection.js +1 -4
  189. package/settings/UsageSection.js.map +1 -1
  190. package/skill/SkillPicker.d.ts.map +1 -1
  191. package/skill/SkillPicker.js +4 -2
  192. package/skill/SkillPicker.js.map +1 -1
  193. package/src/activity/group-activity.ts +65 -0
  194. package/src/activity/index.ts +13 -0
  195. package/src/activity/types.ts +35 -0
  196. package/src/activity/useRecentActivity.ts +131 -0
  197. package/src/agent/AgentPicker.tsx +6 -1
  198. package/src/billing/BillingSection.tsx +3 -2
  199. package/src/composer/ComposerToolbar.tsx +19 -1
  200. package/src/composer/InteractionModePicker.tsx +189 -0
  201. package/src/composer/SessionComposer.tsx +85 -8
  202. package/src/composer/__tests__/SessionComposer-memo.test.ts +11 -6
  203. package/src/composer/index.ts +7 -0
  204. package/src/dashboard/DashboardFailedRuns.tsx +109 -0
  205. package/src/dashboard/DashboardKPICards.tsx +128 -0
  206. package/src/dashboard/OperationalDashboard.tsx +96 -0
  207. package/src/dashboard/index.ts +37 -0
  208. package/src/dashboard/types.ts +50 -0
  209. package/src/dashboard/useAgentExecutionSummary.ts +71 -0
  210. package/src/dashboard/useDashboardFailedRuns.ts +122 -0
  211. package/src/dashboard/useDashboardSummary.ts +109 -0
  212. package/src/execution/ContextGauge.tsx +243 -0
  213. package/src/execution/InteractionModeBadge.tsx +70 -0
  214. package/src/execution/MessageThread.tsx +88 -3
  215. package/src/execution/PlanCompletionCard.tsx +105 -0
  216. package/src/execution/SummarizationBadge.tsx +188 -0
  217. package/src/execution/SummarizationCard.tsx +126 -0
  218. package/src/execution/__tests__/PlanCompletionCard.test.tsx +67 -0
  219. package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +197 -0
  220. package/src/execution/__tests__/useContextWindow.test.ts +167 -0
  221. package/src/execution/index.ts +22 -0
  222. package/src/execution/useContextWindow.ts +148 -0
  223. package/src/execution/useCreateAgentExecution.ts +26 -3
  224. package/src/index.ts +222 -0
  225. package/src/internal/VirtualizedThread.tsx +4 -1
  226. package/src/internal/store/index.ts +6 -0
  227. package/src/internal/store/workflow-execution-event-store.ts +391 -0
  228. package/src/library/ScopeToggle.tsx +88 -20
  229. package/src/library/VisibilityToggle.tsx +54 -13
  230. package/src/library/index.ts +2 -0
  231. package/src/library/useExportResource.ts +12 -9
  232. package/src/mcp-server/McpServerDetailView.tsx +80 -148
  233. package/src/mcp-server/McpServerPicker.tsx +6 -1
  234. package/src/provider.tsx +195 -8
  235. package/src/resource-detail/ResourceDetailShell.tsx +21 -4
  236. package/src/resource-detail/types.ts +25 -0
  237. package/src/resource-detail/useDeleteResource.ts +6 -1
  238. package/src/resource-workbench/components/ResourceWorkbench.tsx +4 -0
  239. package/src/session/useNewSessionFlow.ts +1 -0
  240. package/src/session/useSessionConversation.ts +8 -0
  241. package/src/session/useSessionPageFlow.ts +1 -0
  242. package/src/session/useSessionUsage.ts +72 -4
  243. package/src/settings/UsageSection.tsx +1 -9
  244. package/src/skill/SkillPicker.tsx +6 -1
  245. package/src/workflow/ApprovalFormBuilder.tsx +1017 -0
  246. package/src/workflow/BranchConditionBuilder.tsx +451 -0
  247. package/src/workflow/CanvasActionsContext.ts +12 -0
  248. package/src/workflow/CanvasContextMenu.tsx +364 -0
  249. package/src/workflow/CanvasTaskNode.tsx +372 -0
  250. package/src/workflow/CanvasTransitionEdge.tsx +122 -0
  251. package/src/workflow/CostByWorkflowChart.tsx +120 -0
  252. package/src/workflow/ExecutionSummaryWidget.tsx +194 -0
  253. package/src/workflow/ExecutionTrendChart.tsx +157 -0
  254. package/src/workflow/FailedRunsWidget.tsx +109 -0
  255. package/src/workflow/PendingApprovalsWidget.tsx +115 -0
  256. package/src/workflow/TaskConfigForm.tsx +618 -0
  257. package/src/workflow/TaskKindRegistryContext.ts +36 -0
  258. package/src/workflow/TaskPickerPopover.tsx +326 -0
  259. package/src/workflow/WorkflowArchitectDialog.tsx +505 -0
  260. package/src/workflow/WorkflowCanvasEditor.tsx +651 -0
  261. package/src/workflow/WorkflowCanvasInner.tsx +160 -0
  262. package/src/workflow/WorkflowDashboard.tsx +124 -0
  263. package/src/workflow/WorkflowDetailView.tsx +527 -0
  264. package/src/workflow/WorkflowEditorView.tsx +547 -0
  265. package/src/workflow/WorkflowExecutionApprovalCard.tsx +129 -0
  266. package/src/workflow/WorkflowExecutionArtifactPanel.tsx +112 -0
  267. package/src/workflow/WorkflowExecutionCostPanel.tsx +131 -0
  268. package/src/workflow/WorkflowExecutionHeader.tsx +194 -0
  269. package/src/workflow/WorkflowExecutionPhaseBadge.tsx +188 -0
  270. package/src/workflow/WorkflowExecutionTaskPanel.tsx +135 -0
  271. package/src/workflow/WorkflowExecutionTimeline.tsx +118 -0
  272. package/src/workflow/WorkflowExecutionTimelineEvent.tsx +488 -0
  273. package/src/workflow/WorkflowExecutionViewer.tsx +248 -0
  274. package/src/workflow/WorkflowInspectorPanel.tsx +568 -0
  275. package/src/workflow/WorkflowRefinePanel.tsx +411 -0
  276. package/src/workflow/WorkflowRepairCard.tsx +433 -0
  277. package/src/workflow/WorkflowRunDialog.tsx +220 -0
  278. package/src/workflow/WorkflowRunForm.tsx +245 -0
  279. package/src/workflow/WorkflowTaskList.tsx +177 -0
  280. package/src/workflow/WorkflowTaskPalette.tsx +248 -0
  281. package/src/workflow/WorkflowTopologyGraph.tsx +250 -0
  282. package/src/workflow/WorkflowYamlEditor.tsx +271 -0
  283. package/src/workflow/__tests__/starter-workflow-yaml.test.ts +57 -0
  284. package/src/workflow/canvas-constants.ts +87 -0
  285. package/src/workflow/canvas-icons.tsx +36 -0
  286. package/src/workflow/extract-workflow-yaml.ts +87 -0
  287. package/src/workflow/graph-commands.ts +675 -0
  288. package/src/workflow/index.ts +375 -0
  289. package/src/workflow/serialize-workflow-yaml.ts +546 -0
  290. package/src/workflow/starter-workflow-yaml.ts +29 -0
  291. package/src/workflow/types.ts +99 -0
  292. package/src/workflow/useCanvasKeyboardShortcuts.ts +134 -0
  293. package/src/workflow/useDiagnoseExecutionFlow.ts +378 -0
  294. package/src/workflow/useGraphHistory.ts +138 -0
  295. package/src/workflow/usePendingApprovals.ts +89 -0
  296. package/src/workflow/useRefineWorkflowFlow.ts +321 -0
  297. package/src/workflow/useResolveAgentExecutionSession.ts +57 -0
  298. package/src/workflow/useRunWorkflowFlow.ts +235 -0
  299. package/src/workflow/useTaskKindRegistry.ts +135 -0
  300. package/src/workflow/useWorkflow.ts +78 -0
  301. package/src/workflow/useWorkflowArchitectFlow.ts +303 -0
  302. package/src/workflow/useWorkflowCanvas.ts +882 -0
  303. package/src/workflow/useWorkflowCount.ts +66 -0
  304. package/src/workflow/useWorkflowDashboardSummary.ts +71 -0
  305. package/src/workflow/useWorkflowEditor.ts +106 -0
  306. package/src/workflow/useWorkflowExecution.ts +67 -0
  307. package/src/workflow/useWorkflowExecutionActions.ts +179 -0
  308. package/src/workflow/useWorkflowExecutionArtifacts.ts +57 -0
  309. package/src/workflow/useWorkflowExecutionEventLog.ts +111 -0
  310. package/src/workflow/useWorkflowExecutionEventStream.ts +244 -0
  311. package/src/workflow/useWorkflowExecutionList.ts +121 -0
  312. package/src/workflow/useWorkflowInstances.ts +62 -0
  313. package/src/workflow/useWorkflowList.ts +79 -0
  314. package/src/workflow/useWorkflowSave.ts +84 -0
  315. package/src/workflow/useWorkflowTopology.ts +229 -0
  316. package/src/workflow/useWorkflowValidation.ts +329 -0
  317. package/src/workflow/useWorkflowYaml.ts +49 -0
  318. package/src/workflow/workflow-graph-conversions.ts +796 -0
  319. package/src/workflow/workflow-graph-model.ts +83 -0
  320. package/src/workflow/workflow-yaml-diff.ts +132 -0
  321. package/styles.css +1 -1
  322. package/workflow/ApprovalFormBuilder.d.ts +24 -0
  323. package/workflow/ApprovalFormBuilder.d.ts.map +1 -0
  324. package/workflow/ApprovalFormBuilder.js +347 -0
  325. package/workflow/ApprovalFormBuilder.js.map +1 -0
  326. package/workflow/BranchConditionBuilder.d.ts +29 -0
  327. package/workflow/BranchConditionBuilder.d.ts.map +1 -0
  328. package/workflow/BranchConditionBuilder.js +170 -0
  329. package/workflow/BranchConditionBuilder.js.map +1 -0
  330. package/workflow/CanvasActionsContext.d.ts +8 -0
  331. package/workflow/CanvasActionsContext.d.ts.map +1 -0
  332. package/workflow/CanvasActionsContext.js +4 -0
  333. package/workflow/CanvasActionsContext.js.map +1 -0
  334. package/workflow/CanvasContextMenu.d.ts +59 -0
  335. package/workflow/CanvasContextMenu.d.ts.map +1 -0
  336. package/workflow/CanvasContextMenu.js +98 -0
  337. package/workflow/CanvasContextMenu.js.map +1 -0
  338. package/workflow/CanvasTaskNode.d.ts +21 -0
  339. package/workflow/CanvasTaskNode.d.ts.map +1 -0
  340. package/workflow/CanvasTaskNode.js +125 -0
  341. package/workflow/CanvasTaskNode.js.map +1 -0
  342. package/workflow/CanvasTransitionEdge.d.ts +24 -0
  343. package/workflow/CanvasTransitionEdge.d.ts.map +1 -0
  344. package/workflow/CanvasTransitionEdge.js +50 -0
  345. package/workflow/CanvasTransitionEdge.js.map +1 -0
  346. package/workflow/CostByWorkflowChart.d.ts +15 -0
  347. package/workflow/CostByWorkflowChart.d.ts.map +1 -0
  348. package/workflow/CostByWorkflowChart.js +45 -0
  349. package/workflow/CostByWorkflowChart.js.map +1 -0
  350. package/workflow/ExecutionSummaryWidget.d.ts +16 -0
  351. package/workflow/ExecutionSummaryWidget.d.ts.map +1 -0
  352. package/workflow/ExecutionSummaryWidget.js +93 -0
  353. package/workflow/ExecutionSummaryWidget.js.map +1 -0
  354. package/workflow/ExecutionTrendChart.d.ts +14 -0
  355. package/workflow/ExecutionTrendChart.d.ts.map +1 -0
  356. package/workflow/ExecutionTrendChart.js +67 -0
  357. package/workflow/ExecutionTrendChart.js.map +1 -0
  358. package/workflow/FailedRunsWidget.d.ts +19 -0
  359. package/workflow/FailedRunsWidget.d.ts.map +1 -0
  360. package/workflow/FailedRunsWidget.js +37 -0
  361. package/workflow/FailedRunsWidget.js.map +1 -0
  362. package/workflow/PendingApprovalsWidget.d.ts +19 -0
  363. package/workflow/PendingApprovalsWidget.d.ts.map +1 -0
  364. package/workflow/PendingApprovalsWidget.js +35 -0
  365. package/workflow/PendingApprovalsWidget.js.map +1 -0
  366. package/workflow/TaskConfigForm.d.ts +29 -0
  367. package/workflow/TaskConfigForm.d.ts.map +1 -0
  368. package/workflow/TaskConfigForm.js +230 -0
  369. package/workflow/TaskConfigForm.js.map +1 -0
  370. package/workflow/TaskKindRegistryContext.d.ts +24 -0
  371. package/workflow/TaskKindRegistryContext.d.ts.map +1 -0
  372. package/workflow/TaskKindRegistryContext.js +25 -0
  373. package/workflow/TaskKindRegistryContext.js.map +1 -0
  374. package/workflow/TaskPickerPopover.d.ts +33 -0
  375. package/workflow/TaskPickerPopover.d.ts.map +1 -0
  376. package/workflow/TaskPickerPopover.js +110 -0
  377. package/workflow/TaskPickerPopover.js.map +1 -0
  378. package/workflow/WorkflowArchitectDialog.d.ts +48 -0
  379. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -0
  380. package/workflow/WorkflowArchitectDialog.js +129 -0
  381. package/workflow/WorkflowArchitectDialog.js.map +1 -0
  382. package/workflow/WorkflowCanvasEditor.d.ts +38 -0
  383. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -0
  384. package/workflow/WorkflowCanvasEditor.js +287 -0
  385. package/workflow/WorkflowCanvasEditor.js.map +1 -0
  386. package/workflow/WorkflowCanvasInner.d.ts +32 -0
  387. package/workflow/WorkflowCanvasInner.d.ts.map +1 -0
  388. package/workflow/WorkflowCanvasInner.js +49 -0
  389. package/workflow/WorkflowCanvasInner.js.map +1 -0
  390. package/workflow/WorkflowDashboard.d.ts +35 -0
  391. package/workflow/WorkflowDashboard.d.ts.map +1 -0
  392. package/workflow/WorkflowDashboard.js +59 -0
  393. package/workflow/WorkflowDashboard.js.map +1 -0
  394. package/workflow/WorkflowDetailView.d.ts +63 -0
  395. package/workflow/WorkflowDetailView.d.ts.map +1 -0
  396. package/workflow/WorkflowDetailView.js +202 -0
  397. package/workflow/WorkflowDetailView.js.map +1 -0
  398. package/workflow/WorkflowEditorView.d.ts +43 -0
  399. package/workflow/WorkflowEditorView.d.ts.map +1 -0
  400. package/workflow/WorkflowEditorView.js +165 -0
  401. package/workflow/WorkflowEditorView.js.map +1 -0
  402. package/workflow/WorkflowExecutionApprovalCard.d.ts +27 -0
  403. package/workflow/WorkflowExecutionApprovalCard.d.ts.map +1 -0
  404. package/workflow/WorkflowExecutionApprovalCard.js +32 -0
  405. package/workflow/WorkflowExecutionApprovalCard.js.map +1 -0
  406. package/workflow/WorkflowExecutionArtifactPanel.d.ts +15 -0
  407. package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +1 -0
  408. package/workflow/WorkflowExecutionArtifactPanel.js +53 -0
  409. package/workflow/WorkflowExecutionArtifactPanel.js.map +1 -0
  410. package/workflow/WorkflowExecutionCostPanel.d.ts +18 -0
  411. package/workflow/WorkflowExecutionCostPanel.d.ts.map +1 -0
  412. package/workflow/WorkflowExecutionCostPanel.js +44 -0
  413. package/workflow/WorkflowExecutionCostPanel.js.map +1 -0
  414. package/workflow/WorkflowExecutionHeader.d.ts +26 -0
  415. package/workflow/WorkflowExecutionHeader.d.ts.map +1 -0
  416. package/workflow/WorkflowExecutionHeader.js +68 -0
  417. package/workflow/WorkflowExecutionHeader.js.map +1 -0
  418. package/workflow/WorkflowExecutionPhaseBadge.d.ts +23 -0
  419. package/workflow/WorkflowExecutionPhaseBadge.d.ts.map +1 -0
  420. package/workflow/WorkflowExecutionPhaseBadge.js +99 -0
  421. package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -0
  422. package/workflow/WorkflowExecutionTaskPanel.d.ts +24 -0
  423. package/workflow/WorkflowExecutionTaskPanel.d.ts.map +1 -0
  424. package/workflow/WorkflowExecutionTaskPanel.js +59 -0
  425. package/workflow/WorkflowExecutionTaskPanel.js.map +1 -0
  426. package/workflow/WorkflowExecutionTimeline.d.ts +27 -0
  427. package/workflow/WorkflowExecutionTimeline.d.ts.map +1 -0
  428. package/workflow/WorkflowExecutionTimeline.js +51 -0
  429. package/workflow/WorkflowExecutionTimeline.js.map +1 -0
  430. package/workflow/WorkflowExecutionTimelineEvent.d.ts +18 -0
  431. package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +1 -0
  432. package/workflow/WorkflowExecutionTimelineEvent.js +210 -0
  433. package/workflow/WorkflowExecutionTimelineEvent.js.map +1 -0
  434. package/workflow/WorkflowExecutionViewer.d.ts +45 -0
  435. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -0
  436. package/workflow/WorkflowExecutionViewer.js +75 -0
  437. package/workflow/WorkflowExecutionViewer.js.map +1 -0
  438. package/workflow/WorkflowInspectorPanel.d.ts +46 -0
  439. package/workflow/WorkflowInspectorPanel.d.ts.map +1 -0
  440. package/workflow/WorkflowInspectorPanel.js +152 -0
  441. package/workflow/WorkflowInspectorPanel.js.map +1 -0
  442. package/workflow/WorkflowRefinePanel.d.ts +30 -0
  443. package/workflow/WorkflowRefinePanel.d.ts.map +1 -0
  444. package/workflow/WorkflowRefinePanel.js +107 -0
  445. package/workflow/WorkflowRefinePanel.js.map +1 -0
  446. package/workflow/WorkflowRepairCard.d.ts +35 -0
  447. package/workflow/WorkflowRepairCard.d.ts.map +1 -0
  448. package/workflow/WorkflowRepairCard.js +113 -0
  449. package/workflow/WorkflowRepairCard.js.map +1 -0
  450. package/workflow/WorkflowRunDialog.d.ts +51 -0
  451. package/workflow/WorkflowRunDialog.d.ts.map +1 -0
  452. package/workflow/WorkflowRunDialog.js +75 -0
  453. package/workflow/WorkflowRunDialog.js.map +1 -0
  454. package/workflow/WorkflowRunForm.d.ts +62 -0
  455. package/workflow/WorkflowRunForm.d.ts.map +1 -0
  456. package/workflow/WorkflowRunForm.js +64 -0
  457. package/workflow/WorkflowRunForm.js.map +1 -0
  458. package/workflow/WorkflowTaskList.d.ts +25 -0
  459. package/workflow/WorkflowTaskList.d.ts.map +1 -0
  460. package/workflow/WorkflowTaskList.js +89 -0
  461. package/workflow/WorkflowTaskList.js.map +1 -0
  462. package/workflow/WorkflowTaskPalette.d.ts +22 -0
  463. package/workflow/WorkflowTaskPalette.d.ts.map +1 -0
  464. package/workflow/WorkflowTaskPalette.js +83 -0
  465. package/workflow/WorkflowTaskPalette.js.map +1 -0
  466. package/workflow/WorkflowTopologyGraph.d.ts +22 -0
  467. package/workflow/WorkflowTopologyGraph.d.ts.map +1 -0
  468. package/workflow/WorkflowTopologyGraph.js +123 -0
  469. package/workflow/WorkflowTopologyGraph.js.map +1 -0
  470. package/workflow/WorkflowYamlEditor.d.ts +43 -0
  471. package/workflow/WorkflowYamlEditor.d.ts.map +1 -0
  472. package/workflow/WorkflowYamlEditor.js +215 -0
  473. package/workflow/WorkflowYamlEditor.js.map +1 -0
  474. package/workflow/__tests__/starter-workflow-yaml.test.d.ts +2 -0
  475. package/workflow/__tests__/starter-workflow-yaml.test.d.ts.map +1 -0
  476. package/workflow/__tests__/starter-workflow-yaml.test.js +44 -0
  477. package/workflow/__tests__/starter-workflow-yaml.test.js.map +1 -0
  478. package/workflow/canvas-constants.d.ts +56 -0
  479. package/workflow/canvas-constants.d.ts.map +1 -0
  480. package/workflow/canvas-constants.js +74 -0
  481. package/workflow/canvas-constants.js.map +1 -0
  482. package/workflow/canvas-icons.d.ts +13 -0
  483. package/workflow/canvas-icons.d.ts.map +1 -0
  484. package/workflow/canvas-icons.js +21 -0
  485. package/workflow/canvas-icons.js.map +1 -0
  486. package/workflow/extract-workflow-yaml.d.ts +22 -0
  487. package/workflow/extract-workflow-yaml.d.ts.map +1 -0
  488. package/workflow/extract-workflow-yaml.js +63 -0
  489. package/workflow/extract-workflow-yaml.js.map +1 -0
  490. package/workflow/graph-commands.d.ts +209 -0
  491. package/workflow/graph-commands.d.ts.map +1 -0
  492. package/workflow/graph-commands.js +516 -0
  493. package/workflow/graph-commands.js.map +1 -0
  494. package/workflow/index.d.ts +66 -0
  495. package/workflow/index.d.ts.map +1 -0
  496. package/workflow/index.js +88 -0
  497. package/workflow/index.js.map +1 -0
  498. package/workflow/serialize-workflow-yaml.d.ts +39 -0
  499. package/workflow/serialize-workflow-yaml.d.ts.map +1 -0
  500. package/workflow/serialize-workflow-yaml.js +413 -0
  501. package/workflow/serialize-workflow-yaml.js.map +1 -0
  502. package/workflow/starter-workflow-yaml.d.ts +12 -0
  503. package/workflow/starter-workflow-yaml.d.ts.map +1 -0
  504. package/workflow/starter-workflow-yaml.js +30 -0
  505. package/workflow/starter-workflow-yaml.js.map +1 -0
  506. package/workflow/types.d.ts +80 -0
  507. package/workflow/types.d.ts.map +1 -0
  508. package/workflow/types.js +2 -0
  509. package/workflow/types.js.map +1 -0
  510. package/workflow/useCanvasKeyboardShortcuts.d.ts +34 -0
  511. package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -0
  512. package/workflow/useCanvasKeyboardShortcuts.js +108 -0
  513. package/workflow/useCanvasKeyboardShortcuts.js.map +1 -0
  514. package/workflow/useDiagnoseExecutionFlow.d.ts +87 -0
  515. package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -0
  516. package/workflow/useDiagnoseExecutionFlow.js +257 -0
  517. package/workflow/useDiagnoseExecutionFlow.js.map +1 -0
  518. package/workflow/useGraphHistory.d.ts +28 -0
  519. package/workflow/useGraphHistory.d.ts.map +1 -0
  520. package/workflow/useGraphHistory.js +106 -0
  521. package/workflow/useGraphHistory.js.map +1 -0
  522. package/workflow/usePendingApprovals.d.ts +35 -0
  523. package/workflow/usePendingApprovals.d.ts.map +1 -0
  524. package/workflow/usePendingApprovals.js +50 -0
  525. package/workflow/usePendingApprovals.js.map +1 -0
  526. package/workflow/useRefineWorkflowFlow.d.ts +75 -0
  527. package/workflow/useRefineWorkflowFlow.d.ts.map +1 -0
  528. package/workflow/useRefineWorkflowFlow.js +216 -0
  529. package/workflow/useRefineWorkflowFlow.js.map +1 -0
  530. package/workflow/useResolveAgentExecutionSession.d.ts +33 -0
  531. package/workflow/useResolveAgentExecutionSession.d.ts.map +1 -0
  532. package/workflow/useResolveAgentExecutionSession.js +37 -0
  533. package/workflow/useResolveAgentExecutionSession.js.map +1 -0
  534. package/workflow/useRunWorkflowFlow.d.ts +82 -0
  535. package/workflow/useRunWorkflowFlow.d.ts.map +1 -0
  536. package/workflow/useRunWorkflowFlow.js +145 -0
  537. package/workflow/useRunWorkflowFlow.js.map +1 -0
  538. package/workflow/useTaskKindRegistry.d.ts +96 -0
  539. package/workflow/useTaskKindRegistry.d.ts.map +1 -0
  540. package/workflow/useTaskKindRegistry.js +75 -0
  541. package/workflow/useTaskKindRegistry.js.map +1 -0
  542. package/workflow/useWorkflow.d.ts +47 -0
  543. package/workflow/useWorkflow.d.ts.map +1 -0
  544. package/workflow/useWorkflow.js +53 -0
  545. package/workflow/useWorkflow.js.map +1 -0
  546. package/workflow/useWorkflowArchitectFlow.d.ts +96 -0
  547. package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -0
  548. package/workflow/useWorkflowArchitectFlow.js +179 -0
  549. package/workflow/useWorkflowArchitectFlow.js.map +1 -0
  550. package/workflow/useWorkflowCanvas.d.ts +66 -0
  551. package/workflow/useWorkflowCanvas.d.ts.map +1 -0
  552. package/workflow/useWorkflowCanvas.js +628 -0
  553. package/workflow/useWorkflowCanvas.js.map +1 -0
  554. package/workflow/useWorkflowCount.d.ts +47 -0
  555. package/workflow/useWorkflowCount.d.ts.map +1 -0
  556. package/workflow/useWorkflowCount.js +26 -0
  557. package/workflow/useWorkflowCount.js.map +1 -0
  558. package/workflow/useWorkflowDashboardSummary.d.ts +34 -0
  559. package/workflow/useWorkflowDashboardSummary.d.ts.map +1 -0
  560. package/workflow/useWorkflowDashboardSummary.js +33 -0
  561. package/workflow/useWorkflowDashboardSummary.js.map +1 -0
  562. package/workflow/useWorkflowEditor.d.ts +45 -0
  563. package/workflow/useWorkflowEditor.d.ts.map +1 -0
  564. package/workflow/useWorkflowEditor.js +52 -0
  565. package/workflow/useWorkflowEditor.js.map +1 -0
  566. package/workflow/useWorkflowExecution.d.ts +37 -0
  567. package/workflow/useWorkflowExecution.d.ts.map +1 -0
  568. package/workflow/useWorkflowExecution.js +43 -0
  569. package/workflow/useWorkflowExecution.js.map +1 -0
  570. package/workflow/useWorkflowExecutionActions.d.ts +41 -0
  571. package/workflow/useWorkflowExecutionActions.d.ts.map +1 -0
  572. package/workflow/useWorkflowExecutionActions.js +86 -0
  573. package/workflow/useWorkflowExecutionActions.js.map +1 -0
  574. package/workflow/useWorkflowExecutionArtifacts.d.ts +26 -0
  575. package/workflow/useWorkflowExecutionArtifacts.d.ts.map +1 -0
  576. package/workflow/useWorkflowExecutionArtifacts.js +29 -0
  577. package/workflow/useWorkflowExecutionArtifacts.js.map +1 -0
  578. package/workflow/useWorkflowExecutionEventLog.d.ts +47 -0
  579. package/workflow/useWorkflowExecutionEventLog.d.ts.map +1 -0
  580. package/workflow/useWorkflowExecutionEventLog.js +59 -0
  581. package/workflow/useWorkflowExecutionEventLog.js.map +1 -0
  582. package/workflow/useWorkflowExecutionEventStream.d.ts +61 -0
  583. package/workflow/useWorkflowExecutionEventStream.d.ts.map +1 -0
  584. package/workflow/useWorkflowExecutionEventStream.js +161 -0
  585. package/workflow/useWorkflowExecutionEventStream.js.map +1 -0
  586. package/workflow/useWorkflowExecutionList.d.ts +49 -0
  587. package/workflow/useWorkflowExecutionList.d.ts.map +1 -0
  588. package/workflow/useWorkflowExecutionList.js +65 -0
  589. package/workflow/useWorkflowExecutionList.js.map +1 -0
  590. package/workflow/useWorkflowInstances.d.ts +30 -0
  591. package/workflow/useWorkflowInstances.d.ts.map +1 -0
  592. package/workflow/useWorkflowInstances.js +33 -0
  593. package/workflow/useWorkflowInstances.js.map +1 -0
  594. package/workflow/useWorkflowList.d.ts +57 -0
  595. package/workflow/useWorkflowList.d.ts.map +1 -0
  596. package/workflow/useWorkflowList.js +29 -0
  597. package/workflow/useWorkflowList.js.map +1 -0
  598. package/workflow/useWorkflowSave.d.ts +25 -0
  599. package/workflow/useWorkflowSave.d.ts.map +1 -0
  600. package/workflow/useWorkflowSave.js +61 -0
  601. package/workflow/useWorkflowSave.js.map +1 -0
  602. package/workflow/useWorkflowTopology.d.ts +40 -0
  603. package/workflow/useWorkflowTopology.d.ts.map +1 -0
  604. package/workflow/useWorkflowTopology.js +163 -0
  605. package/workflow/useWorkflowTopology.js.map +1 -0
  606. package/workflow/useWorkflowValidation.d.ts +27 -0
  607. package/workflow/useWorkflowValidation.d.ts.map +1 -0
  608. package/workflow/useWorkflowValidation.js +253 -0
  609. package/workflow/useWorkflowValidation.js.map +1 -0
  610. package/workflow/useWorkflowYaml.d.ts +26 -0
  611. package/workflow/useWorkflowYaml.d.ts.map +1 -0
  612. package/workflow/useWorkflowYaml.js +26 -0
  613. package/workflow/useWorkflowYaml.js.map +1 -0
  614. package/workflow/workflow-graph-conversions.d.ts +70 -0
  615. package/workflow/workflow-graph-conversions.d.ts.map +1 -0
  616. package/workflow/workflow-graph-conversions.js +634 -0
  617. package/workflow/workflow-graph-conversions.js.map +1 -0
  618. package/workflow/workflow-graph-model.d.ts +83 -0
  619. package/workflow/workflow-graph-model.d.ts.map +1 -0
  620. package/workflow/workflow-graph-model.js +5 -0
  621. package/workflow/workflow-graph-model.js.map +1 -0
  622. package/workflow/workflow-yaml-diff.d.ts +24 -0
  623. package/workflow/workflow-yaml-diff.d.ts.map +1 -0
  624. package/workflow/workflow-yaml-diff.js +96 -0
  625. package/workflow/workflow-yaml-diff.js.map +1 -0
@@ -0,0 +1,35 @@
1
+ import { type UseWorkflowDashboardSummaryOptions } from "./useWorkflowDashboardSummary";
2
+ export interface WorkflowDashboardProps {
3
+ /** Organization slug for scoping the dashboard data. */
4
+ readonly org: string | null | undefined;
5
+ /** Time window for the summary statistics. */
6
+ readonly timeWindow?: UseWorkflowDashboardSummaryOptions["timeWindow"];
7
+ /** Called when the user clicks "Review" on a pending approval. */
8
+ readonly onApprovalClick?: (executionId: string) => void;
9
+ /** Called when the user clicks "View" on a failed execution. */
10
+ readonly onFailedRunClick?: (executionId: string) => void;
11
+ readonly className?: string;
12
+ }
13
+ /**
14
+ * Composed dashboard widget that aggregates execution KPIs,
15
+ * pending approvals, and recent failures into a responsive layout.
16
+ *
17
+ * Composes three sub-widgets:
18
+ * - **ExecutionSummaryWidget** — phase counts, cost, duration
19
+ * - **PendingApprovalsWidget** — human_input tasks awaiting decisions
20
+ * - **FailedRunsWidget** — recent failed executions (from existing list API)
21
+ *
22
+ * All data fetching is internal. The consumer provides org context and
23
+ * navigation callbacks.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <WorkflowDashboard
28
+ * org="acme"
29
+ * onApprovalClick={(id) => navigate(`/workflows/executions/${id}`)}
30
+ * onFailedRunClick={(id) => navigate(`/workflows/executions/${id}`)}
31
+ * />
32
+ * ```
33
+ */
34
+ export declare const WorkflowDashboard: import("react").NamedExoticComponent<WorkflowDashboardProps>;
35
+ //# sourceMappingURL=WorkflowDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowDashboard.d.ts","sourceRoot":"","sources":["../../src/workflow/WorkflowDashboard.tsx"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,sBAAsB;IACrC,wDAAwD;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,kCAAkC,CAAC,YAAY,CAAC,CAAC;IACvE,kEAAkE;IAClE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,gEAAgE;IAChE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,iBAAiB,8DAqE5B,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { memo, useMemo } from "react";
4
+ import { create } from "@bufbuild/protobuf";
5
+ import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
6
+ import { ListWorkflowExecutionsRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
7
+ import { cn } from "@stigmer/theme";
8
+ import { useStigmer } from "../hooks";
9
+ import { useFetch } from "../internal/useFetch";
10
+ import { useWorkflowDashboardSummary, } from "./useWorkflowDashboardSummary";
11
+ import { usePendingApprovals } from "./usePendingApprovals";
12
+ import { ExecutionSummaryWidget } from "./ExecutionSummaryWidget";
13
+ import { PendingApprovalsWidget } from "./PendingApprovalsWidget";
14
+ import { FailedRunsWidget } from "./FailedRunsWidget";
15
+ const FAILED_LIST_INITIAL = [];
16
+ /**
17
+ * Composed dashboard widget that aggregates execution KPIs,
18
+ * pending approvals, and recent failures into a responsive layout.
19
+ *
20
+ * Composes three sub-widgets:
21
+ * - **ExecutionSummaryWidget** — phase counts, cost, duration
22
+ * - **PendingApprovalsWidget** — human_input tasks awaiting decisions
23
+ * - **FailedRunsWidget** — recent failed executions (from existing list API)
24
+ *
25
+ * All data fetching is internal. The consumer provides org context and
26
+ * navigation callbacks.
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <WorkflowDashboard
31
+ * org="acme"
32
+ * onApprovalClick={(id) => navigate(`/workflows/executions/${id}`)}
33
+ * onFailedRunClick={(id) => navigate(`/workflows/executions/${id}`)}
34
+ * />
35
+ * ```
36
+ */
37
+ export const WorkflowDashboard = memo(function WorkflowDashboard({ org, timeWindow, onApprovalClick, onFailedRunClick, className, }) {
38
+ const stigmer = useStigmer();
39
+ const { summary, isLoading: summaryLoading } = useWorkflowDashboardSummary({
40
+ org,
41
+ timeWindow,
42
+ refetchInterval: 60_000,
43
+ });
44
+ const { approvals, totalCount: approvalCount, isLoading: approvalsLoading, } = usePendingApprovals({ org, refetchInterval: 30_000 });
45
+ const fetchFailedFn = useMemo(() => org
46
+ ? async () => {
47
+ const resp = await stigmer.workflowExecution.list(create(ListWorkflowExecutionsRequestSchema, {
48
+ pageSize: 5,
49
+ phase: ExecutionPhase.EXECUTION_FAILED,
50
+ }));
51
+ return [...resp.entries];
52
+ }
53
+ : null, [stigmer, org]);
54
+ const { data: failedRuns, isLoading: failedLoading } = useFetch(fetchFailedFn, [stigmer, org], FAILED_LIST_INITIAL, {
55
+ refetchInterval: 60_000,
56
+ });
57
+ return (_jsxs("section", { "aria-label": "Workflow dashboard", className: cn("space-y-6", className), children: [_jsx(ExecutionSummaryWidget, { summary: summary, isLoading: summaryLoading }), _jsxs("div", { className: "grid gap-6 lg:grid-cols-2", children: [_jsx(PendingApprovalsWidget, { approvals: approvals, totalCount: approvalCount, isLoading: approvalsLoading, onReviewClick: onApprovalClick }), _jsx(FailedRunsWidget, { executions: failedRuns, isLoading: failedLoading, onViewClick: onFailedRunClick })] })] }));
58
+ });
59
+ //# sourceMappingURL=WorkflowDashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowDashboard.js","sourceRoot":"","sources":["../../src/workflow/WorkflowDashboard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iEAAiE,CAAC;AACjG,OAAO,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AACpH,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,2BAA2B,GAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAetD,MAAM,mBAAmB,GAAiC,EAAE,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,EAC/D,GAAG,EACH,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,SAAS,GACc;IACvB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAC1C,2BAA2B,CAAC;QAC1B,GAAG;QACH,UAAU;QACV,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;IAEL,MAAM,EACJ,SAAS,EACT,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,gBAAgB,GAC5B,GAAG,mBAAmB,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,GAAG;QACD,CAAC,CAAC,KAAK,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAC/C,MAAM,CAAC,mCAAmC,EAAE;gBAC1C,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,cAAc,CAAC,gBAAgB;aACvC,CAAC,CACH,CAAC;YACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAiC,CAAC;QAC3D,CAAC;QACH,CAAC,CAAC,IAAI,EACV,CAAC,OAAO,EAAE,GAAG,CAAC,CACf,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,QAAQ,CAE7D,aAAa,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,mBAAmB,EAAE;QACpD,eAAe,EAAE,MAAM;KACxB,CAAC,CAAC;IAEH,OAAO,CACL,iCACa,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,aAErC,KAAC,sBAAsB,IACrB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,cAAc,GACzB,EAEF,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,sBAAsB,IACrB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,eAAe,GAC9B,EACF,KAAC,gBAAgB,IACf,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,gBAAgB,GAC7B,IACE,IACE,CACX,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { AdditionalTab, DetailAction } from "../resource-detail/types";
2
+ /** Props for {@link WorkflowDetailView}. */
3
+ export interface WorkflowDetailViewProps {
4
+ /** Organization slug that owns the workflow. */
5
+ readonly org: string;
6
+ /** Workflow slug (URL-friendly identifier unique within the org). */
7
+ readonly slug: string;
8
+ /**
9
+ * Called once when the workflow resource has been fetched successfully.
10
+ * Provides the resource display name for breadcrumbs, document titles, etc.
11
+ */
12
+ readonly onResourceLoad?: (meta: {
13
+ name: string;
14
+ id: string;
15
+ }) => void;
16
+ /**
17
+ * Primary action rendered as a visible button in the header area.
18
+ */
19
+ readonly primaryAction?: DetailAction;
20
+ /**
21
+ * Secondary actions rendered in the kebab overflow menu.
22
+ */
23
+ readonly actions?: readonly DetailAction[];
24
+ /**
25
+ * Additional tabs to render alongside the built-in tabs.
26
+ */
27
+ readonly additionalTabs?: readonly AdditionalTab[];
28
+ /** Controlled active tab ID. */
29
+ readonly activeTab?: string;
30
+ /** Controlled tab change handler. */
31
+ readonly onTabChange?: (tabId: string) => void;
32
+ /** Default active tab ID when in uncontrolled mode. @default "overview" */
33
+ readonly defaultTab?: string;
34
+ /**
35
+ * Called when a user clicks an execution row in the Executions tab.
36
+ * Receives the execution ID — use for navigation to the execution viewer.
37
+ */
38
+ readonly onExecutionClick?: (executionId: string) => void;
39
+ /** Additional CSS classes for the root container. */
40
+ readonly className?: string;
41
+ }
42
+ /**
43
+ * Operational detail hub for a Workflow blueprint.
44
+ *
45
+ * Fetches the workflow via {@link useWorkflow} internally and renders
46
+ * its full specification inside a {@link ResourceDetailShell}:
47
+ *
48
+ * - **Overview**: Description, document metadata, budget summary, env vars
49
+ * - **Tasks**: Task list with kind icons and sequential flow
50
+ * - **Instances**: Environment-bound deployments (embedded, not standalone)
51
+ * - **Executions**: Recent executions with phase badges and timing
52
+ *
53
+ * Handles loading, error, and not-found states automatically.
54
+ * Zero Console dependencies — safe for platform builder embedding.
55
+ * All visual properties flow through `--stgm-*` design tokens.
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * <WorkflowDetailView org="acme" slug="onboard-user" />
60
+ * ```
61
+ */
62
+ export declare function WorkflowDetailView({ org, slug, onResourceLoad, primaryAction, actions, additionalTabs, activeTab, onTabChange, defaultTab, onExecutionClick, className, }: WorkflowDetailViewProps): import("react/jsx-runtime").JSX.Element;
63
+ //# sourceMappingURL=WorkflowDetailView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowDetailView.d.ts","sourceRoot":"","sources":["../../src/workflow/WorkflowDetailView.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAsB,MAAM,0BAA0B,CAAC;AAQhG,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvE;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC;IACtC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnD,gCAAgC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,IAAI,EACJ,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,SAAS,GACV,EAAE,uBAAuB,2CAqFzB"}
@@ -0,0 +1,202 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useRef } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { timestampDate } from "@bufbuild/protobuf/wkt";
6
+ import { ValidationState } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/serverless/validation_pb";
7
+ import { useWorkflow } from "./useWorkflow";
8
+ import { useWorkflowInstances } from "./useWorkflowInstances";
9
+ import { useWorkflowExecutionList } from "./useWorkflowExecutionList";
10
+ import { WorkflowTaskList } from "./WorkflowTaskList";
11
+ import { WorkflowExecutionPhaseBadge } from "./WorkflowExecutionPhaseBadge";
12
+ import { ErrorMessage } from "../error/ErrorMessage";
13
+ import { ResourceDetailShell } from "../resource-detail/ResourceDetailShell";
14
+ import { Section } from "../resource-detail/Section";
15
+ import { useDetailTabs } from "../resource-detail/useDetailTabs";
16
+ const OVERVIEW_TAB = { id: "overview", label: "Overview" };
17
+ const TASKS_TAB = { id: "tasks", label: "Tasks" };
18
+ const INSTANCES_TAB = { id: "instances", label: "Instances" };
19
+ const EXECUTIONS_TAB = { id: "executions", label: "Executions" };
20
+ /**
21
+ * Operational detail hub for a Workflow blueprint.
22
+ *
23
+ * Fetches the workflow via {@link useWorkflow} internally and renders
24
+ * its full specification inside a {@link ResourceDetailShell}:
25
+ *
26
+ * - **Overview**: Description, document metadata, budget summary, env vars
27
+ * - **Tasks**: Task list with kind icons and sequential flow
28
+ * - **Instances**: Environment-bound deployments (embedded, not standalone)
29
+ * - **Executions**: Recent executions with phase badges and timing
30
+ *
31
+ * Handles loading, error, and not-found states automatically.
32
+ * Zero Console dependencies — safe for platform builder embedding.
33
+ * All visual properties flow through `--stgm-*` design tokens.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * <WorkflowDetailView org="acme" slug="onboard-user" />
38
+ * ```
39
+ */
40
+ export function WorkflowDetailView({ org, slug, onResourceLoad, primaryAction, actions, additionalTabs, activeTab, onTabChange, defaultTab, onExecutionClick, className, }) {
41
+ const { workflow, isLoading, error, refetch } = useWorkflow(org, slug);
42
+ const builtInTabs = useMemo(() => [OVERVIEW_TAB, TASKS_TAB, INSTANCES_TAB, EXECUTIONS_TAB], []);
43
+ const { effectiveTabs, effectiveActiveTab, effectiveOnTabChange, activeAdditionalTab, } = useDetailTabs({
44
+ builtInTabs,
45
+ additionalTabs,
46
+ activeTab,
47
+ onTabChange,
48
+ defaultTab,
49
+ });
50
+ const onResourceLoadRef = useRef(onResourceLoad);
51
+ onResourceLoadRef.current = onResourceLoad;
52
+ useEffect(() => {
53
+ if (workflow?.metadata?.name) {
54
+ onResourceLoadRef.current?.({
55
+ name: workflow.metadata.name,
56
+ id: workflow.metadata.id,
57
+ });
58
+ }
59
+ }, [workflow]);
60
+ if (isLoading)
61
+ return _jsx(LoadingSkeleton, { className: className });
62
+ if (error)
63
+ return _jsx(ErrorMessage, { error: error, retry: refetch, className: className });
64
+ if (!workflow)
65
+ return _jsx(NotFoundState, { className: className });
66
+ const meta = workflow.metadata;
67
+ const spec = workflow.spec;
68
+ const specAudit = workflow.status?.audit?.specAudit;
69
+ const headerMeta = {
70
+ name: meta?.name || meta?.slug || "Untitled",
71
+ id: meta?.id || "",
72
+ org: meta?.org,
73
+ slug: meta?.slug,
74
+ description: spec?.description,
75
+ createdAt: specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null,
76
+ updatedAt: specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null,
77
+ };
78
+ const validationState = workflow.status?.serverlessWorkflowValidation?.state;
79
+ const headerMetaExtra = validationState ? (_jsx(ValidationIndicator, { state: validationState })) : undefined;
80
+ let tabContent;
81
+ if (activeAdditionalTab) {
82
+ tabContent = activeAdditionalTab.content;
83
+ }
84
+ else if (effectiveActiveTab === "tasks") {
85
+ tabContent = _jsx(TasksTab, { tasks: spec?.tasks ?? [] });
86
+ }
87
+ else if (effectiveActiveTab === "instances") {
88
+ tabContent = _jsx(InstancesTab, { workflowId: meta?.id });
89
+ }
90
+ else if (effectiveActiveTab === "executions") {
91
+ tabContent = _jsx(ExecutionsTab, { workflowId: meta?.id, onExecutionClick: onExecutionClick });
92
+ }
93
+ else {
94
+ tabContent = _jsx(OverviewTab, { workflow: workflow });
95
+ }
96
+ return (_jsx(ResourceDetailShell, { header: headerMeta, headerMetaExtra: headerMetaExtra, primaryAction: primaryAction, actions: actions, tabs: effectiveTabs, activeTab: effectiveActiveTab, onTabChange: effectiveOnTabChange, tabsAriaLabel: "Workflow detail tabs", className: className, children: tabContent }));
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Tab content components
100
+ // ---------------------------------------------------------------------------
101
+ function OverviewTab({ workflow }) {
102
+ const spec = workflow.spec;
103
+ const doc = spec?.document;
104
+ const budget = spec?.budget;
105
+ const envEntries = spec?.env ? Object.entries(spec.env) : [];
106
+ return (_jsxs("div", { className: "flex flex-col gap-6", children: [doc && (_jsx(Section, { title: "Document", children: _jsxs("div", { className: "divide-y divide-border", children: [_jsx(MetadataRow, { label: "DSL Version", value: doc.dsl }), _jsx(MetadataRow, { label: "Namespace", value: doc.namespace }), _jsx(MetadataRow, { label: "Name", value: doc.name }), _jsx(MetadataRow, { label: "Version", value: doc.version }), doc.description && (_jsx(MetadataRow, { label: "Description", value: doc.description }))] }) })), budget && hasBudget(budget) && (_jsx(Section, { title: "Budget", children: _jsxs("div", { className: "divide-y divide-border", children: [budget.maxCostMicros > 0 && (_jsx(MetadataRow, { label: "Max Cost", value: `$${(Number(budget.maxCostMicros) / 1_000_000).toFixed(2)}` })), budget.maxTotalTokens > 0 && (_jsx(MetadataRow, { label: "Max Tokens", value: Number(budget.maxTotalTokens).toLocaleString() })), budget.maxDurationSeconds > 0 && (_jsx(MetadataRow, { label: "Max Duration", value: formatDuration(budget.maxDurationSeconds) }))] }) })), envEntries.length > 0 && (_jsx(Section, { title: "Environment Variables", count: envEntries.length, children: _jsx("div", { className: "divide-y divide-border", children: envEntries.map(([key, decl]) => (_jsxs("div", { className: "flex items-center gap-3 px-4 py-2.5", children: [_jsx("code", { className: "shrink-0 text-xs font-medium text-foreground", children: key }), !decl.optional && (_jsx("span", { className: "shrink-0 rounded bg-destructive/10 px-1 py-0.5 text-[10px] font-medium text-destructive", children: "required" })), decl.description && (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: decl.description }))] }, key))) }) })), _jsx(Section, { title: "Tasks", count: spec?.tasks?.length, children: _jsx("div", { className: "p-4", children: _jsx(WorkflowTaskList, { tasks: spec?.tasks ?? [] }) }) })] }));
107
+ }
108
+ function TasksTab({ tasks, }) {
109
+ return (_jsx("div", { className: "rounded-lg border border-border p-4", children: _jsx(WorkflowTaskList, { tasks: tasks }) }));
110
+ }
111
+ function InstancesTab({ workflowId }) {
112
+ const { instances, isLoading, error } = useWorkflowInstances(workflowId);
113
+ if (isLoading) {
114
+ return _jsx(TabLoadingSkeleton, {});
115
+ }
116
+ if (error) {
117
+ return (_jsx("div", { className: "py-8 text-center text-sm text-destructive", children: "Failed to load instances" }));
118
+ }
119
+ if (instances.length === 0) {
120
+ return (_jsx("div", { className: "py-8 text-center text-sm text-muted-foreground", children: "No instances found. A default instance is created automatically with each workflow." }));
121
+ }
122
+ return (_jsx("div", { className: "overflow-hidden rounded-lg border border-border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50", children: [_jsx("th", { className: "px-4 py-2 text-left font-medium text-muted-foreground", children: "Name" }), _jsx("th", { className: "px-4 py-2 text-left font-medium text-muted-foreground", children: "ID" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: instances.map((inst) => (_jsxs("tr", { className: "hover:bg-muted/30 transition-colors", children: [_jsx("td", { className: "px-4 py-2.5 font-medium text-foreground", children: inst.metadata?.name || inst.metadata?.slug || "—" }), _jsx("td", { className: "px-4 py-2.5", children: _jsx("code", { className: "text-xs text-muted-foreground", children: inst.metadata?.id || "—" }) })] }, inst.metadata?.id))) })] }) }));
123
+ }
124
+ function ExecutionsTab({ workflowId, onExecutionClick, }) {
125
+ const { executions, isLoading, error } = useWorkflowExecutionList({
126
+ workflowId,
127
+ pageSize: 10,
128
+ });
129
+ if (isLoading) {
130
+ return _jsx(TabLoadingSkeleton, {});
131
+ }
132
+ if (error) {
133
+ return (_jsx("div", { className: "py-8 text-center text-sm text-destructive", children: "Failed to load executions" }));
134
+ }
135
+ if (executions.length === 0) {
136
+ return (_jsx("div", { className: "py-8 text-center text-sm text-muted-foreground", children: "No executions yet" }));
137
+ }
138
+ return (_jsx("div", { className: "overflow-hidden rounded-lg border border-border", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50", children: [_jsx("th", { className: "px-4 py-2 text-left font-medium text-muted-foreground", children: "Name" }), _jsx("th", { className: "px-4 py-2 text-left font-medium text-muted-foreground", children: "Phase" }), _jsx("th", { className: "px-4 py-2 text-left font-medium text-muted-foreground", children: "Started" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: executions.map((exec) => {
139
+ const execId = exec.metadata?.id;
140
+ const startedAt = exec.status?.audit?.specAudit?.createdAt;
141
+ const clickable = !!onExecutionClick && !!execId;
142
+ return (_jsxs("tr", { onClick: clickable ? () => onExecutionClick(execId) : undefined, role: clickable ? "link" : undefined, tabIndex: clickable ? 0 : undefined, onKeyDown: clickable
143
+ ? (e) => {
144
+ if (e.key === "Enter" || e.key === " ") {
145
+ e.preventDefault();
146
+ onExecutionClick(execId);
147
+ }
148
+ }
149
+ : undefined, className: cn("transition-colors hover:bg-muted/30", clickable && "cursor-pointer"), children: [_jsx("td", { className: "px-4 py-2.5 font-medium text-foreground", children: exec.metadata?.name || exec.metadata?.slug || "—" }), _jsx("td", { className: "px-4 py-2.5", children: exec.status?.phase != null ? (_jsx(WorkflowExecutionPhaseBadge, { phase: exec.status.phase })) : (_jsx("span", { className: "text-xs text-muted-foreground", children: "\u2014" })) }), _jsx("td", { className: "px-4 py-2.5 text-xs text-muted-foreground", children: startedAt ? timestampDate(startedAt).toLocaleString() : "—" })] }, execId));
150
+ }) })] }) }));
151
+ }
152
+ // ---------------------------------------------------------------------------
153
+ // Validation indicator
154
+ // ---------------------------------------------------------------------------
155
+ function ValidationIndicator({ state }) {
156
+ const config = VALIDATION_STATE_CONFIG[state];
157
+ if (!config)
158
+ return null;
159
+ return (_jsxs(_Fragment, { children: [_jsx(Dot, {}), _jsx("span", { className: cn("text-xs", config.colorClass), children: config.label })] }));
160
+ }
161
+ const VALIDATION_STATE_CONFIG = {
162
+ [ValidationState.VALID]: { label: "Valid", colorClass: "text-success" },
163
+ [ValidationState.INVALID]: { label: "Invalid", colorClass: "text-destructive" },
164
+ [ValidationState.PENDING]: { label: "Validating…", colorClass: "text-muted-foreground" },
165
+ [ValidationState.FAILED]: { label: "Validation Error", colorClass: "text-destructive" },
166
+ };
167
+ // ---------------------------------------------------------------------------
168
+ // Shared utilities
169
+ // ---------------------------------------------------------------------------
170
+ function MetadataRow({ label, value, }) {
171
+ return (_jsxs("div", { className: "flex items-center gap-3 px-4 py-2.5", children: [_jsx("span", { className: "w-28 shrink-0 text-xs text-muted-foreground", children: label }), _jsx("span", { className: "text-sm text-foreground", children: value })] }));
172
+ }
173
+ function Dot() {
174
+ return (_jsx("span", { className: "shrink-0", "aria-hidden": "true", children: "\u00B7" }));
175
+ }
176
+ function hasBudget(budget) {
177
+ return (Number(budget.maxCostMicros ?? 0) > 0 ||
178
+ Number(budget.maxTotalTokens ?? 0) > 0 ||
179
+ (budget.maxDurationSeconds ?? 0) > 0);
180
+ }
181
+ function formatDuration(seconds) {
182
+ if (seconds < 60)
183
+ return `${seconds}s`;
184
+ if (seconds < 3600)
185
+ return `${Math.floor(seconds / 60)}m`;
186
+ const hours = Math.floor(seconds / 3600);
187
+ const mins = Math.floor((seconds % 3600) / 60);
188
+ return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;
189
+ }
190
+ // ---------------------------------------------------------------------------
191
+ // Loading & empty states
192
+ // ---------------------------------------------------------------------------
193
+ function LoadingSkeleton({ className }) {
194
+ return (_jsxs("div", { className: cn("flex flex-col gap-6", className), children: [_jsx("div", { className: "flex items-start gap-3", children: _jsx("div", { className: "h-8 w-48 animate-pulse rounded bg-muted" }) }), _jsx("div", { className: "h-40 animate-pulse rounded-lg bg-muted" }), _jsx("div", { className: "h-28 animate-pulse rounded-lg bg-muted" })] }));
195
+ }
196
+ function TabLoadingSkeleton() {
197
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("div", { className: "h-8 w-full animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-8 w-full animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-8 w-3/4 animate-pulse rounded bg-muted" })] }));
198
+ }
199
+ function NotFoundState({ className }) {
200
+ return (_jsx("div", { className: cn("flex flex-col items-center justify-center py-16", className), children: _jsx("p", { className: "text-sm text-muted-foreground", children: "Workflow not found" }) }));
201
+ }
202
+ //# sourceMappingURL=WorkflowDetailView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowDetailView.js","sourceRoot":"","sources":["../../src/workflow/WorkflowDetailView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /** Props for {@link WorkflowEditorView}. */
2
+ export interface WorkflowEditorViewProps {
3
+ /** The initial YAML content to load into the editor. */
4
+ readonly initialYaml: string;
5
+ /** Organization slug for the save path. */
6
+ readonly org: string;
7
+ /** Called after a successful save. */
8
+ readonly onSaveSuccess?: () => void;
9
+ /** Called when a save fails. */
10
+ readonly onSaveError?: (error: Error) => void;
11
+ /** Initial editor mode. Defaults to `"code"`. */
12
+ readonly defaultMode?: WorkflowEditorMode;
13
+ /** Additional CSS class names for the root container. */
14
+ readonly className?: string;
15
+ }
16
+ /**
17
+ * Composed workflow YAML editor with live topology graph preview.
18
+ *
19
+ * Renders a side-by-side layout: schema-aware YAML editor on the left,
20
+ * read-only DAG preview on the right. Includes a toolbar with
21
+ * validation summary, save button, dirty indicator, and full-page toggle.
22
+ *
23
+ * Composes {@link useWorkflowEditor} internally — the caller only needs
24
+ * to provide the initial YAML and org slug.
25
+ *
26
+ * Zero Console dependencies (DD-004). All visual properties flow through
27
+ * `--stgm-*` design tokens.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <WorkflowEditorView
32
+ * initialYaml={yaml}
33
+ * org="acme"
34
+ * onSaveSuccess={() => toast.success("Workflow saved")}
35
+ * />
36
+ * ```
37
+ *
38
+ * @since T10 (YAML Editor with Graph Preview)
39
+ */
40
+ /** Editing mode for the workflow editor. */
41
+ export type WorkflowEditorMode = "code" | "visual";
42
+ export declare const WorkflowEditorView: import("react").NamedExoticComponent<WorkflowEditorViewProps>;
43
+ //# sourceMappingURL=WorkflowEditorView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowEditorView.d.ts","sourceRoot":"","sources":["../../src/workflow/WorkflowEditorView.tsx"],"names":[],"mappings":"AAWA,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,gCAAgC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAC1C,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnD,eAAO,MAAM,kBAAkB,+DA2R7B,CAAC"}
@@ -0,0 +1,165 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { memo, useCallback, useMemo, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { useWorkflowEditor } from "./useWorkflowEditor";
6
+ import { WorkflowYamlEditor } from "./WorkflowYamlEditor";
7
+ import { WorkflowTopologyGraph } from "./WorkflowTopologyGraph";
8
+ import { WorkflowCanvasEditor } from "./WorkflowCanvasEditor";
9
+ import { WorkflowRefinePanel } from "./WorkflowRefinePanel";
10
+ import { yamlToGraph } from "./workflow-graph-conversions";
11
+ export const WorkflowEditorView = memo(function WorkflowEditorView({ initialYaml, org, onSaveSuccess, onSaveError, defaultMode = "code", className, }) {
12
+ const editor = useWorkflowEditor(initialYaml, { org });
13
+ const [isFullPage, setIsFullPage] = useState(false);
14
+ const [mode, setMode] = useState(defaultMode);
15
+ const [showModeWarning, setShowModeWarning] = useState(false);
16
+ const [canvasIsSaving, setCanvasIsSaving] = useState(false);
17
+ const [showRefinePanel, setShowRefinePanel] = useState(false);
18
+ // Track canvas dirty state separately for mode switch prompts
19
+ const [canvasDirty, setCanvasDirty] = useState(false);
20
+ const [showDirtyPrompt, setShowDirtyPrompt] = useState(false);
21
+ const handleSave = useCallback(async () => {
22
+ const success = await editor.save();
23
+ if (success) {
24
+ onSaveSuccess?.();
25
+ }
26
+ else if (editor.saveError) {
27
+ onSaveError?.(editor.saveError);
28
+ }
29
+ }, [editor, onSaveSuccess, onSaveError]);
30
+ const toggleFullPage = useCallback(() => {
31
+ setIsFullPage((prev) => !prev);
32
+ }, []);
33
+ // -------------------------------------------------------------------------
34
+ // Mode switching (AD-T15-B3-003)
35
+ // -------------------------------------------------------------------------
36
+ const handleSwitchToVisual = useCallback(() => {
37
+ try {
38
+ yamlToGraph(editor.yaml);
39
+ setShowModeWarning(true);
40
+ }
41
+ catch {
42
+ onSaveError?.(new Error("Cannot switch to visual mode: the current YAML has structural errors that prevent parsing."));
43
+ }
44
+ }, [editor.yaml, onSaveError]);
45
+ const confirmSwitchToVisual = useCallback(() => {
46
+ setShowModeWarning(false);
47
+ setMode("visual");
48
+ }, []);
49
+ const cancelSwitchToVisual = useCallback(() => {
50
+ setShowModeWarning(false);
51
+ }, []);
52
+ const handleSwitchToCode = useCallback(() => {
53
+ if (canvasDirty) {
54
+ setShowDirtyPrompt(true);
55
+ return;
56
+ }
57
+ setMode("code");
58
+ }, [canvasDirty]);
59
+ const confirmDiscardAndSwitchToCode = useCallback(() => {
60
+ setShowDirtyPrompt(false);
61
+ setMode("code");
62
+ setCanvasDirty(false);
63
+ }, []);
64
+ const cancelSwitchToCode = useCallback(() => {
65
+ setShowDirtyPrompt(false);
66
+ }, []);
67
+ // Canvas save handler (AD-T15-B3-002: save via YAML)
68
+ const handleCanvasSave = useCallback(async (yamlStr) => {
69
+ setCanvasIsSaving(true);
70
+ editor.setYaml(yamlStr);
71
+ // Allow React to propagate the YAML before saving
72
+ setTimeout(async () => {
73
+ const success = await editor.save();
74
+ setCanvasIsSaving(false);
75
+ setCanvasDirty(false);
76
+ if (success) {
77
+ onSaveSuccess?.();
78
+ }
79
+ else if (editor.saveError) {
80
+ onSaveError?.(editor.saveError);
81
+ }
82
+ }, 0);
83
+ }, [editor, onSaveSuccess, onSaveError]);
84
+ const toggleRefinePanel = useCallback(() => {
85
+ setShowRefinePanel((prev) => !prev);
86
+ }, []);
87
+ const handleRefineAccept = useCallback((updatedYaml) => {
88
+ editor.setYaml(updatedYaml);
89
+ if (mode === "visual") {
90
+ try {
91
+ yamlToGraph(updatedYaml);
92
+ }
93
+ catch {
94
+ // Canvas will re-parse on next render
95
+ }
96
+ }
97
+ }, [editor, mode]);
98
+ // Validation error mapping for canvas mode
99
+ const nodeErrors = useMemo(() => {
100
+ if (mode !== "visual")
101
+ return new Map();
102
+ const errorMap = new Map();
103
+ for (const diag of editor.diagnostics) {
104
+ if (diag.severity !== "error")
105
+ continue;
106
+ const match = diag.message.match(/task\s+"([^"]+)"/i) ??
107
+ diag.message.match(/task\s+(\S+)/i);
108
+ if (match) {
109
+ const taskName = match[1];
110
+ const existing = errorMap.get(taskName);
111
+ if (existing) {
112
+ existing.push(diag.message);
113
+ }
114
+ else {
115
+ errorMap.set(taskName, [diag.message]);
116
+ }
117
+ }
118
+ }
119
+ return errorMap;
120
+ }, [mode, editor.diagnostics]);
121
+ const rootClassName = cn("stgm-workflow-editor flex flex-col", isFullPage && "fixed inset-0 z-50 bg-background", !isFullPage && "h-full", className);
122
+ return (_jsxs("div", { className: rootClassName, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-3 py-2", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(ModeToggle, { mode: mode, onSwitchToCode: handleSwitchToCode, onSwitchToVisual: handleSwitchToVisual }), _jsx("div", { className: "mx-1 h-4 w-px bg-[var(--stgm-border,#d4d4d8)]", "aria-hidden": "true" }), _jsxs("button", { type: "button", onClick: toggleRefinePanel, className: cn("inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium transition-colors", showRefinePanel
123
+ ? "bg-primary/10 text-primary"
124
+ : "text-muted-foreground hover:bg-muted hover:text-foreground"), "aria-pressed": showRefinePanel, "aria-label": "Refine with AI", children: [_jsx(RefineSparklesIcon, {}), "Refine"] }), _jsx("div", { className: "mx-1 h-4 w-px bg-[var(--stgm-border,#d4d4d8)]", "aria-hidden": "true" }), _jsx(ValidationSummary, { errorCount: editor.errorCount, warningCount: editor.warningCount }), (editor.isDirty || canvasDirty) && (_jsx("span", { className: "text-xs text-muted-foreground", children: "Unsaved changes" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [mode === "code" && (_jsx("button", { type: "button", onClick: editor.reset, disabled: !editor.isDirty || editor.isSaving, className: cn("rounded px-2.5 py-1 text-xs font-medium transition-colors", "text-muted-foreground hover:bg-muted hover:text-foreground", "disabled:pointer-events-none disabled:opacity-40"), children: "Reset" })), mode === "code" && (_jsx("button", { type: "button", onClick: handleSave, disabled: !editor.isDirty || editor.isSaving || editor.errorCount > 0, className: cn("rounded bg-primary px-3 py-1 text-xs font-medium text-primary-foreground transition-colors", "hover:bg-primary/90", "disabled:pointer-events-none disabled:opacity-40"), children: editor.isSaving ? "Saving\u2026" : "Save" })), _jsx("button", { type: "button", onClick: toggleFullPage, className: "rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground", "aria-label": isFullPage ? "Exit full page" : "Full page", children: _jsx(ExpandIcon, { expanded: isFullPage }) })] })] }), editor.saveError && (_jsx("div", { className: "border-b border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive", children: editor.saveError.message })), showModeWarning && (_jsx(ModeWarningDialog, { onConfirm: confirmSwitchToVisual, onCancel: cancelSwitchToVisual })), showDirtyPrompt && (_jsx(DirtyPromptDialog, { onDiscard: confirmDiscardAndSwitchToCode, onCancel: cancelSwitchToCode })), _jsx("div", { className: "flex min-h-0 flex-1", children: mode === "code" ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex-1 overflow-hidden border-r border-border", children: _jsx(WorkflowYamlEditor, { value: editor.yaml, onChange: editor.setYaml, diagnostics: editor.diagnostics, className: "h-full rounded-none border-0" }) }), _jsx("div", { className: "w-[40%] min-w-[240px] overflow-hidden", children: showRefinePanel ? (_jsx(WorkflowRefinePanel, { org: org, currentYaml: editor.yaml, onAccept: handleRefineAccept, onClose: toggleRefinePanel, className: "h-full" })) : (_jsx(WorkflowTopologyGraph, { topology: editor.topology, className: "h-full" })) })] })) : (_jsxs(_Fragment, { children: [_jsx(WorkflowCanvasEditor, { yaml: editor.yaml, onSave: handleCanvasSave, isSaving: canvasIsSaving, onDirtyChange: setCanvasDirty, nodeErrors: nodeErrors, className: showRefinePanel ? "w-[60%]" : "flex-1" }), showRefinePanel && (_jsx("div", { className: "w-[40%] min-w-[240px] overflow-hidden", children: _jsx(WorkflowRefinePanel, { org: org, currentYaml: editor.yaml, onAccept: handleRefineAccept, onClose: toggleRefinePanel, className: "h-full" }) }))] })) })] }));
125
+ });
126
+ // ---------------------------------------------------------------------------
127
+ // Mode Toggle
128
+ // ---------------------------------------------------------------------------
129
+ function ModeToggle({ mode, onSwitchToCode, onSwitchToVisual, }) {
130
+ const segmentClass = (active) => cn("rounded px-2.5 py-1 text-xs font-medium transition-colors", active
131
+ ? "bg-[var(--stgm-primary,#6366f1)] text-[var(--stgm-primary-foreground,#fff)]"
132
+ : "text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)] hover:text-[var(--stgm-foreground,#1a1a2e)]");
133
+ return (_jsxs("div", { className: "flex items-center gap-0.5 rounded-md border border-[var(--stgm-border,#d4d4d8)] p-0.5", role: "tablist", "aria-label": "Editor mode", children: [_jsx("button", { type: "button", role: "tab", "aria-selected": mode === "code", onClick: onSwitchToCode, className: segmentClass(mode === "code"), children: "Code" }), _jsx("button", { type: "button", role: "tab", "aria-selected": mode === "visual", onClick: onSwitchToVisual, className: segmentClass(mode === "visual"), children: "Visual" })] }));
134
+ }
135
+ // ---------------------------------------------------------------------------
136
+ // Mode Warning Dialog
137
+ // ---------------------------------------------------------------------------
138
+ function ModeWarningDialog({ onConfirm, onCancel, }) {
139
+ return (_jsx("div", { className: "border-b border-[var(--stgm-border,#e5e5e5)] bg-[var(--stgm-accent,#fffbeb)] px-3 py-2", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("p", { className: "text-xs text-[var(--stgm-foreground,#1a1a2e)]", children: "Switching to visual mode will normalize YAML formatting. Comments and custom ordering will not be preserved." }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [_jsx("button", { type: "button", onClick: onCancel, className: "rounded px-2 py-1 text-xs text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)]", children: "Cancel" }), _jsx("button", { type: "button", onClick: onConfirm, className: "rounded bg-[var(--stgm-primary,#6366f1)] px-2.5 py-1 text-xs font-medium text-[var(--stgm-primary-foreground,#fff)] hover:opacity-90", children: "Continue" })] })] }) }));
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // Dirty Prompt Dialog
143
+ // ---------------------------------------------------------------------------
144
+ function DirtyPromptDialog({ onDiscard, onCancel, }) {
145
+ return (_jsx("div", { className: "border-b border-[var(--stgm-border,#e5e5e5)] bg-[var(--stgm-accent,#fffbeb)] px-3 py-2", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("p", { className: "text-xs text-[var(--stgm-foreground,#1a1a2e)]", children: "You have unsaved changes in the visual editor. Switching to code mode will discard them." }), _jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [_jsx("button", { type: "button", onClick: onCancel, className: "rounded px-2 py-1 text-xs text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)]", children: "Stay in Visual" }), _jsx("button", { type: "button", onClick: onDiscard, className: "rounded bg-[var(--stgm-destructive,#ef4444)] px-2.5 py-1 text-xs font-medium text-white hover:opacity-90", children: "Discard & Switch" })] })] }) }));
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Sub-components
149
+ // ---------------------------------------------------------------------------
150
+ function ValidationSummary({ errorCount, warningCount, }) {
151
+ if (errorCount === 0 && warningCount === 0) {
152
+ return (_jsxs("span", { className: "text-xs text-success", children: [_jsx(CheckCircleIcon, {}), " ", "Valid"] }));
153
+ }
154
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [errorCount > 0 && (_jsxs("span", { className: "text-xs text-destructive", children: [errorCount, " ", errorCount === 1 ? "error" : "errors"] })), warningCount > 0 && (_jsxs("span", { className: "text-xs text-warning", children: [warningCount, " ", warningCount === 1 ? "warning" : "warnings"] }))] }));
155
+ }
156
+ function CheckCircleIcon() {
157
+ return (_jsxs("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "inline-block", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5" }), _jsx("path", { d: "M5.5 8l2 2 3-3.5" })] }));
158
+ }
159
+ function RefineSparklesIcon() {
160
+ return (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M8 2l1.5 4.5L14 8l-4.5 1.5L8 14l-1.5-4.5L2 8l4.5-1.5z" }) }));
161
+ }
162
+ function ExpandIcon({ expanded }) {
163
+ return (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: expanded ? (_jsxs(_Fragment, { children: [_jsx("path", { d: "M6 2H2v4M10 14h4v-4" }), _jsx("path", { d: "M2 2l5 5M14 14l-5-5" })] })) : (_jsxs(_Fragment, { children: [_jsx("path", { d: "M14 2h-4M2 14h4" }), _jsx("path", { d: "M14 2l-5 5M2 14l5-5" })] })) }));
164
+ }
165
+ //# sourceMappingURL=WorkflowEditorView.js.map