@stigmer/react 0.4.8 → 0.5.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 (631) hide show
  1. package/action-menu/ActionMenu.d.ts +64 -0
  2. package/action-menu/ActionMenu.d.ts.map +1 -0
  3. package/action-menu/ActionMenu.js +78 -0
  4. package/action-menu/ActionMenu.js.map +1 -0
  5. package/action-menu/index.d.ts +3 -0
  6. package/action-menu/index.d.ts.map +1 -0
  7. package/action-menu/index.js +2 -0
  8. package/action-menu/index.js.map +1 -0
  9. package/action-menu/types.d.ts +65 -0
  10. package/action-menu/types.d.ts.map +1 -0
  11. package/action-menu/types.js +2 -0
  12. package/action-menu/types.js.map +1 -0
  13. package/agent/AgentCreationWizard.d.ts +55 -0
  14. package/agent/AgentCreationWizard.d.ts.map +1 -0
  15. package/agent/AgentCreationWizard.js +115 -0
  16. package/agent/AgentCreationWizard.js.map +1 -0
  17. package/agent/AgentDetailView.d.ts +77 -9
  18. package/agent/AgentDetailView.d.ts.map +1 -1
  19. package/agent/AgentDetailView.js +265 -87
  20. package/agent/AgentDetailView.js.map +1 -1
  21. package/agent/index.d.ts +8 -0
  22. package/agent/index.d.ts.map +1 -1
  23. package/agent/index.js +4 -0
  24. package/agent/index.js.map +1 -1
  25. package/agent/internal/agentToInput.d.ts +12 -0
  26. package/agent/internal/agentToInput.d.ts.map +1 -0
  27. package/agent/internal/agentToInput.js +72 -0
  28. package/agent/internal/agentToInput.js.map +1 -0
  29. package/agent/steps/CapabilitiesStep.d.ts +16 -0
  30. package/agent/steps/CapabilitiesStep.d.ts.map +1 -0
  31. package/agent/steps/CapabilitiesStep.js +80 -0
  32. package/agent/steps/CapabilitiesStep.js.map +1 -0
  33. package/agent/steps/IdentityStep.d.ts +18 -0
  34. package/agent/steps/IdentityStep.d.ts.map +1 -0
  35. package/agent/steps/IdentityStep.js +43 -0
  36. package/agent/steps/IdentityStep.js.map +1 -0
  37. package/agent/steps/ReviewStep.d.ts +23 -0
  38. package/agent/steps/ReviewStep.d.ts.map +1 -0
  39. package/agent/steps/ReviewStep.js +73 -0
  40. package/agent/steps/ReviewStep.js.map +1 -0
  41. package/agent/steps/types.d.ts +35 -0
  42. package/agent/steps/types.d.ts.map +1 -0
  43. package/agent/steps/types.js +16 -0
  44. package/agent/steps/types.js.map +1 -0
  45. package/agent/useCreateAgent.d.ts +45 -0
  46. package/agent/useCreateAgent.d.ts.map +1 -0
  47. package/agent/useCreateAgent.js +50 -0
  48. package/agent/useCreateAgent.js.map +1 -0
  49. package/agent/useUpdateAgent.d.ts +24 -0
  50. package/agent/useUpdateAgent.d.ts.map +1 -0
  51. package/agent/useUpdateAgent.js +35 -0
  52. package/agent/useUpdateAgent.js.map +1 -0
  53. package/dependency-graph/DependencyGraph.d.ts +37 -0
  54. package/dependency-graph/DependencyGraph.d.ts.map +1 -0
  55. package/dependency-graph/DependencyGraph.js +88 -0
  56. package/dependency-graph/DependencyGraph.js.map +1 -0
  57. package/dependency-graph/DependencyTreeNode.d.ts +23 -0
  58. package/dependency-graph/DependencyTreeNode.d.ts.map +1 -0
  59. package/dependency-graph/DependencyTreeNode.js +99 -0
  60. package/dependency-graph/DependencyTreeNode.js.map +1 -0
  61. package/dependency-graph/index.d.ts +4 -0
  62. package/dependency-graph/index.d.ts.map +1 -0
  63. package/dependency-graph/index.js +5 -0
  64. package/dependency-graph/index.js.map +1 -0
  65. package/dependency-graph/types.d.ts +130 -0
  66. package/dependency-graph/types.d.ts.map +1 -0
  67. package/dependency-graph/types.js +2 -0
  68. package/dependency-graph/types.js.map +1 -0
  69. package/dependency-graph/useDependencyGraph.d.ts +27 -0
  70. package/dependency-graph/useDependencyGraph.d.ts.map +1 -0
  71. package/dependency-graph/useDependencyGraph.js +129 -0
  72. package/dependency-graph/useDependencyGraph.js.map +1 -0
  73. package/empty-state/EmptyState.d.ts +29 -0
  74. package/empty-state/EmptyState.d.ts.map +1 -0
  75. package/empty-state/EmptyState.js +45 -0
  76. package/empty-state/EmptyState.js.map +1 -0
  77. package/empty-state/index.d.ts +4 -0
  78. package/empty-state/index.d.ts.map +1 -0
  79. package/empty-state/index.js +3 -0
  80. package/empty-state/index.js.map +1 -0
  81. package/empty-state/types.d.ts +73 -0
  82. package/empty-state/types.d.ts.map +1 -0
  83. package/empty-state/types.js +2 -0
  84. package/empty-state/types.js.map +1 -0
  85. package/empty-state/useEmptyState.d.ts +18 -0
  86. package/empty-state/useEmptyState.d.ts.map +1 -0
  87. package/empty-state/useEmptyState.js +72 -0
  88. package/empty-state/useEmptyState.js.map +1 -0
  89. package/feedback/StigmerToaster.d.ts +18 -0
  90. package/feedback/StigmerToaster.d.ts.map +1 -0
  91. package/feedback/StigmerToaster.js +31 -0
  92. package/feedback/StigmerToaster.js.map +1 -0
  93. package/feedback/index.d.ts +4 -0
  94. package/feedback/index.d.ts.map +1 -0
  95. package/feedback/index.js +3 -0
  96. package/feedback/index.js.map +1 -0
  97. package/feedback/toast.d.ts +14 -0
  98. package/feedback/toast.d.ts.map +1 -0
  99. package/feedback/toast.js +14 -0
  100. package/feedback/toast.js.map +1 -0
  101. package/feedback/types.d.ts +4 -0
  102. package/feedback/types.d.ts.map +1 -0
  103. package/feedback/types.js +2 -0
  104. package/feedback/types.js.map +1 -0
  105. package/index.d.ts +30 -10
  106. package/index.d.ts.map +1 -1
  107. package/index.js +29 -9
  108. package/index.js.map +1 -1
  109. package/inline-edit/InlineEditImage.d.ts +20 -0
  110. package/inline-edit/InlineEditImage.d.ts.map +1 -0
  111. package/inline-edit/InlineEditImage.js +85 -0
  112. package/inline-edit/InlineEditImage.js.map +1 -0
  113. package/inline-edit/InlineEditKeyValue.d.ts +29 -0
  114. package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
  115. package/inline-edit/InlineEditKeyValue.js +67 -0
  116. package/inline-edit/InlineEditKeyValue.js.map +1 -0
  117. package/inline-edit/InlineEditResourceList.d.ts +34 -0
  118. package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
  119. package/inline-edit/InlineEditResourceList.js +99 -0
  120. package/inline-edit/InlineEditResourceList.js.map +1 -0
  121. package/inline-edit/InlineEditSelect.d.ts +18 -0
  122. package/inline-edit/InlineEditSelect.d.ts.map +1 -0
  123. package/inline-edit/InlineEditSelect.js +54 -0
  124. package/inline-edit/InlineEditSelect.js.map +1 -0
  125. package/inline-edit/InlineEditText.d.ts +23 -0
  126. package/inline-edit/InlineEditText.d.ts.map +1 -0
  127. package/inline-edit/InlineEditText.js +79 -0
  128. package/inline-edit/InlineEditText.js.map +1 -0
  129. package/inline-edit/InlineEditTextarea.d.ts +22 -0
  130. package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
  131. package/inline-edit/InlineEditTextarea.js +83 -0
  132. package/inline-edit/InlineEditTextarea.js.map +1 -0
  133. package/inline-edit/index.d.ts +16 -0
  134. package/inline-edit/index.d.ts.map +1 -0
  135. package/inline-edit/index.js +8 -0
  136. package/inline-edit/index.js.map +1 -0
  137. package/inline-edit/types.d.ts +42 -0
  138. package/inline-edit/types.d.ts.map +1 -0
  139. package/inline-edit/types.js +2 -0
  140. package/inline-edit/types.js.map +1 -0
  141. package/inline-edit/useInlineFieldSave.d.ts +23 -0
  142. package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
  143. package/inline-edit/useInlineFieldSave.js +44 -0
  144. package/inline-edit/useInlineFieldSave.js.map +1 -0
  145. package/internal/Tabs.d.ts +4 -38
  146. package/internal/Tabs.d.ts.map +1 -1
  147. package/internal/Tabs.js +3 -62
  148. package/internal/Tabs.js.map +1 -1
  149. package/library/ImportResourceDialog.d.ts +43 -0
  150. package/library/ImportResourceDialog.d.ts.map +1 -0
  151. package/library/ImportResourceDialog.js +90 -0
  152. package/library/ImportResourceDialog.js.map +1 -0
  153. package/library/index.d.ts +7 -4
  154. package/library/index.d.ts.map +1 -1
  155. package/library/index.js +4 -2
  156. package/library/index.js.map +1 -1
  157. package/library/serialize-resource-yaml.d.ts +53 -0
  158. package/library/serialize-resource-yaml.d.ts.map +1 -1
  159. package/library/serialize-resource-yaml.js +275 -0
  160. package/library/serialize-resource-yaml.js.map +1 -1
  161. package/library/useExportResource.d.ts +56 -0
  162. package/library/useExportResource.d.ts.map +1 -0
  163. package/library/useExportResource.js +137 -0
  164. package/library/useExportResource.js.map +1 -0
  165. package/library/useImportResource.d.ts +84 -0
  166. package/library/useImportResource.d.ts.map +1 -0
  167. package/library/useImportResource.js +188 -0
  168. package/library/useImportResource.js.map +1 -0
  169. package/mcp-server/McpServerCreationWizard.d.ts +55 -0
  170. package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
  171. package/mcp-server/McpServerCreationWizard.js +121 -0
  172. package/mcp-server/McpServerCreationWizard.js.map +1 -0
  173. package/mcp-server/McpServerDetailView.d.ts +21 -1
  174. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  175. package/mcp-server/McpServerDetailView.js +113 -20
  176. package/mcp-server/McpServerDetailView.js.map +1 -1
  177. package/mcp-server/index.d.ts +8 -0
  178. package/mcp-server/index.d.ts.map +1 -1
  179. package/mcp-server/index.js +4 -0
  180. package/mcp-server/index.js.map +1 -1
  181. package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
  182. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
  183. package/mcp-server/internal/mcpServerToInput.js +81 -0
  184. package/mcp-server/internal/mcpServerToInput.js.map +1 -0
  185. package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
  186. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
  187. package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
  188. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
  189. package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
  190. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
  191. package/mcp-server/steps/IdentityTransportStep.js +73 -0
  192. package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
  193. package/mcp-server/steps/ReviewStep.d.ts +23 -0
  194. package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
  195. package/mcp-server/steps/ReviewStep.js +137 -0
  196. package/mcp-server/steps/ReviewStep.js.map +1 -0
  197. package/mcp-server/steps/types.d.ts +56 -0
  198. package/mcp-server/steps/types.d.ts.map +1 -0
  199. package/mcp-server/steps/types.js +27 -0
  200. package/mcp-server/steps/types.js.map +1 -0
  201. package/mcp-server/useCreateMcpServer.d.ts +45 -0
  202. package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
  203. package/mcp-server/useCreateMcpServer.js +50 -0
  204. package/mcp-server/useCreateMcpServer.js.map +1 -0
  205. package/mcp-server/useUpdateMcpServer.d.ts +24 -0
  206. package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
  207. package/mcp-server/useUpdateMcpServer.js +35 -0
  208. package/mcp-server/useUpdateMcpServer.js.map +1 -0
  209. package/package.json +8 -4
  210. package/resource-creation/CreationPicker.d.ts +60 -0
  211. package/resource-creation/CreationPicker.d.ts.map +1 -0
  212. package/resource-creation/CreationPicker.js +74 -0
  213. package/resource-creation/CreationPicker.js.map +1 -0
  214. package/resource-creation/StepIndicator.d.ts +28 -0
  215. package/resource-creation/StepIndicator.d.ts.map +1 -0
  216. package/resource-creation/StepIndicator.js +40 -0
  217. package/resource-creation/StepIndicator.js.map +1 -0
  218. package/resource-creation/TemplateCard.d.ts +24 -0
  219. package/resource-creation/TemplateCard.d.ts.map +1 -0
  220. package/resource-creation/TemplateCard.js +68 -0
  221. package/resource-creation/TemplateCard.js.map +1 -0
  222. package/resource-creation/TemplateGallery.d.ts +43 -0
  223. package/resource-creation/TemplateGallery.d.ts.map +1 -0
  224. package/resource-creation/TemplateGallery.js +78 -0
  225. package/resource-creation/TemplateGallery.js.map +1 -0
  226. package/resource-creation/WizardNav.d.ts +31 -0
  227. package/resource-creation/WizardNav.d.ts.map +1 -0
  228. package/resource-creation/WizardNav.js +29 -0
  229. package/resource-creation/WizardNav.js.map +1 -0
  230. package/resource-creation/WizardShell.d.ts +41 -0
  231. package/resource-creation/WizardShell.d.ts.map +1 -0
  232. package/resource-creation/WizardShell.js +55 -0
  233. package/resource-creation/WizardShell.js.map +1 -0
  234. package/resource-creation/index.d.ts +21 -0
  235. package/resource-creation/index.d.ts.map +1 -0
  236. package/resource-creation/index.js +14 -0
  237. package/resource-creation/index.js.map +1 -0
  238. package/resource-creation/templates/agent-templates.d.ts +15 -0
  239. package/resource-creation/templates/agent-templates.d.ts.map +1 -0
  240. package/resource-creation/templates/agent-templates.js +148 -0
  241. package/resource-creation/templates/agent-templates.js.map +1 -0
  242. package/resource-creation/templates/index.d.ts +5 -0
  243. package/resource-creation/templates/index.d.ts.map +1 -0
  244. package/resource-creation/templates/index.js +5 -0
  245. package/resource-creation/templates/index.js.map +1 -0
  246. package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
  247. package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
  248. package/resource-creation/templates/mcp-server-templates.js +92 -0
  249. package/resource-creation/templates/mcp-server-templates.js.map +1 -0
  250. package/resource-creation/templates/types.d.ts +48 -0
  251. package/resource-creation/templates/types.d.ts.map +1 -0
  252. package/resource-creation/templates/types.js +16 -0
  253. package/resource-creation/templates/types.js.map +1 -0
  254. package/resource-creation/types.d.ts +88 -0
  255. package/resource-creation/types.d.ts.map +1 -0
  256. package/resource-creation/types.js +2 -0
  257. package/resource-creation/types.js.map +1 -0
  258. package/resource-creation/useTemplateFilter.d.ts +43 -0
  259. package/resource-creation/useTemplateFilter.d.ts.map +1 -0
  260. package/resource-creation/useTemplateFilter.js +73 -0
  261. package/resource-creation/useTemplateFilter.js.map +1 -0
  262. package/resource-creation/useWizardState.d.ts +67 -0
  263. package/resource-creation/useWizardState.d.ts.map +1 -0
  264. package/resource-creation/useWizardState.js +143 -0
  265. package/resource-creation/useWizardState.js.map +1 -0
  266. package/resource-detail/ConfirmDialog.d.ts +44 -0
  267. package/resource-detail/ConfirmDialog.d.ts.map +1 -0
  268. package/resource-detail/ConfirmDialog.js +62 -0
  269. package/resource-detail/ConfirmDialog.js.map +1 -0
  270. package/resource-detail/ResourceActionBar.d.ts +42 -0
  271. package/resource-detail/ResourceActionBar.d.ts.map +1 -0
  272. package/resource-detail/ResourceActionBar.js +64 -0
  273. package/resource-detail/ResourceActionBar.js.map +1 -0
  274. package/resource-detail/ResourceDetailShell.d.ts +36 -0
  275. package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
  276. package/resource-detail/ResourceDetailShell.js +65 -0
  277. package/resource-detail/ResourceDetailShell.js.map +1 -0
  278. package/resource-detail/Section.d.ts +18 -0
  279. package/resource-detail/Section.d.ts.map +1 -0
  280. package/resource-detail/Section.js +18 -0
  281. package/resource-detail/Section.js.map +1 -0
  282. package/resource-detail/index.d.ts +15 -0
  283. package/resource-detail/index.d.ts.map +1 -0
  284. package/resource-detail/index.js +10 -0
  285. package/resource-detail/index.js.map +1 -0
  286. package/resource-detail/types.d.ts +146 -0
  287. package/resource-detail/types.d.ts.map +1 -0
  288. package/resource-detail/types.js +2 -0
  289. package/resource-detail/types.js.map +1 -0
  290. package/resource-detail/useConfirmAction.d.ts +41 -0
  291. package/resource-detail/useConfirmAction.d.ts.map +1 -0
  292. package/resource-detail/useConfirmAction.js +30 -0
  293. package/resource-detail/useConfirmAction.js.map +1 -0
  294. package/resource-detail/useCopyResource.d.ts +28 -0
  295. package/resource-detail/useCopyResource.d.ts.map +1 -0
  296. package/resource-detail/useCopyResource.js +46 -0
  297. package/resource-detail/useCopyResource.js.map +1 -0
  298. package/resource-detail/useDeleteResource.d.ts +40 -0
  299. package/resource-detail/useDeleteResource.d.ts.map +1 -0
  300. package/resource-detail/useDeleteResource.js +83 -0
  301. package/resource-detail/useDeleteResource.js.map +1 -0
  302. package/resource-detail/useDetailTabs.d.ts +46 -0
  303. package/resource-detail/useDetailTabs.d.ts.map +1 -0
  304. package/resource-detail/useDetailTabs.js +47 -0
  305. package/resource-detail/useDetailTabs.js.map +1 -0
  306. package/resource-workbench/components/BulkActionBar.d.ts +36 -0
  307. package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
  308. package/resource-workbench/components/BulkActionBar.js +35 -0
  309. package/resource-workbench/components/BulkActionBar.js.map +1 -0
  310. package/resource-workbench/components/ColumnHeader.d.ts +23 -0
  311. package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
  312. package/resource-workbench/components/ColumnHeader.js +25 -0
  313. package/resource-workbench/components/ColumnHeader.js.map +1 -0
  314. package/resource-workbench/components/FilterBar.d.ts +33 -0
  315. package/resource-workbench/components/FilterBar.d.ts.map +1 -0
  316. package/resource-workbench/components/FilterBar.js +72 -0
  317. package/resource-workbench/components/FilterBar.js.map +1 -0
  318. package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
  319. package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
  320. package/resource-workbench/components/ResourceAvatar.js +51 -0
  321. package/resource-workbench/components/ResourceAvatar.js.map +1 -0
  322. package/resource-workbench/components/ResourceCards.d.ts +39 -0
  323. package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
  324. package/resource-workbench/components/ResourceCards.js +41 -0
  325. package/resource-workbench/components/ResourceCards.js.map +1 -0
  326. package/resource-workbench/components/ResourceInspector.d.ts +26 -0
  327. package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
  328. package/resource-workbench/components/ResourceInspector.js +22 -0
  329. package/resource-workbench/components/ResourceInspector.js.map +1 -0
  330. package/resource-workbench/components/ResourceList.d.ts +39 -0
  331. package/resource-workbench/components/ResourceList.d.ts.map +1 -0
  332. package/resource-workbench/components/ResourceList.js +41 -0
  333. package/resource-workbench/components/ResourceList.js.map +1 -0
  334. package/resource-workbench/components/ResourceTable.d.ts +47 -0
  335. package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
  336. package/resource-workbench/components/ResourceTable.js +78 -0
  337. package/resource-workbench/components/ResourceTable.js.map +1 -0
  338. package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
  339. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
  340. package/resource-workbench/components/ResourceWorkbench.js +170 -0
  341. package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
  342. package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
  343. package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
  344. package/resource-workbench/components/SelectionCheckbox.js +16 -0
  345. package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
  346. package/resource-workbench/components/StatusBadge.d.ts +31 -0
  347. package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
  348. package/resource-workbench/components/StatusBadge.js +75 -0
  349. package/resource-workbench/components/StatusBadge.js.map +1 -0
  350. package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
  351. package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
  352. package/resource-workbench/components/ViewSwitcher.js +37 -0
  353. package/resource-workbench/components/ViewSwitcher.js.map +1 -0
  354. package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
  355. package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
  356. package/resource-workbench/hooks/useResourceCollection.js +133 -0
  357. package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
  358. package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
  359. package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
  360. package/resource-workbench/hooks/useResourceFilters.js +105 -0
  361. package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
  362. package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
  363. package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
  364. package/resource-workbench/hooks/useResourceSelection.js +123 -0
  365. package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
  366. package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
  367. package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
  368. package/resource-workbench/hooks/useViewPreference.js +60 -0
  369. package/resource-workbench/hooks/useViewPreference.js.map +1 -0
  370. package/resource-workbench/index.d.ts +34 -0
  371. package/resource-workbench/index.d.ts.map +1 -0
  372. package/resource-workbench/index.js +19 -0
  373. package/resource-workbench/index.js.map +1 -0
  374. package/resource-workbench/types.d.ts +165 -0
  375. package/resource-workbench/types.d.ts.map +1 -0
  376. package/resource-workbench/types.js +2 -0
  377. package/resource-workbench/types.js.map +1 -0
  378. package/runner/RunnerDetailView.d.ts +44 -0
  379. package/runner/RunnerDetailView.d.ts.map +1 -0
  380. package/runner/RunnerDetailView.js +154 -0
  381. package/runner/RunnerDetailView.js.map +1 -0
  382. package/runner/RunnerListPanel.d.ts +26 -1
  383. package/runner/RunnerListPanel.d.ts.map +1 -1
  384. package/runner/RunnerListPanel.js +68 -46
  385. package/runner/RunnerListPanel.js.map +1 -1
  386. package/runner/index.d.ts +7 -1
  387. package/runner/index.d.ts.map +1 -1
  388. package/runner/index.js +3 -0
  389. package/runner/index.js.map +1 -1
  390. package/runner/shared.d.ts +31 -0
  391. package/runner/shared.d.ts.map +1 -0
  392. package/runner/shared.js +55 -0
  393. package/runner/shared.js.map +1 -0
  394. package/runner/useRunner.d.ts +37 -0
  395. package/runner/useRunner.d.ts.map +1 -0
  396. package/runner/useRunner.js +24 -0
  397. package/runner/useRunner.js.map +1 -0
  398. package/session/__tests__/group-sessions.test.js +3 -3
  399. package/session/__tests__/group-sessions.test.js.map +1 -1
  400. package/skill/SkillDetailView.d.ts +70 -7
  401. package/skill/SkillDetailView.d.ts.map +1 -1
  402. package/skill/SkillDetailView.js +107 -39
  403. package/skill/SkillDetailView.js.map +1 -1
  404. package/skill/SkillDiffDialog.d.ts +42 -0
  405. package/skill/SkillDiffDialog.d.ts.map +1 -0
  406. package/skill/SkillDiffDialog.js +72 -0
  407. package/skill/SkillDiffDialog.js.map +1 -0
  408. package/skill/SkillFileBrowser.d.ts +31 -0
  409. package/skill/SkillFileBrowser.d.ts.map +1 -0
  410. package/skill/SkillFileBrowser.js +105 -0
  411. package/skill/SkillFileBrowser.js.map +1 -0
  412. package/skill/SkillUploader.d.ts +39 -0
  413. package/skill/SkillUploader.d.ts.map +1 -0
  414. package/skill/SkillUploader.js +141 -0
  415. package/skill/SkillUploader.js.map +1 -0
  416. package/skill/index.d.ts +18 -0
  417. package/skill/index.d.ts.map +1 -1
  418. package/skill/index.js +9 -0
  419. package/skill/index.js.map +1 -1
  420. package/skill/internal/computeArtifactHash.d.ts +9 -0
  421. package/skill/internal/computeArtifactHash.d.ts.map +1 -0
  422. package/skill/internal/computeArtifactHash.js +14 -0
  423. package/skill/internal/computeArtifactHash.js.map +1 -0
  424. package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
  425. package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
  426. package/skill/internal/fetchAndUnpackArtifact.js +34 -0
  427. package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
  428. package/skill/usePushSkill.d.ts +53 -0
  429. package/skill/usePushSkill.d.ts.map +1 -0
  430. package/skill/usePushSkill.js +57 -0
  431. package/skill/usePushSkill.js.map +1 -0
  432. package/skill/useSkillArtifact.d.ts +37 -0
  433. package/skill/useSkillArtifact.d.ts.map +1 -0
  434. package/skill/useSkillArtifact.js +76 -0
  435. package/skill/useSkillArtifact.js.map +1 -0
  436. package/skill/useSkillDiff.d.ts +31 -0
  437. package/skill/useSkillDiff.d.ts.map +1 -0
  438. package/skill/useSkillDiff.js +97 -0
  439. package/skill/useSkillDiff.js.map +1 -0
  440. package/skill/useSkillDuplicateCheck.d.ts +34 -0
  441. package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
  442. package/skill/useSkillDuplicateCheck.js +58 -0
  443. package/skill/useSkillDuplicateCheck.js.map +1 -0
  444. package/skill/useSkillUpload.d.ts +69 -0
  445. package/skill/useSkillUpload.d.ts.map +1 -0
  446. package/skill/useSkillUpload.js +157 -0
  447. package/skill/useSkillUpload.js.map +1 -0
  448. package/skill/useSkillVersions.d.ts +46 -0
  449. package/skill/useSkillVersions.d.ts.map +1 -0
  450. package/skill/useSkillVersions.js +104 -0
  451. package/skill/useSkillVersions.js.map +1 -0
  452. package/src/action-menu/ActionMenu.tsx +151 -0
  453. package/src/action-menu/index.ts +9 -0
  454. package/src/action-menu/types.ts +70 -0
  455. package/src/agent/AgentCreationWizard.tsx +201 -0
  456. package/src/agent/AgentDetailView.tsx +817 -321
  457. package/src/agent/index.ts +16 -0
  458. package/src/agent/internal/agentToInput.ts +95 -0
  459. package/src/agent/steps/CapabilitiesStep.tsx +363 -0
  460. package/src/agent/steps/IdentityStep.tsx +259 -0
  461. package/src/agent/steps/ReviewStep.tsx +211 -0
  462. package/src/agent/steps/types.ts +53 -0
  463. package/src/agent/useCreateAgent.ts +76 -0
  464. package/src/agent/useUpdateAgent.ts +55 -0
  465. package/src/dependency-graph/DependencyGraph.tsx +153 -0
  466. package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
  467. package/src/dependency-graph/index.ts +15 -0
  468. package/src/dependency-graph/types.ts +131 -0
  469. package/src/dependency-graph/useDependencyGraph.ts +158 -0
  470. package/src/empty-state/EmptyState.tsx +90 -0
  471. package/src/empty-state/index.ts +9 -0
  472. package/src/empty-state/types.ts +81 -0
  473. package/src/empty-state/useEmptyState.ts +85 -0
  474. package/src/feedback/StigmerToaster.tsx +45 -0
  475. package/src/feedback/index.ts +3 -0
  476. package/src/feedback/toast.ts +13 -0
  477. package/src/feedback/types.ts +7 -0
  478. package/src/index.ts +270 -8
  479. package/src/inline-edit/InlineEditImage.tsx +208 -0
  480. package/src/inline-edit/InlineEditKeyValue.tsx +278 -0
  481. package/src/inline-edit/InlineEditResourceList.tsx +325 -0
  482. package/src/inline-edit/InlineEditSelect.tsx +150 -0
  483. package/src/inline-edit/InlineEditText.tsx +211 -0
  484. package/src/inline-edit/InlineEditTextarea.tsx +209 -0
  485. package/src/inline-edit/index.ts +28 -0
  486. package/src/inline-edit/types.ts +47 -0
  487. package/src/inline-edit/useInlineFieldSave.ts +62 -0
  488. package/src/internal/Tabs.tsx +4 -164
  489. package/src/library/ImportResourceDialog.tsx +227 -0
  490. package/src/library/index.ts +18 -8
  491. package/src/library/serialize-resource-yaml.ts +356 -0
  492. package/src/library/useExportResource.ts +183 -0
  493. package/src/library/useImportResource.ts +253 -0
  494. package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
  495. package/src/mcp-server/McpServerDetailView.tsx +392 -105
  496. package/src/mcp-server/index.ts +16 -0
  497. package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
  498. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
  499. package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
  500. package/src/mcp-server/steps/ReviewStep.tsx +297 -0
  501. package/src/mcp-server/steps/types.ts +85 -0
  502. package/src/mcp-server/useCreateMcpServer.ts +76 -0
  503. package/src/mcp-server/useUpdateMcpServer.ts +55 -0
  504. package/src/resource-creation/CreationPicker.tsx +292 -0
  505. package/src/resource-creation/StepIndicator.tsx +156 -0
  506. package/src/resource-creation/TemplateCard.tsx +143 -0
  507. package/src/resource-creation/TemplateGallery.tsx +222 -0
  508. package/src/resource-creation/WizardNav.tsx +163 -0
  509. package/src/resource-creation/WizardShell.tsx +124 -0
  510. package/src/resource-creation/index.ts +45 -0
  511. package/src/resource-creation/templates/agent-templates.ts +160 -0
  512. package/src/resource-creation/templates/index.ts +7 -0
  513. package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
  514. package/src/resource-creation/templates/types.ts +64 -0
  515. package/src/resource-creation/types.ts +105 -0
  516. package/src/resource-creation/useTemplateFilter.ts +117 -0
  517. package/src/resource-creation/useWizardState.ts +223 -0
  518. package/src/resource-detail/ConfirmDialog.tsx +127 -0
  519. package/src/resource-detail/ResourceActionBar.tsx +157 -0
  520. package/src/resource-detail/ResourceDetailShell.tsx +184 -0
  521. package/src/resource-detail/Section.tsx +78 -0
  522. package/src/resource-detail/index.ts +34 -0
  523. package/src/resource-detail/types.ts +177 -0
  524. package/src/resource-detail/useConfirmAction.ts +70 -0
  525. package/src/resource-detail/useCopyResource.ts +74 -0
  526. package/src/resource-detail/useDeleteResource.ts +110 -0
  527. package/src/resource-detail/useDetailTabs.ts +93 -0
  528. package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
  529. package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
  530. package/src/resource-workbench/components/FilterBar.tsx +173 -0
  531. package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
  532. package/src/resource-workbench/components/ResourceCards.tsx +126 -0
  533. package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
  534. package/src/resource-workbench/components/ResourceList.tsx +121 -0
  535. package/src/resource-workbench/components/ResourceTable.tsx +222 -0
  536. package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
  537. package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
  538. package/src/resource-workbench/components/StatusBadge.tsx +119 -0
  539. package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
  540. package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
  541. package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
  542. package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
  543. package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
  544. package/src/resource-workbench/index.ts +73 -0
  545. package/src/resource-workbench/types.ts +220 -0
  546. package/src/runner/RunnerDetailView.tsx +410 -0
  547. package/src/runner/RunnerListPanel.tsx +126 -111
  548. package/src/runner/index.ts +13 -1
  549. package/src/runner/shared.tsx +124 -0
  550. package/src/runner/useRunner.ts +59 -0
  551. package/src/session/__tests__/group-sessions.test.ts +5 -3
  552. package/src/skill/SkillDetailView.tsx +371 -165
  553. package/src/skill/SkillDiffDialog.tsx +213 -0
  554. package/src/skill/SkillFileBrowser.tsx +289 -0
  555. package/src/skill/SkillUploader.tsx +481 -0
  556. package/src/skill/index.ts +34 -0
  557. package/src/skill/internal/computeArtifactHash.ts +13 -0
  558. package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
  559. package/src/skill/usePushSkill.ts +101 -0
  560. package/src/skill/useSkillArtifact.ts +107 -0
  561. package/src/skill/useSkillDiff.ts +128 -0
  562. package/src/skill/useSkillDuplicateCheck.ts +92 -0
  563. package/src/skill/useSkillUpload.ts +231 -0
  564. package/src/skill/useSkillVersions.ts +165 -0
  565. package/src/styles.css +28 -0
  566. package/src/tabs/Tabs.tsx +184 -0
  567. package/src/tabs/index.ts +2 -0
  568. package/src/version-history/DiffFileList.tsx +111 -0
  569. package/src/version-history/DiffSummary.tsx +61 -0
  570. package/src/version-history/DiffViewer.tsx +163 -0
  571. package/src/version-history/MultiFileDiffView.tsx +114 -0
  572. package/src/version-history/VersionTimeline.tsx +232 -0
  573. package/src/version-history/VersionTimelineEntry.tsx +254 -0
  574. package/src/version-history/computeDiff.ts +61 -0
  575. package/src/version-history/computeMultiFileDiff.ts +97 -0
  576. package/src/version-history/index.ts +22 -0
  577. package/src/version-history/types.ts +129 -0
  578. package/styles.css +1 -1
  579. package/tabs/Tabs.d.ts +58 -0
  580. package/tabs/Tabs.d.ts.map +1 -0
  581. package/tabs/Tabs.js +80 -0
  582. package/tabs/Tabs.js.map +1 -0
  583. package/tabs/index.d.ts +3 -0
  584. package/tabs/index.d.ts.map +1 -0
  585. package/tabs/index.js +2 -0
  586. package/tabs/index.js.map +1 -0
  587. package/version-history/DiffFileList.d.ts +22 -0
  588. package/version-history/DiffFileList.d.ts.map +1 -0
  589. package/version-history/DiffFileList.js +37 -0
  590. package/version-history/DiffFileList.js.map +1 -0
  591. package/version-history/DiffSummary.d.ts +21 -0
  592. package/version-history/DiffSummary.d.ts.map +1 -0
  593. package/version-history/DiffSummary.js +16 -0
  594. package/version-history/DiffSummary.js.map +1 -0
  595. package/version-history/DiffViewer.d.ts +31 -0
  596. package/version-history/DiffViewer.d.ts.map +1 -0
  597. package/version-history/DiffViewer.js +60 -0
  598. package/version-history/DiffViewer.js.map +1 -0
  599. package/version-history/MultiFileDiffView.d.ts +30 -0
  600. package/version-history/MultiFileDiffView.d.ts.map +1 -0
  601. package/version-history/MultiFileDiffView.js +40 -0
  602. package/version-history/MultiFileDiffView.js.map +1 -0
  603. package/version-history/VersionTimeline.d.ts +29 -0
  604. package/version-history/VersionTimeline.d.ts.map +1 -0
  605. package/version-history/VersionTimeline.js +87 -0
  606. package/version-history/VersionTimeline.js.map +1 -0
  607. package/version-history/VersionTimelineEntry.d.ts +22 -0
  608. package/version-history/VersionTimelineEntry.d.ts.map +1 -0
  609. package/version-history/VersionTimelineEntry.js +98 -0
  610. package/version-history/VersionTimelineEntry.js.map +1 -0
  611. package/version-history/computeDiff.d.ts +16 -0
  612. package/version-history/computeDiff.d.ts.map +1 -0
  613. package/version-history/computeDiff.js +54 -0
  614. package/version-history/computeDiff.js.map +1 -0
  615. package/version-history/computeMultiFileDiff.d.ts +15 -0
  616. package/version-history/computeMultiFileDiff.d.ts.map +1 -0
  617. package/version-history/computeMultiFileDiff.js +83 -0
  618. package/version-history/computeMultiFileDiff.js.map +1 -0
  619. package/version-history/index.d.ts +14 -0
  620. package/version-history/index.d.ts.map +1 -0
  621. package/version-history/index.js +9 -0
  622. package/version-history/index.js.map +1 -0
  623. package/version-history/types.d.ts +106 -0
  624. package/version-history/types.d.ts.map +1 -0
  625. package/version-history/types.js +2 -0
  626. package/version-history/types.js.map +1 -0
  627. package/library/ResourceListView.d.ts +0 -174
  628. package/library/ResourceListView.d.ts.map +0 -1
  629. package/library/ResourceListView.js +0 -318
  630. package/library/ResourceListView.js.map +0 -1
  631. package/src/library/ResourceListView.tsx +0 -956
@@ -22,6 +22,8 @@ import {
22
22
  phaseDotColor,
23
23
  PHASE_SORT_ORDER,
24
24
  } from "./phase";
25
+ import { EmptyState } from "../empty-state";
26
+ import { RunnerIcon, PhaseBadge, formatRelativeTime } from "./shared";
25
27
 
26
28
  const SYSTEM_MANAGED_LABEL = "stigmer.ai/system-managed";
27
29
  const TRANSITIONAL_POLL_MS = 5_000;
@@ -35,6 +37,9 @@ type ConfirmingState = {
35
37
  // Public API
36
38
  // ---------------------------------------------------------------------------
37
39
 
40
+ /** Sort key for the runner list. */
41
+ export type RunnerSortKey = "phase" | "name" | "heartbeat" | "executions";
42
+
38
43
  /** Props for {@link RunnerListPanel}. */
39
44
  export interface RunnerListPanelProps {
40
45
  /** Organization slug to scope the runner list. */
@@ -50,6 +55,28 @@ export interface RunnerListPanelProps {
50
55
  * @default false
51
56
  */
52
57
  readonly includeSystemManaged?: boolean;
58
+ /**
59
+ * Restrict the list to runners in the specified phases.
60
+ *
61
+ * When provided, only runners whose phase is in this array are shown.
62
+ * When omitted or empty, all phases are included.
63
+ */
64
+ readonly filterPhases?: readonly RunnerPhase[];
65
+ /**
66
+ * Client-side text filter. When provided, only runners whose name
67
+ * or hostname contains this substring (case-insensitive) are shown.
68
+ */
69
+ readonly searchQuery?: string;
70
+ /**
71
+ * Sort key for ordering the runner list.
72
+ * @default "phase"
73
+ */
74
+ readonly sortBy?: RunnerSortKey;
75
+ /**
76
+ * Sort direction.
77
+ * @default "asc"
78
+ */
79
+ readonly sortDirection?: "asc" | "desc";
53
80
  /** Expose refetch so parent components can trigger a list refresh. */
54
81
  readonly onRefetchRef?: (refetch: () => void) => void;
55
82
  /**
@@ -106,6 +133,10 @@ export interface RunnerListPanelProps {
106
133
  export function RunnerListPanel({
107
134
  org,
108
135
  includeSystemManaged = false,
136
+ filterPhases,
137
+ searchQuery,
138
+ sortBy = "phase",
139
+ sortDirection = "asc",
109
140
  onRefetchRef,
110
141
  onStopped,
111
142
  onDeleted,
@@ -130,10 +161,33 @@ export function RunnerListPanel({
130
161
  onRefetchRef(refetch);
131
162
  }
132
163
 
133
- const sorted = useMemo(
134
- () => [...runners].sort(phaseThenName),
135
- [runners],
136
- );
164
+ const hasActiveFilters =
165
+ (filterPhases != null && filterPhases.length > 0) ||
166
+ (searchQuery != null && searchQuery.trim().length > 0);
167
+
168
+ const sorted = useMemo(() => {
169
+ let result = [...runners];
170
+
171
+ if (filterPhases != null && filterPhases.length > 0) {
172
+ const phaseSet = new Set(filterPhases);
173
+ result = result.filter((r) =>
174
+ phaseSet.has(r.status?.phase ?? RunnerPhase.UNSPECIFIED),
175
+ );
176
+ }
177
+
178
+ if (searchQuery != null && searchQuery.trim().length > 0) {
179
+ const q = searchQuery.trim().toLowerCase();
180
+ result = result.filter((r) => {
181
+ const name = (r.metadata?.name ?? "").toLowerCase();
182
+ const hostname = (r.status?.connectionInfo?.hostname ?? "").toLowerCase();
183
+ return name.includes(q) || hostname.includes(q);
184
+ });
185
+ }
186
+
187
+ const comparator = buildComparator(sortBy, sortDirection);
188
+ result.sort(comparator);
189
+ return result;
190
+ }, [runners, filterPhases, searchQuery, sortBy, sortDirection]);
137
191
 
138
192
  const handleRequestConfirm = useCallback(
139
193
  (runnerId: string, action: "stop" | "delete") => {
@@ -175,31 +229,35 @@ export function RunnerListPanel({
175
229
 
176
230
  if (error) {
177
231
  return (
178
- <p className={cn("text-destructive text-xs", className)} role="alert">
179
- {getUserMessage(error)}
180
- </p>
232
+ <div className={className}>
233
+ <EmptyState
234
+ variant="error"
235
+ resourceLabel="runners"
236
+ errorMessage={getUserMessage(error)}
237
+ action={{ label: "Retry", onClick: refetch }}
238
+ />
239
+ </div>
181
240
  );
182
241
  }
183
242
 
184
243
  if (sorted.length === 0) {
185
244
  return (
186
- <div
187
- className={cn(
188
- "flex flex-col items-center gap-2 py-8 text-center",
189
- className,
190
- )}
191
- >
192
- <RunnerIcon size={24} />
193
- <p className="text-muted-foreground text-xs">
194
- No runners registered.
195
- </p>
196
- <p className="text-muted-foreground-subtle max-w-xs text-[0.65rem]">
197
- Start a runner with{" "}
198
- <code className="bg-muted rounded px-1 py-0.5 font-mono text-[0.6rem]">
199
- stigmer up
200
- </code>{" "}
201
- or launch one from your browser with the button above.
202
- </p>
245
+ <div className={className}>
246
+ <EmptyState
247
+ variant={hasActiveFilters ? "zero-results" : "first-use"}
248
+ resourceLabel="runners"
249
+ icon={hasActiveFilters ? undefined : <RunnerIcon size={24} />}
250
+ title={
251
+ hasActiveFilters
252
+ ? "No runners match your filters"
253
+ : undefined
254
+ }
255
+ description={
256
+ hasActiveFilters
257
+ ? "Try adjusting your search or removing some filters."
258
+ : "Start a runner with stigmer up or launch one from your browser."
259
+ }
260
+ />
203
261
  </div>
204
262
  );
205
263
  }
@@ -571,106 +629,63 @@ function ActionMenu({
571
629
  );
572
630
  }
573
631
 
574
- // ---------------------------------------------------------------------------
575
- // PhaseBadge (internal)
576
- // ---------------------------------------------------------------------------
577
-
578
- function PhaseBadge({ phase }: { phase: RunnerPhase }) {
579
- const starting = phase === RunnerPhase.STARTING;
580
- return (
581
- <span className="inline-flex shrink-0 items-center gap-1">
582
- {starting ? (
583
- <span
584
- className="inline-block h-2.5 w-2.5 animate-spin rounded-full border border-primary border-t-transparent"
585
- aria-hidden="true"
586
- />
587
- ) : (
588
- <span
589
- className={`inline-block h-1.5 w-1.5 rounded-full ${phaseDotColor(phase)}`}
590
- aria-hidden="true"
591
- />
592
- )}
593
- <span className={cn("text-[0.65rem]", starting ? "text-primary" : "text-muted-foreground")}>
594
- {phaseLabel(phase)}
595
- </span>
596
- </span>
597
- );
598
- }
599
-
600
632
  // ---------------------------------------------------------------------------
601
633
  // Utilities
602
634
  // ---------------------------------------------------------------------------
603
635
 
604
- function phaseThenName(a: Runner, b: Runner): number {
605
- const pa = a.status?.phase ?? RunnerPhase.UNSPECIFIED;
606
- const pb = b.status?.phase ?? RunnerPhase.UNSPECIFIED;
607
- const order = PHASE_SORT_ORDER[pa] - PHASE_SORT_ORDER[pb];
608
- if (order !== 0) return order;
609
- return (a.metadata?.name ?? "").localeCompare(b.metadata?.name ?? "");
610
- }
611
-
612
- function formatRelativeTime(date: Date): string {
613
- const diffMs = Date.now() - date.getTime();
636
+ function buildComparator(
637
+ sortBy: RunnerSortKey,
638
+ direction: "asc" | "desc",
639
+ ): (a: Runner, b: Runner) => number {
640
+ const dir = direction === "desc" ? -1 : 1;
614
641
 
615
- if (diffMs < 0) return "just now";
642
+ return (a, b) => {
643
+ let order: number;
616
644
 
617
- const seconds = Math.floor(diffMs / 1000);
618
- if (seconds < 60) return "just now";
619
-
620
- const minutes = Math.floor(seconds / 60);
621
- if (minutes < 60) return `${minutes}m ago`;
622
-
623
- const hours = Math.floor(minutes / 60);
624
- if (hours < 24) return `${hours}h ago`;
645
+ switch (sortBy) {
646
+ case "name":
647
+ order = (a.metadata?.name ?? "").localeCompare(
648
+ b.metadata?.name ?? "",
649
+ );
650
+ break;
651
+
652
+ case "heartbeat": {
653
+ const ha = a.status?.lastHeartbeatAt;
654
+ const hb = b.status?.lastHeartbeatAt;
655
+ const ta = ha ? timestampDate(ha).getTime() : 0;
656
+ const tb = hb ? timestampDate(hb).getTime() : 0;
657
+ order = ta - tb;
658
+ break;
659
+ }
625
660
 
626
- const days = Math.floor(hours / 24);
627
- if (days < 30) return `${days}d ago`;
661
+ case "executions":
662
+ order =
663
+ (a.status?.currentExecutions ?? 0) -
664
+ (b.status?.currentExecutions ?? 0);
665
+ break;
666
+
667
+ case "phase":
668
+ default: {
669
+ const pa = a.status?.phase ?? RunnerPhase.UNSPECIFIED;
670
+ const pb = b.status?.phase ?? RunnerPhase.UNSPECIFIED;
671
+ order = PHASE_SORT_ORDER[pa] - PHASE_SORT_ORDER[pb];
672
+ if (order !== 0) return order * dir;
673
+ return (a.metadata?.name ?? "").localeCompare(
674
+ b.metadata?.name ?? "",
675
+ );
676
+ }
677
+ }
628
678
 
629
- return date.toLocaleDateString(undefined, {
630
- month: "short",
631
- day: "numeric",
632
- year: "numeric",
633
- });
679
+ if (order !== 0) return order * dir;
680
+ // Stable secondary sort by name
681
+ return (a.metadata?.name ?? "").localeCompare(b.metadata?.name ?? "");
682
+ };
634
683
  }
635
684
 
636
685
  // ---------------------------------------------------------------------------
637
- // Icons
686
+ // Icons (internal to RunnerListPanel)
638
687
  // ---------------------------------------------------------------------------
639
688
 
640
- function RunnerIcon({
641
- size = 14,
642
- className,
643
- }: {
644
- size?: number;
645
- className?: string;
646
- }) {
647
- return (
648
- <svg
649
- width={size}
650
- height={size}
651
- viewBox="0 0 24 24"
652
- fill="none"
653
- stroke="currentColor"
654
- strokeWidth="2"
655
- strokeLinecap="round"
656
- strokeLinejoin="round"
657
- aria-hidden="true"
658
- className={cn("shrink-0 text-muted-foreground", className)}
659
- >
660
- <rect x="4" y="4" width="16" height="16" rx="2" />
661
- <rect x="9" y="9" width="6" height="6" />
662
- <path d="M15 2v2" />
663
- <path d="M15 20v2" />
664
- <path d="M2 15h2" />
665
- <path d="M2 9h2" />
666
- <path d="M20 15h2" />
667
- <path d="M20 9h2" />
668
- <path d="M9 2v2" />
669
- <path d="M9 20v2" />
670
- </svg>
671
- );
672
- }
673
-
674
689
  function MoreVerticalIcon() {
675
690
  return (
676
691
  <svg
@@ -1,3 +1,12 @@
1
+ export { useRunner } from "./useRunner";
2
+ export type {
3
+ UseRunnerReturn,
4
+ UseRunnerOptions,
5
+ } from "./useRunner";
6
+
7
+ export { RunnerDetailView } from "./RunnerDetailView";
8
+ export type { RunnerDetailViewProps } from "./RunnerDetailView";
9
+
1
10
  export { useRunnerList } from "./useRunnerList";
2
11
  export type {
3
12
  UseRunnerListOptions,
@@ -39,7 +48,7 @@ export type {
39
48
  } from "./useRunnerFileBrowser";
40
49
 
41
50
  export { RunnerListPanel } from "./RunnerListPanel";
42
- export type { RunnerListPanelProps } from "./RunnerListPanel";
51
+ export type { RunnerListPanelProps, RunnerSortKey } from "./RunnerListPanel";
43
52
 
44
53
  export { WorkspaceRunnerSelector } from "./WorkspaceRunnerSelector";
45
54
  export type { WorkspaceRunnerSelectorProps } from "./WorkspaceRunnerSelector";
@@ -51,3 +60,6 @@ export {
51
60
  isTransitionalPhase,
52
61
  PHASE_SORT_ORDER,
53
62
  } from "./phase";
63
+
64
+ export { RunnerIcon, PhaseBadge, formatRelativeTime } from "./shared";
65
+ export type { RunnerIconProps, PhaseBadgeProps } from "./shared";
@@ -0,0 +1,124 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+ import { RunnerPhase } from "@stigmer/protos/ai/stigmer/agentic/runner/v1/enum_pb";
5
+ import { phaseLabel, phaseDotColor } from "./phase";
6
+
7
+ // ---------------------------------------------------------------------------
8
+ // RunnerIcon
9
+ // ---------------------------------------------------------------------------
10
+
11
+ /** Props for {@link RunnerIcon}. */
12
+ export interface RunnerIconProps {
13
+ readonly size?: number;
14
+ readonly className?: string;
15
+ }
16
+
17
+ /**
18
+ * CPU-chip icon representing a runner. Used across the runner list,
19
+ * fleet section, and empty states.
20
+ */
21
+ export function RunnerIcon({ size = 14, className }: RunnerIconProps) {
22
+ return (
23
+ <svg
24
+ width={size}
25
+ height={size}
26
+ viewBox="0 0 24 24"
27
+ fill="none"
28
+ stroke="currentColor"
29
+ strokeWidth="2"
30
+ strokeLinecap="round"
31
+ strokeLinejoin="round"
32
+ aria-hidden="true"
33
+ className={cn("shrink-0 text-muted-foreground", className)}
34
+ >
35
+ <rect x="4" y="4" width="16" height="16" rx="2" />
36
+ <rect x="9" y="9" width="6" height="6" />
37
+ <path d="M15 2v2" />
38
+ <path d="M15 20v2" />
39
+ <path d="M2 15h2" />
40
+ <path d="M2 9h2" />
41
+ <path d="M20 15h2" />
42
+ <path d="M20 9h2" />
43
+ <path d="M9 2v2" />
44
+ <path d="M9 20v2" />
45
+ </svg>
46
+ );
47
+ }
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // PhaseBadge
51
+ // ---------------------------------------------------------------------------
52
+
53
+ /** Props for {@link PhaseBadge}. */
54
+ export interface PhaseBadgeProps {
55
+ readonly phase: RunnerPhase;
56
+ }
57
+
58
+ /**
59
+ * Compact badge showing a colored dot indicator and label for a runner
60
+ * phase. Renders a spinning indicator for the STARTING phase.
61
+ */
62
+ export function PhaseBadge({ phase }: PhaseBadgeProps) {
63
+ const starting = phase === RunnerPhase.STARTING;
64
+ return (
65
+ <span className="inline-flex shrink-0 items-center gap-1">
66
+ {starting ? (
67
+ <span
68
+ className="inline-block h-2.5 w-2.5 animate-spin rounded-full border border-primary border-t-transparent"
69
+ aria-hidden="true"
70
+ />
71
+ ) : (
72
+ <span
73
+ className={`inline-block h-1.5 w-1.5 rounded-full ${phaseDotColor(phase)}`}
74
+ aria-hidden="true"
75
+ />
76
+ )}
77
+ <span
78
+ className={cn(
79
+ "text-[0.65rem]",
80
+ starting ? "text-primary" : "text-muted-foreground",
81
+ )}
82
+ >
83
+ {phaseLabel(phase)}
84
+ </span>
85
+ </span>
86
+ );
87
+ }
88
+
89
+ // ---------------------------------------------------------------------------
90
+ // formatRelativeTime
91
+ // ---------------------------------------------------------------------------
92
+
93
+ /**
94
+ * Formats a Date as a compact relative time string.
95
+ *
96
+ * - < 60s → "just now"
97
+ * - < 60m → "5m ago"
98
+ * - < 24h → "3h ago"
99
+ * - < 30d → "12d ago"
100
+ * - otherwise → locale short date
101
+ */
102
+ export function formatRelativeTime(date: Date): string {
103
+ const diffMs = Date.now() - date.getTime();
104
+
105
+ if (diffMs < 0) return "just now";
106
+
107
+ const seconds = Math.floor(diffMs / 1000);
108
+ if (seconds < 60) return "just now";
109
+
110
+ const minutes = Math.floor(seconds / 60);
111
+ if (minutes < 60) return `${minutes}m ago`;
112
+
113
+ const hours = Math.floor(minutes / 60);
114
+ if (hours < 24) return `${hours}h ago`;
115
+
116
+ const days = Math.floor(hours / 24);
117
+ if (days < 30) return `${days}d ago`;
118
+
119
+ return date.toLocaleDateString(undefined, {
120
+ month: "short",
121
+ day: "numeric",
122
+ year: "numeric",
123
+ });
124
+ }
@@ -0,0 +1,59 @@
1
+ "use client";
2
+
3
+ import type { Runner } from "@stigmer/protos/ai/stigmer/agentic/runner/v1/api_pb";
4
+ import { useStigmer } from "../hooks";
5
+ import { useFetch, type UseFetchOptions } from "../internal/useFetch";
6
+
7
+ /** Return value of {@link useRunner}. */
8
+ export interface UseRunnerReturn {
9
+ /** The fetched runner, or `null` while loading or on error. */
10
+ readonly runner: Runner | null;
11
+ /** `true` while the initial fetch is in flight. */
12
+ readonly isLoading: boolean;
13
+ /** Error from the last failed fetch, or `null` when healthy. */
14
+ readonly error: Error | null;
15
+ /** Discard cached data and re-fetch the runner from the server. */
16
+ readonly refetch: () => void;
17
+ }
18
+
19
+ /** Options for {@link useRunner}. */
20
+ export interface UseRunnerOptions {
21
+ /**
22
+ * Poll interval in milliseconds for automatic re-fetching.
23
+ *
24
+ * Useful for monitoring runner status transitions (e.g. Starting
25
+ * to Ready) without requiring manual refresh.
26
+ */
27
+ readonly refetchInterval?: UseFetchOptions["refetchInterval"];
28
+ }
29
+
30
+ /**
31
+ * Data hook that fetches a single runner by ID.
32
+ *
33
+ * Calls `stigmer.runner.get(id)` and returns the result with
34
+ * loading/error state. Returns `null` runner when `id` is `null`
35
+ * (no runner selected).
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * const { runner, isLoading, error } = useRunner(runnerId);
40
+ * ```
41
+ */
42
+ export function useRunner(
43
+ id: string | null,
44
+ options?: UseRunnerOptions,
45
+ ): UseRunnerReturn {
46
+ const stigmer = useStigmer();
47
+ const refetchInterval = options?.refetchInterval;
48
+
49
+ const { data: runner, isLoading, error, refetch } = useFetch(
50
+ id
51
+ ? async () => stigmer.runner.get(id)
52
+ : null,
53
+ [stigmer, id],
54
+ null as Runner | null,
55
+ { refetchInterval },
56
+ );
57
+
58
+ return { runner, isLoading, error, refetch };
59
+ }
@@ -1,9 +1,11 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import { create } from "@bufbuild/protobuf";
3
3
  import { timestampFromDate } from "@bufbuild/protobuf/wkt";
4
- import { SessionSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
5
4
  import {
6
- ApiResourceAuditStatusSchema,
5
+ SessionSchema,
6
+ SessionStatusSchema,
7
+ } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
8
+ import {
7
9
  ApiResourceAuditSchema,
8
10
  ApiResourceAuditInfoSchema,
9
11
  } from "@stigmer/protos/ai/stigmer/commons/apiresource/status_pb";
@@ -18,7 +20,7 @@ function makeSession(date: Date | null) {
18
20
  auditInfo.createdAt = timestampFromDate(date);
19
21
  const audit = create(ApiResourceAuditSchema);
20
22
  audit.specAudit = auditInfo;
21
- const status = create(ApiResourceAuditStatusSchema);
23
+ const status = create(SessionStatusSchema);
22
24
  status.audit = audit;
23
25
  session.status = status;
24
26
  }