@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,245 @@
1
+ "use client";
2
+
3
+ import { useId } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type { EnvVarDeclaration } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/spec_pb";
6
+ import type { WorkflowInstance } from "@stigmer/protos/ai/stigmer/agentic/workflowinstance/v1/api_pb";
7
+ import type { RunWorkflowFieldErrors } from "./useRunWorkflowFlow";
8
+
9
+ /** Props for {@link WorkflowRunForm}. */
10
+ export interface WorkflowRunFormProps {
11
+ /** Current trigger message value. */
12
+ readonly triggerMessage: string;
13
+ /** Called when the trigger message changes. */
14
+ readonly onTriggerMessageChange: (value: string) => void;
15
+
16
+ /** Declared environment variables from the workflow spec. */
17
+ readonly envDeclarations: Record<string, EnvVarDeclaration>;
18
+ /** Current runtime env var overrides (keyed by variable name). */
19
+ readonly runtimeEnv: Record<string, string>;
20
+ /** Called when a single env var value changes. */
21
+ readonly onEnvVarChange: (key: string, value: string) => void;
22
+
23
+ /** Available workflow instances for the selector. */
24
+ readonly instances: readonly WorkflowInstance[];
25
+ /** Currently selected instance ID, or `null` for server-resolved default. */
26
+ readonly selectedInstanceId: string | null;
27
+ /** Called when the selected instance changes. */
28
+ readonly onInstanceChange: (id: string | null) => void;
29
+
30
+ /** Field-level validation errors keyed by field name. */
31
+ readonly errors: RunWorkflowFieldErrors;
32
+
33
+ /** When `true`, all fields are disabled (during submission). */
34
+ readonly disabled?: boolean;
35
+ /** Additional CSS classes for the root container. */
36
+ readonly className?: string;
37
+ }
38
+
39
+ const INPUT_CLASSES = cn(
40
+ "w-full rounded-md border border-input bg-background px-2.5 py-1.5 text-sm text-foreground",
41
+ "placeholder:text-muted-foreground",
42
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
43
+ "disabled:pointer-events-none disabled:opacity-50",
44
+ );
45
+
46
+ /**
47
+ * Form fields for running a workflow execution.
48
+ *
49
+ * Renders a trigger message textarea, auto-generated environment
50
+ * variable fields from the workflow's `spec.env` declarations, and
51
+ * an instance selector (hidden when 0-1 instances exist).
52
+ *
53
+ * This component is presentational — it does not manage state or
54
+ * submit. Pair with {@link useRunWorkflowFlow} for the full
55
+ * behavior, or wire the props manually for custom integrations.
56
+ *
57
+ * All visuals flow through `--stgm-*` design tokens. Zero Console
58
+ * dependencies — safe for platform builder embedding.
59
+ *
60
+ * @example
61
+ * ```tsx
62
+ * const flow = useRunWorkflowFlow({ ... });
63
+ *
64
+ * <WorkflowRunForm
65
+ * triggerMessage={flow.triggerMessage}
66
+ * onTriggerMessageChange={flow.setTriggerMessage}
67
+ * envDeclarations={flow.envDeclarations}
68
+ * runtimeEnv={flow.runtimeEnv}
69
+ * onEnvVarChange={flow.setEnvVar}
70
+ * instances={instances}
71
+ * selectedInstanceId={flow.selectedInstanceId}
72
+ * onInstanceChange={flow.setSelectedInstanceId}
73
+ * errors={flow.fieldErrors}
74
+ * disabled={flow.isSubmitting}
75
+ * />
76
+ * ```
77
+ */
78
+ export function WorkflowRunForm({
79
+ triggerMessage,
80
+ onTriggerMessageChange,
81
+ envDeclarations,
82
+ runtimeEnv,
83
+ onEnvVarChange,
84
+ instances,
85
+ selectedInstanceId,
86
+ onInstanceChange,
87
+ errors,
88
+ disabled,
89
+ className,
90
+ }: WorkflowRunFormProps) {
91
+ const formId = useId();
92
+ const envEntries = Object.entries(envDeclarations);
93
+ const showInstanceSelector = instances.length > 1;
94
+
95
+ return (
96
+ <div className={cn("flex flex-col gap-4", className)}>
97
+ {/* Trigger message */}
98
+ <FieldGroup>
99
+ <FieldLabel htmlFor={`${formId}-trigger`}>Input Message</FieldLabel>
100
+ <textarea
101
+ id={`${formId}-trigger`}
102
+ value={triggerMessage}
103
+ onChange={(e) => onTriggerMessageChange(e.target.value)}
104
+ placeholder="Optional message or JSON payload to trigger the workflow"
105
+ disabled={disabled}
106
+ rows={3}
107
+ className={cn(INPUT_CLASSES, "resize-y")}
108
+ />
109
+ <FieldHint>
110
+ Accessible in the workflow as{" "}
111
+ <code className="text-[0.7rem]">
112
+ {"{{workflow.input.trigger_message}}"}
113
+ </code>
114
+ </FieldHint>
115
+ </FieldGroup>
116
+
117
+ {/* Instance selector (only when multiple instances exist) */}
118
+ {showInstanceSelector && (
119
+ <FieldGroup>
120
+ <FieldLabel htmlFor={`${formId}-instance`}>Instance</FieldLabel>
121
+ <select
122
+ id={`${formId}-instance`}
123
+ value={selectedInstanceId ?? ""}
124
+ onChange={(e) =>
125
+ onInstanceChange(e.target.value || null)
126
+ }
127
+ disabled={disabled}
128
+ className={INPUT_CLASSES}
129
+ >
130
+ <option value="">Default instance (auto)</option>
131
+ {instances.map((inst) => (
132
+ <option key={inst.metadata?.id} value={inst.metadata?.id ?? ""}>
133
+ {inst.metadata?.name || inst.metadata?.slug || inst.metadata?.id}
134
+ </option>
135
+ ))}
136
+ </select>
137
+ </FieldGroup>
138
+ )}
139
+
140
+ {/* Environment variables */}
141
+ {envEntries.length > 0 && (
142
+ <div className="flex flex-col gap-3">
143
+ <h4 className="text-xs font-medium text-muted-foreground">
144
+ Environment Variables
145
+ </h4>
146
+ {envEntries.map(([key, decl]) => {
147
+ const fieldId = `${formId}-env-${key}`;
148
+ const fieldError = errors[key];
149
+ return (
150
+ <FieldGroup key={key}>
151
+ <FieldLabel htmlFor={fieldId}>
152
+ <code className="text-xs">{key}</code>
153
+ {!decl.optional && (
154
+ <span
155
+ className="ml-1 text-destructive"
156
+ aria-label="required"
157
+ >
158
+ *
159
+ </span>
160
+ )}
161
+ </FieldLabel>
162
+ <input
163
+ id={fieldId}
164
+ type={decl.isSecret ? "password" : "text"}
165
+ value={runtimeEnv[key] ?? ""}
166
+ onChange={(e) => onEnvVarChange(key, e.target.value)}
167
+ placeholder={
168
+ decl.optional ? "Optional" : "Required"
169
+ }
170
+ disabled={disabled}
171
+ aria-invalid={!!fieldError}
172
+ aria-describedby={
173
+ fieldError
174
+ ? `${fieldId}-error`
175
+ : decl.description
176
+ ? `${fieldId}-desc`
177
+ : undefined
178
+ }
179
+ className={cn(
180
+ INPUT_CLASSES,
181
+ fieldError && "border-destructive focus-visible:ring-destructive",
182
+ )}
183
+ />
184
+ {decl.description && !fieldError && (
185
+ <FieldHint id={`${fieldId}-desc`}>
186
+ {decl.description}
187
+ </FieldHint>
188
+ )}
189
+ {fieldError && (
190
+ <p
191
+ id={`${fieldId}-error`}
192
+ className="text-[0.7rem] text-destructive"
193
+ role="alert"
194
+ >
195
+ {fieldError}
196
+ </p>
197
+ )}
198
+ </FieldGroup>
199
+ );
200
+ })}
201
+ </div>
202
+ )}
203
+ </div>
204
+ );
205
+ }
206
+
207
+ // ---------------------------------------------------------------------------
208
+ // Shared form primitives (internal to this file)
209
+ // ---------------------------------------------------------------------------
210
+
211
+ function FieldGroup({
212
+ children,
213
+ }: {
214
+ readonly children: React.ReactNode;
215
+ }) {
216
+ return <div className="flex flex-col gap-1">{children}</div>;
217
+ }
218
+
219
+ function FieldLabel({
220
+ htmlFor,
221
+ children,
222
+ }: {
223
+ readonly htmlFor: string;
224
+ readonly children: React.ReactNode;
225
+ }) {
226
+ return (
227
+ <label htmlFor={htmlFor} className="text-xs font-medium text-foreground">
228
+ {children}
229
+ </label>
230
+ );
231
+ }
232
+
233
+ function FieldHint({
234
+ id,
235
+ children,
236
+ }: {
237
+ readonly id?: string;
238
+ readonly children: React.ReactNode;
239
+ }) {
240
+ return (
241
+ <p id={id} className="text-[0.7rem] text-muted-foreground">
242
+ {children}
243
+ </p>
244
+ );
245
+ }
@@ -0,0 +1,177 @@
1
+ "use client";
2
+
3
+ import { memo, useMemo } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
6
+ import type { WorkflowTask } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/spec_pb";
7
+ import { useTaskKindRegistryContext } from "./TaskKindRegistryContext";
8
+
9
+ /** Props for {@link WorkflowTaskList}. */
10
+ export interface WorkflowTaskListProps {
11
+ /** Tasks from the workflow spec. */
12
+ readonly tasks: readonly WorkflowTask[];
13
+ /** Additional CSS class names for the root container. */
14
+ readonly className?: string;
15
+ }
16
+
17
+ const TASK_KIND_LABELS: ReadonlyMap<WorkflowTaskKind, string> = new Map([
18
+ [WorkflowTaskKind.set_vars, "Set Variables"],
19
+ [WorkflowTaskKind.http_call, "HTTP Call"],
20
+ [WorkflowTaskKind.grpc_call, "gRPC Call"],
21
+ [WorkflowTaskKind.activity_call, "Activity Call"],
22
+ [WorkflowTaskKind.switch_case, "Switch"],
23
+ [WorkflowTaskKind.for_each, "For Each"],
24
+ [WorkflowTaskKind.fork, "Fork"],
25
+ [WorkflowTaskKind.try_catch, "Try/Catch"],
26
+ [WorkflowTaskKind.listen, "Listen"],
27
+ [WorkflowTaskKind.wait, "Wait"],
28
+ [WorkflowTaskKind.raise_error, "Raise Error"],
29
+ [WorkflowTaskKind.run_workflow, "Run Workflow"],
30
+ [WorkflowTaskKind.agent_call, "Agent Call"],
31
+ [WorkflowTaskKind.llm_call, "LLM Call"],
32
+ [WorkflowTaskKind.transform, "Transform"],
33
+ [WorkflowTaskKind.human_input, "Human Input"],
34
+ [WorkflowTaskKind.validate, "Validate"],
35
+ [WorkflowTaskKind.emit_event, "Emit Event"],
36
+ [WorkflowTaskKind.notification, "Notification"],
37
+ [WorkflowTaskKind.eval, "Evaluate (LLM Judge)"],
38
+ ]);
39
+
40
+ /**
41
+ * Compact list of tasks in a workflow specification.
42
+ *
43
+ * Renders each task as a row with a kind icon (from the TaskKindRegistry),
44
+ * task name, kind label, and a sequential connector line indicating flow
45
+ * order. When the registry is loading, kind icons are omitted gracefully.
46
+ *
47
+ * Zero Console dependencies — safe for platform builder embedding.
48
+ * All visual properties flow through `--stgm-*` tokens.
49
+ *
50
+ * @example
51
+ * ```tsx
52
+ * <WorkflowTaskList tasks={workflow.spec?.tasks ?? []} />
53
+ * ```
54
+ */
55
+ export const WorkflowTaskList = memo(function WorkflowTaskList({
56
+ tasks,
57
+ className,
58
+ }: WorkflowTaskListProps) {
59
+ const { descriptors } = useTaskKindRegistryContext();
60
+
61
+ const kindIconMap = useMemo(() => {
62
+ const map = new Map<string, string>();
63
+ for (const d of descriptors) {
64
+ map.set(d.kind, d.icon);
65
+ }
66
+ return map;
67
+ }, [descriptors]);
68
+
69
+ if (tasks.length === 0) {
70
+ return (
71
+ <div className={cn("py-8 text-center text-sm text-muted-foreground", className)}>
72
+ No tasks defined
73
+ </div>
74
+ );
75
+ }
76
+
77
+ return (
78
+ <div className={cn("flex flex-col", className)}>
79
+ {tasks.map((task, idx) => {
80
+ const kindLabel = TASK_KIND_LABELS.get(task.kind) ?? formatKindName(task.kind);
81
+ const iconName = kindIconMap.get(kindEnumToString(task.kind));
82
+ const isLast = idx === tasks.length - 1;
83
+
84
+ return (
85
+ <div key={task.name} className="flex items-stretch gap-3">
86
+ {/* Vertical connector line */}
87
+ <div className="flex w-5 flex-col items-center">
88
+ <div
89
+ className={cn(
90
+ "flex size-5 shrink-0 items-center justify-center rounded-full border border-border bg-background text-[10px] font-medium text-muted-foreground",
91
+ )}
92
+ >
93
+ {idx + 1}
94
+ </div>
95
+ {!isLast && (
96
+ <div className="w-px flex-1 bg-border" />
97
+ )}
98
+ </div>
99
+
100
+ {/* Task content */}
101
+ <div className="flex min-w-0 flex-1 items-center gap-2 pb-3 pt-0.5">
102
+ {iconName && (
103
+ <TaskKindIcon iconName={iconName} className="size-4 shrink-0 text-muted-foreground" />
104
+ )}
105
+ <span className="truncate text-sm font-medium text-foreground">
106
+ {task.name}
107
+ </span>
108
+ <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
109
+ {kindLabel}
110
+ </span>
111
+ </div>
112
+ </div>
113
+ );
114
+ })}
115
+ </div>
116
+ );
117
+ });
118
+
119
+ /**
120
+ * Maps a WorkflowTaskKind enum value to its string representation
121
+ * matching the TaskKindDescriptor's `kind` field.
122
+ */
123
+ function kindEnumToString(kind: WorkflowTaskKind): string {
124
+ const entry = Object.entries(WorkflowTaskKind).find(
125
+ ([, v]) => v === kind && typeof v === "number",
126
+ );
127
+ return entry?.[0] ?? "";
128
+ }
129
+
130
+ function formatKindName(kind: WorkflowTaskKind): string {
131
+ const str = kindEnumToString(kind);
132
+ return str
133
+ .split("_")
134
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
135
+ .join(" ");
136
+ }
137
+
138
+ /**
139
+ * Renders a task kind icon by name. Uses simple SVG placeholders --
140
+ * the full Lucide icon set is intentionally avoided in the SDK to
141
+ * keep the bundle size minimal (DD-004).
142
+ */
143
+ function TaskKindIcon({
144
+ iconName,
145
+ className,
146
+ }: {
147
+ readonly iconName: string;
148
+ readonly className?: string;
149
+ }) {
150
+ return (
151
+ <span
152
+ className={cn("inline-flex items-center justify-center", className)}
153
+ title={iconName}
154
+ aria-hidden="true"
155
+ >
156
+ <TaskDotIcon />
157
+ </span>
158
+ );
159
+ }
160
+
161
+ function TaskDotIcon() {
162
+ return (
163
+ <svg
164
+ width="16"
165
+ height="16"
166
+ viewBox="0 0 16 16"
167
+ fill="none"
168
+ stroke="currentColor"
169
+ strokeWidth="1.5"
170
+ strokeLinecap="round"
171
+ strokeLinejoin="round"
172
+ >
173
+ <circle cx="8" cy="8" r="3" />
174
+ <path d="M8 2v3M8 11v3M2 8h3M11 8h3" />
175
+ </svg>
176
+ );
177
+ }
@@ -0,0 +1,248 @@
1
+ "use client";
2
+
3
+ import { memo, useState, useCallback, useMemo } from "react";
4
+ import type { DragEvent } from "react";
5
+ import { cn } from "@stigmer/theme";
6
+ import { useTaskKindRegistry } from "./useTaskKindRegistry";
7
+ import type { TaskKindDescriptor, TaskKindCategory } from "./types";
8
+ import { CATEGORY_COLORS, CATEGORY_DISPLAY_NAMES, CATEGORY_ORDER } from "./canvas-constants";
9
+
10
+ /** MIME type for the drag transfer carrying the task kind identifier. */
11
+ export const TASK_KIND_DRAG_MIME = "application/stigmer-task-kind";
12
+
13
+ /** Props for {@link WorkflowTaskPalette}. */
14
+ export interface WorkflowTaskPaletteProps {
15
+ /** Additional CSS class names for the root container. */
16
+ readonly className?: string;
17
+ }
18
+
19
+ /**
20
+ * Categorized sidebar listing all available workflow task kinds.
21
+ *
22
+ * Each task kind entry is draggable. The drop target (the canvas)
23
+ * reads the task kind from the drag transfer data using
24
+ * {@link TASK_KIND_DRAG_MIME} and creates a new node.
25
+ *
26
+ * Self-contained SDK component (DD-001, AD-T15-B2-005): depends only
27
+ * on `useTaskKindRegistry()` and `--stgm-*` theme tokens. No canvas
28
+ * or React Flow dependency.
29
+ *
30
+ * @since T15 Batch 2 (Node Authoring)
31
+ */
32
+ export const WorkflowTaskPalette = memo(function WorkflowTaskPalette({
33
+ className,
34
+ }: WorkflowTaskPaletteProps) {
35
+ const { categories, isLoading, error, refetch } = useTaskKindRegistry();
36
+ const [searchQuery, setSearchQuery] = useState("");
37
+ const [collapsedCategories, setCollapsedCategories] = useState<Set<string>>(
38
+ new Set(),
39
+ );
40
+
41
+ const handleSearchChange = useCallback(
42
+ (e: React.ChangeEvent<HTMLInputElement>) => {
43
+ setSearchQuery(e.target.value);
44
+ },
45
+ [],
46
+ );
47
+
48
+ const toggleCategory = useCallback((category: string) => {
49
+ setCollapsedCategories((prev) => {
50
+ const next = new Set(prev);
51
+ if (next.has(category)) {
52
+ next.delete(category);
53
+ } else {
54
+ next.add(category);
55
+ }
56
+ return next;
57
+ });
58
+ }, []);
59
+
60
+ const filteredCategories = useMemo(() => {
61
+ const query = searchQuery.toLowerCase().trim();
62
+ const result: Array<{
63
+ category: TaskKindCategory;
64
+ descriptors: readonly TaskKindDescriptor[];
65
+ }> = [];
66
+
67
+ for (const cat of CATEGORY_ORDER) {
68
+ const descriptors = categories.get(cat);
69
+ if (!descriptors || descriptors.length === 0) continue;
70
+
71
+ const filtered = query
72
+ ? descriptors.filter(
73
+ (d) =>
74
+ d.displayName.toLowerCase().includes(query) ||
75
+ d.description.toLowerCase().includes(query),
76
+ )
77
+ : descriptors;
78
+
79
+ if (filtered.length > 0) {
80
+ result.push({ category: cat, descriptors: filtered });
81
+ }
82
+ }
83
+
84
+ return result;
85
+ }, [categories, searchQuery]);
86
+
87
+ if (isLoading) {
88
+ return (
89
+ <div className={cn("stgm flex w-60 flex-col gap-3 border-r border-[var(--stgm-border-prominent,#d4d4d8)] bg-[var(--stgm-card,var(--stgm-background,#fff))] p-3", className)}>
90
+ {Array.from({ length: 4 }).map((_, i) => (
91
+ <div key={i} className="space-y-2">
92
+ <div className="h-4 w-20 animate-pulse rounded bg-[var(--stgm-muted,#f5f5f5)]" />
93
+ <div className="h-10 w-full animate-pulse rounded bg-[var(--stgm-muted,#f5f5f5)]" />
94
+ <div className="h-10 w-full animate-pulse rounded bg-[var(--stgm-muted,#f5f5f5)]" />
95
+ </div>
96
+ ))}
97
+ </div>
98
+ );
99
+ }
100
+
101
+ if (error) {
102
+ return (
103
+ <div className={cn("stgm flex w-60 flex-col items-center justify-center gap-2 border-r border-[var(--stgm-border-prominent,#d4d4d8)] bg-[var(--stgm-card,var(--stgm-background,#fff))] p-4", className)}>
104
+ <span className="text-xs text-[var(--stgm-destructive,#ef4444)]">
105
+ Failed to load task types
106
+ </span>
107
+ <button
108
+ type="button"
109
+ onClick={refetch}
110
+ className="rounded border border-[var(--stgm-border-prominent,#d4d4d8)] bg-[var(--stgm-card,var(--stgm-background,#fff))] px-2 py-1 text-xs text-[var(--stgm-foreground,#1a1a2e)] hover:bg-[var(--stgm-muted,#f5f5f5)]"
111
+ >
112
+ Retry
113
+ </button>
114
+ </div>
115
+ );
116
+ }
117
+
118
+ return (
119
+ <div
120
+ className={cn(
121
+ "stgm flex w-60 shrink-0 flex-col border-r border-[var(--stgm-border-prominent,#d4d4d8)] bg-[var(--stgm-card,var(--stgm-background,#fff))]",
122
+ className,
123
+ )}
124
+ >
125
+ <div className="border-b border-[var(--stgm-border-prominent,#d4d4d8)] p-2">
126
+ <input
127
+ type="search"
128
+ placeholder="Search tasks…"
129
+ value={searchQuery}
130
+ onChange={handleSearchChange}
131
+ className="w-full rounded border border-[var(--stgm-border-prominent,#d4d4d8)] bg-[var(--stgm-input-bg,var(--stgm-background,#fff))] px-2 py-1.5 text-xs text-[var(--stgm-foreground,#1a1a2e)] placeholder:text-[var(--stgm-muted-foreground,#737373)] outline-none focus:ring-1 focus:ring-[var(--stgm-ring,#3b82f6)]"
132
+ aria-label="Search task types"
133
+ />
134
+ </div>
135
+
136
+ <div className="flex-1 overflow-y-auto p-2">
137
+ {filteredCategories.length === 0 ? (
138
+ <div className="py-6 text-center text-xs text-[var(--stgm-muted-foreground,#737373)]">
139
+ {searchQuery ? "No matching tasks" : "No task types available"}
140
+ </div>
141
+ ) : (
142
+ filteredCategories.map(({ category, descriptors }) => (
143
+ <PaletteCategory
144
+ key={category}
145
+ category={category}
146
+ descriptors={descriptors}
147
+ isCollapsed={collapsedCategories.has(category)}
148
+ onToggle={toggleCategory}
149
+ />
150
+ ))
151
+ )}
152
+ </div>
153
+ </div>
154
+ );
155
+ });
156
+
157
+ // ---------------------------------------------------------------------------
158
+ // PaletteCategory
159
+ // ---------------------------------------------------------------------------
160
+
161
+ function PaletteCategory({
162
+ category,
163
+ descriptors,
164
+ isCollapsed,
165
+ onToggle,
166
+ }: {
167
+ category: TaskKindCategory;
168
+ descriptors: readonly TaskKindDescriptor[];
169
+ isCollapsed: boolean;
170
+ onToggle: (category: string) => void;
171
+ }) {
172
+ const categoryColor = CATEGORY_COLORS[category] ?? CATEGORY_COLORS.unspecified;
173
+
174
+ return (
175
+ <div className="mb-2">
176
+ <button
177
+ type="button"
178
+ onClick={() => onToggle(category)}
179
+ className="flex w-full items-center gap-1.5 rounded px-1 py-1 text-left text-[11px] font-semibold uppercase tracking-wider text-[var(--stgm-muted-foreground,#737373)] hover:bg-[var(--stgm-muted,#f5f5f5)]"
180
+ aria-expanded={!isCollapsed}
181
+ >
182
+ <span
183
+ className="inline-block h-2 w-2 rounded-full"
184
+ style={{ backgroundColor: categoryColor }}
185
+ aria-hidden="true"
186
+ />
187
+ {CATEGORY_DISPLAY_NAMES[category]}
188
+ <span className="ml-auto text-[10px]">{isCollapsed ? "+" : "\u2212"}</span>
189
+ </button>
190
+
191
+ {!isCollapsed && (
192
+ <div className="mt-0.5 space-y-0.5" role="listbox" aria-label={CATEGORY_DISPLAY_NAMES[category]}>
193
+ {descriptors.map((descriptor) => (
194
+ <PaletteItem
195
+ key={descriptor.kind}
196
+ descriptor={descriptor}
197
+ categoryColor={categoryColor}
198
+ />
199
+ ))}
200
+ </div>
201
+ )}
202
+ </div>
203
+ );
204
+ }
205
+
206
+ // ---------------------------------------------------------------------------
207
+ // PaletteItem
208
+ // ---------------------------------------------------------------------------
209
+
210
+ function PaletteItem({
211
+ descriptor,
212
+ categoryColor,
213
+ }: {
214
+ descriptor: TaskKindDescriptor;
215
+ categoryColor: string;
216
+ }) {
217
+ const handleDragStart = useCallback(
218
+ (e: DragEvent<HTMLDivElement>) => {
219
+ e.dataTransfer.setData(TASK_KIND_DRAG_MIME, descriptor.kind);
220
+ e.dataTransfer.effectAllowed = "move";
221
+ },
222
+ [descriptor.kind],
223
+ );
224
+
225
+ return (
226
+ <div
227
+ draggable
228
+ onDragStart={handleDragStart}
229
+ className="flex cursor-grab items-start gap-2 rounded border border-[var(--stgm-border-prominent,#d4d4d8)] bg-[var(--stgm-background,#fff)] px-2 py-1.5 transition-colors hover:bg-[var(--stgm-muted,#f5f5f5)] active:cursor-grabbing"
230
+ role="option"
231
+ aria-label={`Drag to add ${descriptor.displayName} task`}
232
+ >
233
+ <span
234
+ className="mt-0.5 inline-block h-2.5 w-0.5 shrink-0 rounded-full"
235
+ style={{ backgroundColor: categoryColor }}
236
+ aria-hidden="true"
237
+ />
238
+ <div className="min-w-0 flex-1">
239
+ <div className="truncate text-xs font-medium text-[var(--stgm-foreground,#1a1a2e)]">
240
+ {descriptor.displayName}
241
+ </div>
242
+ <div className="truncate text-[10px] leading-tight text-[var(--stgm-muted-foreground,#737373)]">
243
+ {descriptor.description}
244
+ </div>
245
+ </div>
246
+ </div>
247
+ );
248
+ }