@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,134 @@
1
+ "use client";
2
+
3
+ import { useEffect } from "react";
4
+ import type { RefObject } from "react";
5
+ import type { CanvasSelection } from "./useWorkflowCanvas";
6
+
7
+ /** Options for {@link useCanvasKeyboardShortcuts}. */
8
+ export interface UseCanvasKeyboardShortcutsOptions {
9
+ readonly containerRef: RefObject<HTMLDivElement | null>;
10
+ readonly selection: CanvasSelection | null;
11
+ readonly duplicateNode: (nodeId: string) => void;
12
+ readonly selectAll: () => void;
13
+ readonly clearSelection: () => void;
14
+ readonly onRequestTaskPicker: (
15
+ position: { x: number; y: number },
16
+ sourceNodeId?: string,
17
+ ) => void;
18
+ readonly onDismiss: () => void;
19
+ }
20
+
21
+ function isTextInput(target: EventTarget | null): boolean {
22
+ if (!(target instanceof HTMLElement)) return false;
23
+ const tag = target.tagName;
24
+ if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT") return true;
25
+ if (target.isContentEditable) return true;
26
+ if (target.getAttribute("role") === "textbox") return true;
27
+ return false;
28
+ }
29
+
30
+ function isFocusInsideContainer(container: HTMLElement): boolean {
31
+ const active = document.activeElement;
32
+ return active === container || container.contains(active);
33
+ }
34
+
35
+ /**
36
+ * Canvas-scoped keyboard shortcuts for the workflow editor.
37
+ *
38
+ * Binds shortcuts that are only active when focus is inside the canvas
39
+ * container, using the same capture-phase listener pattern as
40
+ * {@link useGraphHistory} (undo/redo). Bare-key shortcuts (N, Escape)
41
+ * are suppressed when a text input has focus.
42
+ *
43
+ * | Shortcut | Action |
44
+ * |-------------------|---------------------------------------|
45
+ * | `Ctrl/Cmd+D` | Duplicate selected node |
46
+ * | `Ctrl/Cmd+A` | Select all non-sentinel nodes |
47
+ * | `N` (bare key) | Open task picker |
48
+ * | `Escape` | Clear selection / close open overlays |
49
+ *
50
+ * @internal Not exported from the SDK barrel.
51
+ */
52
+ export function useCanvasKeyboardShortcuts({
53
+ containerRef,
54
+ selection,
55
+ duplicateNode,
56
+ selectAll,
57
+ clearSelection,
58
+ onRequestTaskPicker,
59
+ onDismiss,
60
+ }: UseCanvasKeyboardShortcutsOptions): void {
61
+ useEffect(() => {
62
+ const container = containerRef.current;
63
+ if (!container) return;
64
+
65
+ function handleKeyDown(e: KeyboardEvent) {
66
+ if (!container || !isFocusInsideContainer(container)) return;
67
+
68
+ const isMod = e.metaKey || e.ctrlKey;
69
+
70
+ // Ctrl/Cmd+D — duplicate selected node
71
+ if (isMod && !e.shiftKey && !e.altKey && e.key.toLowerCase() === "d") {
72
+ e.preventDefault();
73
+ e.stopPropagation();
74
+ if (selection?.type === "node") {
75
+ duplicateNode(selection.id);
76
+ }
77
+ return;
78
+ }
79
+
80
+ // Ctrl/Cmd+A — select all
81
+ if (isMod && !e.shiftKey && !e.altKey && e.key.toLowerCase() === "a") {
82
+ if (isTextInput(e.target)) return;
83
+ e.preventDefault();
84
+ e.stopPropagation();
85
+ selectAll();
86
+ return;
87
+ }
88
+
89
+ // Bare-key shortcuts — skip when typing in a text field
90
+ if (isMod || e.altKey) return;
91
+
92
+ // Escape — clear selection, close menus/pickers
93
+ if (e.key === "Escape") {
94
+ e.preventDefault();
95
+ e.stopPropagation();
96
+ onDismiss();
97
+ clearSelection();
98
+ return;
99
+ }
100
+
101
+ // N — open task picker
102
+ if (!e.shiftKey && e.key.toLowerCase() === "n") {
103
+ if (isTextInput(e.target)) return;
104
+ e.preventDefault();
105
+ e.stopPropagation();
106
+
107
+ if (selection?.type === "node") {
108
+ // Position below the selected node — the editor resolves
109
+ // the actual screen coordinates from the node's React Flow position.
110
+ onRequestTaskPicker({ x: 0, y: 0 }, selection.id);
111
+ } else {
112
+ // Viewport center
113
+ const rect = container.getBoundingClientRect();
114
+ onRequestTaskPicker({
115
+ x: rect.left + rect.width / 2,
116
+ y: rect.top + rect.height / 2,
117
+ });
118
+ }
119
+ return;
120
+ }
121
+ }
122
+
123
+ document.addEventListener("keydown", handleKeyDown, true);
124
+ return () => document.removeEventListener("keydown", handleKeyDown, true);
125
+ }, [
126
+ containerRef,
127
+ selection,
128
+ duplicateNode,
129
+ selectAll,
130
+ clearSelection,
131
+ onRequestTaskPicker,
132
+ onDismiss,
133
+ ]);
134
+ }
@@ -0,0 +1,378 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
5
+ import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
6
+ import { getUserMessage } from "@stigmer/sdk";
7
+ import { useCreateSession } from "../session/useCreateSession";
8
+ import { useCreateAgentExecution } from "../execution/useCreateAgentExecution";
9
+ import { useExecutionStream } from "../execution/useExecutionStream";
10
+ import { isTerminalPhase } from "../execution/execution-phases";
11
+ import { useConversationStoreRef } from "../internal/store";
12
+ import {
13
+ extractWorkflowYaml,
14
+ type ExtractedWorkflowYaml,
15
+ } from "./extract-workflow-yaml";
16
+
17
+ /**
18
+ * Lifecycle phases for the workflow execution diagnosis flow.
19
+ *
20
+ * - `idle` — mounted, waiting for auto-start or manual trigger
21
+ * - `starting` — creating session + execution
22
+ * - `streaming` — agent is analyzing (tool calls, reasoning visible)
23
+ * - `complete` — agent finished, YAML fix extracted (diff available)
24
+ * - `ready` — agent finished without YAML (runtime error explanation),
25
+ * or user accepted/discarded a fix; follow-up available
26
+ * - `error` — a failure occurred (RPC, stream)
27
+ */
28
+ export type DiagnosePhase =
29
+ | "idle"
30
+ | "starting"
31
+ | "streaming"
32
+ | "complete"
33
+ | "ready"
34
+ | "error";
35
+
36
+ /** Options for {@link useDiagnoseExecutionFlow}. */
37
+ export interface UseDiagnoseExecutionFlowOptions {
38
+ /** ID of the failed workflow execution to diagnose. */
39
+ readonly executionId: string;
40
+ /** Organization slug for session and execution creation. */
41
+ readonly org: string;
42
+ /** Current workflow YAML for diff computation (optional). */
43
+ readonly currentWorkflowYaml?: string;
44
+ /**
45
+ * Whether to start diagnosis automatically on mount.
46
+ * @default true
47
+ */
48
+ readonly autoStart?: boolean;
49
+ /** Called when any step fails. Also available via the `error` return. */
50
+ readonly onError?: (message: string) => void;
51
+ }
52
+
53
+ /** Return value of {@link useDiagnoseExecutionFlow}. */
54
+ export interface UseDiagnoseExecutionFlowReturn {
55
+ /** Current lifecycle phase. */
56
+ readonly phase: DiagnosePhase;
57
+ /** Completed execution snapshots for MessageThread (chronological). */
58
+ readonly completedExecutions: readonly AgentExecution[];
59
+ /** Currently streaming execution, or null when idle/between turns. */
60
+ readonly activeExecution: AgentExecution | null;
61
+ /** `true` while the agent execution is actively streaming. */
62
+ readonly isStreaming: boolean;
63
+ /** Extracted YAML fix from the latest turn (null unless phase is `complete`). */
64
+ readonly extractedYaml: string | null;
65
+ /** Agent's explanation prose from the latest turn. */
66
+ readonly explanation: string | null;
67
+ /** Human-readable error message, or `null` when healthy. */
68
+ readonly error: string | null;
69
+ /** Start or restart the diagnosis. Callable from `idle` or `error` phases. */
70
+ readonly diagnose: () => Promise<void>;
71
+ /** Send a follow-up question within the same session. */
72
+ readonly sendFollowUp: (message: string) => Promise<void>;
73
+ /** Accept the extracted YAML fix. Returns the YAML string. Transitions to `ready`. */
74
+ readonly acceptFix: () => string | null;
75
+ /** Discard the extracted YAML without applying. Transitions to `ready`. */
76
+ readonly discardFix: () => void;
77
+ /** Reset all state to initial values. Does not delete the server-side session. */
78
+ readonly reset: () => void;
79
+ }
80
+
81
+ const AGENT_REF = { org: "", slug: "workflow-architect" } as const;
82
+ const MIN_FOLLOWUP_LENGTH = 5;
83
+
84
+ /**
85
+ * Behavior hook that orchestrates agent-powered workflow execution
86
+ * diagnosis using the built-in Workflow Architect system agent.
87
+ *
88
+ * Manages a multi-turn conversation within a single Session:
89
+ * - First turn creates a Session + AgentExecution with diagnosis context
90
+ * - Subsequent turns reuse the Session (conversational context)
91
+ * - Each turn streams agent messages via {@link useExecutionStream}
92
+ * - YAML is extracted from agent responses via {@link extractWorkflowYaml}
93
+ * — presence of YAML indicates a definition fix; absence indicates a
94
+ * runtime error with explanation only
95
+ *
96
+ * Auto-starts diagnosis on mount by default (AD-B5-002). The agent uses
97
+ * `get_workflow_execution` and `get_workflow_execution_events` MCP tools
98
+ * to inspect the failure autonomously.
99
+ *
100
+ * Framework-agnostic (DD-004), referentially stable returns (DD-010).
101
+ *
102
+ * @example
103
+ * ```tsx
104
+ * const flow = useDiagnoseExecutionFlow({
105
+ * executionId: "wex_abc123",
106
+ * org: "acme",
107
+ * onError: (msg) => toast.error(msg),
108
+ * });
109
+ *
110
+ * <WorkflowRepairCard flow={flow} onApplyFix={...} onClose={...} />
111
+ * ```
112
+ */
113
+ export function useDiagnoseExecutionFlow(
114
+ options: UseDiagnoseExecutionFlowOptions,
115
+ ): UseDiagnoseExecutionFlowReturn {
116
+ const { executionId, org, autoStart = true, onError } = options;
117
+
118
+ const [phase, setPhase] = useState<DiagnosePhase>("idle");
119
+ const [activeExecutionId, setActiveExecutionId] = useState<string | null>(
120
+ null,
121
+ );
122
+ const [completedExecutions, setCompletedExecutions] = useState<
123
+ AgentExecution[]
124
+ >([]);
125
+ const [extracted, setExtracted] = useState<ExtractedWorkflowYaml | null>(
126
+ null,
127
+ );
128
+ const [error, setError] = useState<string | null>(null);
129
+
130
+ const orgRef = useRef(org);
131
+ orgRef.current = org;
132
+ const executionIdRef = useRef(executionId);
133
+ executionIdRef.current = executionId;
134
+ const onErrorRef = useRef(onError);
135
+ onErrorRef.current = onError;
136
+
137
+ const sessionIdRef = useRef<string | null>(null);
138
+ const prevTerminalRef = useRef(false);
139
+ const autoStartedRef = useRef(false);
140
+
141
+ const { create: createSession } = useCreateSession();
142
+ const { create: createExecution } = useCreateAgentExecution();
143
+ const conversationStore = useConversationStoreRef();
144
+ const stream = useExecutionStream(activeExecutionId, {
145
+ store: conversationStore,
146
+ });
147
+
148
+ // ---------------------------------------------------------------------------
149
+ // Build the initial diagnosis message
150
+ // ---------------------------------------------------------------------------
151
+ const buildDiagnosisMessage = useCallback((): string => {
152
+ return (
153
+ `Diagnose the failed workflow execution \`${executionIdRef.current}\`.\n\n` +
154
+ "Analyze the failure root cause using the execution status and event log.\n" +
155
+ "If this is a workflow definition error, generate a validated fix.\n" +
156
+ "If this is a runtime error, explain the root cause and suggest operational remediation."
157
+ );
158
+ }, []);
159
+
160
+ // ---------------------------------------------------------------------------
161
+ // Terminal phase detection — extract YAML or transition to ready
162
+ // ---------------------------------------------------------------------------
163
+ useEffect(() => {
164
+ if (phase !== "streaming") return;
165
+
166
+ const isTerminal =
167
+ stream.phase !== ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED &&
168
+ isTerminalPhase(stream.phase);
169
+
170
+ if (isTerminal && !prevTerminalRef.current) {
171
+ prevTerminalRef.current = true;
172
+
173
+ if (stream.execution) {
174
+ setCompletedExecutions((prev) => [...prev, stream.execution!]);
175
+ }
176
+
177
+ const result = extractWorkflowYaml(stream.execution);
178
+ if (result) {
179
+ setExtracted(result);
180
+ setPhase("complete");
181
+ } else {
182
+ setPhase("ready");
183
+ }
184
+
185
+ setActiveExecutionId(null);
186
+ }
187
+ }, [phase, stream.phase, stream.execution]);
188
+
189
+ // ---------------------------------------------------------------------------
190
+ // Stream error surfacing
191
+ // ---------------------------------------------------------------------------
192
+ useEffect(() => {
193
+ if (stream.error && phase === "streaming") {
194
+ const msg = getUserMessage(stream.error, "Agent stream interrupted");
195
+ setPhase("error");
196
+ setError(msg);
197
+ onErrorRef.current?.(msg);
198
+ }
199
+ }, [stream.error, phase]);
200
+
201
+ // ---------------------------------------------------------------------------
202
+ // Start diagnosis (initial turn)
203
+ // ---------------------------------------------------------------------------
204
+ const diagnose = useCallback(async () => {
205
+ if (phase !== "idle" && phase !== "error") return;
206
+
207
+ setPhase("starting");
208
+ setError(null);
209
+ setExtracted(null);
210
+ prevTerminalRef.current = false;
211
+
212
+ try {
213
+ let activeSessionId = sessionIdRef.current;
214
+
215
+ if (!activeSessionId) {
216
+ const { sessionId: newSessionId } = await createSession({
217
+ org: orgRef.current,
218
+ agentRef: { ...AGENT_REF, org: orgRef.current },
219
+ });
220
+ sessionIdRef.current = newSessionId;
221
+ activeSessionId = newSessionId;
222
+ }
223
+
224
+ const message = buildDiagnosisMessage();
225
+
226
+ const { executionId: newExecutionId } = await createExecution({
227
+ org: orgRef.current,
228
+ sessionId: activeSessionId,
229
+ message,
230
+ });
231
+
232
+ setActiveExecutionId(newExecutionId);
233
+ setPhase("streaming");
234
+ } catch (err) {
235
+ const msg = getUserMessage(
236
+ err,
237
+ "Failed to start the Workflow Architect agent",
238
+ );
239
+ setPhase("error");
240
+ setError(msg);
241
+ onErrorRef.current?.(msg);
242
+ }
243
+ }, [phase, createSession, createExecution, buildDiagnosisMessage]);
244
+
245
+ // ---------------------------------------------------------------------------
246
+ // Send a follow-up question
247
+ // ---------------------------------------------------------------------------
248
+ const sendFollowUp = useCallback(
249
+ async (message: string) => {
250
+ const trimmed = message.trim();
251
+ if (trimmed.length < MIN_FOLLOWUP_LENGTH) {
252
+ setError(
253
+ `Follow-up must be at least ${MIN_FOLLOWUP_LENGTH} characters`,
254
+ );
255
+ return;
256
+ }
257
+
258
+ if (
259
+ phase !== "ready" &&
260
+ phase !== "complete" &&
261
+ phase !== "error"
262
+ ) {
263
+ return;
264
+ }
265
+
266
+ setPhase("starting");
267
+ setError(null);
268
+ setExtracted(null);
269
+ prevTerminalRef.current = false;
270
+
271
+ try {
272
+ let activeSessionId = sessionIdRef.current;
273
+
274
+ if (!activeSessionId) {
275
+ const { sessionId: newSessionId } = await createSession({
276
+ org: orgRef.current,
277
+ agentRef: { ...AGENT_REF, org: orgRef.current },
278
+ });
279
+ sessionIdRef.current = newSessionId;
280
+ activeSessionId = newSessionId;
281
+ }
282
+
283
+ const { executionId: newExecutionId } = await createExecution({
284
+ org: orgRef.current,
285
+ sessionId: activeSessionId,
286
+ message: trimmed,
287
+ });
288
+
289
+ setActiveExecutionId(newExecutionId);
290
+ setPhase("streaming");
291
+ } catch (err) {
292
+ const msg = getUserMessage(
293
+ err,
294
+ "Failed to send follow-up to the Workflow Architect agent",
295
+ );
296
+ setPhase("error");
297
+ setError(msg);
298
+ onErrorRef.current?.(msg);
299
+ }
300
+ },
301
+ [phase, createSession, createExecution],
302
+ );
303
+
304
+ // ---------------------------------------------------------------------------
305
+ // Accept / discard extracted YAML fix
306
+ // ---------------------------------------------------------------------------
307
+ const acceptFix = useCallback((): string | null => {
308
+ if (phase !== "complete" || !extracted) return null;
309
+ const yaml = extracted.yaml;
310
+ setExtracted(null);
311
+ setPhase("ready");
312
+ return yaml;
313
+ }, [phase, extracted]);
314
+
315
+ const discardFix = useCallback(() => {
316
+ if (phase !== "complete") return;
317
+ setExtracted(null);
318
+ setPhase("ready");
319
+ }, [phase]);
320
+
321
+ // ---------------------------------------------------------------------------
322
+ // Reset all state
323
+ // ---------------------------------------------------------------------------
324
+ const reset = useCallback(() => {
325
+ setPhase("idle");
326
+ setActiveExecutionId(null);
327
+ setCompletedExecutions([]);
328
+ setExtracted(null);
329
+ setError(null);
330
+ sessionIdRef.current = null;
331
+ prevTerminalRef.current = false;
332
+ autoStartedRef.current = false;
333
+ }, []);
334
+
335
+ // ---------------------------------------------------------------------------
336
+ // Auto-start on mount (AD-B5-002)
337
+ // ---------------------------------------------------------------------------
338
+ useEffect(() => {
339
+ if (autoStart && phase === "idle" && !autoStartedRef.current) {
340
+ autoStartedRef.current = true;
341
+ diagnose();
342
+ }
343
+ }, [autoStart, phase, diagnose]);
344
+
345
+ // ---------------------------------------------------------------------------
346
+ // Referentially stable return (DD-010)
347
+ // ---------------------------------------------------------------------------
348
+ return useMemo(
349
+ () => ({
350
+ phase,
351
+ completedExecutions,
352
+ activeExecution: stream.execution,
353
+ isStreaming: stream.isStreaming || stream.isConnecting,
354
+ extractedYaml: extracted?.yaml ?? null,
355
+ explanation: extracted?.explanation ?? null,
356
+ error,
357
+ diagnose,
358
+ sendFollowUp,
359
+ acceptFix,
360
+ discardFix,
361
+ reset,
362
+ }),
363
+ [
364
+ phase,
365
+ completedExecutions,
366
+ stream.execution,
367
+ stream.isStreaming,
368
+ stream.isConnecting,
369
+ extracted,
370
+ error,
371
+ diagnose,
372
+ sendFollowUp,
373
+ acceptFix,
374
+ discardFix,
375
+ reset,
376
+ ],
377
+ );
378
+ }
@@ -0,0 +1,138 @@
1
+ "use client";
2
+
3
+ import { useState, useCallback, useRef, useEffect } from "react";
4
+ import type { RefObject } from "react";
5
+ import type { WorkflowGraphModel } from "./workflow-graph-model";
6
+ import type { GraphCommand } from "./graph-commands";
7
+ import { GraphHistory } from "./graph-commands";
8
+
9
+ /** Return value of {@link useGraphHistory}. */
10
+ export interface UseGraphHistoryReturn {
11
+ readonly currentModel: WorkflowGraphModel;
12
+ readonly canUndo: boolean;
13
+ readonly canRedo: boolean;
14
+ readonly dispatch: (command: GraphCommand) => WorkflowGraphModel;
15
+ readonly undo: () => void;
16
+ readonly redo: () => void;
17
+ readonly reset: (model: WorkflowGraphModel) => void;
18
+ }
19
+
20
+ /**
21
+ * React wrapper around {@link GraphHistory} providing undo/redo state
22
+ * management and keyboard shortcut binding.
23
+ *
24
+ * Keyboard shortcuts (Ctrl/Cmd+Z, Ctrl/Cmd+Shift+Z) are only active
25
+ * when the referenced container element contains the active focus target,
26
+ * preventing conflicts with other editors on the page.
27
+ *
28
+ * @param initialModel - The starting graph model (from YAML parse).
29
+ * @param containerRef - Ref to the DOM element that scopes keyboard shortcuts.
30
+ *
31
+ * @since T15 Batch 2 (Node Authoring)
32
+ */
33
+ export function useGraphHistory(
34
+ initialModel: WorkflowGraphModel | null,
35
+ containerRef: RefObject<HTMLDivElement | null>,
36
+ ): UseGraphHistoryReturn {
37
+ const historyRef = useRef<GraphHistory | null>(null);
38
+ const [model, setModel] = useState<WorkflowGraphModel | null>(null);
39
+ const [, setVersion] = useState(0);
40
+
41
+ if (initialModel && !historyRef.current) {
42
+ historyRef.current = new GraphHistory(initialModel);
43
+ if (!model) {
44
+ setModel(initialModel);
45
+ }
46
+ }
47
+
48
+ const forceUpdate = useCallback(() => {
49
+ setVersion((v) => v + 1);
50
+ }, []);
51
+
52
+ const dispatch = useCallback(
53
+ (command: GraphCommand): WorkflowGraphModel => {
54
+ const history = historyRef.current;
55
+ if (!history) throw new Error("GraphHistory not initialized.");
56
+ const next = history.dispatch(command);
57
+ setModel(next);
58
+ forceUpdate();
59
+ return next;
60
+ },
61
+ [forceUpdate],
62
+ );
63
+
64
+ const undo = useCallback(() => {
65
+ const history = historyRef.current;
66
+ if (!history?.canUndo) return;
67
+ const next = history.undo();
68
+ setModel(next);
69
+ forceUpdate();
70
+ }, [forceUpdate]);
71
+
72
+ const redo = useCallback(() => {
73
+ const history = historyRef.current;
74
+ if (!history?.canRedo) return;
75
+ const next = history.redo();
76
+ setModel(next);
77
+ forceUpdate();
78
+ }, [forceUpdate]);
79
+
80
+ const reset = useCallback(
81
+ (newModel: WorkflowGraphModel) => {
82
+ if (historyRef.current) {
83
+ historyRef.current.reset(newModel);
84
+ } else {
85
+ historyRef.current = new GraphHistory(newModel);
86
+ }
87
+ setModel(newModel);
88
+ forceUpdate();
89
+ },
90
+ [forceUpdate],
91
+ );
92
+
93
+ // Keyboard shortcuts: Ctrl/Cmd+Z (undo), Ctrl/Cmd+Shift+Z (redo)
94
+ useEffect(() => {
95
+ const container = containerRef.current;
96
+ if (!container) return;
97
+
98
+ function handleKeyDown(e: KeyboardEvent) {
99
+ if (!container?.contains(document.activeElement) && document.activeElement !== container) {
100
+ return;
101
+ }
102
+
103
+ const isMod = e.metaKey || e.ctrlKey;
104
+ if (!isMod || e.key.toLowerCase() !== "z") return;
105
+
106
+ e.preventDefault();
107
+ e.stopPropagation();
108
+
109
+ if (e.shiftKey) {
110
+ redo();
111
+ } else {
112
+ undo();
113
+ }
114
+ }
115
+
116
+ document.addEventListener("keydown", handleKeyDown, true);
117
+ return () => document.removeEventListener("keydown", handleKeyDown, true);
118
+ }, [containerRef, undo, redo]);
119
+
120
+ const canUndo = historyRef.current?.canUndo ?? false;
121
+ const canRedo = historyRef.current?.canRedo ?? false;
122
+
123
+ const emptyModel: WorkflowGraphModel = {
124
+ document: { dsl: "1.0.0", namespace: "", name: "", version: "0.0.1" },
125
+ nodes: [],
126
+ edges: [],
127
+ };
128
+
129
+ return {
130
+ currentModel: model ?? emptyModel,
131
+ canUndo,
132
+ canRedo,
133
+ dispatch,
134
+ undo,
135
+ redo,
136
+ reset,
137
+ };
138
+ }