@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,433 @@
1
+ "use client";
2
+
3
+ import { useCallback, useRef, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { useDiagnoseExecutionFlow, type DiagnosePhase } from "./useDiagnoseExecutionFlow";
6
+ import { MessageThread } from "../execution/MessageThread";
7
+ import { computeUnifiedDiff, type DiffLine } from "./workflow-yaml-diff";
8
+
9
+ /** Props for {@link WorkflowRepairCard}. */
10
+ export interface WorkflowRepairCardProps {
11
+ /** ID of the failed workflow execution to diagnose. */
12
+ readonly executionId: string;
13
+ /** Organization slug for authorization and resource context. */
14
+ readonly org: string;
15
+ /** Current workflow YAML for diff computation (optional). */
16
+ readonly currentWorkflowYaml?: string;
17
+ /**
18
+ * Called when the user clicks "Apply Fix". Receives the suggested YAML.
19
+ * The host application handles navigation to the workflow editor (DD-004).
20
+ */
21
+ readonly onApplyFix?: (yaml: string) => void;
22
+ /** Called when the panel should close. */
23
+ readonly onClose?: () => void;
24
+ /** Additional CSS class names. */
25
+ readonly className?: string;
26
+ }
27
+
28
+ const COMPOSER_ENABLED_PHASES: ReadonlySet<DiagnosePhase> = new Set([
29
+ "ready",
30
+ "complete",
31
+ "error",
32
+ ]);
33
+
34
+ /**
35
+ * Panel component that displays agent-powered diagnosis of a failed workflow
36
+ * execution. Designed for the execution viewer's right panel (AD-B5-001).
37
+ *
38
+ * Layout:
39
+ * 1. Header — "AI Diagnosis" title with sparkles icon + close button
40
+ * 2. Message area — `MessageThread` showing the agent conversation
41
+ * 3. Result strip (conditional) — fix explanation, diff preview, Apply Fix / Discard
42
+ * 4. Follow-up composer (pinned to bottom) — text input for additional questions
43
+ *
44
+ * Auto-starts diagnosis on mount (AD-B5-002). Supports multi-turn
45
+ * follow-up questions within the same session (AD-B5-003).
46
+ *
47
+ * Styled via `--stgm-*` design tokens. Zero console dependencies (DD-004).
48
+ */
49
+ export function WorkflowRepairCard({
50
+ executionId,
51
+ org,
52
+ currentWorkflowYaml,
53
+ onApplyFix,
54
+ onClose,
55
+ className,
56
+ }: WorkflowRepairCardProps) {
57
+ const [followUp, setFollowUp] = useState("");
58
+ const scrollRef = useRef<HTMLDivElement>(null);
59
+
60
+ const flow = useDiagnoseExecutionFlow({
61
+ executionId,
62
+ org,
63
+ currentWorkflowYaml,
64
+ autoStart: true,
65
+ onError: () => {
66
+ /* Error is displayed inline via flow.error */
67
+ },
68
+ });
69
+
70
+ const composerEnabled = COMPOSER_ENABLED_PHASES.has(flow.phase);
71
+ const hasConversation =
72
+ flow.completedExecutions.length > 0 || flow.activeExecution !== null;
73
+
74
+ // ---------------------------------------------------------------------------
75
+ // Handlers
76
+ // ---------------------------------------------------------------------------
77
+
78
+ const handleSendFollowUp = useCallback(async () => {
79
+ const trimmed = followUp.trim();
80
+ if (trimmed.length < 5) return;
81
+
82
+ setFollowUp("");
83
+ await flow.sendFollowUp(trimmed);
84
+
85
+ requestAnimationFrame(() => {
86
+ scrollRef.current?.scrollTo({
87
+ top: scrollRef.current.scrollHeight,
88
+ behavior: "smooth",
89
+ });
90
+ });
91
+ }, [flow.sendFollowUp, followUp]);
92
+
93
+ const handleApplyFix = useCallback(() => {
94
+ const yaml = flow.acceptFix();
95
+ if (yaml && onApplyFix) {
96
+ onApplyFix(yaml);
97
+ }
98
+ }, [flow.acceptFix, onApplyFix]);
99
+
100
+ const handleDiscard = useCallback(() => {
101
+ flow.discardFix();
102
+ }, [flow.discardFix]);
103
+
104
+ const handleRetry = useCallback(() => {
105
+ flow.reset();
106
+ }, [flow.reset]);
107
+
108
+ const handleKeyDown = useCallback(
109
+ (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
110
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) {
111
+ e.preventDefault();
112
+ handleSendFollowUp();
113
+ }
114
+ },
115
+ [handleSendFollowUp],
116
+ );
117
+
118
+ // ---------------------------------------------------------------------------
119
+ // Render
120
+ // ---------------------------------------------------------------------------
121
+
122
+ return (
123
+ <div
124
+ className={cn(
125
+ "flex h-full flex-col bg-background",
126
+ className,
127
+ )}
128
+ role="complementary"
129
+ aria-label="Workflow diagnosis panel"
130
+ >
131
+ {/* Header */}
132
+ <div className="flex items-center justify-between border-b border-border px-3 py-2">
133
+ <div className="flex items-center gap-1.5">
134
+ <SparklesIcon />
135
+ <h3 className="text-xs font-semibold text-foreground">
136
+ AI Diagnosis
137
+ </h3>
138
+ {flow.isStreaming && (
139
+ <span className="inline-flex items-center gap-1 text-[0.65rem] text-muted-foreground">
140
+ <SpinnerIcon size={10} />
141
+ Analyzing…
142
+ </span>
143
+ )}
144
+ </div>
145
+ {onClose && (
146
+ <button
147
+ type="button"
148
+ onClick={onClose}
149
+ className="rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground"
150
+ aria-label="Close diagnosis panel"
151
+ >
152
+ <CloseIcon />
153
+ </button>
154
+ )}
155
+ </div>
156
+
157
+ {/* Scrollable content area */}
158
+ <div ref={scrollRef} className="flex min-h-0 flex-1 flex-col overflow-y-auto">
159
+ {/* Starting indicator */}
160
+ {flow.phase === "starting" && !hasConversation && (
161
+ <div className="flex flex-col items-center justify-center gap-2 py-8">
162
+ <SpinnerIcon />
163
+ <p className="text-xs text-muted-foreground">
164
+ Starting Workflow Architect…
165
+ </p>
166
+ </div>
167
+ )}
168
+
169
+ {/* Agent conversation */}
170
+ {hasConversation && (
171
+ <MessageThread
172
+ executions={flow.completedExecutions}
173
+ activeStreamExecution={flow.activeExecution}
174
+ className="flex-1"
175
+ />
176
+ )}
177
+
178
+ {/* Error */}
179
+ {flow.error && flow.phase === "error" && (
180
+ <div className="mx-3 mt-3 space-y-2">
181
+ <div
182
+ className="rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2 text-xs text-destructive"
183
+ role="alert"
184
+ >
185
+ {flow.error}
186
+ </div>
187
+ <button
188
+ type="button"
189
+ onClick={handleRetry}
190
+ className={cn(
191
+ "w-full rounded-md px-3 py-1.5 text-xs font-medium transition-colors",
192
+ "border border-input bg-background text-foreground",
193
+ "hover:bg-accent hover:text-accent-foreground",
194
+ )}
195
+ >
196
+ Try Again
197
+ </button>
198
+ </div>
199
+ )}
200
+ </div>
201
+
202
+ {/* Result strip (diff + apply/discard) */}
203
+ {flow.phase === "complete" && flow.extractedYaml && (
204
+ <ResultStrip
205
+ extractedYaml={flow.extractedYaml}
206
+ explanation={flow.explanation}
207
+ beforeYaml={currentWorkflowYaml}
208
+ onApplyFix={onApplyFix ? handleApplyFix : undefined}
209
+ onDiscard={handleDiscard}
210
+ />
211
+ )}
212
+
213
+ {/* Runtime error notice (no fix available) */}
214
+ {flow.phase === "ready" && !flow.extractedYaml && flow.completedExecutions.length > 0 && (
215
+ <div className="border-t border-border px-3 py-2">
216
+ <div className="rounded-md border border-border bg-muted/50 px-2.5 py-2 text-[0.7rem] text-muted-foreground">
217
+ No workflow definition changes are needed. Check the analysis above for remediation steps.
218
+ </div>
219
+ </div>
220
+ )}
221
+
222
+ {/* Follow-up composer (pinned to bottom) */}
223
+ <div className="border-t border-border p-3">
224
+ <textarea
225
+ value={followUp}
226
+ onChange={(e) => setFollowUp(e.target.value)}
227
+ onKeyDown={handleKeyDown}
228
+ placeholder="Ask a follow-up question..."
229
+ disabled={!composerEnabled}
230
+ rows={2}
231
+ className={cn(
232
+ "w-full resize-none rounded-md border border-input bg-background px-2.5 py-1.5 text-sm text-foreground",
233
+ "placeholder:text-muted-foreground",
234
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
235
+ "disabled:pointer-events-none disabled:opacity-50",
236
+ )}
237
+ />
238
+ <div className="mt-2 flex items-center justify-between">
239
+ <p className="text-[0.65rem] text-muted-foreground">
240
+ {"\u2318"}+Enter to send
241
+ </p>
242
+ <button
243
+ type="button"
244
+ onClick={handleSendFollowUp}
245
+ disabled={!composerEnabled || followUp.trim().length < 5}
246
+ className={cn(
247
+ "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",
248
+ "bg-primary text-primary-foreground hover:bg-primary/90",
249
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
250
+ "disabled:pointer-events-none disabled:opacity-40",
251
+ )}
252
+ >
253
+ Send
254
+ </button>
255
+ </div>
256
+ </div>
257
+ </div>
258
+ );
259
+ }
260
+
261
+ // ---------------------------------------------------------------------------
262
+ // Result Strip — diff preview with apply/discard actions
263
+ // ---------------------------------------------------------------------------
264
+
265
+ function ResultStrip({
266
+ extractedYaml,
267
+ explanation,
268
+ beforeYaml,
269
+ onApplyFix,
270
+ onDiscard,
271
+ }: {
272
+ readonly extractedYaml: string;
273
+ readonly explanation: string | null;
274
+ readonly beforeYaml?: string;
275
+ readonly onApplyFix?: () => void;
276
+ readonly onDiscard: () => void;
277
+ }) {
278
+ const diffLines = beforeYaml
279
+ ? computeUnifiedDiff(beforeYaml, extractedYaml)
280
+ : null;
281
+ const hasChanges = diffLines?.some((l) => l.type !== "equal") ?? false;
282
+
283
+ return (
284
+ <div className="border-t border-border px-3 py-3" aria-live="polite">
285
+ {/* Explanation */}
286
+ {explanation && (
287
+ <div className="mb-3">
288
+ <h4 className="mb-1 text-[0.65rem] font-medium uppercase tracking-wider text-muted-foreground">
289
+ Suggested Fix
290
+ </h4>
291
+ <p className="text-xs leading-relaxed text-foreground">
292
+ {explanation}
293
+ </p>
294
+ </div>
295
+ )}
296
+
297
+ {/* Diff preview */}
298
+ {hasChanges && diffLines && (
299
+ <div className="mb-3">
300
+ <h4 className="mb-1 text-[0.65rem] font-medium uppercase tracking-wider text-muted-foreground">
301
+ Diff
302
+ </h4>
303
+ <DiffPreview lines={diffLines} />
304
+ </div>
305
+ )}
306
+
307
+ {/* Actions */}
308
+ <div className="flex gap-2">
309
+ {onApplyFix && (
310
+ <button
311
+ type="button"
312
+ onClick={onApplyFix}
313
+ className={cn(
314
+ "flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",
315
+ "bg-primary text-primary-foreground hover:bg-primary/90",
316
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
317
+ )}
318
+ >
319
+ Apply Fix
320
+ </button>
321
+ )}
322
+ <button
323
+ type="button"
324
+ onClick={onDiscard}
325
+ className={cn(
326
+ "flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",
327
+ "border border-input bg-background text-foreground",
328
+ "hover:bg-accent hover:text-accent-foreground",
329
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
330
+ )}
331
+ >
332
+ Discard
333
+ </button>
334
+ </div>
335
+ </div>
336
+ );
337
+ }
338
+
339
+ // ---------------------------------------------------------------------------
340
+ // Diff Preview
341
+ // ---------------------------------------------------------------------------
342
+
343
+ function DiffPreview({ lines }: { readonly lines: readonly DiffLine[] }) {
344
+ const filteredLines = lines.filter(
345
+ (l) => l.type !== "equal" || l.content.trim() !== "",
346
+ );
347
+
348
+ if (filteredLines.length > 200) {
349
+ return (
350
+ <p className="text-[0.7rem] text-muted-foreground">
351
+ Diff is too large to display. Apply the fix to see the updated YAML.
352
+ </p>
353
+ );
354
+ }
355
+
356
+ return (
357
+ <pre className="max-h-60 overflow-auto rounded-md border border-border text-[0.7rem] leading-relaxed">
358
+ {lines.map((line, i) => (
359
+ <div
360
+ key={i}
361
+ className={cn(
362
+ "px-2",
363
+ line.type === "added" && "bg-success/10 text-success",
364
+ line.type === "removed" && "bg-destructive/10 text-destructive",
365
+ line.type === "equal" && "text-muted-foreground",
366
+ )}
367
+ >
368
+ <span className="mr-2 inline-block w-3 select-none text-right opacity-60">
369
+ {line.type === "added" ? "+" : line.type === "removed" ? "-" : " "}
370
+ </span>
371
+ {line.content}
372
+ </div>
373
+ ))}
374
+ </pre>
375
+ );
376
+ }
377
+
378
+ // ---------------------------------------------------------------------------
379
+ // Icons
380
+ // ---------------------------------------------------------------------------
381
+
382
+ function SparklesIcon() {
383
+ return (
384
+ <svg
385
+ width="14"
386
+ height="14"
387
+ viewBox="0 0 16 16"
388
+ fill="none"
389
+ stroke="currentColor"
390
+ strokeWidth="1.5"
391
+ strokeLinecap="round"
392
+ strokeLinejoin="round"
393
+ aria-hidden="true"
394
+ >
395
+ <path d="M8 2l1.5 4.5L14 8l-4.5 1.5L8 14l-1.5-4.5L2 8l4.5-1.5z" />
396
+ </svg>
397
+ );
398
+ }
399
+
400
+ function CloseIcon() {
401
+ return (
402
+ <svg
403
+ width="14"
404
+ height="14"
405
+ viewBox="0 0 16 16"
406
+ fill="none"
407
+ stroke="currentColor"
408
+ strokeWidth="1.5"
409
+ strokeLinecap="round"
410
+ aria-hidden="true"
411
+ >
412
+ <path d="M4 4l8 8M12 4l-8 8" />
413
+ </svg>
414
+ );
415
+ }
416
+
417
+ function SpinnerIcon({ size = 14 }: { readonly size?: number }) {
418
+ return (
419
+ <svg
420
+ width={size}
421
+ height={size}
422
+ viewBox="0 0 16 16"
423
+ fill="none"
424
+ stroke="currentColor"
425
+ strokeWidth="2"
426
+ strokeLinecap="round"
427
+ className="animate-spin"
428
+ aria-hidden="true"
429
+ >
430
+ <path d="M8 2a6 6 0 1 0 6 6" />
431
+ </svg>
432
+ );
433
+ }
@@ -0,0 +1,220 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useRef } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
6
+ import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
7
+ import { useRunWorkflowFlow } from "./useRunWorkflowFlow";
8
+ import { WorkflowRunForm } from "./WorkflowRunForm";
9
+
10
+ /** Props for {@link WorkflowRunDialog}. */
11
+ export interface WorkflowRunDialogProps {
12
+ /** Whether the dialog is open. */
13
+ readonly open: boolean;
14
+ /** Called when the dialog should close (cancel, backdrop click, Escape). */
15
+ readonly onOpenChange: (open: boolean) => void;
16
+ /** Organization slug that owns the workflow. */
17
+ readonly org: string;
18
+ /** The workflow blueprint to run. */
19
+ readonly workflow: Workflow;
20
+ /** Available workflow instances for the instance selector. */
21
+ readonly instances: readonly WorkflowInstance[];
22
+ /**
23
+ * Called after the execution is created successfully.
24
+ * Receives the execution ID — use for navigation.
25
+ */
26
+ readonly onSuccess: (executionId: string) => void;
27
+ /**
28
+ * Called when submission fails. Receives a human-readable message.
29
+ * Use for toast notifications.
30
+ */
31
+ readonly onError?: (message: string) => void;
32
+ }
33
+
34
+ /**
35
+ * Dialog for running a workflow execution.
36
+ *
37
+ * Composes {@link useRunWorkflowFlow} with {@link WorkflowRunForm}
38
+ * inside a native `<dialog>` element. Manages the full lifecycle:
39
+ * form fields, validation, submission, error display, and close.
40
+ *
41
+ * Uses the same `<dialog>` + `showModal()` pattern as
42
+ * {@link ConfirmDialog} — built-in focus trapping, Escape key
43
+ * handling, and backdrop. Styled via `--stgm-*` design tokens.
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * <WorkflowRunDialog
48
+ * open={showRunDialog}
49
+ * onOpenChange={setShowRunDialog}
50
+ * org="acme"
51
+ * workflow={workflow}
52
+ * instances={instances}
53
+ * onSuccess={(id) => router.push(`/workflows/executions/${id}`)}
54
+ * onError={(msg) => toast.error(msg)}
55
+ * />
56
+ * ```
57
+ */
58
+ export function WorkflowRunDialog({
59
+ open,
60
+ onOpenChange,
61
+ org,
62
+ workflow,
63
+ instances,
64
+ onSuccess,
65
+ onError,
66
+ }: WorkflowRunDialogProps) {
67
+ const dialogRef = useRef<HTMLDialogElement>(null);
68
+
69
+ const handleSuccess = useCallback(
70
+ (executionId: string) => {
71
+ onOpenChange(false);
72
+ onSuccess(executionId);
73
+ },
74
+ [onOpenChange, onSuccess],
75
+ );
76
+
77
+ const flow = useRunWorkflowFlow({
78
+ org,
79
+ workflow,
80
+ instances,
81
+ onSuccess: handleSuccess,
82
+ onError,
83
+ });
84
+
85
+ // Sync open state with the native dialog
86
+ useEffect(() => {
87
+ const dialog = dialogRef.current;
88
+ if (!dialog) return;
89
+ if (open && !dialog.open) {
90
+ flow.reset();
91
+ dialog.showModal();
92
+ } else if (!open && dialog.open) {
93
+ dialog.close();
94
+ }
95
+ }, [open, flow.reset]);
96
+
97
+ const handleDialogCancel = useCallback(
98
+ (e: React.SyntheticEvent) => {
99
+ e.preventDefault();
100
+ onOpenChange(false);
101
+ },
102
+ [onOpenChange],
103
+ );
104
+
105
+ const handleBackdropClick = useCallback(
106
+ (e: React.MouseEvent<HTMLDialogElement>) => {
107
+ if (e.target === dialogRef.current) {
108
+ onOpenChange(false);
109
+ }
110
+ },
111
+ [onOpenChange],
112
+ );
113
+
114
+ const workflowName =
115
+ workflow.metadata?.name || workflow.metadata?.slug || "Workflow";
116
+
117
+ return (
118
+ <dialog
119
+ ref={dialogRef}
120
+ onCancel={handleDialogCancel}
121
+ onClick={handleBackdropClick}
122
+ className={cn(
123
+ "fixed inset-0 z-50 m-auto w-full max-w-lg rounded-lg border border-border bg-popover p-0 text-popover-foreground shadow-lg",
124
+ "backdrop:bg-black/50",
125
+ "open:animate-in open:fade-in-0 open:zoom-in-95",
126
+ )}
127
+ >
128
+ <div className="flex flex-col">
129
+ {/* Header */}
130
+ <div className="border-b border-border px-6 py-4">
131
+ <h3 className="text-base font-semibold text-foreground">
132
+ Run {workflowName}
133
+ </h3>
134
+ <p className="mt-0.5 text-xs text-muted-foreground">
135
+ Configure inputs and start a new execution
136
+ </p>
137
+ </div>
138
+
139
+ {/* Body */}
140
+ <div className="max-h-[60vh] overflow-y-auto px-6 py-4">
141
+ {flow.error && (
142
+ <div
143
+ className="mb-4 rounded-md border border-destructive bg-destructive-muted px-3 py-2 text-sm text-destructive"
144
+ role="alert"
145
+ >
146
+ {flow.error}
147
+ </div>
148
+ )}
149
+
150
+ <WorkflowRunForm
151
+ triggerMessage={flow.triggerMessage}
152
+ onTriggerMessageChange={flow.setTriggerMessage}
153
+ envDeclarations={flow.envDeclarations}
154
+ runtimeEnv={flow.runtimeEnv}
155
+ onEnvVarChange={flow.setEnvVar}
156
+ instances={instances}
157
+ selectedInstanceId={flow.selectedInstanceId}
158
+ onInstanceChange={flow.setSelectedInstanceId}
159
+ errors={flow.fieldErrors}
160
+ disabled={flow.isSubmitting}
161
+ />
162
+ </div>
163
+
164
+ {/* Footer */}
165
+ <div className="flex justify-end gap-2 border-t border-border px-6 py-3">
166
+ <button
167
+ type="button"
168
+ onClick={() => onOpenChange(false)}
169
+ disabled={flow.isSubmitting}
170
+ className={cn(
171
+ "rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
172
+ "border border-input bg-background text-foreground",
173
+ "hover:bg-accent hover:text-accent-foreground",
174
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
175
+ "disabled:pointer-events-none disabled:opacity-50",
176
+ )}
177
+ >
178
+ Cancel
179
+ </button>
180
+ <button
181
+ type="button"
182
+ onClick={flow.submit}
183
+ disabled={flow.isSubmitting}
184
+ className={cn(
185
+ "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
186
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
187
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
188
+ "disabled:pointer-events-none disabled:opacity-40",
189
+ )}
190
+ >
191
+ {flow.isSubmitting && <SpinnerIcon />}
192
+ {flow.isSubmitting ? "Starting…" : "Run Workflow"}
193
+ </button>
194
+ </div>
195
+ </div>
196
+ </dialog>
197
+ );
198
+ }
199
+
200
+ // ---------------------------------------------------------------------------
201
+ // Icons
202
+ // ---------------------------------------------------------------------------
203
+
204
+ function SpinnerIcon() {
205
+ return (
206
+ <svg
207
+ width="14"
208
+ height="14"
209
+ viewBox="0 0 16 16"
210
+ fill="none"
211
+ stroke="currentColor"
212
+ strokeWidth="2"
213
+ strokeLinecap="round"
214
+ className="animate-spin"
215
+ aria-hidden="true"
216
+ >
217
+ <path d="M8 2a6 6 0 1 0 6 6" />
218
+ </svg>
219
+ );
220
+ }