@stigmer/react 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) 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/ContextChip.d.ts +7 -2
  28. package/composer/ContextChip.d.ts.map +1 -1
  29. package/composer/ContextChip.js +2 -1
  30. package/composer/ContextChip.js.map +1 -1
  31. package/composer/InteractionModePicker.d.ts +40 -0
  32. package/composer/InteractionModePicker.d.ts.map +1 -0
  33. package/composer/InteractionModePicker.js +76 -0
  34. package/composer/InteractionModePicker.js.map +1 -0
  35. package/composer/SessionComposer.d.ts +64 -64
  36. package/composer/SessionComposer.d.ts.map +1 -1
  37. package/composer/SessionComposer.js +52 -11
  38. package/composer/SessionComposer.js.map +1 -1
  39. package/composer/__tests__/SessionComposer-memo.test.js +10 -5
  40. package/composer/__tests__/SessionComposer-memo.test.js.map +1 -1
  41. package/composer/index.d.ts +3 -1
  42. package/composer/index.d.ts.map +1 -1
  43. package/composer/index.js +1 -0
  44. package/composer/index.js.map +1 -1
  45. package/dashboard/DashboardFailedRuns.d.ts +19 -0
  46. package/dashboard/DashboardFailedRuns.d.ts.map +1 -0
  47. package/dashboard/DashboardFailedRuns.js +35 -0
  48. package/dashboard/DashboardFailedRuns.js.map +1 -0
  49. package/dashboard/DashboardKPICards.d.ts +19 -0
  50. package/dashboard/DashboardKPICards.d.ts.map +1 -0
  51. package/dashboard/DashboardKPICards.js +80 -0
  52. package/dashboard/DashboardKPICards.js.map +1 -0
  53. package/dashboard/OperationalDashboard.d.ts +37 -0
  54. package/dashboard/OperationalDashboard.d.ts.map +1 -0
  55. package/dashboard/OperationalDashboard.js +48 -0
  56. package/dashboard/OperationalDashboard.js.map +1 -0
  57. package/dashboard/index.d.ts +8 -0
  58. package/dashboard/index.d.ts.map +1 -0
  59. package/dashboard/index.js +9 -0
  60. package/dashboard/index.js.map +1 -0
  61. package/dashboard/types.d.ts +49 -0
  62. package/dashboard/types.d.ts.map +1 -0
  63. package/dashboard/types.js +2 -0
  64. package/dashboard/types.js.map +1 -0
  65. package/dashboard/useAgentExecutionSummary.d.ts +33 -0
  66. package/dashboard/useAgentExecutionSummary.d.ts.map +1 -0
  67. package/dashboard/useAgentExecutionSummary.js +32 -0
  68. package/dashboard/useAgentExecutionSummary.js.map +1 -0
  69. package/dashboard/useDashboardFailedRuns.d.ts +18 -0
  70. package/dashboard/useDashboardFailedRuns.d.ts.map +1 -0
  71. package/dashboard/useDashboardFailedRuns.js +86 -0
  72. package/dashboard/useDashboardFailedRuns.js.map +1 -0
  73. package/dashboard/useDashboardSummary.d.ts +32 -0
  74. package/dashboard/useDashboardSummary.d.ts.map +1 -0
  75. package/dashboard/useDashboardSummary.js +67 -0
  76. package/dashboard/useDashboardSummary.js.map +1 -0
  77. package/environment/usePersonalEnvironment.d.ts.map +1 -1
  78. package/environment/usePersonalEnvironment.js +1 -0
  79. package/environment/usePersonalEnvironment.js.map +1 -1
  80. package/execution/ContextGauge.d.ts +45 -0
  81. package/execution/ContextGauge.d.ts.map +1 -0
  82. package/execution/ContextGauge.js +82 -0
  83. package/execution/ContextGauge.js.map +1 -0
  84. package/execution/InteractionModeBadge.d.ts +24 -0
  85. package/execution/InteractionModeBadge.d.ts.map +1 -0
  86. package/execution/InteractionModeBadge.js +29 -0
  87. package/execution/InteractionModeBadge.js.map +1 -0
  88. package/execution/MessageThread.d.ts +33 -3
  89. package/execution/MessageThread.d.ts.map +1 -1
  90. package/execution/MessageThread.js +51 -9
  91. package/execution/MessageThread.js.map +1 -1
  92. package/execution/PlanCompletionCard.d.ts +23 -0
  93. package/execution/PlanCompletionCard.d.ts.map +1 -0
  94. package/execution/PlanCompletionCard.js +28 -0
  95. package/execution/PlanCompletionCard.js.map +1 -0
  96. package/execution/SummarizationBadge.d.ts +30 -0
  97. package/execution/SummarizationBadge.d.ts.map +1 -0
  98. package/execution/SummarizationBadge.js +61 -0
  99. package/execution/SummarizationBadge.js.map +1 -0
  100. package/execution/SummarizationCard.d.ts +27 -0
  101. package/execution/SummarizationCard.d.ts.map +1 -0
  102. package/execution/SummarizationCard.js +47 -0
  103. package/execution/SummarizationCard.js.map +1 -0
  104. package/execution/__tests__/PlanCompletionCard.test.d.ts +2 -0
  105. package/execution/__tests__/PlanCompletionCard.test.d.ts.map +1 -0
  106. package/execution/__tests__/PlanCompletionCard.test.js +53 -0
  107. package/execution/__tests__/PlanCompletionCard.test.js.map +1 -0
  108. package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts +2 -0
  109. package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts.map +1 -0
  110. package/execution/__tests__/buildThreadItems-plan-completion.test.js +137 -0
  111. package/execution/__tests__/buildThreadItems-plan-completion.test.js.map +1 -0
  112. package/execution/__tests__/useContextWindow.test.d.ts +2 -0
  113. package/execution/__tests__/useContextWindow.test.d.ts.map +1 -0
  114. package/execution/__tests__/useContextWindow.test.js +121 -0
  115. package/execution/__tests__/useContextWindow.test.js.map +1 -0
  116. package/execution/index.d.ts +12 -0
  117. package/execution/index.d.ts.map +1 -1
  118. package/execution/index.js +6 -0
  119. package/execution/index.js.map +1 -1
  120. package/execution/useContextWindow.d.ts +71 -0
  121. package/execution/useContextWindow.d.ts.map +1 -0
  122. package/execution/useContextWindow.js +91 -0
  123. package/execution/useContextWindow.js.map +1 -0
  124. package/execution/useCreateAgentExecution.d.ts +9 -0
  125. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  126. package/execution/useCreateAgentExecution.js +15 -3
  127. package/execution/useCreateAgentExecution.js.map +1 -1
  128. package/index.d.ts +11 -6
  129. package/index.d.ts.map +1 -1
  130. package/index.js +13 -3
  131. package/index.js.map +1 -1
  132. package/inline-edit/InlineEditKeyValue.d.ts +5 -1
  133. package/inline-edit/InlineEditKeyValue.d.ts.map +1 -1
  134. package/inline-edit/InlineEditKeyValue.js +3 -3
  135. package/inline-edit/InlineEditKeyValue.js.map +1 -1
  136. package/internal/VirtualizedThread.d.ts +2 -1
  137. package/internal/VirtualizedThread.d.ts.map +1 -1
  138. package/internal/VirtualizedThread.js +3 -2
  139. package/internal/VirtualizedThread.js.map +1 -1
  140. package/internal/store/index.d.ts +1 -0
  141. package/internal/store/index.d.ts.map +1 -1
  142. package/internal/store/index.js +1 -0
  143. package/internal/store/index.js.map +1 -1
  144. package/internal/store/workflow-execution-event-store.d.ts +92 -0
  145. package/internal/store/workflow-execution-event-store.d.ts.map +1 -0
  146. package/internal/store/workflow-execution-event-store.js +298 -0
  147. package/internal/store/workflow-execution-event-store.js.map +1 -0
  148. package/internal/useFetch.js +2 -2
  149. package/internal/useFetch.js.map +1 -1
  150. package/library/ScopeToggle.d.ts +13 -9
  151. package/library/ScopeToggle.d.ts.map +1 -1
  152. package/library/ScopeToggle.js +43 -22
  153. package/library/ScopeToggle.js.map +1 -1
  154. package/library/VisibilityToggle.js +14 -5
  155. package/library/VisibilityToggle.js.map +1 -1
  156. package/library/index.d.ts +1 -0
  157. package/library/index.d.ts.map +1 -1
  158. package/library/index.js +1 -0
  159. package/library/index.js.map +1 -1
  160. package/library/useExportResource.d.ts +3 -2
  161. package/library/useExportResource.d.ts.map +1 -1
  162. package/library/useExportResource.js +11 -6
  163. package/library/useExportResource.js.map +1 -1
  164. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  165. package/mcp-server/McpServerDetailView.js +169 -58
  166. package/mcp-server/McpServerDetailView.js.map +1 -1
  167. package/mcp-server/McpServerPicker.d.ts.map +1 -1
  168. package/mcp-server/McpServerPicker.js +4 -2
  169. package/mcp-server/McpServerPicker.js.map +1 -1
  170. package/models/ModelRegistryContext.d.ts +2 -0
  171. package/models/ModelRegistryContext.d.ts.map +1 -1
  172. package/models/ModelRegistryContext.js +1 -0
  173. package/models/ModelRegistryContext.js.map +1 -1
  174. package/models/ModelSelector.d.ts.map +1 -1
  175. package/models/ModelSelector.js +2 -2
  176. package/models/ModelSelector.js.map +1 -1
  177. package/models/__tests__/useModelRegistry.test.js +4 -3
  178. package/models/__tests__/useModelRegistry.test.js.map +1 -1
  179. package/models/useModelRegistry.d.ts +2 -0
  180. package/models/useModelRegistry.d.ts.map +1 -1
  181. package/models/useModelRegistry.js +3 -2
  182. package/models/useModelRegistry.js.map +1 -1
  183. package/package.json +16 -5
  184. package/provider.d.ts.map +1 -1
  185. package/provider.js +232 -22
  186. package/provider.js.map +1 -1
  187. package/resource-detail/ResourceDetailShell.d.ts +1 -1
  188. package/resource-detail/ResourceDetailShell.d.ts.map +1 -1
  189. package/resource-detail/ResourceDetailShell.js +6 -6
  190. package/resource-detail/ResourceDetailShell.js.map +1 -1
  191. package/resource-detail/types.d.ts +23 -0
  192. package/resource-detail/types.d.ts.map +1 -1
  193. package/resource-detail/useDeleteResource.d.ts +1 -1
  194. package/resource-detail/useDeleteResource.d.ts.map +1 -1
  195. package/resource-detail/useDeleteResource.js +5 -0
  196. package/resource-detail/useDeleteResource.js.map +1 -1
  197. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -1
  198. package/resource-workbench/components/ResourceWorkbench.js +2 -1
  199. package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
  200. package/session/__tests__/session-spec-converters.test.d.ts +2 -0
  201. package/session/__tests__/session-spec-converters.test.d.ts.map +1 -0
  202. package/session/__tests__/session-spec-converters.test.js +162 -0
  203. package/session/__tests__/session-spec-converters.test.js.map +1 -0
  204. package/session/__tests__/useNewSessionFlow.test.js +2 -2
  205. package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
  206. package/session/__tests__/usePersistedModel.test.js +1 -1
  207. package/session/__tests__/usePersistedModel.test.js.map +1 -1
  208. package/session/group-sessions.d.ts +17 -0
  209. package/session/group-sessions.d.ts.map +1 -1
  210. package/session/group-sessions.js +46 -0
  211. package/session/group-sessions.js.map +1 -1
  212. package/session/index.d.ts +4 -2
  213. package/session/index.d.ts.map +1 -1
  214. package/session/index.js +2 -1
  215. package/session/index.js.map +1 -1
  216. package/session/session-spec-converters.d.ts +24 -0
  217. package/session/session-spec-converters.d.ts.map +1 -0
  218. package/session/session-spec-converters.js +72 -0
  219. package/session/session-spec-converters.js.map +1 -0
  220. package/session/useNewSessionFlow.d.ts.map +1 -1
  221. package/session/useNewSessionFlow.js +1 -0
  222. package/session/useNewSessionFlow.js.map +1 -1
  223. package/session/useSessionConversation.d.ts +7 -0
  224. package/session/useSessionConversation.d.ts.map +1 -1
  225. package/session/useSessionConversation.js +2 -56
  226. package/session/useSessionConversation.js.map +1 -1
  227. package/session/useSessionPageFlow.d.ts +5 -0
  228. package/session/useSessionPageFlow.d.ts.map +1 -1
  229. package/session/useSessionPageFlow.js +21 -6
  230. package/session/useSessionPageFlow.js.map +1 -1
  231. package/session/useSessionSearch.d.ts +57 -0
  232. package/session/useSessionSearch.d.ts.map +1 -0
  233. package/session/useSessionSearch.js +94 -0
  234. package/session/useSessionSearch.js.map +1 -0
  235. package/session/useSessionUsage.d.ts.map +1 -1
  236. package/session/useSessionUsage.js +65 -4
  237. package/session/useSessionUsage.js.map +1 -1
  238. package/settings/UsageSection.d.ts.map +1 -1
  239. package/settings/UsageSection.js +1 -4
  240. package/settings/UsageSection.js.map +1 -1
  241. package/skill/SkillPicker.d.ts.map +1 -1
  242. package/skill/SkillPicker.js +4 -2
  243. package/skill/SkillPicker.js.map +1 -1
  244. package/src/activity/group-activity.ts +65 -0
  245. package/src/activity/index.ts +13 -0
  246. package/src/activity/types.ts +35 -0
  247. package/src/activity/useRecentActivity.ts +131 -0
  248. package/src/agent/AgentPicker.tsx +6 -1
  249. package/src/billing/BillingSection.tsx +3 -2
  250. package/src/composer/ComposerToolbar.tsx +19 -1
  251. package/src/composer/ContextChip.tsx +20 -11
  252. package/src/composer/InteractionModePicker.tsx +189 -0
  253. package/src/composer/SessionComposer.tsx +137 -11
  254. package/src/composer/__tests__/SessionComposer-memo.test.ts +11 -6
  255. package/src/composer/index.ts +7 -0
  256. package/src/dashboard/DashboardFailedRuns.tsx +109 -0
  257. package/src/dashboard/DashboardKPICards.tsx +128 -0
  258. package/src/dashboard/OperationalDashboard.tsx +96 -0
  259. package/src/dashboard/index.ts +37 -0
  260. package/src/dashboard/types.ts +50 -0
  261. package/src/dashboard/useAgentExecutionSummary.ts +71 -0
  262. package/src/dashboard/useDashboardFailedRuns.ts +122 -0
  263. package/src/dashboard/useDashboardSummary.ts +109 -0
  264. package/src/environment/usePersonalEnvironment.ts +1 -0
  265. package/src/execution/ContextGauge.tsx +243 -0
  266. package/src/execution/InteractionModeBadge.tsx +70 -0
  267. package/src/execution/MessageThread.tsx +88 -3
  268. package/src/execution/PlanCompletionCard.tsx +105 -0
  269. package/src/execution/SummarizationBadge.tsx +188 -0
  270. package/src/execution/SummarizationCard.tsx +126 -0
  271. package/src/execution/__tests__/PlanCompletionCard.test.tsx +67 -0
  272. package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +197 -0
  273. package/src/execution/__tests__/useContextWindow.test.ts +167 -0
  274. package/src/execution/index.ts +22 -0
  275. package/src/execution/useContextWindow.ts +148 -0
  276. package/src/execution/useCreateAgentExecution.ts +26 -3
  277. package/src/index.ts +227 -0
  278. package/src/inline-edit/InlineEditKeyValue.tsx +23 -0
  279. package/src/internal/VirtualizedThread.tsx +4 -1
  280. package/src/internal/store/index.ts +6 -0
  281. package/src/internal/store/workflow-execution-event-store.ts +391 -0
  282. package/src/internal/useFetch.ts +2 -2
  283. package/src/library/ScopeToggle.tsx +88 -20
  284. package/src/library/VisibilityToggle.tsx +54 -13
  285. package/src/library/index.ts +2 -0
  286. package/src/library/useExportResource.ts +12 -9
  287. package/src/mcp-server/McpServerDetailView.tsx +509 -203
  288. package/src/mcp-server/McpServerPicker.tsx +6 -1
  289. package/src/models/ModelRegistryContext.ts +3 -0
  290. package/src/models/ModelSelector.tsx +25 -2
  291. package/src/models/__tests__/useModelRegistry.test.tsx +5 -3
  292. package/src/models/useModelRegistry.ts +5 -2
  293. package/src/provider.tsx +264 -26
  294. package/src/resource-detail/ResourceDetailShell.tsx +21 -4
  295. package/src/resource-detail/types.ts +25 -0
  296. package/src/resource-detail/useDeleteResource.ts +6 -1
  297. package/src/resource-workbench/components/ResourceWorkbench.tsx +4 -0
  298. package/src/session/__tests__/session-spec-converters.test.ts +185 -0
  299. package/src/session/__tests__/useNewSessionFlow.test.tsx +2 -2
  300. package/src/session/__tests__/usePersistedModel.test.tsx +1 -1
  301. package/src/session/group-sessions.ts +65 -0
  302. package/src/session/index.ts +8 -2
  303. package/src/session/session-spec-converters.ts +86 -0
  304. package/src/session/useNewSessionFlow.ts +1 -0
  305. package/src/session/useSessionConversation.ts +13 -64
  306. package/src/session/useSessionPageFlow.ts +29 -7
  307. package/src/session/useSessionSearch.ts +149 -0
  308. package/src/session/useSessionUsage.ts +72 -4
  309. package/src/settings/UsageSection.tsx +1 -9
  310. package/src/skill/SkillPicker.tsx +6 -1
  311. package/src/workflow/ApprovalFormBuilder.tsx +1017 -0
  312. package/src/workflow/BranchConditionBuilder.tsx +451 -0
  313. package/src/workflow/CanvasActionsContext.ts +12 -0
  314. package/src/workflow/CanvasContextMenu.tsx +364 -0
  315. package/src/workflow/CanvasTaskNode.tsx +372 -0
  316. package/src/workflow/CanvasTransitionEdge.tsx +122 -0
  317. package/src/workflow/CostByWorkflowChart.tsx +120 -0
  318. package/src/workflow/ExecutionSummaryWidget.tsx +194 -0
  319. package/src/workflow/ExecutionTrendChart.tsx +157 -0
  320. package/src/workflow/FailedRunsWidget.tsx +109 -0
  321. package/src/workflow/PendingApprovalsWidget.tsx +115 -0
  322. package/src/workflow/TaskConfigForm.tsx +618 -0
  323. package/src/workflow/TaskKindRegistryContext.ts +36 -0
  324. package/src/workflow/TaskPickerPopover.tsx +326 -0
  325. package/src/workflow/WorkflowArchitectDialog.tsx +505 -0
  326. package/src/workflow/WorkflowCanvasEditor.tsx +651 -0
  327. package/src/workflow/WorkflowCanvasInner.tsx +160 -0
  328. package/src/workflow/WorkflowDashboard.tsx +124 -0
  329. package/src/workflow/WorkflowDetailView.tsx +527 -0
  330. package/src/workflow/WorkflowEditorView.tsx +547 -0
  331. package/src/workflow/WorkflowExecutionApprovalCard.tsx +129 -0
  332. package/src/workflow/WorkflowExecutionArtifactPanel.tsx +112 -0
  333. package/src/workflow/WorkflowExecutionCostPanel.tsx +131 -0
  334. package/src/workflow/WorkflowExecutionHeader.tsx +194 -0
  335. package/src/workflow/WorkflowExecutionPhaseBadge.tsx +188 -0
  336. package/src/workflow/WorkflowExecutionTaskPanel.tsx +135 -0
  337. package/src/workflow/WorkflowExecutionTimeline.tsx +118 -0
  338. package/src/workflow/WorkflowExecutionTimelineEvent.tsx +488 -0
  339. package/src/workflow/WorkflowExecutionViewer.tsx +248 -0
  340. package/src/workflow/WorkflowInspectorPanel.tsx +568 -0
  341. package/src/workflow/WorkflowRefinePanel.tsx +411 -0
  342. package/src/workflow/WorkflowRepairCard.tsx +433 -0
  343. package/src/workflow/WorkflowRunDialog.tsx +220 -0
  344. package/src/workflow/WorkflowRunForm.tsx +245 -0
  345. package/src/workflow/WorkflowTaskList.tsx +177 -0
  346. package/src/workflow/WorkflowTaskPalette.tsx +248 -0
  347. package/src/workflow/WorkflowTopologyGraph.tsx +250 -0
  348. package/src/workflow/WorkflowYamlEditor.tsx +271 -0
  349. package/src/workflow/__tests__/starter-workflow-yaml.test.ts +57 -0
  350. package/src/workflow/canvas-constants.ts +87 -0
  351. package/src/workflow/canvas-icons.tsx +36 -0
  352. package/src/workflow/extract-workflow-yaml.ts +87 -0
  353. package/src/workflow/graph-commands.ts +675 -0
  354. package/src/workflow/index.ts +375 -0
  355. package/src/workflow/serialize-workflow-yaml.ts +546 -0
  356. package/src/workflow/starter-workflow-yaml.ts +29 -0
  357. package/src/workflow/types.ts +99 -0
  358. package/src/workflow/useCanvasKeyboardShortcuts.ts +134 -0
  359. package/src/workflow/useDiagnoseExecutionFlow.ts +378 -0
  360. package/src/workflow/useGraphHistory.ts +138 -0
  361. package/src/workflow/usePendingApprovals.ts +89 -0
  362. package/src/workflow/useRefineWorkflowFlow.ts +321 -0
  363. package/src/workflow/useResolveAgentExecutionSession.ts +57 -0
  364. package/src/workflow/useRunWorkflowFlow.ts +235 -0
  365. package/src/workflow/useTaskKindRegistry.ts +135 -0
  366. package/src/workflow/useWorkflow.ts +78 -0
  367. package/src/workflow/useWorkflowArchitectFlow.ts +303 -0
  368. package/src/workflow/useWorkflowCanvas.ts +882 -0
  369. package/src/workflow/useWorkflowCount.ts +66 -0
  370. package/src/workflow/useWorkflowDashboardSummary.ts +71 -0
  371. package/src/workflow/useWorkflowEditor.ts +106 -0
  372. package/src/workflow/useWorkflowExecution.ts +67 -0
  373. package/src/workflow/useWorkflowExecutionActions.ts +179 -0
  374. package/src/workflow/useWorkflowExecutionArtifacts.ts +57 -0
  375. package/src/workflow/useWorkflowExecutionEventLog.ts +111 -0
  376. package/src/workflow/useWorkflowExecutionEventStream.ts +244 -0
  377. package/src/workflow/useWorkflowExecutionList.ts +121 -0
  378. package/src/workflow/useWorkflowInstances.ts +62 -0
  379. package/src/workflow/useWorkflowList.ts +79 -0
  380. package/src/workflow/useWorkflowSave.ts +84 -0
  381. package/src/workflow/useWorkflowTopology.ts +229 -0
  382. package/src/workflow/useWorkflowValidation.ts +329 -0
  383. package/src/workflow/useWorkflowYaml.ts +49 -0
  384. package/src/workflow/workflow-graph-conversions.ts +796 -0
  385. package/src/workflow/workflow-graph-model.ts +83 -0
  386. package/src/workflow/workflow-yaml-diff.ts +132 -0
  387. package/styles.css +1 -1
  388. package/workflow/ApprovalFormBuilder.d.ts +24 -0
  389. package/workflow/ApprovalFormBuilder.d.ts.map +1 -0
  390. package/workflow/ApprovalFormBuilder.js +347 -0
  391. package/workflow/ApprovalFormBuilder.js.map +1 -0
  392. package/workflow/BranchConditionBuilder.d.ts +29 -0
  393. package/workflow/BranchConditionBuilder.d.ts.map +1 -0
  394. package/workflow/BranchConditionBuilder.js +170 -0
  395. package/workflow/BranchConditionBuilder.js.map +1 -0
  396. package/workflow/CanvasActionsContext.d.ts +8 -0
  397. package/workflow/CanvasActionsContext.d.ts.map +1 -0
  398. package/workflow/CanvasActionsContext.js +4 -0
  399. package/workflow/CanvasActionsContext.js.map +1 -0
  400. package/workflow/CanvasContextMenu.d.ts +59 -0
  401. package/workflow/CanvasContextMenu.d.ts.map +1 -0
  402. package/workflow/CanvasContextMenu.js +98 -0
  403. package/workflow/CanvasContextMenu.js.map +1 -0
  404. package/workflow/CanvasTaskNode.d.ts +21 -0
  405. package/workflow/CanvasTaskNode.d.ts.map +1 -0
  406. package/workflow/CanvasTaskNode.js +125 -0
  407. package/workflow/CanvasTaskNode.js.map +1 -0
  408. package/workflow/CanvasTransitionEdge.d.ts +24 -0
  409. package/workflow/CanvasTransitionEdge.d.ts.map +1 -0
  410. package/workflow/CanvasTransitionEdge.js +50 -0
  411. package/workflow/CanvasTransitionEdge.js.map +1 -0
  412. package/workflow/CostByWorkflowChart.d.ts +15 -0
  413. package/workflow/CostByWorkflowChart.d.ts.map +1 -0
  414. package/workflow/CostByWorkflowChart.js +45 -0
  415. package/workflow/CostByWorkflowChart.js.map +1 -0
  416. package/workflow/ExecutionSummaryWidget.d.ts +16 -0
  417. package/workflow/ExecutionSummaryWidget.d.ts.map +1 -0
  418. package/workflow/ExecutionSummaryWidget.js +93 -0
  419. package/workflow/ExecutionSummaryWidget.js.map +1 -0
  420. package/workflow/ExecutionTrendChart.d.ts +14 -0
  421. package/workflow/ExecutionTrendChart.d.ts.map +1 -0
  422. package/workflow/ExecutionTrendChart.js +67 -0
  423. package/workflow/ExecutionTrendChart.js.map +1 -0
  424. package/workflow/FailedRunsWidget.d.ts +19 -0
  425. package/workflow/FailedRunsWidget.d.ts.map +1 -0
  426. package/workflow/FailedRunsWidget.js +37 -0
  427. package/workflow/FailedRunsWidget.js.map +1 -0
  428. package/workflow/PendingApprovalsWidget.d.ts +19 -0
  429. package/workflow/PendingApprovalsWidget.d.ts.map +1 -0
  430. package/workflow/PendingApprovalsWidget.js +35 -0
  431. package/workflow/PendingApprovalsWidget.js.map +1 -0
  432. package/workflow/TaskConfigForm.d.ts +29 -0
  433. package/workflow/TaskConfigForm.d.ts.map +1 -0
  434. package/workflow/TaskConfigForm.js +230 -0
  435. package/workflow/TaskConfigForm.js.map +1 -0
  436. package/workflow/TaskKindRegistryContext.d.ts +24 -0
  437. package/workflow/TaskKindRegistryContext.d.ts.map +1 -0
  438. package/workflow/TaskKindRegistryContext.js +25 -0
  439. package/workflow/TaskKindRegistryContext.js.map +1 -0
  440. package/workflow/TaskPickerPopover.d.ts +33 -0
  441. package/workflow/TaskPickerPopover.d.ts.map +1 -0
  442. package/workflow/TaskPickerPopover.js +110 -0
  443. package/workflow/TaskPickerPopover.js.map +1 -0
  444. package/workflow/WorkflowArchitectDialog.d.ts +48 -0
  445. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -0
  446. package/workflow/WorkflowArchitectDialog.js +129 -0
  447. package/workflow/WorkflowArchitectDialog.js.map +1 -0
  448. package/workflow/WorkflowCanvasEditor.d.ts +38 -0
  449. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -0
  450. package/workflow/WorkflowCanvasEditor.js +287 -0
  451. package/workflow/WorkflowCanvasEditor.js.map +1 -0
  452. package/workflow/WorkflowCanvasInner.d.ts +32 -0
  453. package/workflow/WorkflowCanvasInner.d.ts.map +1 -0
  454. package/workflow/WorkflowCanvasInner.js +49 -0
  455. package/workflow/WorkflowCanvasInner.js.map +1 -0
  456. package/workflow/WorkflowDashboard.d.ts +35 -0
  457. package/workflow/WorkflowDashboard.d.ts.map +1 -0
  458. package/workflow/WorkflowDashboard.js +59 -0
  459. package/workflow/WorkflowDashboard.js.map +1 -0
  460. package/workflow/WorkflowDetailView.d.ts +63 -0
  461. package/workflow/WorkflowDetailView.d.ts.map +1 -0
  462. package/workflow/WorkflowDetailView.js +202 -0
  463. package/workflow/WorkflowDetailView.js.map +1 -0
  464. package/workflow/WorkflowEditorView.d.ts +43 -0
  465. package/workflow/WorkflowEditorView.d.ts.map +1 -0
  466. package/workflow/WorkflowEditorView.js +165 -0
  467. package/workflow/WorkflowEditorView.js.map +1 -0
  468. package/workflow/WorkflowExecutionApprovalCard.d.ts +27 -0
  469. package/workflow/WorkflowExecutionApprovalCard.d.ts.map +1 -0
  470. package/workflow/WorkflowExecutionApprovalCard.js +32 -0
  471. package/workflow/WorkflowExecutionApprovalCard.js.map +1 -0
  472. package/workflow/WorkflowExecutionArtifactPanel.d.ts +15 -0
  473. package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +1 -0
  474. package/workflow/WorkflowExecutionArtifactPanel.js +53 -0
  475. package/workflow/WorkflowExecutionArtifactPanel.js.map +1 -0
  476. package/workflow/WorkflowExecutionCostPanel.d.ts +18 -0
  477. package/workflow/WorkflowExecutionCostPanel.d.ts.map +1 -0
  478. package/workflow/WorkflowExecutionCostPanel.js +44 -0
  479. package/workflow/WorkflowExecutionCostPanel.js.map +1 -0
  480. package/workflow/WorkflowExecutionHeader.d.ts +26 -0
  481. package/workflow/WorkflowExecutionHeader.d.ts.map +1 -0
  482. package/workflow/WorkflowExecutionHeader.js +68 -0
  483. package/workflow/WorkflowExecutionHeader.js.map +1 -0
  484. package/workflow/WorkflowExecutionPhaseBadge.d.ts +23 -0
  485. package/workflow/WorkflowExecutionPhaseBadge.d.ts.map +1 -0
  486. package/workflow/WorkflowExecutionPhaseBadge.js +99 -0
  487. package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -0
  488. package/workflow/WorkflowExecutionTaskPanel.d.ts +24 -0
  489. package/workflow/WorkflowExecutionTaskPanel.d.ts.map +1 -0
  490. package/workflow/WorkflowExecutionTaskPanel.js +59 -0
  491. package/workflow/WorkflowExecutionTaskPanel.js.map +1 -0
  492. package/workflow/WorkflowExecutionTimeline.d.ts +27 -0
  493. package/workflow/WorkflowExecutionTimeline.d.ts.map +1 -0
  494. package/workflow/WorkflowExecutionTimeline.js +51 -0
  495. package/workflow/WorkflowExecutionTimeline.js.map +1 -0
  496. package/workflow/WorkflowExecutionTimelineEvent.d.ts +18 -0
  497. package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +1 -0
  498. package/workflow/WorkflowExecutionTimelineEvent.js +210 -0
  499. package/workflow/WorkflowExecutionTimelineEvent.js.map +1 -0
  500. package/workflow/WorkflowExecutionViewer.d.ts +45 -0
  501. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -0
  502. package/workflow/WorkflowExecutionViewer.js +75 -0
  503. package/workflow/WorkflowExecutionViewer.js.map +1 -0
  504. package/workflow/WorkflowInspectorPanel.d.ts +46 -0
  505. package/workflow/WorkflowInspectorPanel.d.ts.map +1 -0
  506. package/workflow/WorkflowInspectorPanel.js +152 -0
  507. package/workflow/WorkflowInspectorPanel.js.map +1 -0
  508. package/workflow/WorkflowRefinePanel.d.ts +30 -0
  509. package/workflow/WorkflowRefinePanel.d.ts.map +1 -0
  510. package/workflow/WorkflowRefinePanel.js +107 -0
  511. package/workflow/WorkflowRefinePanel.js.map +1 -0
  512. package/workflow/WorkflowRepairCard.d.ts +35 -0
  513. package/workflow/WorkflowRepairCard.d.ts.map +1 -0
  514. package/workflow/WorkflowRepairCard.js +113 -0
  515. package/workflow/WorkflowRepairCard.js.map +1 -0
  516. package/workflow/WorkflowRunDialog.d.ts +51 -0
  517. package/workflow/WorkflowRunDialog.d.ts.map +1 -0
  518. package/workflow/WorkflowRunDialog.js +75 -0
  519. package/workflow/WorkflowRunDialog.js.map +1 -0
  520. package/workflow/WorkflowRunForm.d.ts +62 -0
  521. package/workflow/WorkflowRunForm.d.ts.map +1 -0
  522. package/workflow/WorkflowRunForm.js +64 -0
  523. package/workflow/WorkflowRunForm.js.map +1 -0
  524. package/workflow/WorkflowTaskList.d.ts +25 -0
  525. package/workflow/WorkflowTaskList.d.ts.map +1 -0
  526. package/workflow/WorkflowTaskList.js +89 -0
  527. package/workflow/WorkflowTaskList.js.map +1 -0
  528. package/workflow/WorkflowTaskPalette.d.ts +22 -0
  529. package/workflow/WorkflowTaskPalette.d.ts.map +1 -0
  530. package/workflow/WorkflowTaskPalette.js +83 -0
  531. package/workflow/WorkflowTaskPalette.js.map +1 -0
  532. package/workflow/WorkflowTopologyGraph.d.ts +22 -0
  533. package/workflow/WorkflowTopologyGraph.d.ts.map +1 -0
  534. package/workflow/WorkflowTopologyGraph.js +123 -0
  535. package/workflow/WorkflowTopologyGraph.js.map +1 -0
  536. package/workflow/WorkflowYamlEditor.d.ts +43 -0
  537. package/workflow/WorkflowYamlEditor.d.ts.map +1 -0
  538. package/workflow/WorkflowYamlEditor.js +215 -0
  539. package/workflow/WorkflowYamlEditor.js.map +1 -0
  540. package/workflow/__tests__/starter-workflow-yaml.test.d.ts +2 -0
  541. package/workflow/__tests__/starter-workflow-yaml.test.d.ts.map +1 -0
  542. package/workflow/__tests__/starter-workflow-yaml.test.js +44 -0
  543. package/workflow/__tests__/starter-workflow-yaml.test.js.map +1 -0
  544. package/workflow/canvas-constants.d.ts +56 -0
  545. package/workflow/canvas-constants.d.ts.map +1 -0
  546. package/workflow/canvas-constants.js +74 -0
  547. package/workflow/canvas-constants.js.map +1 -0
  548. package/workflow/canvas-icons.d.ts +13 -0
  549. package/workflow/canvas-icons.d.ts.map +1 -0
  550. package/workflow/canvas-icons.js +21 -0
  551. package/workflow/canvas-icons.js.map +1 -0
  552. package/workflow/extract-workflow-yaml.d.ts +22 -0
  553. package/workflow/extract-workflow-yaml.d.ts.map +1 -0
  554. package/workflow/extract-workflow-yaml.js +63 -0
  555. package/workflow/extract-workflow-yaml.js.map +1 -0
  556. package/workflow/graph-commands.d.ts +209 -0
  557. package/workflow/graph-commands.d.ts.map +1 -0
  558. package/workflow/graph-commands.js +516 -0
  559. package/workflow/graph-commands.js.map +1 -0
  560. package/workflow/index.d.ts +66 -0
  561. package/workflow/index.d.ts.map +1 -0
  562. package/workflow/index.js +88 -0
  563. package/workflow/index.js.map +1 -0
  564. package/workflow/serialize-workflow-yaml.d.ts +39 -0
  565. package/workflow/serialize-workflow-yaml.d.ts.map +1 -0
  566. package/workflow/serialize-workflow-yaml.js +413 -0
  567. package/workflow/serialize-workflow-yaml.js.map +1 -0
  568. package/workflow/starter-workflow-yaml.d.ts +12 -0
  569. package/workflow/starter-workflow-yaml.d.ts.map +1 -0
  570. package/workflow/starter-workflow-yaml.js +30 -0
  571. package/workflow/starter-workflow-yaml.js.map +1 -0
  572. package/workflow/types.d.ts +80 -0
  573. package/workflow/types.d.ts.map +1 -0
  574. package/workflow/types.js +2 -0
  575. package/workflow/types.js.map +1 -0
  576. package/workflow/useCanvasKeyboardShortcuts.d.ts +34 -0
  577. package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -0
  578. package/workflow/useCanvasKeyboardShortcuts.js +108 -0
  579. package/workflow/useCanvasKeyboardShortcuts.js.map +1 -0
  580. package/workflow/useDiagnoseExecutionFlow.d.ts +87 -0
  581. package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -0
  582. package/workflow/useDiagnoseExecutionFlow.js +257 -0
  583. package/workflow/useDiagnoseExecutionFlow.js.map +1 -0
  584. package/workflow/useGraphHistory.d.ts +28 -0
  585. package/workflow/useGraphHistory.d.ts.map +1 -0
  586. package/workflow/useGraphHistory.js +106 -0
  587. package/workflow/useGraphHistory.js.map +1 -0
  588. package/workflow/usePendingApprovals.d.ts +35 -0
  589. package/workflow/usePendingApprovals.d.ts.map +1 -0
  590. package/workflow/usePendingApprovals.js +50 -0
  591. package/workflow/usePendingApprovals.js.map +1 -0
  592. package/workflow/useRefineWorkflowFlow.d.ts +75 -0
  593. package/workflow/useRefineWorkflowFlow.d.ts.map +1 -0
  594. package/workflow/useRefineWorkflowFlow.js +216 -0
  595. package/workflow/useRefineWorkflowFlow.js.map +1 -0
  596. package/workflow/useResolveAgentExecutionSession.d.ts +33 -0
  597. package/workflow/useResolveAgentExecutionSession.d.ts.map +1 -0
  598. package/workflow/useResolveAgentExecutionSession.js +37 -0
  599. package/workflow/useResolveAgentExecutionSession.js.map +1 -0
  600. package/workflow/useRunWorkflowFlow.d.ts +82 -0
  601. package/workflow/useRunWorkflowFlow.d.ts.map +1 -0
  602. package/workflow/useRunWorkflowFlow.js +145 -0
  603. package/workflow/useRunWorkflowFlow.js.map +1 -0
  604. package/workflow/useTaskKindRegistry.d.ts +96 -0
  605. package/workflow/useTaskKindRegistry.d.ts.map +1 -0
  606. package/workflow/useTaskKindRegistry.js +75 -0
  607. package/workflow/useTaskKindRegistry.js.map +1 -0
  608. package/workflow/useWorkflow.d.ts +47 -0
  609. package/workflow/useWorkflow.d.ts.map +1 -0
  610. package/workflow/useWorkflow.js +53 -0
  611. package/workflow/useWorkflow.js.map +1 -0
  612. package/workflow/useWorkflowArchitectFlow.d.ts +96 -0
  613. package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -0
  614. package/workflow/useWorkflowArchitectFlow.js +179 -0
  615. package/workflow/useWorkflowArchitectFlow.js.map +1 -0
  616. package/workflow/useWorkflowCanvas.d.ts +66 -0
  617. package/workflow/useWorkflowCanvas.d.ts.map +1 -0
  618. package/workflow/useWorkflowCanvas.js +628 -0
  619. package/workflow/useWorkflowCanvas.js.map +1 -0
  620. package/workflow/useWorkflowCount.d.ts +47 -0
  621. package/workflow/useWorkflowCount.d.ts.map +1 -0
  622. package/workflow/useWorkflowCount.js +26 -0
  623. package/workflow/useWorkflowCount.js.map +1 -0
  624. package/workflow/useWorkflowDashboardSummary.d.ts +34 -0
  625. package/workflow/useWorkflowDashboardSummary.d.ts.map +1 -0
  626. package/workflow/useWorkflowDashboardSummary.js +33 -0
  627. package/workflow/useWorkflowDashboardSummary.js.map +1 -0
  628. package/workflow/useWorkflowEditor.d.ts +45 -0
  629. package/workflow/useWorkflowEditor.d.ts.map +1 -0
  630. package/workflow/useWorkflowEditor.js +52 -0
  631. package/workflow/useWorkflowEditor.js.map +1 -0
  632. package/workflow/useWorkflowExecution.d.ts +37 -0
  633. package/workflow/useWorkflowExecution.d.ts.map +1 -0
  634. package/workflow/useWorkflowExecution.js +43 -0
  635. package/workflow/useWorkflowExecution.js.map +1 -0
  636. package/workflow/useWorkflowExecutionActions.d.ts +41 -0
  637. package/workflow/useWorkflowExecutionActions.d.ts.map +1 -0
  638. package/workflow/useWorkflowExecutionActions.js +86 -0
  639. package/workflow/useWorkflowExecutionActions.js.map +1 -0
  640. package/workflow/useWorkflowExecutionArtifacts.d.ts +26 -0
  641. package/workflow/useWorkflowExecutionArtifacts.d.ts.map +1 -0
  642. package/workflow/useWorkflowExecutionArtifacts.js +29 -0
  643. package/workflow/useWorkflowExecutionArtifacts.js.map +1 -0
  644. package/workflow/useWorkflowExecutionEventLog.d.ts +47 -0
  645. package/workflow/useWorkflowExecutionEventLog.d.ts.map +1 -0
  646. package/workflow/useWorkflowExecutionEventLog.js +59 -0
  647. package/workflow/useWorkflowExecutionEventLog.js.map +1 -0
  648. package/workflow/useWorkflowExecutionEventStream.d.ts +61 -0
  649. package/workflow/useWorkflowExecutionEventStream.d.ts.map +1 -0
  650. package/workflow/useWorkflowExecutionEventStream.js +161 -0
  651. package/workflow/useWorkflowExecutionEventStream.js.map +1 -0
  652. package/workflow/useWorkflowExecutionList.d.ts +49 -0
  653. package/workflow/useWorkflowExecutionList.d.ts.map +1 -0
  654. package/workflow/useWorkflowExecutionList.js +65 -0
  655. package/workflow/useWorkflowExecutionList.js.map +1 -0
  656. package/workflow/useWorkflowInstances.d.ts +30 -0
  657. package/workflow/useWorkflowInstances.d.ts.map +1 -0
  658. package/workflow/useWorkflowInstances.js +33 -0
  659. package/workflow/useWorkflowInstances.js.map +1 -0
  660. package/workflow/useWorkflowList.d.ts +57 -0
  661. package/workflow/useWorkflowList.d.ts.map +1 -0
  662. package/workflow/useWorkflowList.js +29 -0
  663. package/workflow/useWorkflowList.js.map +1 -0
  664. package/workflow/useWorkflowSave.d.ts +25 -0
  665. package/workflow/useWorkflowSave.d.ts.map +1 -0
  666. package/workflow/useWorkflowSave.js +61 -0
  667. package/workflow/useWorkflowSave.js.map +1 -0
  668. package/workflow/useWorkflowTopology.d.ts +40 -0
  669. package/workflow/useWorkflowTopology.d.ts.map +1 -0
  670. package/workflow/useWorkflowTopology.js +163 -0
  671. package/workflow/useWorkflowTopology.js.map +1 -0
  672. package/workflow/useWorkflowValidation.d.ts +27 -0
  673. package/workflow/useWorkflowValidation.d.ts.map +1 -0
  674. package/workflow/useWorkflowValidation.js +253 -0
  675. package/workflow/useWorkflowValidation.js.map +1 -0
  676. package/workflow/useWorkflowYaml.d.ts +26 -0
  677. package/workflow/useWorkflowYaml.d.ts.map +1 -0
  678. package/workflow/useWorkflowYaml.js +26 -0
  679. package/workflow/useWorkflowYaml.js.map +1 -0
  680. package/workflow/workflow-graph-conversions.d.ts +70 -0
  681. package/workflow/workflow-graph-conversions.d.ts.map +1 -0
  682. package/workflow/workflow-graph-conversions.js +634 -0
  683. package/workflow/workflow-graph-conversions.js.map +1 -0
  684. package/workflow/workflow-graph-model.d.ts +83 -0
  685. package/workflow/workflow-graph-model.d.ts.map +1 -0
  686. package/workflow/workflow-graph-model.js +5 -0
  687. package/workflow/workflow-graph-model.js.map +1 -0
  688. package/workflow/workflow-yaml-diff.d.ts +24 -0
  689. package/workflow/workflow-yaml-diff.d.ts.map +1 -0
  690. package/workflow/workflow-yaml-diff.js +96 -0
  691. package/workflow/workflow-yaml-diff.js.map +1 -0
@@ -0,0 +1,243 @@
1
+ "use client";
2
+
3
+ import { memo } from "react";
4
+ import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
5
+ import { cn } from "@stigmer/theme";
6
+ import {
7
+ useContextWindow,
8
+ type ContextHealth,
9
+ type UseContextWindowReturn,
10
+ } from "./useContextWindow";
11
+ import { formatTokenCount } from "./UsageWidget";
12
+
13
+ /** Props for {@link ContextGauge}. */
14
+ export interface ContextGaugeProps {
15
+ /**
16
+ * The execution snapshot from `useExecutionStream`, or `null`.
17
+ * The gauge extracts `context_info` from the execution status.
18
+ */
19
+ readonly execution: AgentExecution | null;
20
+ /**
21
+ * When `true`, renders a minimal bar without labels.
22
+ * Use in tight layouts (e.g., inline status indicators).
23
+ * @default false
24
+ */
25
+ readonly compact?: boolean;
26
+ /** Additional CSS classes for the root element. */
27
+ readonly className?: string;
28
+ }
29
+
30
+ const HEALTH_BAR_COLORS: Record<ContextHealth, string> = {
31
+ healthy: "bg-success",
32
+ warning: "bg-warning",
33
+ critical: "bg-destructive",
34
+ };
35
+
36
+ const HEALTH_TEXT_COLORS: Record<ContextHealth, string> = {
37
+ healthy: "text-success",
38
+ warning: "text-warning",
39
+ critical: "text-destructive",
40
+ };
41
+
42
+ const HEALTH_LABELS: Record<ContextHealth, string> = {
43
+ healthy: "Healthy",
44
+ warning: "Approaching limit",
45
+ critical: "Near limit",
46
+ };
47
+
48
+ function formatCompactTokens(count: number): string {
49
+ if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;
50
+ if (count >= 1_000) return `${Math.round(count / 1_000)}K`;
51
+ return String(count);
52
+ }
53
+
54
+ /**
55
+ * Visual gauge showing context window utilization during agent execution.
56
+ *
57
+ * Renders a progress bar with threshold markers, token count labels, and
58
+ * a health indicator derived from utilization percentage. The gauge updates
59
+ * in real-time as the execution streams status updates.
60
+ *
61
+ * Returns `null` when `context_info` is absent (e.g., Cursor harness
62
+ * where context is managed externally).
63
+ *
64
+ * All visual properties flow through `--stgm-*` tokens. Zero Console
65
+ * dependencies. Accessible via `role="meter"` with ARIA value attributes.
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * const { execution } = useExecutionStream(executionId);
70
+ * <ContextGauge execution={execution} />
71
+ * ```
72
+ *
73
+ * @example Compact mode in a status bar:
74
+ * ```tsx
75
+ * <ContextGauge execution={execution} compact />
76
+ * ```
77
+ *
78
+ * @see {@link useContextWindow} - headless hook for custom rendering
79
+ */
80
+ export const ContextGauge = memo(function ContextGauge({
81
+ execution,
82
+ compact = false,
83
+ className,
84
+ }: ContextGaugeProps) {
85
+ const ctx = useContextWindow(execution);
86
+
87
+ if (!ctx.hasContextInfo) return null;
88
+
89
+ if (compact) return <CompactGauge ctx={ctx} className={className} />;
90
+
91
+ return <FullGauge ctx={ctx} className={className} />;
92
+ });
93
+
94
+ const CompactGauge = memo(function CompactGauge({
95
+ ctx,
96
+ className,
97
+ }: {
98
+ readonly ctx: UseContextWindowReturn;
99
+ readonly className?: string;
100
+ }) {
101
+ const barPercent = Math.min(ctx.utilizationPercent, 100);
102
+
103
+ return (
104
+ <div
105
+ role="meter"
106
+ aria-label="Context window utilization"
107
+ aria-valuenow={ctx.currentTokenCount}
108
+ aria-valuemin={0}
109
+ aria-valuemax={ctx.contextWindowLimit}
110
+ aria-valuetext={`${Math.round(ctx.utilizationPercent)}% context used`}
111
+ className={cn("flex items-center gap-2", className)}
112
+ >
113
+ <div className="h-1.5 flex-1 overflow-hidden rounded-full bg-muted">
114
+ <div
115
+ className={cn(
116
+ "h-full rounded-full transition-colors",
117
+ HEALTH_BAR_COLORS[ctx.health],
118
+ )}
119
+ style={{ width: `${barPercent}%` }}
120
+ />
121
+ </div>
122
+ <span
123
+ className={cn(
124
+ "shrink-0 text-xs tabular-nums",
125
+ HEALTH_TEXT_COLORS[ctx.health],
126
+ )}
127
+ >
128
+ {Math.round(ctx.utilizationPercent)}%
129
+ </span>
130
+ </div>
131
+ );
132
+ });
133
+
134
+ const FullGauge = memo(function FullGauge({
135
+ ctx,
136
+ className,
137
+ }: {
138
+ readonly ctx: UseContextWindowReturn;
139
+ readonly className?: string;
140
+ }) {
141
+ const barPercent = Math.min(ctx.utilizationPercent, 100);
142
+ const triggerPercent =
143
+ ctx.triggerThreshold > 0 && ctx.contextWindowLimit > 0
144
+ ? (ctx.triggerThreshold / ctx.contextWindowLimit) * 100
145
+ : 0;
146
+
147
+ return (
148
+ <div
149
+ role="meter"
150
+ aria-label="Context window utilization"
151
+ aria-valuenow={ctx.currentTokenCount}
152
+ aria-valuemin={0}
153
+ aria-valuemax={ctx.contextWindowLimit}
154
+ aria-valuetext={`${formatCompactTokens(ctx.currentTokenCount)} of ${formatCompactTokens(ctx.contextWindowLimit)} tokens used, ${Math.round(ctx.utilizationPercent)}%`}
155
+ className={cn("flex flex-col gap-1.5", className)}
156
+ >
157
+ {/* Header: label + percentage */}
158
+ <div className="flex items-baseline justify-between">
159
+ <span className="text-xs font-medium text-foreground">
160
+ Context
161
+ </span>
162
+ <span
163
+ className={cn(
164
+ "text-xs tabular-nums font-medium",
165
+ HEALTH_TEXT_COLORS[ctx.health],
166
+ )}
167
+ >
168
+ {Math.round(ctx.utilizationPercent)}%
169
+ </span>
170
+ </div>
171
+
172
+ {/* Progress bar with threshold marker */}
173
+ <div className="relative">
174
+ <div className="h-2 overflow-hidden rounded-full bg-muted">
175
+ <div
176
+ className={cn(
177
+ "h-full rounded-full transition-colors",
178
+ HEALTH_BAR_COLORS[ctx.health],
179
+ )}
180
+ style={{ width: `${barPercent}%` }}
181
+ />
182
+ </div>
183
+ {triggerPercent > 0 && triggerPercent < 100 && (
184
+ <div
185
+ className="absolute top-0 h-2 w-px bg-muted-foreground/40"
186
+ style={{ left: `${triggerPercent}%` }}
187
+ aria-hidden="true"
188
+ />
189
+ )}
190
+ </div>
191
+
192
+ {/* Token counts */}
193
+ <div className="text-xs tabular-nums text-muted-foreground">
194
+ {formatCompactTokens(ctx.currentTokenCount)} /{" "}
195
+ {formatCompactTokens(ctx.contextWindowLimit)} tokens
196
+ </div>
197
+
198
+ {/* Health status + summarization count */}
199
+ <div className="flex items-center gap-1.5">
200
+ <span
201
+ className={cn(
202
+ "inline-flex h-1.5 w-1.5 rounded-full",
203
+ HEALTH_BAR_COLORS[ctx.health],
204
+ )}
205
+ aria-hidden="true"
206
+ />
207
+ <span className="text-xs text-muted-foreground">
208
+ {HEALTH_LABELS[ctx.health]}
209
+ </span>
210
+ {ctx.summarizationEvents.length > 0 && (
211
+ <span className="text-xs text-muted-foreground">
212
+ · {ctx.summarizationEvents.length}{" "}
213
+ {ctx.summarizationEvents.length === 1
214
+ ? "summarization"
215
+ : "summarizations"}
216
+ </span>
217
+ )}
218
+ </div>
219
+
220
+ {/* Summarization details (when events exist) */}
221
+ {ctx.summarizationEvents.length > 0 && (
222
+ <SummarizationSummary events={ctx.summarizationEvents} />
223
+ )}
224
+ </div>
225
+ );
226
+ });
227
+
228
+ function SummarizationSummary({
229
+ events,
230
+ }: {
231
+ readonly events: UseContextWindowReturn["summarizationEvents"];
232
+ }) {
233
+ const latest = events[events.length - 1];
234
+ if (!latest) return null;
235
+
236
+ return (
237
+ <div className="pl-3 text-xs tabular-nums text-muted-foreground">
238
+ Last: {formatTokenCount(latest.tokensBefore)} →{" "}
239
+ {formatTokenCount(latest.tokensAfter)} tokens (
240
+ {Math.round(latest.compressionRatio * 100)}% reduction)
241
+ </div>
242
+ );
243
+ }
@@ -0,0 +1,70 @@
1
+ "use client";
2
+
3
+ import { memo } from "react";
4
+ import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
5
+ import { cn } from "@stigmer/theme";
6
+
7
+ /** Props for {@link InteractionModeBadge}. */
8
+ export interface InteractionModeBadgeProps {
9
+ /** The interaction mode to display. */
10
+ readonly mode: InteractionMode;
11
+ /** Additional CSS class names for the root container. */
12
+ readonly className?: string;
13
+ }
14
+
15
+ /**
16
+ * Displays the interaction mode of an execution as a compact inline badge.
17
+ *
18
+ * Only renders for non-default modes (PLAN). Returns `null` for AGENT
19
+ * and UNSPECIFIED since agent mode is the default and does not need
20
+ * visual distinction.
21
+ *
22
+ * All visual properties flow through `--stgm-*` tokens.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * <InteractionModeBadge mode={InteractionMode.PLAN} />
27
+ * ```
28
+ */
29
+ export const InteractionModeBadge = memo(function InteractionModeBadge({
30
+ mode,
31
+ className,
32
+ }: InteractionModeBadgeProps) {
33
+ if (
34
+ mode !== InteractionMode.PLAN
35
+ ) {
36
+ return null;
37
+ }
38
+
39
+ return (
40
+ <span
41
+ role="status"
42
+ aria-label="Plan mode"
43
+ className={cn(
44
+ "inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[0.65rem] font-medium",
45
+ "bg-accent text-muted-foreground",
46
+ className,
47
+ )}
48
+ >
49
+ <PlanIcon />
50
+ Plan
51
+ </span>
52
+ );
53
+ });
54
+
55
+ function PlanIcon() {
56
+ return (
57
+ <svg
58
+ width="10"
59
+ height="10"
60
+ viewBox="0 0 12 12"
61
+ fill="none"
62
+ stroke="currentColor"
63
+ strokeWidth="1.5"
64
+ strokeLinecap="round"
65
+ strokeLinejoin="round"
66
+ >
67
+ <path d="M2 3h8M2 6h5M2 9h6" />
68
+ </svg>
69
+ );
70
+ }
@@ -10,6 +10,7 @@ import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentex
10
10
  import {
11
11
  ApprovalAction,
12
12
  ExecutionPhase,
13
+ InteractionMode,
13
14
  MessageType,
14
15
  } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
15
16
  import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
@@ -21,6 +22,9 @@ import { SubAgentSection } from "./SubAgentSection";
21
22
  import { ExecutionPhaseBadge } from "./ExecutionPhaseBadge";
22
23
  import { SetupProgress } from "./SetupProgress";
23
24
  import { ApprovalCard } from "./ApprovalCard";
25
+ import { SummarizationCard } from "./SummarizationCard";
26
+ import { PlanCompletionCard } from "./PlanCompletionCard";
27
+ import type { SummarizationEventView } from "./useContextWindow";
24
28
  import { FilePathContext, type FilePathContextValue } from "./FilePathContext";
25
29
  import type { ResolvedPathAction } from "./file-path-resolver";
26
30
  import { SandboxContext, type SandboxContextValue } from "./SandboxContext";
@@ -103,6 +107,14 @@ export interface MessageThreadProps {
103
107
  * the user's own filesystem (no normalization needed).
104
108
  */
105
109
  readonly sandboxWorkspaceRoot?: string;
110
+ /**
111
+ * Summarization events from context window tracking. When provided,
112
+ * "Context compacted" cards are interleaved into the thread at the
113
+ * correct chronological position based on event timestamps.
114
+ *
115
+ * Obtain from {@link useContextWindow}.summarizationEvents.
116
+ */
117
+ readonly summarizationEvents?: readonly SummarizationEventView[];
106
118
  /**
107
119
  * Enable virtualized rendering for long conversations. Requires
108
120
  * `react-virtuoso` to be installed as a peer dependency. When
@@ -112,6 +124,19 @@ export interface MessageThreadProps {
112
124
  * @default false
113
125
  */
114
126
  readonly virtualized?: boolean;
127
+ /**
128
+ * Called when the user clicks "Implement" on a completed Plan-mode
129
+ * execution's {@link PlanCompletionCard}.
130
+ *
131
+ * When provided, a CTA card is rendered at the end of the thread
132
+ * after a Plan-mode execution completes successfully. The consumer
133
+ * typically wires this to switch the interaction mode to Agent,
134
+ * pre-fill the composer, and focus it.
135
+ *
136
+ * When omitted, no plan completion card is rendered. Backward
137
+ * compatible — existing consumers see no change.
138
+ */
139
+ readonly onBuildFromPlan?: () => void;
115
140
  }
116
141
 
117
142
  /**
@@ -129,7 +154,9 @@ export type ThreadItem =
129
154
  | { readonly kind: "sub-agent"; readonly subAgentExecution: SubAgentExecution; readonly key: string }
130
155
  | { readonly kind: "phase-badge"; readonly phase: ExecutionPhase; readonly key: string }
131
156
  | { readonly kind: "approval-request"; readonly pendingApproval: PendingApproval; readonly key: string }
132
- | { readonly kind: "setup-progress"; readonly workspaceEntries: readonly WorkspaceEntry[]; readonly serverPhase?: string; readonly isAwaitingResponse?: boolean; readonly key: string };
157
+ | { readonly kind: "setup-progress"; readonly workspaceEntries: readonly WorkspaceEntry[]; readonly serverPhase?: string; readonly isAwaitingResponse?: boolean; readonly key: string }
158
+ | { readonly kind: "context-compacted"; readonly event: SummarizationEventView; readonly key: string }
159
+ | { readonly kind: "plan-completion"; readonly key: string };
133
160
 
134
161
  function hasAiMessages(execution: AgentExecution): boolean {
135
162
  const messages = execution.status?.messages;
@@ -154,6 +181,7 @@ export function buildThreadItems(
154
181
  pendingUserMessage: string | null | undefined,
155
182
  includeApprovals: boolean,
156
183
  workspaceEntries: readonly WorkspaceEntry[] | undefined,
184
+ summarizationEvents?: readonly SummarizationEventView[],
157
185
  ): ThreadItem[] {
158
186
  const items: ThreadItem[] = [];
159
187
  const allExecutions = activeStreamExecution
@@ -163,6 +191,30 @@ export function buildThreadItems(
163
191
  ? allExecutions.length - 1
164
192
  : -1;
165
193
 
194
+ // Build a queue of summarization events to interleave by timestamp.
195
+ // Events are consumed as messages pass their timestamp.
196
+ const pendingEvents = summarizationEvents?.length
197
+ ? [...summarizationEvents]
198
+ : [];
199
+ let eventCursor = 0;
200
+
201
+ function flushEventsUntil(messageTimestamp: string | undefined): void {
202
+ if (!messageTimestamp || pendingEvents.length === 0) return;
203
+ while (
204
+ eventCursor < pendingEvents.length &&
205
+ pendingEvents[eventCursor].timestamp &&
206
+ pendingEvents[eventCursor].timestamp <= messageTimestamp
207
+ ) {
208
+ const evt = pendingEvents[eventCursor];
209
+ items.push({
210
+ kind: "context-compacted",
211
+ event: evt,
212
+ key: `compacted-${evt.timestamp}`,
213
+ });
214
+ eventCursor++;
215
+ }
216
+ }
217
+
166
218
  for (let ei = 0; ei < allExecutions.length; ei++) {
167
219
  const exec = allExecutions[ei];
168
220
  const execId = exec.metadata?.id ?? `_e${ei}`;
@@ -198,6 +250,8 @@ export function buildThreadItems(
198
250
  // to their parent MESSAGE_AI and rendered via ToolCallGroup.
199
251
  if (msg.type === MessageType.MESSAGE_TOOL) continue;
200
252
 
253
+ flushEventsUntil(msg.timestamp);
254
+
201
255
  const isEmptyAi =
202
256
  msg.type === MessageType.MESSAGE_AI && !msg.content.trim();
203
257
 
@@ -253,6 +307,17 @@ export function buildThreadItems(
253
307
  }
254
308
  }
255
309
 
310
+ // Flush any remaining summarization events that occurred after all messages
311
+ while (eventCursor < pendingEvents.length) {
312
+ const evt = pendingEvents[eventCursor];
313
+ items.push({
314
+ kind: "context-compacted",
315
+ event: evt,
316
+ key: `compacted-${evt.timestamp}`,
317
+ });
318
+ eventCursor++;
319
+ }
320
+
256
321
  const lastExec = allExecutions[allExecutions.length - 1];
257
322
  const lastPhase =
258
323
  lastExec?.status?.phase ?? ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED;
@@ -294,6 +359,13 @@ export function buildThreadItems(
294
359
  });
295
360
  }
296
361
 
362
+ if (
363
+ lastPhase === ExecutionPhase.EXECUTION_COMPLETED &&
364
+ lastExec?.spec?.executionConfig?.interactionMode === InteractionMode.PLAN
365
+ ) {
366
+ items.push({ kind: "plan-completion", key: "plan-completion" });
367
+ }
368
+
297
369
  if (includeApprovals) {
298
370
  const allApprovals = lastExec?.status?.pendingApprovals ?? [];
299
371
  for (let ai = 0; ai < allApprovals.length; ai++) {
@@ -359,14 +431,16 @@ export function MessageThread({
359
431
  workspaceEntries,
360
432
  onFilePathClick,
361
433
  sandboxWorkspaceRoot,
434
+ summarizationEvents,
362
435
  virtualized = false,
436
+ onBuildFromPlan,
363
437
  }: MessageThreadProps) {
364
438
  useRenderTracer("MessageThread", { executions, activeStreamExecution });
365
439
 
366
440
  const includeApprovals = onApprovalSubmit != null;
367
441
  const items = useMemo(
368
- () => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries),
369
- [executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries],
442
+ () => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents),
443
+ [executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents],
370
444
  );
371
445
 
372
446
  useKeyStability(items);
@@ -395,6 +469,7 @@ export function MessageThread({
395
469
  submittingApprovalIds={submittingApprovalIds}
396
470
  filePathCtx={filePathCtx}
397
471
  sandboxCtx={sandboxCtx}
472
+ onBuildFromPlan={onBuildFromPlan}
398
473
  />
399
474
  </Suspense>
400
475
  </div>
@@ -410,6 +485,7 @@ export function MessageThread({
410
485
  submittingApprovalIds={submittingApprovalIds}
411
486
  filePathCtx={filePathCtx}
412
487
  sandboxCtx={sandboxCtx}
488
+ onBuildFromPlan={onBuildFromPlan}
413
489
  />
414
490
  );
415
491
  }
@@ -430,6 +506,7 @@ interface NonVirtualizedThreadProps {
430
506
  readonly submittingApprovalIds?: ReadonlySet<string>;
431
507
  readonly filePathCtx: FilePathContextValue;
432
508
  readonly sandboxCtx: SandboxContextValue;
509
+ readonly onBuildFromPlan?: () => void;
433
510
  }
434
511
 
435
512
  function NonVirtualizedThread({
@@ -440,6 +517,7 @@ function NonVirtualizedThread({
440
517
  submittingApprovalIds,
441
518
  filePathCtx,
442
519
  sandboxCtx,
520
+ onBuildFromPlan,
443
521
  }: NonVirtualizedThreadProps) {
444
522
  const { scrollRef, sentinelRef, contentRef, isFollowing, jumpToLatest } =
445
523
  useAutoScroll();
@@ -472,6 +550,7 @@ function NonVirtualizedThread({
472
550
  formatToolCallSummary={formatToolCallSummary}
473
551
  onApprovalSubmit={onApprovalSubmit}
474
552
  submittingApprovalIds={submittingApprovalIds}
553
+ onBuildFromPlan={onBuildFromPlan}
475
554
  />
476
555
  </ThreadItemWrapper>
477
556
  ))}
@@ -505,6 +584,7 @@ export interface ThreadItemRendererProps {
505
584
  comment?: string,
506
585
  ) => void;
507
586
  readonly submittingApprovalIds?: ReadonlySet<string>;
587
+ readonly onBuildFromPlan?: () => void;
508
588
  }
509
589
 
510
590
  /**
@@ -523,6 +603,7 @@ export function ThreadItemRenderer({
523
603
  formatToolCallSummary,
524
604
  onApprovalSubmit,
525
605
  submittingApprovalIds,
606
+ onBuildFromPlan,
526
607
  }: ThreadItemRendererProps) {
527
608
  switch (item.kind) {
528
609
  case "message":
@@ -570,6 +651,10 @@ export function ThreadItemRenderer({
570
651
  isAwaitingResponse={item.isAwaitingResponse}
571
652
  />
572
653
  );
654
+ case "context-compacted":
655
+ return <SummarizationCard event={item.event} />;
656
+ case "plan-completion":
657
+ return <PlanCompletionCard onImplement={onBuildFromPlan} />;
573
658
  }
574
659
  }
575
660
 
@@ -0,0 +1,105 @@
1
+ "use client";
2
+
3
+ import { memo } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+
6
+ /** Props for {@link PlanCompletionCard}. */
7
+ export interface PlanCompletionCardProps {
8
+ /** Called when the user clicks the "Implement" button. */
9
+ readonly onImplement?: () => void;
10
+ /** Disables the CTA button (e.g., while an execution is active). */
11
+ readonly disabled?: boolean;
12
+ /** Additional CSS classes for the root element. */
13
+ readonly className?: string;
14
+ }
15
+
16
+ /**
17
+ * Inline CTA card shown in the {@link MessageThread} after a completed
18
+ * Plan-mode execution.
19
+ *
20
+ * Offers a single "Implement" action that the consumer wires to switch
21
+ * the interaction mode to Agent, pre-fill the composer, and focus it.
22
+ *
23
+ * Renders nothing when `onImplement` is not provided, so the card is
24
+ * fully opt-in from the consumer's perspective.
25
+ *
26
+ * All visual properties flow through `--stgm-*` tokens.
27
+ */
28
+ export const PlanCompletionCard = memo(function PlanCompletionCard({
29
+ onImplement,
30
+ disabled,
31
+ className,
32
+ }: PlanCompletionCardProps) {
33
+ if (!onImplement) return null;
34
+
35
+ return (
36
+ <div
37
+ role="status"
38
+ aria-label="Plan complete"
39
+ className={cn(
40
+ "mx-4 flex items-center gap-3 rounded-md border border-border/50",
41
+ "bg-muted/30 px-3 py-2.5",
42
+ className,
43
+ )}
44
+ >
45
+ <PlanCompleteIcon />
46
+ <span className="min-w-0 flex-1 text-xs font-medium text-muted-foreground">
47
+ Plan complete — ready to implement?
48
+ </span>
49
+ <button
50
+ type="button"
51
+ disabled={disabled}
52
+ onClick={onImplement}
53
+ className={cn(
54
+ "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5",
55
+ "text-xs font-medium transition-colors",
56
+ "bg-primary text-primary-foreground",
57
+ "hover:bg-primary-hover",
58
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
59
+ "disabled:pointer-events-none disabled:opacity-50",
60
+ )}
61
+ >
62
+ <ImplementIcon />
63
+ Implement
64
+ </button>
65
+ </div>
66
+ );
67
+ });
68
+
69
+ function PlanCompleteIcon() {
70
+ return (
71
+ <svg
72
+ width="16"
73
+ height="16"
74
+ viewBox="0 0 16 16"
75
+ fill="none"
76
+ stroke="currentColor"
77
+ strokeWidth="1.5"
78
+ strokeLinecap="round"
79
+ strokeLinejoin="round"
80
+ className="shrink-0 text-muted-foreground/70"
81
+ aria-hidden="true"
82
+ >
83
+ <path d="M3 4h10M3 8h7M3 12h8" />
84
+ <path d="M12.5 10.5l1.5 1.5-1.5 1.5" />
85
+ </svg>
86
+ );
87
+ }
88
+
89
+ function ImplementIcon() {
90
+ return (
91
+ <svg
92
+ width="12"
93
+ height="12"
94
+ viewBox="0 0 12 12"
95
+ fill="none"
96
+ stroke="currentColor"
97
+ strokeWidth="1.5"
98
+ strokeLinecap="round"
99
+ strokeLinejoin="round"
100
+ aria-hidden="true"
101
+ >
102
+ <path d="M2 6h8M7 3l3 3-3 3" />
103
+ </svg>
104
+ );
105
+ }