@stigmer/react 0.5.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,547 @@
1
+ "use client";
2
+
3
+ import { memo, useCallback, useMemo, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { useWorkflowEditor } from "./useWorkflowEditor";
6
+ import { WorkflowYamlEditor } from "./WorkflowYamlEditor";
7
+ import { WorkflowTopologyGraph } from "./WorkflowTopologyGraph";
8
+ import { WorkflowCanvasEditor } from "./WorkflowCanvasEditor";
9
+ import { WorkflowRefinePanel } from "./WorkflowRefinePanel";
10
+ import { yamlToGraph } from "./workflow-graph-conversions";
11
+
12
+ /** Props for {@link WorkflowEditorView}. */
13
+ export interface WorkflowEditorViewProps {
14
+ /** The initial YAML content to load into the editor. */
15
+ readonly initialYaml: string;
16
+ /** Organization slug for the save path. */
17
+ readonly org: string;
18
+ /** Called after a successful save. */
19
+ readonly onSaveSuccess?: () => void;
20
+ /** Called when a save fails. */
21
+ readonly onSaveError?: (error: Error) => void;
22
+ /** Initial editor mode. Defaults to `"code"`. */
23
+ readonly defaultMode?: WorkflowEditorMode;
24
+ /** Additional CSS class names for the root container. */
25
+ readonly className?: string;
26
+ }
27
+
28
+ /**
29
+ * Composed workflow YAML editor with live topology graph preview.
30
+ *
31
+ * Renders a side-by-side layout: schema-aware YAML editor on the left,
32
+ * read-only DAG preview on the right. Includes a toolbar with
33
+ * validation summary, save button, dirty indicator, and full-page toggle.
34
+ *
35
+ * Composes {@link useWorkflowEditor} internally — the caller only needs
36
+ * to provide the initial YAML and org slug.
37
+ *
38
+ * Zero Console dependencies (DD-004). All visual properties flow through
39
+ * `--stgm-*` design tokens.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * <WorkflowEditorView
44
+ * initialYaml={yaml}
45
+ * org="acme"
46
+ * onSaveSuccess={() => toast.success("Workflow saved")}
47
+ * />
48
+ * ```
49
+ *
50
+ * @since T10 (YAML Editor with Graph Preview)
51
+ */
52
+ /** Editing mode for the workflow editor. */
53
+ export type WorkflowEditorMode = "code" | "visual";
54
+
55
+ export const WorkflowEditorView = memo(function WorkflowEditorView({
56
+ initialYaml,
57
+ org,
58
+ onSaveSuccess,
59
+ onSaveError,
60
+ defaultMode = "code",
61
+ className,
62
+ }: WorkflowEditorViewProps) {
63
+ const editor = useWorkflowEditor(initialYaml, { org });
64
+ const [isFullPage, setIsFullPage] = useState(false);
65
+ const [mode, setMode] = useState<WorkflowEditorMode>(defaultMode);
66
+ const [showModeWarning, setShowModeWarning] = useState(false);
67
+ const [canvasIsSaving, setCanvasIsSaving] = useState(false);
68
+ const [showRefinePanel, setShowRefinePanel] = useState(false);
69
+
70
+ // Track canvas dirty state separately for mode switch prompts
71
+ const [canvasDirty, setCanvasDirty] = useState(false);
72
+ const [showDirtyPrompt, setShowDirtyPrompt] = useState(false);
73
+
74
+ const handleSave = useCallback(async () => {
75
+ const success = await editor.save();
76
+ if (success) {
77
+ onSaveSuccess?.();
78
+ } else if (editor.saveError) {
79
+ onSaveError?.(editor.saveError);
80
+ }
81
+ }, [editor, onSaveSuccess, onSaveError]);
82
+
83
+ const toggleFullPage = useCallback(() => {
84
+ setIsFullPage((prev) => !prev);
85
+ }, []);
86
+
87
+ // -------------------------------------------------------------------------
88
+ // Mode switching (AD-T15-B3-003)
89
+ // -------------------------------------------------------------------------
90
+
91
+ const handleSwitchToVisual = useCallback(() => {
92
+ try {
93
+ yamlToGraph(editor.yaml);
94
+ setShowModeWarning(true);
95
+ } catch {
96
+ onSaveError?.(new Error("Cannot switch to visual mode: the current YAML has structural errors that prevent parsing."));
97
+ }
98
+ }, [editor.yaml, onSaveError]);
99
+
100
+ const confirmSwitchToVisual = useCallback(() => {
101
+ setShowModeWarning(false);
102
+ setMode("visual");
103
+ }, []);
104
+
105
+ const cancelSwitchToVisual = useCallback(() => {
106
+ setShowModeWarning(false);
107
+ }, []);
108
+
109
+ const handleSwitchToCode = useCallback(() => {
110
+ if (canvasDirty) {
111
+ setShowDirtyPrompt(true);
112
+ return;
113
+ }
114
+ setMode("code");
115
+ }, [canvasDirty]);
116
+
117
+ const confirmDiscardAndSwitchToCode = useCallback(() => {
118
+ setShowDirtyPrompt(false);
119
+ setMode("code");
120
+ setCanvasDirty(false);
121
+ }, []);
122
+
123
+ const cancelSwitchToCode = useCallback(() => {
124
+ setShowDirtyPrompt(false);
125
+ }, []);
126
+
127
+ // Canvas save handler (AD-T15-B3-002: save via YAML)
128
+ const handleCanvasSave = useCallback(
129
+ async (yamlStr: string) => {
130
+ setCanvasIsSaving(true);
131
+ editor.setYaml(yamlStr);
132
+ // Allow React to propagate the YAML before saving
133
+ setTimeout(async () => {
134
+ const success = await editor.save();
135
+ setCanvasIsSaving(false);
136
+ setCanvasDirty(false);
137
+ if (success) {
138
+ onSaveSuccess?.();
139
+ } else if (editor.saveError) {
140
+ onSaveError?.(editor.saveError);
141
+ }
142
+ }, 0);
143
+ },
144
+ [editor, onSaveSuccess, onSaveError],
145
+ );
146
+
147
+ const toggleRefinePanel = useCallback(() => {
148
+ setShowRefinePanel((prev) => !prev);
149
+ }, []);
150
+
151
+ const handleRefineAccept = useCallback(
152
+ (updatedYaml: string) => {
153
+ editor.setYaml(updatedYaml);
154
+ if (mode === "visual") {
155
+ try {
156
+ yamlToGraph(updatedYaml);
157
+ } catch {
158
+ // Canvas will re-parse on next render
159
+ }
160
+ }
161
+ },
162
+ [editor, mode],
163
+ );
164
+
165
+ // Validation error mapping for canvas mode
166
+ const nodeErrors = useMemo<ReadonlyMap<string, readonly string[]>>(() => {
167
+ if (mode !== "visual") return new Map();
168
+ const errorMap = new Map<string, string[]>();
169
+ for (const diag of editor.diagnostics) {
170
+ if (diag.severity !== "error") continue;
171
+ const match = diag.message.match(/task\s+"([^"]+)"/i) ??
172
+ diag.message.match(/task\s+(\S+)/i);
173
+ if (match) {
174
+ const taskName = match[1];
175
+ const existing = errorMap.get(taskName);
176
+ if (existing) {
177
+ existing.push(diag.message);
178
+ } else {
179
+ errorMap.set(taskName, [diag.message]);
180
+ }
181
+ }
182
+ }
183
+ return errorMap;
184
+ }, [mode, editor.diagnostics]);
185
+
186
+ const rootClassName = cn(
187
+ "stgm-workflow-editor flex flex-col",
188
+ isFullPage && "fixed inset-0 z-50 bg-background",
189
+ !isFullPage && "h-full",
190
+ className,
191
+ );
192
+
193
+ return (
194
+ <div className={rootClassName}>
195
+ {/* Toolbar */}
196
+ <div className="flex items-center justify-between border-b border-border px-3 py-2">
197
+ <div className="flex items-center gap-3">
198
+ {/* Mode Toggle */}
199
+ <ModeToggle mode={mode} onSwitchToCode={handleSwitchToCode} onSwitchToVisual={handleSwitchToVisual} />
200
+ <div className="mx-1 h-4 w-px bg-[var(--stgm-border,#d4d4d8)]" aria-hidden="true" />
201
+ <button
202
+ type="button"
203
+ onClick={toggleRefinePanel}
204
+ className={cn(
205
+ "inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium transition-colors",
206
+ showRefinePanel
207
+ ? "bg-primary/10 text-primary"
208
+ : "text-muted-foreground hover:bg-muted hover:text-foreground",
209
+ )}
210
+ aria-pressed={showRefinePanel}
211
+ aria-label="Refine with AI"
212
+ >
213
+ <RefineSparklesIcon />
214
+ Refine
215
+ </button>
216
+ <div className="mx-1 h-4 w-px bg-[var(--stgm-border,#d4d4d8)]" aria-hidden="true" />
217
+ <ValidationSummary
218
+ errorCount={editor.errorCount}
219
+ warningCount={editor.warningCount}
220
+ />
221
+ {(editor.isDirty || canvasDirty) && (
222
+ <span className="text-xs text-muted-foreground">Unsaved changes</span>
223
+ )}
224
+ </div>
225
+
226
+ <div className="flex items-center gap-2">
227
+ {mode === "code" && (
228
+ <button
229
+ type="button"
230
+ onClick={editor.reset}
231
+ disabled={!editor.isDirty || editor.isSaving}
232
+ className={cn(
233
+ "rounded px-2.5 py-1 text-xs font-medium transition-colors",
234
+ "text-muted-foreground hover:bg-muted hover:text-foreground",
235
+ "disabled:pointer-events-none disabled:opacity-40",
236
+ )}
237
+ >
238
+ Reset
239
+ </button>
240
+ )}
241
+ {mode === "code" && (
242
+ <button
243
+ type="button"
244
+ onClick={handleSave}
245
+ disabled={!editor.isDirty || editor.isSaving || editor.errorCount > 0}
246
+ className={cn(
247
+ "rounded bg-primary px-3 py-1 text-xs font-medium text-primary-foreground transition-colors",
248
+ "hover:bg-primary/90",
249
+ "disabled:pointer-events-none disabled:opacity-40",
250
+ )}
251
+ >
252
+ {editor.isSaving ? "Saving\u2026" : "Save"}
253
+ </button>
254
+ )}
255
+ <button
256
+ type="button"
257
+ onClick={toggleFullPage}
258
+ className="rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground"
259
+ aria-label={isFullPage ? "Exit full page" : "Full page"}
260
+ >
261
+ <ExpandIcon expanded={isFullPage} />
262
+ </button>
263
+ </div>
264
+ </div>
265
+
266
+ {/* Save error banner */}
267
+ {editor.saveError && (
268
+ <div className="border-b border-destructive/20 bg-destructive/5 px-3 py-2 text-xs text-destructive">
269
+ {editor.saveError.message}
270
+ </div>
271
+ )}
272
+
273
+ {/* Mode warning dialog */}
274
+ {showModeWarning && (
275
+ <ModeWarningDialog onConfirm={confirmSwitchToVisual} onCancel={cancelSwitchToVisual} />
276
+ )}
277
+
278
+ {/* Dirty prompt dialog */}
279
+ {showDirtyPrompt && (
280
+ <DirtyPromptDialog onDiscard={confirmDiscardAndSwitchToCode} onCancel={cancelSwitchToCode} />
281
+ )}
282
+
283
+ {/* Main content area */}
284
+ <div className="flex min-h-0 flex-1">
285
+ {mode === "code" ? (
286
+ <>
287
+ <div className="flex-1 overflow-hidden border-r border-border">
288
+ <WorkflowYamlEditor
289
+ value={editor.yaml}
290
+ onChange={editor.setYaml}
291
+ diagnostics={editor.diagnostics as import("@codemirror/lint").Diagnostic[]}
292
+ className="h-full rounded-none border-0"
293
+ />
294
+ </div>
295
+ <div className="w-[40%] min-w-[240px] overflow-hidden">
296
+ {showRefinePanel ? (
297
+ <WorkflowRefinePanel
298
+ org={org}
299
+ currentYaml={editor.yaml}
300
+ onAccept={handleRefineAccept}
301
+ onClose={toggleRefinePanel}
302
+ className="h-full"
303
+ />
304
+ ) : (
305
+ <WorkflowTopologyGraph
306
+ topology={editor.topology}
307
+ className="h-full"
308
+ />
309
+ )}
310
+ </div>
311
+ </>
312
+ ) : (
313
+ <>
314
+ <WorkflowCanvasEditor
315
+ yaml={editor.yaml}
316
+ onSave={handleCanvasSave}
317
+ isSaving={canvasIsSaving}
318
+ onDirtyChange={setCanvasDirty}
319
+ nodeErrors={nodeErrors}
320
+ className={showRefinePanel ? "w-[60%]" : "flex-1"}
321
+ />
322
+ {showRefinePanel && (
323
+ <div className="w-[40%] min-w-[240px] overflow-hidden">
324
+ <WorkflowRefinePanel
325
+ org={org}
326
+ currentYaml={editor.yaml}
327
+ onAccept={handleRefineAccept}
328
+ onClose={toggleRefinePanel}
329
+ className="h-full"
330
+ />
331
+ </div>
332
+ )}
333
+ </>
334
+ )}
335
+ </div>
336
+ </div>
337
+ );
338
+ });
339
+
340
+ // ---------------------------------------------------------------------------
341
+ // Mode Toggle
342
+ // ---------------------------------------------------------------------------
343
+
344
+ function ModeToggle({
345
+ mode,
346
+ onSwitchToCode,
347
+ onSwitchToVisual,
348
+ }: {
349
+ mode: WorkflowEditorMode;
350
+ onSwitchToCode: () => void;
351
+ onSwitchToVisual: () => void;
352
+ }) {
353
+ const segmentClass = (active: boolean) =>
354
+ cn(
355
+ "rounded px-2.5 py-1 text-xs font-medium transition-colors",
356
+ active
357
+ ? "bg-[var(--stgm-primary,#6366f1)] text-[var(--stgm-primary-foreground,#fff)]"
358
+ : "text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)] hover:text-[var(--stgm-foreground,#1a1a2e)]",
359
+ );
360
+
361
+ return (
362
+ <div className="flex items-center gap-0.5 rounded-md border border-[var(--stgm-border,#d4d4d8)] p-0.5" role="tablist" aria-label="Editor mode">
363
+ <button type="button" role="tab" aria-selected={mode === "code"} onClick={onSwitchToCode} className={segmentClass(mode === "code")}>
364
+ Code
365
+ </button>
366
+ <button type="button" role="tab" aria-selected={mode === "visual"} onClick={onSwitchToVisual} className={segmentClass(mode === "visual")}>
367
+ Visual
368
+ </button>
369
+ </div>
370
+ );
371
+ }
372
+
373
+ // ---------------------------------------------------------------------------
374
+ // Mode Warning Dialog
375
+ // ---------------------------------------------------------------------------
376
+
377
+ function ModeWarningDialog({
378
+ onConfirm,
379
+ onCancel,
380
+ }: {
381
+ onConfirm: () => void;
382
+ onCancel: () => void;
383
+ }) {
384
+ return (
385
+ <div className="border-b border-[var(--stgm-border,#e5e5e5)] bg-[var(--stgm-accent,#fffbeb)] px-3 py-2">
386
+ <div className="flex items-center justify-between gap-3">
387
+ <p className="text-xs text-[var(--stgm-foreground,#1a1a2e)]">
388
+ Switching to visual mode will normalize YAML formatting. Comments and custom ordering will not be preserved.
389
+ </p>
390
+ <div className="flex shrink-0 items-center gap-1.5">
391
+ <button
392
+ type="button"
393
+ onClick={onCancel}
394
+ className="rounded px-2 py-1 text-xs text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)]"
395
+ >
396
+ Cancel
397
+ </button>
398
+ <button
399
+ type="button"
400
+ onClick={onConfirm}
401
+ className="rounded bg-[var(--stgm-primary,#6366f1)] px-2.5 py-1 text-xs font-medium text-[var(--stgm-primary-foreground,#fff)] hover:opacity-90"
402
+ >
403
+ Continue
404
+ </button>
405
+ </div>
406
+ </div>
407
+ </div>
408
+ );
409
+ }
410
+
411
+ // ---------------------------------------------------------------------------
412
+ // Dirty Prompt Dialog
413
+ // ---------------------------------------------------------------------------
414
+
415
+ function DirtyPromptDialog({
416
+ onDiscard,
417
+ onCancel,
418
+ }: {
419
+ onDiscard: () => void;
420
+ onCancel: () => void;
421
+ }) {
422
+ return (
423
+ <div className="border-b border-[var(--stgm-border,#e5e5e5)] bg-[var(--stgm-accent,#fffbeb)] px-3 py-2">
424
+ <div className="flex items-center justify-between gap-3">
425
+ <p className="text-xs text-[var(--stgm-foreground,#1a1a2e)]">
426
+ You have unsaved changes in the visual editor. Switching to code mode will discard them.
427
+ </p>
428
+ <div className="flex shrink-0 items-center gap-1.5">
429
+ <button
430
+ type="button"
431
+ onClick={onCancel}
432
+ className="rounded px-2 py-1 text-xs text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)]"
433
+ >
434
+ Stay in Visual
435
+ </button>
436
+ <button
437
+ type="button"
438
+ onClick={onDiscard}
439
+ className="rounded bg-[var(--stgm-destructive,#ef4444)] px-2.5 py-1 text-xs font-medium text-white hover:opacity-90"
440
+ >
441
+ Discard &amp; Switch
442
+ </button>
443
+ </div>
444
+ </div>
445
+ </div>
446
+ );
447
+ }
448
+
449
+ // ---------------------------------------------------------------------------
450
+ // Sub-components
451
+ // ---------------------------------------------------------------------------
452
+
453
+ function ValidationSummary({
454
+ errorCount,
455
+ warningCount,
456
+ }: {
457
+ readonly errorCount: number;
458
+ readonly warningCount: number;
459
+ }) {
460
+ if (errorCount === 0 && warningCount === 0) {
461
+ return (
462
+ <span className="text-xs text-success">
463
+ <CheckCircleIcon />
464
+ {" "}Valid
465
+ </span>
466
+ );
467
+ }
468
+
469
+ return (
470
+ <div className="flex items-center gap-2">
471
+ {errorCount > 0 && (
472
+ <span className="text-xs text-destructive">
473
+ {errorCount} {errorCount === 1 ? "error" : "errors"}
474
+ </span>
475
+ )}
476
+ {warningCount > 0 && (
477
+ <span className="text-xs text-warning">
478
+ {warningCount} {warningCount === 1 ? "warning" : "warnings"}
479
+ </span>
480
+ )}
481
+ </div>
482
+ );
483
+ }
484
+
485
+ function CheckCircleIcon() {
486
+ return (
487
+ <svg
488
+ width="12"
489
+ height="12"
490
+ viewBox="0 0 16 16"
491
+ fill="none"
492
+ stroke="currentColor"
493
+ strokeWidth="1.5"
494
+ strokeLinecap="round"
495
+ strokeLinejoin="round"
496
+ className="inline-block"
497
+ >
498
+ <circle cx="8" cy="8" r="6.5" />
499
+ <path d="M5.5 8l2 2 3-3.5" />
500
+ </svg>
501
+ );
502
+ }
503
+
504
+ function RefineSparklesIcon() {
505
+ return (
506
+ <svg
507
+ width="12"
508
+ height="12"
509
+ viewBox="0 0 16 16"
510
+ fill="none"
511
+ stroke="currentColor"
512
+ strokeWidth="1.5"
513
+ strokeLinecap="round"
514
+ strokeLinejoin="round"
515
+ aria-hidden="true"
516
+ >
517
+ <path d="M8 2l1.5 4.5L14 8l-4.5 1.5L8 14l-1.5-4.5L2 8l4.5-1.5z" />
518
+ </svg>
519
+ );
520
+ }
521
+
522
+ function ExpandIcon({ expanded }: { readonly expanded: boolean }) {
523
+ return (
524
+ <svg
525
+ width="14"
526
+ height="14"
527
+ viewBox="0 0 16 16"
528
+ fill="none"
529
+ stroke="currentColor"
530
+ strokeWidth="1.5"
531
+ strokeLinecap="round"
532
+ strokeLinejoin="round"
533
+ >
534
+ {expanded ? (
535
+ <>
536
+ <path d="M6 2H2v4M10 14h4v-4" />
537
+ <path d="M2 2l5 5M14 14l-5-5" />
538
+ </>
539
+ ) : (
540
+ <>
541
+ <path d="M14 2h-4M2 14h4" />
542
+ <path d="M14 2l-5 5M2 14l5-5" />
543
+ </>
544
+ )}
545
+ </svg>
546
+ );
547
+ }
@@ -0,0 +1,129 @@
1
+ "use client";
2
+
3
+ import { memo, useCallback, useState } from "react";
4
+ import type { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
5
+ import { cn } from "@stigmer/theme";
6
+
7
+ /** Props for {@link WorkflowExecutionApprovalCard}. */
8
+ export interface WorkflowExecutionApprovalCardProps {
9
+ /** The prompt message explaining what needs approval. */
10
+ readonly prompt: string;
11
+ /** Tool call ID for the approval request. */
12
+ readonly toolCallId: string;
13
+ /** List of users/roles that can approve. */
14
+ readonly approvers: readonly string[];
15
+ /** Timeout in seconds (0 = no timeout). */
16
+ readonly timeoutSeconds: number;
17
+ /** Callback to submit the approval decision. */
18
+ readonly onSubmitApproval: (
19
+ toolCallId: string,
20
+ action: ApprovalAction,
21
+ comment?: string,
22
+ ) => Promise<unknown>;
23
+ /** `true` while a submission is in flight. */
24
+ readonly isSubmitting: boolean;
25
+ /** Additional CSS class names. */
26
+ readonly className?: string;
27
+ }
28
+
29
+ /**
30
+ * Inline approval card rendered within the execution timeline when
31
+ * a `human_input` task or agent tool approval gate is active.
32
+ *
33
+ * Provides approve and reject buttons with an optional comment field.
34
+ * Keyboard-navigable and accessible.
35
+ */
36
+ export const WorkflowExecutionApprovalCard = memo(function WorkflowExecutionApprovalCard({
37
+ prompt,
38
+ toolCallId,
39
+ approvers,
40
+ timeoutSeconds,
41
+ onSubmitApproval,
42
+ isSubmitting,
43
+ className,
44
+ }: WorkflowExecutionApprovalCardProps) {
45
+ const [comment, setComment] = useState("");
46
+
47
+ // ApprovalAction enum values: 0=UNSPECIFIED, 1=APPROVE, 2=SKIP, 3=REJECT
48
+ const handleApprove = useCallback(() => {
49
+ onSubmitApproval(toolCallId, 1 as ApprovalAction, comment || undefined);
50
+ }, [toolCallId, comment, onSubmitApproval]);
51
+
52
+ const handleReject = useCallback(() => {
53
+ onSubmitApproval(toolCallId, 3 as ApprovalAction, comment || undefined);
54
+ }, [toolCallId, comment, onSubmitApproval]);
55
+
56
+ return (
57
+ <div
58
+ role="alert"
59
+ aria-label="Approval required"
60
+ className={cn(
61
+ "my-1 rounded-lg border border-warning/30 bg-warning/5 p-3",
62
+ className,
63
+ )}
64
+ >
65
+ <p className="text-sm font-medium text-foreground">{prompt}</p>
66
+
67
+ {approvers.length > 0 && (
68
+ <p className="mt-1 text-xs text-muted-foreground">
69
+ Approvers: {approvers.join(", ")}
70
+ </p>
71
+ )}
72
+
73
+ {timeoutSeconds > 0 && (
74
+ <p className="text-xs text-muted-foreground">
75
+ Expires in {formatTimeout(timeoutSeconds)}
76
+ </p>
77
+ )}
78
+
79
+ <div className="mt-2">
80
+ <input
81
+ type="text"
82
+ value={comment}
83
+ onChange={(e) => setComment(e.target.value)}
84
+ placeholder="Comment (optional)"
85
+ disabled={isSubmitting}
86
+ className={cn(
87
+ "w-full rounded border border-border bg-background px-2 py-1 text-xs text-foreground",
88
+ "placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring",
89
+ "disabled:opacity-50",
90
+ )}
91
+ />
92
+ </div>
93
+
94
+ <div className="mt-2 flex gap-2">
95
+ <button
96
+ type="button"
97
+ onClick={handleApprove}
98
+ disabled={isSubmitting}
99
+ className={cn(
100
+ "rounded px-3 py-1 text-xs font-medium",
101
+ "bg-success text-success-foreground",
102
+ "hover:bg-success/90 disabled:pointer-events-none disabled:opacity-50",
103
+ )}
104
+ >
105
+ Approve
106
+ </button>
107
+ <button
108
+ type="button"
109
+ onClick={handleReject}
110
+ disabled={isSubmitting}
111
+ className={cn(
112
+ "rounded border border-destructive/30 px-3 py-1 text-xs font-medium text-destructive",
113
+ "hover:bg-destructive/10 disabled:pointer-events-none disabled:opacity-50",
114
+ )}
115
+ >
116
+ Reject
117
+ </button>
118
+ </div>
119
+ </div>
120
+ );
121
+ });
122
+
123
+ function formatTimeout(seconds: number): string {
124
+ if (seconds < 60) return `${seconds}s`;
125
+ const m = Math.floor(seconds / 60);
126
+ if (m < 60) return `${m}m`;
127
+ const h = Math.floor(m / 60);
128
+ return `${h}h`;
129
+ }