@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
@@ -4,8 +4,10 @@ import { useCallback, useMemo } from "react";
4
4
  import { parse as parseYaml } from "yaml";
5
5
  import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
6
6
  import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
7
+ import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
7
8
  import { toast } from "../feedback/toast";
8
9
  import { serializeAgentYaml, serializeMcpServerYaml } from "./serialize-resource-yaml";
10
+ import { serializeWorkflowYaml } from "../workflow/serialize-workflow-yaml";
9
11
 
10
12
  // ---------------------------------------------------------------------------
11
13
  // Types
@@ -14,9 +16,9 @@ import { serializeAgentYaml, serializeMcpServerYaml } from "./serialize-resource
14
16
  /** Options for {@link useExportResource}. */
15
17
  export interface UseExportResourceOptions {
16
18
  /** The resource kind — determines which serializer is used. */
17
- readonly kind: "Agent" | "McpServer";
19
+ readonly kind: "Agent" | "McpServer" | "Workflow";
18
20
  /** The proto resource to export, or `null` when not yet loaded. */
19
- readonly resource: Agent | McpServer | null;
21
+ readonly resource: Agent | McpServer | Workflow | null;
20
22
  }
21
23
 
22
24
  /** Return value of {@link useExportResource}. */
@@ -76,13 +78,13 @@ export function useExportResource({
76
78
  const yaml = useMemo<string | null>(() => {
77
79
  if (!resource) return null;
78
80
  if (kind === "Agent") return serializeAgentYaml(resource as Agent);
81
+ if (kind === "Workflow") return serializeWorkflowYaml(resource as Workflow);
79
82
  return serializeMcpServerYaml(resource as McpServer);
80
83
  }, [kind, resource]);
81
84
 
82
85
  const json = useMemo<string | null>(() => {
83
86
  if (!resource) return null;
84
- if (kind === "Agent") return serializeResourceJson(resource as Agent, "Agent");
85
- return serializeResourceJson(resource as McpServer, "McpServer");
87
+ return serializeResourceJson(resource, kind);
86
88
  }, [kind, resource]);
87
89
 
88
90
  const slug = useMemo<string>(() => {
@@ -131,12 +133,13 @@ export function useExportResource({
131
133
  * to the YAML structure (snake_case fields, no status).
132
134
  */
133
135
  function serializeResourceJson(
134
- resource: Agent | McpServer,
135
- kind: "Agent" | "McpServer",
136
+ resource: Agent | McpServer | Workflow,
137
+ kind: "Agent" | "McpServer" | "Workflow",
136
138
  ): string {
137
- const yamlStr = kind === "Agent"
138
- ? serializeAgentYaml(resource as Agent)
139
- : serializeMcpServerYaml(resource as McpServer);
139
+ let yamlStr: string;
140
+ if (kind === "Agent") yamlStr = serializeAgentYaml(resource as Agent);
141
+ else if (kind === "Workflow") yamlStr = serializeWorkflowYaml(resource as Workflow);
142
+ else yamlStr = serializeMcpServerYaml(resource as McpServer);
140
143
 
141
144
  const doc = parseYaml(yamlStr);
142
145
  return JSON.stringify(doc, null, 2);
@@ -29,9 +29,9 @@ import { EnvVarForm } from "../environment/EnvVarForm";
29
29
  import type { EnvVarFormVariable } from "../environment/EnvVarForm";
30
30
  import { VisibilityToggle } from "../library/VisibilityToggle";
31
31
  import { Tabs, type TabItem } from "../tabs/Tabs";
32
- import { ResourceActionBar } from "../resource-detail/ResourceActionBar";
32
+ import { ResourceDetailShell } from "../resource-detail/ResourceDetailShell";
33
33
  import { Section } from "../resource-detail/Section";
34
- import type { DetailAction } from "../resource-detail/types";
34
+ import type { DetailAction, ResourceHeaderMeta } from "../resource-detail/types";
35
35
  import { InlineEditText } from "../inline-edit/InlineEditText";
36
36
  import { InlineEditTextarea } from "../inline-edit/InlineEditTextarea";
37
37
  import { InlineEditImage } from "../inline-edit/InlineEditImage";
@@ -355,40 +355,85 @@ export function McpServerDetailView({
355
355
  return <ErrorMessage error={error} retry={refetch} className={className} />;
356
356
  if (!mcpServer) return <NotFoundState className={className} />;
357
357
 
358
- return (
359
- <div className={cn("flex flex-col gap-6", className)}>
360
- {status?.validationState === ValidationState.invalid &&
361
- status.validationMessage && (
362
- <ValidationBanner message={status.validationMessage} />
363
- )}
358
+ const meta = mcpServer.metadata;
359
+ const lastDiscoveredAt = capabilities?.lastDiscoveredAt
360
+ ? timestampDate(capabilities.lastDiscoveredAt)
361
+ : null;
362
+
363
+ const headerMeta: ResourceHeaderMeta = {
364
+ name: meta?.name || meta?.slug || "Untitled",
365
+ nameElement: editable && saveMcpField ? (
366
+ <InlineEditText
367
+ value={meta?.name || ""}
368
+ onSave={(v) => saveMcpField("name", v)}
369
+ isSaving={isUpdating}
370
+ variant="heading"
371
+ placeholder="Server name"
372
+ validate={(v) => (v.trim() ? null : "Name is required")}
373
+ />
374
+ ) : undefined,
375
+ id: meta?.id || "",
376
+ org: meta?.org,
377
+ slug: meta?.slug,
378
+ qualifiedSlug: meta?.slug
379
+ ? (meta.org ? `${meta.org}/${meta.slug}` : meta.slug)
380
+ : undefined,
381
+ icon: editable && saveMcpField ? (
382
+ <InlineEditImage
383
+ value={spec?.iconUrl ?? ""}
384
+ onSave={(v) => saveMcpField("iconUrl", v || undefined)}
385
+ isSaving={isUpdating}
386
+ fallback={<McpServerIcon className="size-6 text-muted-foreground" />}
387
+ size="md"
388
+ />
389
+ ) : spec?.iconUrl ? undefined : <McpServerIcon className="size-6 text-muted-foreground" />,
390
+ iconUrl: editable ? undefined : spec?.iconUrl || undefined,
391
+ createdAt: specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null,
392
+ updatedAt: specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null,
393
+ };
394
+
395
+ const isPublic = meta?.visibility === ApiResourceVisibility.visibility_public;
396
+ const visibilityControl =
397
+ onVisibilityChange && meta ? (
398
+ <VisibilityToggle
399
+ visibility={meta.visibility}
400
+ onVisibilityChange={onVisibilityChange}
401
+ isPending={isVisibilityPending}
402
+ />
403
+ ) : isPublic ? (
404
+ <span className="shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
405
+ Public
406
+ </span>
407
+ ) : undefined;
408
+
409
+ const headerMetaExtra = (
410
+ <>
411
+ {status && <ValidationStateBadge state={status.validationState} />}
412
+ {lastDiscoveredAt && (
413
+ <>
414
+ <Dot />
415
+ <span>Discovered {formatDate(lastDiscoveredAt)}</span>
416
+ </>
417
+ )}
418
+ </>
419
+ );
364
420
 
365
- <div className="flex items-start justify-between gap-4">
366
- <Header
367
- server={mcpServer}
368
- createdAt={
369
- specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null
370
- }
371
- updatedAt={
372
- specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null
373
- }
374
- lastDiscoveredAt={
375
- capabilities?.lastDiscoveredAt
376
- ? timestampDate(capabilities.lastDiscoveredAt)
377
- : null
378
- }
379
- onVisibilityChange={onVisibilityChange}
380
- isVisibilityPending={isVisibilityPending}
381
- editable={editable}
382
- isSaving={isUpdating}
383
- saveMcpField={saveMcpField}
384
- />
385
- <ResourceActionBar
386
- primaryAction={primaryAction}
387
- actions={actions}
388
- className="shrink-0"
389
- />
390
- </div>
421
+ const headerBanner =
422
+ status?.validationState === ValidationState.invalid &&
423
+ status.validationMessage ? (
424
+ <ValidationBanner message={status.validationMessage} />
425
+ ) : undefined;
391
426
 
427
+ return (
428
+ <ResourceDetailShell
429
+ header={headerMeta}
430
+ visibilityControl={visibilityControl}
431
+ headerMetaExtra={headerMetaExtra}
432
+ headerBanner={headerBanner}
433
+ primaryAction={primaryAction}
434
+ actions={actions}
435
+ className={className}
436
+ >
392
437
  {(editable || spec?.description) && (
393
438
  <Section title="Description">
394
439
  {editable && saveMcpField ? (
@@ -546,7 +591,7 @@ export function McpServerDetailView({
546
591
  {(editable || (spec && spec.tags.length > 0)) && (
547
592
  <TagsSection tags={spec?.tags ?? []} editable={editable} isSaving={isUpdating} saveMcpField={saveMcpField} />
548
593
  )}
549
- </div>
594
+ </ResourceDetailShell>
550
595
  );
551
596
  }
552
597
 
@@ -1111,119 +1156,6 @@ function ValidationBanner({ message }: { readonly message: string }) {
1111
1156
  );
1112
1157
  }
1113
1158
 
1114
- function Header({
1115
- server,
1116
- createdAt,
1117
- updatedAt,
1118
- lastDiscoveredAt,
1119
- onVisibilityChange,
1120
- isVisibilityPending,
1121
- editable,
1122
- isSaving,
1123
- saveMcpField,
1124
- }: {
1125
- readonly server: McpServer;
1126
- readonly createdAt: Date | null;
1127
- readonly updatedAt: Date | null;
1128
- readonly lastDiscoveredAt: Date | null;
1129
- readonly onVisibilityChange?: (v: ApiResourceVisibility) => void;
1130
- readonly isVisibilityPending?: boolean;
1131
- readonly editable?: boolean;
1132
- readonly isSaving?: boolean;
1133
- readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
1134
- field: K,
1135
- value: import("@stigmer/sdk").McpServerInput[K],
1136
- ) => Promise<boolean>;
1137
- }) {
1138
- const meta = server.metadata;
1139
- const spec = server.spec;
1140
- const status = server.status;
1141
- const displayName = meta?.name || meta?.slug || "Untitled";
1142
- const isPublic =
1143
- meta?.visibility === ApiResourceVisibility.visibility_public;
1144
-
1145
- return (
1146
- <div className="flex items-start gap-3">
1147
- {editable && saveMcpField ? (
1148
- <InlineEditImage
1149
- value={spec?.iconUrl ?? ""}
1150
- onSave={(v) => saveMcpField("iconUrl", v || undefined)}
1151
- isSaving={isSaving}
1152
- fallback={<McpServerIcon className="size-6 text-muted-foreground" />}
1153
- size="md"
1154
- />
1155
- ) : spec?.iconUrl ? (
1156
- <img
1157
- src={spec.iconUrl}
1158
- alt=""
1159
- className="mt-0.5 size-8 shrink-0 rounded object-cover"
1160
- />
1161
- ) : (
1162
- <McpServerIcon className="mt-1 size-6 shrink-0 text-muted-foreground" />
1163
- )}
1164
- <div className="min-w-0 flex-1">
1165
- <div className="flex items-center gap-2">
1166
- {editable && saveMcpField ? (
1167
- <InlineEditText
1168
- value={meta?.name || ""}
1169
- onSave={(v) => saveMcpField("name", v)}
1170
- isSaving={isSaving}
1171
- variant="heading"
1172
- placeholder="Server name"
1173
- validate={(v) => (v.trim() ? null : "Name is required")}
1174
- />
1175
- ) : (
1176
- <h2 className="truncate text-lg font-semibold text-foreground">
1177
- {displayName}
1178
- </h2>
1179
- )}
1180
- {onVisibilityChange && meta ? (
1181
- <VisibilityToggle
1182
- visibility={meta.visibility}
1183
- onVisibilityChange={onVisibilityChange}
1184
- isPending={isVisibilityPending}
1185
- />
1186
- ) : (
1187
- isPublic && (
1188
- <span className="shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
1189
- Public
1190
- </span>
1191
- )
1192
- )}
1193
- </div>
1194
- {meta?.slug && (
1195
- <span className="mt-0.5 block truncate font-mono text-xs text-muted-foreground">
1196
- {meta.org ? `${meta.org}/${meta.slug}` : meta.slug}
1197
- </span>
1198
- )}
1199
- <div className="mt-0.5 flex flex-wrap items-center gap-x-1.5 text-xs text-muted-foreground">
1200
- {meta?.org && <span>{meta.org}</span>}
1201
- {status && (
1202
- <ValidationStateBadge state={status.validationState} />
1203
- )}
1204
- {lastDiscoveredAt && (
1205
- <>
1206
- <Dot />
1207
- <span>Discovered {formatDate(lastDiscoveredAt)}</span>
1208
- </>
1209
- )}
1210
- {createdAt && (
1211
- <>
1212
- <Dot />
1213
- <span>Created {formatDate(createdAt)}</span>
1214
- </>
1215
- )}
1216
- {updatedAt && (
1217
- <>
1218
- <Dot />
1219
- <span>Updated {formatDate(updatedAt)}</span>
1220
- </>
1221
- )}
1222
- </div>
1223
- </div>
1224
- </div>
1225
- );
1226
- }
1227
1159
 
1228
1160
  function ValidationStateBadge({
1229
1161
  state,
@@ -21,6 +21,8 @@ import { ScrollFade } from "../internal/ScrollFade";
21
21
  import { McpServerConfigPanel } from "./McpServerConfigPanel";
22
22
  import type { McpServerSetupEntry } from "./mcpServerSetupReducer";
23
23
  import { useMcpServerOAuthConnect } from "./useMcpServerOAuthConnect";
24
+ import { ScopeToggle } from "../library/ScopeToggle";
25
+ import type { ResourceListScope } from "../search";
24
26
 
25
27
  // ---------------------------------------------------------------------------
26
28
  // Setup integration props
@@ -263,8 +265,9 @@ export function McpServerPicker({
263
265
  const instanceId = useId();
264
266
  const listId = `${instanceId}-list`;
265
267
 
268
+ const [activeScope, setActiveScope] = useState<ResourceListScope>(scope ?? "org");
266
269
  const { results, isLoading, error, query, setQuery } =
267
- useMcpServerSearch(org, { scope });
270
+ useMcpServerSearch(org, { scope: activeScope });
268
271
  const oauth = useMcpServerOAuthConnect();
269
272
 
270
273
  const [focusIndex, setFocusIndex] = useState(-1);
@@ -580,6 +583,8 @@ export function McpServerPicker({
580
583
  autoFocus
581
584
  />
582
585
 
586
+ <ScopeToggle value={activeScope} onChange={setActiveScope} disabled={disabled} />
587
+
583
588
  {error && <p className="text-xs text-destructive">{error.message}</p>}
584
589
 
585
590
  {/* Scrollable results list */}
package/src/provider.tsx CHANGED
@@ -12,6 +12,9 @@ import { PortalContainerContext } from "./portal-container";
12
12
  import { ModelRegistryContext } from "./models/ModelRegistryContext";
13
13
  import type { ModelRegistryState } from "./models/ModelRegistryContext";
14
14
  import { fetchModelRegistry } from "./models/registry";
15
+ import { TaskKindRegistryContext } from "./workflow/TaskKindRegistryContext";
16
+ import type { TaskKindRegistryState } from "./workflow/TaskKindRegistryContext";
17
+ import type { TaskKindDescriptor } from "./workflow/types";
15
18
 
16
19
  /** Props for {@link StigmerProvider}. */
17
20
  export interface StigmerProviderProps {
@@ -130,20 +133,23 @@ export function StigmerProvider({
130
133
 
131
134
  const portalContainer = usePortalContainer(resolvedMode, presetClass);
132
135
  const registryState = useModelRegistryFetch(client);
136
+ const taskKindRegistryState = useTaskKindRegistryFetch(client);
133
137
 
134
138
  return (
135
139
  <StigmerContext.Provider value={client}>
136
140
  <DeploymentModeContext.Provider value={deploymentMode}>
137
141
  <ColorModeContext.Provider value={resolvedMode}>
138
142
  <ModelRegistryContext.Provider value={registryState}>
139
- <PortalContainerContext.Provider value={portalContainer}>
140
- <div
141
- className={cn("stgm", presetClass, className)}
142
- data-stgm-color-mode={resolvedMode}
143
- >
144
- {children}
145
- </div>
146
- </PortalContainerContext.Provider>
143
+ <TaskKindRegistryContext.Provider value={taskKindRegistryState}>
144
+ <PortalContainerContext.Provider value={portalContainer}>
145
+ <div
146
+ className={cn("stgm", presetClass, className)}
147
+ data-stgm-color-mode={resolvedMode}
148
+ >
149
+ {children}
150
+ </div>
151
+ </PortalContainerContext.Provider>
152
+ </TaskKindRegistryContext.Provider>
147
153
  </ModelRegistryContext.Provider>
148
154
  </ColorModeContext.Provider>
149
155
  </DeploymentModeContext.Provider>
@@ -246,6 +252,187 @@ function useModelRegistryFetch(client: Stigmer): ModelRegistryState {
246
252
  return { ...state, refetch };
247
253
  }
248
254
 
255
+ // ---------------------------------------------------------------------------
256
+ // Task Kind Registry fetch
257
+ // ---------------------------------------------------------------------------
258
+
259
+ /**
260
+ * Fetch the task kind registry from the authenticated API endpoint.
261
+ *
262
+ * The endpoint returns `{ version, generatedAt, descriptors: [...] }`.
263
+ * Each descriptor maps directly to the `TaskKindDescriptor` interface
264
+ * used by the React SDK's task palette, inspector, and YAML validation.
265
+ */
266
+ async function fetchTaskKindRegistry(
267
+ apiUrl: string,
268
+ token: string | null,
269
+ customFetch?: typeof globalThis.fetch,
270
+ ): Promise<TaskKindDescriptor[]> {
271
+ const doFetch = customFetch ?? globalThis.fetch;
272
+ const headers: Record<string, string> = {};
273
+ if (token) {
274
+ headers["Authorization"] = `Bearer ${token}`;
275
+ }
276
+ const res = await doFetch(`${apiUrl}/v1/proxy/task-kind-registry`, { headers });
277
+ if (!res.ok) throw new Error(`Task kind registry fetch failed: ${res.status}`);
278
+ const data: unknown = await res.json();
279
+ return parseTaskKindRegistryJson(data);
280
+ }
281
+
282
+ const VALID_CATEGORIES = new Set([
283
+ "control_flow", "invocation", "ai", "data", "governance", "event", "unspecified",
284
+ ]);
285
+
286
+ const VALID_FIELD_TYPES = new Set([
287
+ "string", "int32", "float", "bool", "enum", "struct", "repeated", "map", "message",
288
+ ]);
289
+
290
+ function parseTaskKindRegistryJson(data: unknown): TaskKindDescriptor[] {
291
+ if (!data || typeof data !== "object") return [];
292
+ const descriptors = (data as Record<string, unknown>).descriptors;
293
+ if (!Array.isArray(descriptors)) return [];
294
+
295
+ return descriptors
296
+ .filter((d): d is Record<string, unknown> =>
297
+ d != null && typeof d === "object" && typeof (d as Record<string, unknown>).kind === "string",
298
+ )
299
+ .map((d) => ({
300
+ kind: d.kind as string,
301
+ displayName: (d.displayName as string) ?? "",
302
+ description: (d.description as string) ?? "",
303
+ category: VALID_CATEGORIES.has(d.category as string)
304
+ ? (d.category as TaskKindDescriptor["category"])
305
+ : "unspecified",
306
+ icon: (d.icon as string) ?? "",
307
+ configProtoType: (d.configProtoType as string) ?? "",
308
+ fields: Array.isArray(d.fields)
309
+ ? (d.fields as Record<string, unknown>[]).map((f) => ({
310
+ name: (f.name as string) ?? "",
311
+ displayName: (f.displayName as string) ?? "",
312
+ description: (f.description as string) ?? "",
313
+ type: VALID_FIELD_TYPES.has(f.type as string)
314
+ ? (f.type as TaskKindDescriptor["fields"][number]["type"])
315
+ : ("string" as const),
316
+ required: f.required === true,
317
+ isExpression: f.isExpression === true ? true : undefined,
318
+ defaultValue: typeof f.defaultValue === "string" ? f.defaultValue : undefined,
319
+ enumValues: Array.isArray(f.enumValues) ? (f.enumValues as string[]) : undefined,
320
+ groupId: typeof f.groupId === "string" ? f.groupId : undefined,
321
+ fieldNumber: typeof f.fieldNumber === "number" ? f.fieldNumber : 0,
322
+ elementType: typeof f.elementType === "string" ? f.elementType : undefined,
323
+ validationHints: Array.isArray(f.validationHints) ? (f.validationHints as string[]) : undefined,
324
+ }))
325
+ : [],
326
+ fieldGroups: Array.isArray(d.fieldGroups)
327
+ ? (d.fieldGroups as Record<string, unknown>[]).map((g) => ({
328
+ id: (g.id as string) ?? "",
329
+ displayName: (g.displayName as string) ?? "",
330
+ description: typeof g.description === "string" ? g.description : undefined,
331
+ }))
332
+ : [],
333
+ configJsonSchema:
334
+ d.configJsonSchema != null && typeof d.configJsonSchema === "object"
335
+ ? (d.configJsonSchema as Record<string, unknown>)
336
+ : {},
337
+ outputJsonSchema:
338
+ d.outputJsonSchema != null && typeof d.outputJsonSchema === "object"
339
+ ? (d.outputJsonSchema as Record<string, unknown>)
340
+ : undefined,
341
+ yamlExamples: Array.isArray(d.yamlExamples) ? (d.yamlExamples as string[]) : undefined,
342
+ documentationUrl: (d.documentationUrl as string) ?? "",
343
+ isAiNative: d.isAiNative === true,
344
+ requiresExternalService: d.requiresExternalService === true,
345
+ }));
346
+ }
347
+
348
+ /**
349
+ * Fetches the task kind registry from the authenticated API and caches
350
+ * the result for the lifetime of the provider.
351
+ *
352
+ * Follows the same pattern as {@link useModelRegistryFetch}: auth token
353
+ * polling, exponential backoff retries, and `refetch` for manual retry.
354
+ */
355
+ function useTaskKindRegistryFetch(client: Stigmer): TaskKindRegistryState {
356
+ const [version, setVersion] = useState(0);
357
+ const [state, setState] = useState<Omit<TaskKindRegistryState, "refetch">>({
358
+ descriptors: [],
359
+ isLoading: true,
360
+ error: null,
361
+ });
362
+
363
+ const clientRef = useRef(client);
364
+ clientRef.current = client;
365
+
366
+ const fetchAttemptRef = useRef(0);
367
+
368
+ const doFetch = useCallback(async (signal: AbortSignal) => {
369
+ const c = clientRef.current;
370
+ let token = await c.getAuthCredential();
371
+
372
+ if (!token) {
373
+ const start = Date.now();
374
+ while (!token && Date.now() - start < TOKEN_POLL_MAX_MS) {
375
+ if (signal.aborted) return;
376
+ await new Promise((r) => setTimeout(r, TOKEN_POLL_INTERVAL_MS));
377
+ if (signal.aborted) return;
378
+ token = await c.getAuthCredential();
379
+ }
380
+ }
381
+
382
+ return fetchTaskKindRegistry(c.baseUrl, token, c.fetch);
383
+ }, []);
384
+
385
+ useEffect(() => {
386
+ const controller = new AbortController();
387
+ const { signal } = controller;
388
+
389
+ fetchAttemptRef.current = 0;
390
+
391
+ const attempt = async () => {
392
+ if (signal.aborted) return;
393
+
394
+ setState((prev) => (prev.isLoading ? prev : { ...prev, isLoading: true }));
395
+
396
+ try {
397
+ const descriptors = await doFetch(signal);
398
+ if (!signal.aborted && descriptors) {
399
+ setState({ descriptors, isLoading: false, error: null });
400
+ fetchAttemptRef.current = 0;
401
+ }
402
+ } catch (err: unknown) {
403
+ if (signal.aborted) return;
404
+
405
+ const retryIdx = fetchAttemptRef.current;
406
+ fetchAttemptRef.current = retryIdx + 1;
407
+
408
+ if (retryIdx < RETRY_DELAYS_MS.length) {
409
+ setTimeout(() => { if (!signal.aborted) attempt(); }, RETRY_DELAYS_MS[retryIdx]);
410
+ } else {
411
+ setState({
412
+ descriptors: [],
413
+ isLoading: false,
414
+ error: err instanceof Error ? err : new Error(String(err)),
415
+ });
416
+ }
417
+ }
418
+ };
419
+
420
+ attempt();
421
+
422
+ return () => { controller.abort(); };
423
+ }, [doFetch, version]);
424
+
425
+ const refetch = useCallback(() => {
426
+ setState((prev) => {
427
+ if (prev.isLoading) return prev;
428
+ return { ...prev, isLoading: true, error: null };
429
+ });
430
+ setVersion((v) => v + 1);
431
+ }, []);
432
+
433
+ return { ...state, refetch };
434
+ }
435
+
249
436
  /**
250
437
  * Creates and manages a portal container `<div>` appended to
251
438
  * `document.body` that mirrors the scoping attributes of the main
@@ -42,6 +42,8 @@ import type { ResourceDetailShellProps } from "./types";
42
42
  export function ResourceDetailShell({
43
43
  header,
44
44
  visibilityControl,
45
+ headerMetaExtra,
46
+ headerBanner,
45
47
  primaryAction,
46
48
  actions,
47
49
  tabs,
@@ -55,11 +57,14 @@ export function ResourceDetailShell({
55
57
 
56
58
  return (
57
59
  <div className={cn("flex flex-col gap-6", className)}>
60
+ {headerBanner}
61
+
58
62
  {/* Header + Action bar row */}
59
63
  <div className="flex items-start justify-between gap-4">
60
64
  <Header
61
65
  header={header}
62
66
  visibilityControl={visibilityControl}
67
+ metaExtra={headerMetaExtra}
63
68
  />
64
69
  <ResourceActionBar
65
70
  primaryAction={primaryAction}
@@ -92,14 +97,18 @@ export function ResourceDetailShell({
92
97
  function Header({
93
98
  header,
94
99
  visibilityControl,
100
+ metaExtra,
95
101
  }: {
96
102
  readonly header: ResourceDetailShellProps["header"];
97
103
  readonly visibilityControl?: ResourceDetailShellProps["visibilityControl"];
104
+ readonly metaExtra?: ResourceDetailShellProps["headerMetaExtra"];
98
105
  }) {
99
106
  const {
100
107
  name,
108
+ nameElement,
101
109
  org,
102
110
  slug,
111
+ qualifiedSlug,
103
112
  description,
104
113
  iconUrl,
105
114
  icon,
@@ -109,7 +118,7 @@ function Header({
109
118
  statusLabel,
110
119
  } = header;
111
120
 
112
- const showSlug = slug && slug !== name;
121
+ const showSlug = slug && slug !== name && !qualifiedSlug;
113
122
 
114
123
  return (
115
124
  <div className="flex min-w-0 items-start gap-3">
@@ -124,9 +133,11 @@ function Header({
124
133
  ) : null}
125
134
  <div className="min-w-0 flex-1">
126
135
  <div className="flex items-center gap-2">
127
- <h2 className="truncate text-lg font-semibold text-foreground">
128
- {name}
129
- </h2>
136
+ {nameElement ?? (
137
+ <h2 className="truncate text-lg font-semibold text-foreground">
138
+ {name}
139
+ </h2>
140
+ )}
130
141
  {showSlug && (
131
142
  <code className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs font-medium text-muted-foreground">
132
143
  {slug}
@@ -140,8 +151,14 @@ function Header({
140
151
  )}
141
152
  {visibilityControl}
142
153
  </div>
154
+ {qualifiedSlug && (
155
+ <span className="mt-0.5 block truncate font-mono text-xs text-muted-foreground">
156
+ {qualifiedSlug}
157
+ </span>
158
+ )}
143
159
  <div className="mt-0.5 flex flex-wrap items-center gap-x-1.5 text-xs text-muted-foreground">
144
160
  {org && <span>{org}</span>}
161
+ {metaExtra}
145
162
  {createdAt && (
146
163
  <>
147
164
  <Dot />