@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
@@ -6,6 +6,12 @@ import { ConversationStore, type StreamState } from "./conversation-store";
6
6
 
7
7
  export { ConversationStore, type StreamState } from "./conversation-store";
8
8
  export { structuralShare } from "./structural-share";
9
+ export {
10
+ WorkflowExecutionEventStore,
11
+ type WorkflowEventStreamState,
12
+ type DerivedTaskState,
13
+ type DerivedCostSummary,
14
+ } from "./workflow-execution-event-store";
9
15
 
10
16
  // ---------------------------------------------------------------------------
11
17
  // Context
@@ -0,0 +1,391 @@
1
+ import type { WorkflowExecutionEvent } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
2
+ import { WorkflowEventType } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
3
+ import type { WorkflowTaskKind } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/enum_pb";
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // Stream state (mirrors ConversationStore's StreamState shape)
7
+ // ---------------------------------------------------------------------------
8
+
9
+ export type WorkflowEventStreamState =
10
+ | { readonly stage: "idle" }
11
+ | { readonly stage: "connecting"; readonly executionId: string }
12
+ | { readonly stage: "streaming"; readonly executionId: string }
13
+ | { readonly stage: "complete"; readonly executionId: string }
14
+ | {
15
+ readonly stage: "error";
16
+ readonly executionId: string;
17
+ readonly error: Error;
18
+ }
19
+ | { readonly stage: "unsupported"; readonly executionId: string };
20
+
21
+ const IDLE_STATE: WorkflowEventStreamState = { stage: "idle" };
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Derived state types
25
+ // ---------------------------------------------------------------------------
26
+
27
+ export interface DerivedTaskState {
28
+ readonly taskName: string;
29
+ readonly taskKind: WorkflowTaskKind;
30
+ readonly status: "pending" | "running" | "completed" | "failed" | "skipped" | "retrying" | "waiting_approval";
31
+ readonly durationMs: number;
32
+ readonly costMicros: bigint;
33
+ readonly tokensUsed: bigint;
34
+ readonly attemptNumber: number;
35
+ readonly error: string;
36
+ readonly childExecutionId: string;
37
+ }
38
+
39
+ export interface DerivedCostSummary {
40
+ readonly costConsumedMicros: bigint;
41
+ readonly costRemainingMicros: bigint;
42
+ readonly tokensConsumed: bigint;
43
+ readonly tokensRemaining: bigint;
44
+ readonly thresholdBreached: boolean;
45
+ }
46
+
47
+ const BIGINT_ZERO = BigInt(0);
48
+ const BIGINT_NEG_ONE = BigInt(-1);
49
+
50
+ const EMPTY_COST_SUMMARY: DerivedCostSummary = {
51
+ costConsumedMicros: BIGINT_ZERO,
52
+ costRemainingMicros: BIGINT_NEG_ONE,
53
+ tokensConsumed: BIGINT_ZERO,
54
+ tokensRemaining: BIGINT_NEG_ONE,
55
+ thresholdBreached: false,
56
+ };
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // WorkflowExecutionEventStore
60
+ // ---------------------------------------------------------------------------
61
+
62
+ type Listener = () => void;
63
+
64
+ /**
65
+ * Framework-agnostic store that accumulates workflow execution events
66
+ * in an append-only list and derives task states and cost summaries.
67
+ *
68
+ * Implements the contract required by React's `useSyncExternalStore`.
69
+ *
70
+ * Unlike `ConversationStore` (which stores mutable execution snapshots
71
+ * and applies structural sharing), this store is append-only: events
72
+ * are immutable once received. Derived state (task map, cost summary)
73
+ * is lazily recomputed and cached.
74
+ */
75
+ export class WorkflowExecutionEventStore {
76
+ private _events: readonly WorkflowExecutionEvent[] = [];
77
+ private _streamState: WorkflowEventStreamState = IDLE_STATE;
78
+ private _listeners = new Set<Listener>();
79
+
80
+ private _taskStatesCache: ReadonlyMap<string, DerivedTaskState> | null = null;
81
+ private _costSummaryCache: DerivedCostSummary | null = null;
82
+ private _totalTasks = 0;
83
+
84
+ // -- Ingestion -----------------------------------------------------------
85
+
86
+ /**
87
+ * Append new events to the store. Deduplicates by sequence_number
88
+ * and maintains ascending order. Notifies listeners only when new
89
+ * events are actually added.
90
+ */
91
+ appendEvents(events: readonly WorkflowExecutionEvent[]): void {
92
+ if (events.length === 0) return;
93
+
94
+ const currentMax = this._events.length > 0
95
+ ? this._events[this._events.length - 1].sequenceNumber
96
+ : BIGINT_ZERO;
97
+
98
+ const newEvents = events.filter((e) => e.sequenceNumber > currentMax);
99
+ if (newEvents.length === 0) return;
100
+
101
+ newEvents.sort((a, b) => {
102
+ if (a.sequenceNumber < b.sequenceNumber) return -1;
103
+ if (a.sequenceNumber > b.sequenceNumber) return 1;
104
+ return 0;
105
+ });
106
+
107
+ this._events = [...this._events, ...newEvents];
108
+ this._taskStatesCache = null;
109
+ this._costSummaryCache = null;
110
+
111
+ for (const evt of newEvents) {
112
+ if (
113
+ evt.eventType === WorkflowEventType.execution_started &&
114
+ evt.payload.case === "executionStarted"
115
+ ) {
116
+ this._totalTasks = evt.payload.value.totalTasks;
117
+ }
118
+ }
119
+
120
+ this._notify();
121
+ }
122
+
123
+ /**
124
+ * Transition the stream lifecycle state.
125
+ */
126
+ setStreamState(state: WorkflowEventStreamState): void {
127
+ if (streamStateEqual(this._streamState, state)) return;
128
+ this._streamState = state;
129
+ this._notify();
130
+ }
131
+
132
+ /**
133
+ * Reset to initial state.
134
+ */
135
+ reset(): void {
136
+ const wasEmpty =
137
+ this._events.length === 0 && this._streamState.stage === "idle";
138
+ this._events = [];
139
+ this._streamState = IDLE_STATE;
140
+ this._taskStatesCache = null;
141
+ this._costSummaryCache = null;
142
+ this._totalTasks = 0;
143
+ if (!wasEmpty) this._notify();
144
+ }
145
+
146
+ // -- useSyncExternalStore selectors -------------------------------------
147
+
148
+ subscribe = (listener: Listener): (() => void) => {
149
+ this._listeners.add(listener);
150
+ return () => {
151
+ this._listeners.delete(listener);
152
+ };
153
+ };
154
+
155
+ getEvents = (): readonly WorkflowExecutionEvent[] => {
156
+ return this._events;
157
+ };
158
+
159
+ getStreamState = (): WorkflowEventStreamState => {
160
+ return this._streamState;
161
+ };
162
+
163
+ getLatestSequence = (): bigint => {
164
+ if (this._events.length === 0) return BIGINT_ZERO;
165
+ return this._events[this._events.length - 1].sequenceNumber;
166
+ };
167
+
168
+ getTotalTasks = (): number => {
169
+ return this._totalTasks;
170
+ };
171
+
172
+ /**
173
+ * Derived task state map, lazily computed and cached until new
174
+ * events are appended. Walks the event list once per invalidation
175
+ * to build a `Map<taskName, DerivedTaskState>`.
176
+ */
177
+ getTaskStates = (): ReadonlyMap<string, DerivedTaskState> => {
178
+ if (this._taskStatesCache) return this._taskStatesCache;
179
+ this._taskStatesCache = deriveTaskStates(this._events);
180
+ return this._taskStatesCache;
181
+ };
182
+
183
+ /**
184
+ * Derived cost summary from the latest budget_checkpoint event.
185
+ * Falls back to aggregating task_completed events when no checkpoint exists.
186
+ */
187
+ getCostSummary = (): DerivedCostSummary => {
188
+ if (this._costSummaryCache) return this._costSummaryCache;
189
+ this._costSummaryCache = deriveCostSummary(this._events);
190
+ return this._costSummaryCache;
191
+ };
192
+
193
+ // -- Internal ------------------------------------------------------------
194
+
195
+ private _notify(): void {
196
+ for (const listener of this._listeners) {
197
+ listener();
198
+ }
199
+ }
200
+ }
201
+
202
+ // ---------------------------------------------------------------------------
203
+ // Derivation helpers
204
+ // ---------------------------------------------------------------------------
205
+
206
+ function deriveTaskStates(
207
+ events: readonly WorkflowExecutionEvent[],
208
+ ): ReadonlyMap<string, DerivedTaskState> {
209
+ const map = new Map<string, DerivedTaskState>();
210
+
211
+ for (const evt of events) {
212
+ const taskName = evt.taskName;
213
+ if (!taskName) continue;
214
+
215
+ const prev = map.get(taskName);
216
+ const p = evt.payload;
217
+
218
+ switch (p.case) {
219
+ case "taskStarted":
220
+ map.set(taskName, {
221
+ taskName,
222
+ taskKind: p.value.taskKind,
223
+ status: "running",
224
+ durationMs: 0,
225
+ costMicros: prev?.costMicros ?? BIGINT_ZERO,
226
+ tokensUsed: prev?.tokensUsed ?? BIGINT_ZERO,
227
+ attemptNumber: p.value.attemptNumber,
228
+ error: "",
229
+ childExecutionId: prev?.childExecutionId ?? "",
230
+ });
231
+ break;
232
+
233
+ case "taskCompleted":
234
+ map.set(taskName, {
235
+ taskName,
236
+ taskKind: p.value.taskKind,
237
+ status: "completed",
238
+ durationMs: Number(p.value.durationMs),
239
+ costMicros: p.value.costMicros,
240
+ tokensUsed: p.value.tokensUsed,
241
+ attemptNumber: prev?.attemptNumber ?? 1,
242
+ error: "",
243
+ childExecutionId: prev?.childExecutionId ?? "",
244
+ });
245
+ break;
246
+
247
+ case "taskFailed":
248
+ map.set(taskName, {
249
+ taskName,
250
+ taskKind: p.value.taskKind,
251
+ status: p.value.willRetry ? "retrying" : "failed",
252
+ durationMs: Number(p.value.durationMs),
253
+ costMicros: prev?.costMicros ?? BIGINT_ZERO,
254
+ tokensUsed: prev?.tokensUsed ?? BIGINT_ZERO,
255
+ attemptNumber: p.value.attemptNumber,
256
+ error: p.value.error,
257
+ childExecutionId: prev?.childExecutionId ?? "",
258
+ });
259
+ break;
260
+
261
+ case "taskSkipped":
262
+ map.set(taskName, {
263
+ taskName,
264
+ taskKind: p.value.taskKind,
265
+ status: "skipped",
266
+ durationMs: 0,
267
+ costMicros: BIGINT_ZERO,
268
+ tokensUsed: BIGINT_ZERO,
269
+ attemptNumber: 0,
270
+ error: "",
271
+ childExecutionId: prev?.childExecutionId ?? "",
272
+ });
273
+ break;
274
+
275
+ case "taskRetrying":
276
+ if (prev) {
277
+ map.set(taskName, { ...prev, status: "retrying" });
278
+ }
279
+ break;
280
+
281
+ case "agentCallStarted":
282
+ if (prev) {
283
+ map.set(taskName, {
284
+ ...prev,
285
+ childExecutionId: p.value.childExecutionId,
286
+ });
287
+ }
288
+ break;
289
+
290
+ case "agentCallCompleted":
291
+ if (prev) {
292
+ map.set(taskName, {
293
+ ...prev,
294
+ costMicros: p.value.costMicros,
295
+ tokensUsed: p.value.tokensConsumed,
296
+ });
297
+ }
298
+ break;
299
+
300
+ case "approvalRequested":
301
+ if (prev) {
302
+ map.set(taskName, { ...prev, status: "waiting_approval" });
303
+ }
304
+ break;
305
+
306
+ case "approvalResolved":
307
+ if (prev && prev.status === "waiting_approval") {
308
+ map.set(taskName, { ...prev, status: "running" });
309
+ }
310
+ break;
311
+ }
312
+ }
313
+
314
+ return map;
315
+ }
316
+
317
+ function deriveCostSummary(
318
+ events: readonly WorkflowExecutionEvent[],
319
+ ): DerivedCostSummary {
320
+ // Prefer the latest budget_checkpoint event
321
+ for (let i = events.length - 1; i >= 0; i--) {
322
+ const p = events[i].payload;
323
+ if (p.case === "budgetCheckpoint") {
324
+ return {
325
+ costConsumedMicros: p.value.costConsumedMicros,
326
+ costRemainingMicros: p.value.costRemainingMicros,
327
+ tokensConsumed: p.value.tokensConsumed,
328
+ tokensRemaining: p.value.tokensRemaining,
329
+ thresholdBreached: p.value.thresholdBreached,
330
+ };
331
+ }
332
+ }
333
+
334
+ // Fall back to execution_completed summary
335
+ for (let i = events.length - 1; i >= 0; i--) {
336
+ const p = events[i].payload;
337
+ if (p.case === "executionCompleted") {
338
+ return {
339
+ costConsumedMicros: p.value.totalCostMicros,
340
+ costRemainingMicros: BIGINT_NEG_ONE,
341
+ tokensConsumed: p.value.totalTokens,
342
+ tokensRemaining: BIGINT_NEG_ONE,
343
+ thresholdBreached: false,
344
+ };
345
+ }
346
+ }
347
+
348
+ // Fall back to aggregating task_completed events
349
+ let totalCost = BIGINT_ZERO;
350
+ let totalTokens = BIGINT_ZERO;
351
+ for (const evt of events) {
352
+ if (evt.payload.case === "taskCompleted") {
353
+ totalCost += evt.payload.value.costMicros;
354
+ totalTokens += evt.payload.value.tokensUsed;
355
+ }
356
+ }
357
+
358
+ if (totalCost > BIGINT_ZERO || totalTokens > BIGINT_ZERO) {
359
+ return {
360
+ costConsumedMicros: totalCost,
361
+ costRemainingMicros: BIGINT_NEG_ONE,
362
+ tokensConsumed: totalTokens,
363
+ tokensRemaining: BIGINT_NEG_ONE,
364
+ thresholdBreached: false,
365
+ };
366
+ }
367
+
368
+ return EMPTY_COST_SUMMARY;
369
+ }
370
+
371
+ // ---------------------------------------------------------------------------
372
+ // Stream state equality
373
+ // ---------------------------------------------------------------------------
374
+
375
+ function streamStateEqual(
376
+ a: WorkflowEventStreamState,
377
+ b: WorkflowEventStreamState,
378
+ ): boolean {
379
+ if (a.stage !== b.stage) return false;
380
+ if (a.stage === "idle") return true;
381
+ if (
382
+ a.stage === "error" &&
383
+ b.stage === "error" &&
384
+ a.executionId === b.executionId &&
385
+ a.error === b.error
386
+ )
387
+ return true;
388
+ if ("executionId" in a && "executionId" in b)
389
+ return a.executionId === b.executionId;
390
+ return false;
391
+ }
@@ -14,29 +14,45 @@ export interface ScopeToggleProps {
14
14
  readonly disabled?: boolean;
15
15
  /** Additional CSS classes applied to the root element. */
16
16
  readonly className?: string;
17
+ /**
18
+ * When true, renders icon-only buttons without text labels.
19
+ * Useful inside space-constrained contexts like picker popovers.
20
+ * Each button retains an accessible `aria-label`.
21
+ */
22
+ readonly compact?: boolean;
17
23
  }
18
24
 
19
- const SCOPE_OPTIONS: readonly {
25
+ const OPTIONS: readonly {
20
26
  readonly value: ResourceListScope;
21
27
  readonly label: string;
28
+ readonly ariaLabel: string;
29
+ readonly icon: (props: { className?: string }) => React.JSX.Element;
22
30
  }[] = [
23
- { value: "org", label: "Org" },
24
- { value: "all", label: "All" },
31
+ {
32
+ value: "org",
33
+ label: "Org",
34
+ ariaLabel: "Organization only",
35
+ icon: OrgIcon,
36
+ },
37
+ {
38
+ value: "all",
39
+ label: "All",
40
+ ariaLabel: "All including public",
41
+ icon: GlobeIcon,
42
+ },
25
43
  ];
26
44
 
27
45
  /**
28
- * Segmented control for toggling resource scope between "Org"
29
- * (only the current organization's resources) and "All"
30
- * (including public and platform resources).
46
+ * Segmented control for switching resource list scope between
47
+ * organization-only and all (including public community resources).
48
+ *
49
+ * Renders as a WAI-ARIA Radio Group with roving tabindex and
50
+ * arrow-key navigation. Follows the same visual pattern as
51
+ * {@link VisibilityToggle}.
31
52
  *
32
- * Designed for use in Library list headers alongside a search input.
33
53
  * The component is controlled — the consumer owns the `value` state
34
54
  * and handles persistence (e.g., localStorage).
35
55
  *
36
- * Implements the WAI-ARIA Radio Group pattern with roving tabindex
37
- * for keyboard navigation: Arrow Left/Right moves focus and selects,
38
- * Tab enters/exits the group.
39
- *
40
56
  * All visual properties flow through `--stgm-*` tokens.
41
57
  *
42
58
  * @example
@@ -54,28 +70,35 @@ export function ScopeToggle({
54
70
  onChange,
55
71
  disabled = false,
56
72
  className,
73
+ compact = false,
57
74
  }: ScopeToggleProps) {
58
75
  const optionRefs = useRef<(HTMLButtonElement | null)[]>([]);
59
76
 
77
+ const handleSelect = useCallback(
78
+ (next: ResourceListScope) => {
79
+ if (next !== value) onChange(next);
80
+ },
81
+ [value, onChange],
82
+ );
83
+
60
84
  const handleKeyDown = useCallback(
61
85
  (e: React.KeyboardEvent<HTMLButtonElement>, index: number) => {
62
86
  let nextIndex: number | null = null;
63
87
 
64
88
  if (e.key === "ArrowRight" || e.key === "ArrowDown") {
65
89
  e.preventDefault();
66
- nextIndex = (index + 1) % SCOPE_OPTIONS.length;
90
+ nextIndex = (index + 1) % OPTIONS.length;
67
91
  } else if (e.key === "ArrowLeft" || e.key === "ArrowUp") {
68
92
  e.preventDefault();
69
- nextIndex =
70
- (index - 1 + SCOPE_OPTIONS.length) % SCOPE_OPTIONS.length;
93
+ nextIndex = (index - 1 + OPTIONS.length) % OPTIONS.length;
71
94
  }
72
95
 
73
96
  if (nextIndex !== null) {
74
97
  optionRefs.current[nextIndex]?.focus();
75
- onChange(SCOPE_OPTIONS[nextIndex].value);
98
+ handleSelect(OPTIONS[nextIndex].value);
76
99
  }
77
100
  },
78
- [onChange],
101
+ [handleSelect],
79
102
  );
80
103
 
81
104
  return (
@@ -89,8 +112,9 @@ export function ScopeToggle({
89
112
  className,
90
113
  )}
91
114
  >
92
- {SCOPE_OPTIONS.map((option, index) => {
115
+ {OPTIONS.map((option, index) => {
93
116
  const isSelected = value === option.value;
117
+ const Icon = option.icon;
94
118
 
95
119
  return (
96
120
  <button
@@ -101,22 +125,66 @@ export function ScopeToggle({
101
125
  type="button"
102
126
  role="radio"
103
127
  aria-checked={isSelected}
128
+ aria-label={option.ariaLabel}
129
+ title={compact ? option.ariaLabel : undefined}
104
130
  tabIndex={isSelected ? 0 : -1}
105
131
  disabled={disabled}
106
- onClick={() => onChange(option.value)}
132
+ onClick={() => handleSelect(option.value)}
107
133
  onKeyDown={(e) => handleKeyDown(e, index)}
108
134
  className={cn(
109
- "cursor-pointer rounded-sm px-3 py-1 text-xs font-medium transition-colors",
135
+ "inline-flex cursor-pointer items-center gap-1 rounded-sm px-2 py-1 text-xs font-medium transition-colors",
110
136
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
111
137
  isSelected
112
138
  ? "bg-background text-foreground shadow-sm"
113
139
  : "text-muted-foreground hover:text-foreground",
114
140
  )}
115
141
  >
116
- {option.label}
142
+ <Icon className="size-3" />
143
+ {!compact && option.label}
117
144
  </button>
118
145
  );
119
146
  })}
120
147
  </div>
121
148
  );
122
149
  }
150
+
151
+ // ---------------------------------------------------------------------------
152
+ // Icons — inline SVGs following the SDK pattern (no icon library dependency)
153
+ // ---------------------------------------------------------------------------
154
+
155
+ function OrgIcon({ className }: { readonly className?: string }) {
156
+ return (
157
+ <svg
158
+ className={className}
159
+ viewBox="0 0 16 16"
160
+ fill="none"
161
+ stroke="currentColor"
162
+ strokeWidth="1.5"
163
+ strokeLinecap="round"
164
+ strokeLinejoin="round"
165
+ aria-hidden="true"
166
+ >
167
+ <rect x="4" y="2" width="8" height="12" rx="1" />
168
+ <path d="M6.5 5h3M6.5 8h3M6.5 11h3" />
169
+ </svg>
170
+ );
171
+ }
172
+
173
+ function GlobeIcon({ className }: { readonly className?: string }) {
174
+ return (
175
+ <svg
176
+ className={className}
177
+ viewBox="0 0 16 16"
178
+ fill="none"
179
+ stroke="currentColor"
180
+ strokeWidth="1.5"
181
+ strokeLinecap="round"
182
+ strokeLinejoin="round"
183
+ aria-hidden="true"
184
+ >
185
+ <circle cx="8" cy="8" r="6" />
186
+ <path d="M2 8h12" />
187
+ <path d="M8 2c1.66 1.46 2.6 3.63 2.6 6s-.94 4.54-2.6 6c-1.66-1.46-2.6-3.63-2.6-6s.94-4.54 2.6-6Z" />
188
+ </svg>
189
+ );
190
+ }
@@ -109,8 +109,6 @@ export function VisibilityToggle({
109
109
  [handleSelect],
110
110
  );
111
111
 
112
- const currentIndex = OPTIONS.findIndex((o) => o.value === visibility);
113
-
114
112
  return (
115
113
  <div className={cn("inline-flex flex-col gap-1.5", className)}>
116
114
  <div
@@ -124,6 +122,8 @@ export function VisibilityToggle({
124
122
  >
125
123
  {OPTIONS.map((option, index) => {
126
124
  const isSelected = visibility === option.value;
125
+ const isPublicOption =
126
+ option.value === ApiResourceVisibility.visibility_public;
127
127
 
128
128
  return (
129
129
  <button
@@ -139,26 +139,26 @@ export function VisibilityToggle({
139
139
  onClick={() => handleSelect(option.value)}
140
140
  onKeyDown={(e) => handleKeyDown(e, index)}
141
141
  className={cn(
142
- "cursor-pointer rounded-sm px-3 py-1 text-xs font-medium transition-colors",
142
+ "inline-flex cursor-pointer items-center gap-1 rounded-sm px-2.5 py-1 text-xs font-medium transition-colors",
143
143
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
144
- isSelected && option.value === ApiResourceVisibility.visibility_public
144
+ isSelected && isPublicOption
145
145
  ? "bg-emerald-100 text-emerald-800 shadow-sm dark:bg-emerald-900/40 dark:text-emerald-300"
146
146
  : isSelected
147
- ? "bg-background text-foreground shadow-sm"
147
+ ? "bg-amber-50 text-amber-800 shadow-sm dark:bg-amber-900/30 dark:text-amber-300"
148
148
  : "text-muted-foreground hover:text-foreground",
149
149
  )}
150
150
  >
151
151
  {isPending && isSelected ? (
152
- <span className="inline-flex items-center gap-1">
153
- <span
154
- className="inline-block h-3 w-3 animate-spin rounded-full border-2 border-current border-t-transparent"
155
- aria-hidden="true"
156
- />
157
- {option.label}
158
- </span>
152
+ <span
153
+ className="inline-block size-3 animate-spin rounded-full border-2 border-current border-t-transparent"
154
+ aria-hidden="true"
155
+ />
156
+ ) : isPublicOption ? (
157
+ <GlobeIcon className="size-3" />
159
158
  ) : (
160
- option.label
159
+ <LockIcon className="size-3" />
161
160
  )}
161
+ {option.label}
162
162
  </button>
163
163
  );
164
164
  })}
@@ -204,3 +204,44 @@ export function VisibilityToggle({
204
204
  </div>
205
205
  );
206
206
  }
207
+
208
+ // ---------------------------------------------------------------------------
209
+ // Icons — inline SVGs following the SDK pattern (no icon library dependency)
210
+ // ---------------------------------------------------------------------------
211
+
212
+ function LockIcon({ className }: { readonly className?: string }) {
213
+ return (
214
+ <svg
215
+ className={className}
216
+ viewBox="0 0 16 16"
217
+ fill="none"
218
+ stroke="currentColor"
219
+ strokeWidth="1.5"
220
+ strokeLinecap="round"
221
+ strokeLinejoin="round"
222
+ aria-hidden="true"
223
+ >
224
+ <rect x="3.5" y="7" width="9" height="7" rx="1.5" />
225
+ <path d="M5.5 7V5a2.5 2.5 0 0 1 5 0v2" />
226
+ </svg>
227
+ );
228
+ }
229
+
230
+ function GlobeIcon({ className }: { readonly className?: string }) {
231
+ return (
232
+ <svg
233
+ className={className}
234
+ viewBox="0 0 16 16"
235
+ fill="none"
236
+ stroke="currentColor"
237
+ strokeWidth="1.5"
238
+ strokeLinecap="round"
239
+ strokeLinejoin="round"
240
+ aria-hidden="true"
241
+ >
242
+ <circle cx="8" cy="8" r="6" />
243
+ <path d="M2 8h12" />
244
+ <path d="M8 2c1.66 1.46 2.6 3.63 2.6 6s-.94 4.54-2.6 6c-1.66-1.46-2.6-3.63-2.6-6s.94-4.54 2.6-6Z" />
245
+ </svg>
246
+ );
247
+ }
@@ -37,6 +37,8 @@ export {
37
37
  serializeMcpServerInputYaml,
38
38
  } from "./serialize-resource-yaml";
39
39
 
40
+ export { serializeWorkflowYaml, parseWorkflowYaml } from "../workflow/serialize-workflow-yaml";
41
+
40
42
  export { useApplyResource } from "./useApplyResource";
41
43
  export type {
42
44
  UseApplyResourceReturn,