@stigmer/react 0.4.7 → 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 (652) 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/execution/MessageThread.d.ts +1 -0
  90. package/execution/MessageThread.d.ts.map +1 -1
  91. package/execution/MessageThread.js +22 -12
  92. package/execution/MessageThread.js.map +1 -1
  93. package/execution/SetupProgress.d.ts +23 -9
  94. package/execution/SetupProgress.d.ts.map +1 -1
  95. package/execution/SetupProgress.js +30 -14
  96. package/execution/SetupProgress.js.map +1 -1
  97. package/execution/__tests__/thread-keys.test.js +82 -0
  98. package/execution/__tests__/thread-keys.test.js.map +1 -1
  99. package/feedback/StigmerToaster.d.ts +18 -0
  100. package/feedback/StigmerToaster.d.ts.map +1 -0
  101. package/feedback/StigmerToaster.js +31 -0
  102. package/feedback/StigmerToaster.js.map +1 -0
  103. package/feedback/index.d.ts +4 -0
  104. package/feedback/index.d.ts.map +1 -0
  105. package/feedback/index.js +3 -0
  106. package/feedback/index.js.map +1 -0
  107. package/feedback/toast.d.ts +14 -0
  108. package/feedback/toast.d.ts.map +1 -0
  109. package/feedback/toast.js +14 -0
  110. package/feedback/toast.js.map +1 -0
  111. package/feedback/types.d.ts +4 -0
  112. package/feedback/types.d.ts.map +1 -0
  113. package/feedback/types.js +2 -0
  114. package/feedback/types.js.map +1 -0
  115. package/index.d.ts +30 -10
  116. package/index.d.ts.map +1 -1
  117. package/index.js +29 -9
  118. package/index.js.map +1 -1
  119. package/inline-edit/InlineEditImage.d.ts +20 -0
  120. package/inline-edit/InlineEditImage.d.ts.map +1 -0
  121. package/inline-edit/InlineEditImage.js +85 -0
  122. package/inline-edit/InlineEditImage.js.map +1 -0
  123. package/inline-edit/InlineEditKeyValue.d.ts +29 -0
  124. package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
  125. package/inline-edit/InlineEditKeyValue.js +67 -0
  126. package/inline-edit/InlineEditKeyValue.js.map +1 -0
  127. package/inline-edit/InlineEditResourceList.d.ts +34 -0
  128. package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
  129. package/inline-edit/InlineEditResourceList.js +99 -0
  130. package/inline-edit/InlineEditResourceList.js.map +1 -0
  131. package/inline-edit/InlineEditSelect.d.ts +18 -0
  132. package/inline-edit/InlineEditSelect.d.ts.map +1 -0
  133. package/inline-edit/InlineEditSelect.js +54 -0
  134. package/inline-edit/InlineEditSelect.js.map +1 -0
  135. package/inline-edit/InlineEditText.d.ts +23 -0
  136. package/inline-edit/InlineEditText.d.ts.map +1 -0
  137. package/inline-edit/InlineEditText.js +79 -0
  138. package/inline-edit/InlineEditText.js.map +1 -0
  139. package/inline-edit/InlineEditTextarea.d.ts +22 -0
  140. package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
  141. package/inline-edit/InlineEditTextarea.js +83 -0
  142. package/inline-edit/InlineEditTextarea.js.map +1 -0
  143. package/inline-edit/index.d.ts +16 -0
  144. package/inline-edit/index.d.ts.map +1 -0
  145. package/inline-edit/index.js +8 -0
  146. package/inline-edit/index.js.map +1 -0
  147. package/inline-edit/types.d.ts +42 -0
  148. package/inline-edit/types.d.ts.map +1 -0
  149. package/inline-edit/types.js +2 -0
  150. package/inline-edit/types.js.map +1 -0
  151. package/inline-edit/useInlineFieldSave.d.ts +23 -0
  152. package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
  153. package/inline-edit/useInlineFieldSave.js +44 -0
  154. package/inline-edit/useInlineFieldSave.js.map +1 -0
  155. package/internal/Tabs.d.ts +4 -38
  156. package/internal/Tabs.d.ts.map +1 -1
  157. package/internal/Tabs.js +3 -62
  158. package/internal/Tabs.js.map +1 -1
  159. package/library/ImportResourceDialog.d.ts +43 -0
  160. package/library/ImportResourceDialog.d.ts.map +1 -0
  161. package/library/ImportResourceDialog.js +90 -0
  162. package/library/ImportResourceDialog.js.map +1 -0
  163. package/library/index.d.ts +7 -4
  164. package/library/index.d.ts.map +1 -1
  165. package/library/index.js +4 -2
  166. package/library/index.js.map +1 -1
  167. package/library/serialize-resource-yaml.d.ts +53 -0
  168. package/library/serialize-resource-yaml.d.ts.map +1 -1
  169. package/library/serialize-resource-yaml.js +275 -0
  170. package/library/serialize-resource-yaml.js.map +1 -1
  171. package/library/useExportResource.d.ts +56 -0
  172. package/library/useExportResource.d.ts.map +1 -0
  173. package/library/useExportResource.js +137 -0
  174. package/library/useExportResource.js.map +1 -0
  175. package/library/useImportResource.d.ts +84 -0
  176. package/library/useImportResource.d.ts.map +1 -0
  177. package/library/useImportResource.js +188 -0
  178. package/library/useImportResource.js.map +1 -0
  179. package/mcp-server/McpServerCreationWizard.d.ts +55 -0
  180. package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
  181. package/mcp-server/McpServerCreationWizard.js +121 -0
  182. package/mcp-server/McpServerCreationWizard.js.map +1 -0
  183. package/mcp-server/McpServerDetailView.d.ts +21 -1
  184. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  185. package/mcp-server/McpServerDetailView.js +113 -20
  186. package/mcp-server/McpServerDetailView.js.map +1 -1
  187. package/mcp-server/index.d.ts +8 -0
  188. package/mcp-server/index.d.ts.map +1 -1
  189. package/mcp-server/index.js +4 -0
  190. package/mcp-server/index.js.map +1 -1
  191. package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
  192. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
  193. package/mcp-server/internal/mcpServerToInput.js +81 -0
  194. package/mcp-server/internal/mcpServerToInput.js.map +1 -0
  195. package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
  196. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
  197. package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
  198. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
  199. package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
  200. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
  201. package/mcp-server/steps/IdentityTransportStep.js +73 -0
  202. package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
  203. package/mcp-server/steps/ReviewStep.d.ts +23 -0
  204. package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
  205. package/mcp-server/steps/ReviewStep.js +137 -0
  206. package/mcp-server/steps/ReviewStep.js.map +1 -0
  207. package/mcp-server/steps/types.d.ts +56 -0
  208. package/mcp-server/steps/types.d.ts.map +1 -0
  209. package/mcp-server/steps/types.js +27 -0
  210. package/mcp-server/steps/types.js.map +1 -0
  211. package/mcp-server/useCreateMcpServer.d.ts +45 -0
  212. package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
  213. package/mcp-server/useCreateMcpServer.js +50 -0
  214. package/mcp-server/useCreateMcpServer.js.map +1 -0
  215. package/mcp-server/useUpdateMcpServer.d.ts +24 -0
  216. package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
  217. package/mcp-server/useUpdateMcpServer.js +35 -0
  218. package/mcp-server/useUpdateMcpServer.js.map +1 -0
  219. package/models/registry.d.ts +4 -1
  220. package/models/registry.d.ts.map +1 -1
  221. package/models/registry.js +6 -2
  222. package/models/registry.js.map +1 -1
  223. package/package.json +8 -4
  224. package/provider.js +1 -1
  225. package/provider.js.map +1 -1
  226. package/resource-creation/CreationPicker.d.ts +60 -0
  227. package/resource-creation/CreationPicker.d.ts.map +1 -0
  228. package/resource-creation/CreationPicker.js +74 -0
  229. package/resource-creation/CreationPicker.js.map +1 -0
  230. package/resource-creation/StepIndicator.d.ts +28 -0
  231. package/resource-creation/StepIndicator.d.ts.map +1 -0
  232. package/resource-creation/StepIndicator.js +40 -0
  233. package/resource-creation/StepIndicator.js.map +1 -0
  234. package/resource-creation/TemplateCard.d.ts +24 -0
  235. package/resource-creation/TemplateCard.d.ts.map +1 -0
  236. package/resource-creation/TemplateCard.js +68 -0
  237. package/resource-creation/TemplateCard.js.map +1 -0
  238. package/resource-creation/TemplateGallery.d.ts +43 -0
  239. package/resource-creation/TemplateGallery.d.ts.map +1 -0
  240. package/resource-creation/TemplateGallery.js +78 -0
  241. package/resource-creation/TemplateGallery.js.map +1 -0
  242. package/resource-creation/WizardNav.d.ts +31 -0
  243. package/resource-creation/WizardNav.d.ts.map +1 -0
  244. package/resource-creation/WizardNav.js +29 -0
  245. package/resource-creation/WizardNav.js.map +1 -0
  246. package/resource-creation/WizardShell.d.ts +41 -0
  247. package/resource-creation/WizardShell.d.ts.map +1 -0
  248. package/resource-creation/WizardShell.js +55 -0
  249. package/resource-creation/WizardShell.js.map +1 -0
  250. package/resource-creation/index.d.ts +21 -0
  251. package/resource-creation/index.d.ts.map +1 -0
  252. package/resource-creation/index.js +14 -0
  253. package/resource-creation/index.js.map +1 -0
  254. package/resource-creation/templates/agent-templates.d.ts +15 -0
  255. package/resource-creation/templates/agent-templates.d.ts.map +1 -0
  256. package/resource-creation/templates/agent-templates.js +148 -0
  257. package/resource-creation/templates/agent-templates.js.map +1 -0
  258. package/resource-creation/templates/index.d.ts +5 -0
  259. package/resource-creation/templates/index.d.ts.map +1 -0
  260. package/resource-creation/templates/index.js +5 -0
  261. package/resource-creation/templates/index.js.map +1 -0
  262. package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
  263. package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
  264. package/resource-creation/templates/mcp-server-templates.js +92 -0
  265. package/resource-creation/templates/mcp-server-templates.js.map +1 -0
  266. package/resource-creation/templates/types.d.ts +48 -0
  267. package/resource-creation/templates/types.d.ts.map +1 -0
  268. package/resource-creation/templates/types.js +16 -0
  269. package/resource-creation/templates/types.js.map +1 -0
  270. package/resource-creation/types.d.ts +88 -0
  271. package/resource-creation/types.d.ts.map +1 -0
  272. package/resource-creation/types.js +2 -0
  273. package/resource-creation/types.js.map +1 -0
  274. package/resource-creation/useTemplateFilter.d.ts +43 -0
  275. package/resource-creation/useTemplateFilter.d.ts.map +1 -0
  276. package/resource-creation/useTemplateFilter.js +73 -0
  277. package/resource-creation/useTemplateFilter.js.map +1 -0
  278. package/resource-creation/useWizardState.d.ts +67 -0
  279. package/resource-creation/useWizardState.d.ts.map +1 -0
  280. package/resource-creation/useWizardState.js +143 -0
  281. package/resource-creation/useWizardState.js.map +1 -0
  282. package/resource-detail/ConfirmDialog.d.ts +44 -0
  283. package/resource-detail/ConfirmDialog.d.ts.map +1 -0
  284. package/resource-detail/ConfirmDialog.js +62 -0
  285. package/resource-detail/ConfirmDialog.js.map +1 -0
  286. package/resource-detail/ResourceActionBar.d.ts +42 -0
  287. package/resource-detail/ResourceActionBar.d.ts.map +1 -0
  288. package/resource-detail/ResourceActionBar.js +64 -0
  289. package/resource-detail/ResourceActionBar.js.map +1 -0
  290. package/resource-detail/ResourceDetailShell.d.ts +36 -0
  291. package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
  292. package/resource-detail/ResourceDetailShell.js +65 -0
  293. package/resource-detail/ResourceDetailShell.js.map +1 -0
  294. package/resource-detail/Section.d.ts +18 -0
  295. package/resource-detail/Section.d.ts.map +1 -0
  296. package/resource-detail/Section.js +18 -0
  297. package/resource-detail/Section.js.map +1 -0
  298. package/resource-detail/index.d.ts +15 -0
  299. package/resource-detail/index.d.ts.map +1 -0
  300. package/resource-detail/index.js +10 -0
  301. package/resource-detail/index.js.map +1 -0
  302. package/resource-detail/types.d.ts +146 -0
  303. package/resource-detail/types.d.ts.map +1 -0
  304. package/resource-detail/types.js +2 -0
  305. package/resource-detail/types.js.map +1 -0
  306. package/resource-detail/useConfirmAction.d.ts +41 -0
  307. package/resource-detail/useConfirmAction.d.ts.map +1 -0
  308. package/resource-detail/useConfirmAction.js +30 -0
  309. package/resource-detail/useConfirmAction.js.map +1 -0
  310. package/resource-detail/useCopyResource.d.ts +28 -0
  311. package/resource-detail/useCopyResource.d.ts.map +1 -0
  312. package/resource-detail/useCopyResource.js +46 -0
  313. package/resource-detail/useCopyResource.js.map +1 -0
  314. package/resource-detail/useDeleteResource.d.ts +40 -0
  315. package/resource-detail/useDeleteResource.d.ts.map +1 -0
  316. package/resource-detail/useDeleteResource.js +83 -0
  317. package/resource-detail/useDeleteResource.js.map +1 -0
  318. package/resource-detail/useDetailTabs.d.ts +46 -0
  319. package/resource-detail/useDetailTabs.d.ts.map +1 -0
  320. package/resource-detail/useDetailTabs.js +47 -0
  321. package/resource-detail/useDetailTabs.js.map +1 -0
  322. package/resource-workbench/components/BulkActionBar.d.ts +36 -0
  323. package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
  324. package/resource-workbench/components/BulkActionBar.js +35 -0
  325. package/resource-workbench/components/BulkActionBar.js.map +1 -0
  326. package/resource-workbench/components/ColumnHeader.d.ts +23 -0
  327. package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
  328. package/resource-workbench/components/ColumnHeader.js +25 -0
  329. package/resource-workbench/components/ColumnHeader.js.map +1 -0
  330. package/resource-workbench/components/FilterBar.d.ts +33 -0
  331. package/resource-workbench/components/FilterBar.d.ts.map +1 -0
  332. package/resource-workbench/components/FilterBar.js +72 -0
  333. package/resource-workbench/components/FilterBar.js.map +1 -0
  334. package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
  335. package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
  336. package/resource-workbench/components/ResourceAvatar.js +51 -0
  337. package/resource-workbench/components/ResourceAvatar.js.map +1 -0
  338. package/resource-workbench/components/ResourceCards.d.ts +39 -0
  339. package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
  340. package/resource-workbench/components/ResourceCards.js +41 -0
  341. package/resource-workbench/components/ResourceCards.js.map +1 -0
  342. package/resource-workbench/components/ResourceInspector.d.ts +26 -0
  343. package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
  344. package/resource-workbench/components/ResourceInspector.js +22 -0
  345. package/resource-workbench/components/ResourceInspector.js.map +1 -0
  346. package/resource-workbench/components/ResourceList.d.ts +39 -0
  347. package/resource-workbench/components/ResourceList.d.ts.map +1 -0
  348. package/resource-workbench/components/ResourceList.js +41 -0
  349. package/resource-workbench/components/ResourceList.js.map +1 -0
  350. package/resource-workbench/components/ResourceTable.d.ts +47 -0
  351. package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
  352. package/resource-workbench/components/ResourceTable.js +78 -0
  353. package/resource-workbench/components/ResourceTable.js.map +1 -0
  354. package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
  355. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
  356. package/resource-workbench/components/ResourceWorkbench.js +170 -0
  357. package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
  358. package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
  359. package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
  360. package/resource-workbench/components/SelectionCheckbox.js +16 -0
  361. package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
  362. package/resource-workbench/components/StatusBadge.d.ts +31 -0
  363. package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
  364. package/resource-workbench/components/StatusBadge.js +75 -0
  365. package/resource-workbench/components/StatusBadge.js.map +1 -0
  366. package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
  367. package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
  368. package/resource-workbench/components/ViewSwitcher.js +37 -0
  369. package/resource-workbench/components/ViewSwitcher.js.map +1 -0
  370. package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
  371. package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
  372. package/resource-workbench/hooks/useResourceCollection.js +133 -0
  373. package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
  374. package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
  375. package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
  376. package/resource-workbench/hooks/useResourceFilters.js +105 -0
  377. package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
  378. package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
  379. package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
  380. package/resource-workbench/hooks/useResourceSelection.js +123 -0
  381. package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
  382. package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
  383. package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
  384. package/resource-workbench/hooks/useViewPreference.js +60 -0
  385. package/resource-workbench/hooks/useViewPreference.js.map +1 -0
  386. package/resource-workbench/index.d.ts +34 -0
  387. package/resource-workbench/index.d.ts.map +1 -0
  388. package/resource-workbench/index.js +19 -0
  389. package/resource-workbench/index.js.map +1 -0
  390. package/resource-workbench/types.d.ts +165 -0
  391. package/resource-workbench/types.d.ts.map +1 -0
  392. package/resource-workbench/types.js +2 -0
  393. package/resource-workbench/types.js.map +1 -0
  394. package/runner/RunnerDetailView.d.ts +44 -0
  395. package/runner/RunnerDetailView.d.ts.map +1 -0
  396. package/runner/RunnerDetailView.js +154 -0
  397. package/runner/RunnerDetailView.js.map +1 -0
  398. package/runner/RunnerListPanel.d.ts +26 -1
  399. package/runner/RunnerListPanel.d.ts.map +1 -1
  400. package/runner/RunnerListPanel.js +68 -46
  401. package/runner/RunnerListPanel.js.map +1 -1
  402. package/runner/index.d.ts +7 -1
  403. package/runner/index.d.ts.map +1 -1
  404. package/runner/index.js +3 -0
  405. package/runner/index.js.map +1 -1
  406. package/runner/shared.d.ts +31 -0
  407. package/runner/shared.d.ts.map +1 -0
  408. package/runner/shared.js +55 -0
  409. package/runner/shared.js.map +1 -0
  410. package/runner/useRunner.d.ts +37 -0
  411. package/runner/useRunner.d.ts.map +1 -0
  412. package/runner/useRunner.js +24 -0
  413. package/runner/useRunner.js.map +1 -0
  414. package/session/__tests__/group-sessions.test.js +3 -3
  415. package/session/__tests__/group-sessions.test.js.map +1 -1
  416. package/skill/SkillDetailView.d.ts +70 -7
  417. package/skill/SkillDetailView.d.ts.map +1 -1
  418. package/skill/SkillDetailView.js +107 -39
  419. package/skill/SkillDetailView.js.map +1 -1
  420. package/skill/SkillDiffDialog.d.ts +42 -0
  421. package/skill/SkillDiffDialog.d.ts.map +1 -0
  422. package/skill/SkillDiffDialog.js +72 -0
  423. package/skill/SkillDiffDialog.js.map +1 -0
  424. package/skill/SkillFileBrowser.d.ts +31 -0
  425. package/skill/SkillFileBrowser.d.ts.map +1 -0
  426. package/skill/SkillFileBrowser.js +105 -0
  427. package/skill/SkillFileBrowser.js.map +1 -0
  428. package/skill/SkillUploader.d.ts +39 -0
  429. package/skill/SkillUploader.d.ts.map +1 -0
  430. package/skill/SkillUploader.js +141 -0
  431. package/skill/SkillUploader.js.map +1 -0
  432. package/skill/index.d.ts +18 -0
  433. package/skill/index.d.ts.map +1 -1
  434. package/skill/index.js +9 -0
  435. package/skill/index.js.map +1 -1
  436. package/skill/internal/computeArtifactHash.d.ts +9 -0
  437. package/skill/internal/computeArtifactHash.d.ts.map +1 -0
  438. package/skill/internal/computeArtifactHash.js +14 -0
  439. package/skill/internal/computeArtifactHash.js.map +1 -0
  440. package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
  441. package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
  442. package/skill/internal/fetchAndUnpackArtifact.js +34 -0
  443. package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
  444. package/skill/usePushSkill.d.ts +53 -0
  445. package/skill/usePushSkill.d.ts.map +1 -0
  446. package/skill/usePushSkill.js +57 -0
  447. package/skill/usePushSkill.js.map +1 -0
  448. package/skill/useSkillArtifact.d.ts +37 -0
  449. package/skill/useSkillArtifact.d.ts.map +1 -0
  450. package/skill/useSkillArtifact.js +76 -0
  451. package/skill/useSkillArtifact.js.map +1 -0
  452. package/skill/useSkillDiff.d.ts +31 -0
  453. package/skill/useSkillDiff.d.ts.map +1 -0
  454. package/skill/useSkillDiff.js +97 -0
  455. package/skill/useSkillDiff.js.map +1 -0
  456. package/skill/useSkillDuplicateCheck.d.ts +34 -0
  457. package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
  458. package/skill/useSkillDuplicateCheck.js +58 -0
  459. package/skill/useSkillDuplicateCheck.js.map +1 -0
  460. package/skill/useSkillUpload.d.ts +69 -0
  461. package/skill/useSkillUpload.d.ts.map +1 -0
  462. package/skill/useSkillUpload.js +157 -0
  463. package/skill/useSkillUpload.js.map +1 -0
  464. package/skill/useSkillVersions.d.ts +46 -0
  465. package/skill/useSkillVersions.d.ts.map +1 -0
  466. package/skill/useSkillVersions.js +104 -0
  467. package/skill/useSkillVersions.js.map +1 -0
  468. package/src/action-menu/ActionMenu.tsx +151 -0
  469. package/src/action-menu/index.ts +9 -0
  470. package/src/action-menu/types.ts +70 -0
  471. package/src/agent/AgentCreationWizard.tsx +201 -0
  472. package/src/agent/AgentDetailView.tsx +817 -321
  473. package/src/agent/index.ts +16 -0
  474. package/src/agent/internal/agentToInput.ts +95 -0
  475. package/src/agent/steps/CapabilitiesStep.tsx +363 -0
  476. package/src/agent/steps/IdentityStep.tsx +259 -0
  477. package/src/agent/steps/ReviewStep.tsx +211 -0
  478. package/src/agent/steps/types.ts +53 -0
  479. package/src/agent/useCreateAgent.ts +76 -0
  480. package/src/agent/useUpdateAgent.ts +55 -0
  481. package/src/dependency-graph/DependencyGraph.tsx +153 -0
  482. package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
  483. package/src/dependency-graph/index.ts +15 -0
  484. package/src/dependency-graph/types.ts +131 -0
  485. package/src/dependency-graph/useDependencyGraph.ts +158 -0
  486. package/src/empty-state/EmptyState.tsx +90 -0
  487. package/src/empty-state/index.ts +9 -0
  488. package/src/empty-state/types.ts +81 -0
  489. package/src/empty-state/useEmptyState.ts +85 -0
  490. package/src/execution/MessageThread.tsx +26 -15
  491. package/src/execution/SetupProgress.tsx +35 -14
  492. package/src/execution/__tests__/thread-keys.test.ts +101 -0
  493. package/src/feedback/StigmerToaster.tsx +45 -0
  494. package/src/feedback/index.ts +3 -0
  495. package/src/feedback/toast.ts +13 -0
  496. package/src/feedback/types.ts +7 -0
  497. package/src/index.ts +270 -8
  498. package/src/inline-edit/InlineEditImage.tsx +208 -0
  499. package/src/inline-edit/InlineEditKeyValue.tsx +278 -0
  500. package/src/inline-edit/InlineEditResourceList.tsx +325 -0
  501. package/src/inline-edit/InlineEditSelect.tsx +150 -0
  502. package/src/inline-edit/InlineEditText.tsx +211 -0
  503. package/src/inline-edit/InlineEditTextarea.tsx +209 -0
  504. package/src/inline-edit/index.ts +28 -0
  505. package/src/inline-edit/types.ts +47 -0
  506. package/src/inline-edit/useInlineFieldSave.ts +62 -0
  507. package/src/internal/Tabs.tsx +4 -164
  508. package/src/library/ImportResourceDialog.tsx +227 -0
  509. package/src/library/index.ts +18 -8
  510. package/src/library/serialize-resource-yaml.ts +356 -0
  511. package/src/library/useExportResource.ts +183 -0
  512. package/src/library/useImportResource.ts +253 -0
  513. package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
  514. package/src/mcp-server/McpServerDetailView.tsx +392 -105
  515. package/src/mcp-server/index.ts +16 -0
  516. package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
  517. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
  518. package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
  519. package/src/mcp-server/steps/ReviewStep.tsx +297 -0
  520. package/src/mcp-server/steps/types.ts +85 -0
  521. package/src/mcp-server/useCreateMcpServer.ts +76 -0
  522. package/src/mcp-server/useUpdateMcpServer.ts +55 -0
  523. package/src/models/registry.ts +10 -2
  524. package/src/provider.tsx +1 -1
  525. package/src/resource-creation/CreationPicker.tsx +292 -0
  526. package/src/resource-creation/StepIndicator.tsx +156 -0
  527. package/src/resource-creation/TemplateCard.tsx +143 -0
  528. package/src/resource-creation/TemplateGallery.tsx +222 -0
  529. package/src/resource-creation/WizardNav.tsx +163 -0
  530. package/src/resource-creation/WizardShell.tsx +124 -0
  531. package/src/resource-creation/index.ts +45 -0
  532. package/src/resource-creation/templates/agent-templates.ts +160 -0
  533. package/src/resource-creation/templates/index.ts +7 -0
  534. package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
  535. package/src/resource-creation/templates/types.ts +64 -0
  536. package/src/resource-creation/types.ts +105 -0
  537. package/src/resource-creation/useTemplateFilter.ts +117 -0
  538. package/src/resource-creation/useWizardState.ts +223 -0
  539. package/src/resource-detail/ConfirmDialog.tsx +127 -0
  540. package/src/resource-detail/ResourceActionBar.tsx +157 -0
  541. package/src/resource-detail/ResourceDetailShell.tsx +184 -0
  542. package/src/resource-detail/Section.tsx +78 -0
  543. package/src/resource-detail/index.ts +34 -0
  544. package/src/resource-detail/types.ts +177 -0
  545. package/src/resource-detail/useConfirmAction.ts +70 -0
  546. package/src/resource-detail/useCopyResource.ts +74 -0
  547. package/src/resource-detail/useDeleteResource.ts +110 -0
  548. package/src/resource-detail/useDetailTabs.ts +93 -0
  549. package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
  550. package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
  551. package/src/resource-workbench/components/FilterBar.tsx +173 -0
  552. package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
  553. package/src/resource-workbench/components/ResourceCards.tsx +126 -0
  554. package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
  555. package/src/resource-workbench/components/ResourceList.tsx +121 -0
  556. package/src/resource-workbench/components/ResourceTable.tsx +222 -0
  557. package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
  558. package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
  559. package/src/resource-workbench/components/StatusBadge.tsx +119 -0
  560. package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
  561. package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
  562. package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
  563. package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
  564. package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
  565. package/src/resource-workbench/index.ts +73 -0
  566. package/src/resource-workbench/types.ts +220 -0
  567. package/src/runner/RunnerDetailView.tsx +410 -0
  568. package/src/runner/RunnerListPanel.tsx +126 -111
  569. package/src/runner/index.ts +13 -1
  570. package/src/runner/shared.tsx +124 -0
  571. package/src/runner/useRunner.ts +59 -0
  572. package/src/session/__tests__/group-sessions.test.ts +5 -3
  573. package/src/skill/SkillDetailView.tsx +371 -165
  574. package/src/skill/SkillDiffDialog.tsx +213 -0
  575. package/src/skill/SkillFileBrowser.tsx +289 -0
  576. package/src/skill/SkillUploader.tsx +481 -0
  577. package/src/skill/index.ts +34 -0
  578. package/src/skill/internal/computeArtifactHash.ts +13 -0
  579. package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
  580. package/src/skill/usePushSkill.ts +101 -0
  581. package/src/skill/useSkillArtifact.ts +107 -0
  582. package/src/skill/useSkillDiff.ts +128 -0
  583. package/src/skill/useSkillDuplicateCheck.ts +92 -0
  584. package/src/skill/useSkillUpload.ts +231 -0
  585. package/src/skill/useSkillVersions.ts +165 -0
  586. package/src/styles.css +28 -0
  587. package/src/tabs/Tabs.tsx +184 -0
  588. package/src/tabs/index.ts +2 -0
  589. package/src/version-history/DiffFileList.tsx +111 -0
  590. package/src/version-history/DiffSummary.tsx +61 -0
  591. package/src/version-history/DiffViewer.tsx +163 -0
  592. package/src/version-history/MultiFileDiffView.tsx +114 -0
  593. package/src/version-history/VersionTimeline.tsx +232 -0
  594. package/src/version-history/VersionTimelineEntry.tsx +254 -0
  595. package/src/version-history/computeDiff.ts +61 -0
  596. package/src/version-history/computeMultiFileDiff.ts +97 -0
  597. package/src/version-history/index.ts +22 -0
  598. package/src/version-history/types.ts +129 -0
  599. package/styles.css +1 -1
  600. package/tabs/Tabs.d.ts +58 -0
  601. package/tabs/Tabs.d.ts.map +1 -0
  602. package/tabs/Tabs.js +80 -0
  603. package/tabs/Tabs.js.map +1 -0
  604. package/tabs/index.d.ts +3 -0
  605. package/tabs/index.d.ts.map +1 -0
  606. package/tabs/index.js +2 -0
  607. package/tabs/index.js.map +1 -0
  608. package/version-history/DiffFileList.d.ts +22 -0
  609. package/version-history/DiffFileList.d.ts.map +1 -0
  610. package/version-history/DiffFileList.js +37 -0
  611. package/version-history/DiffFileList.js.map +1 -0
  612. package/version-history/DiffSummary.d.ts +21 -0
  613. package/version-history/DiffSummary.d.ts.map +1 -0
  614. package/version-history/DiffSummary.js +16 -0
  615. package/version-history/DiffSummary.js.map +1 -0
  616. package/version-history/DiffViewer.d.ts +31 -0
  617. package/version-history/DiffViewer.d.ts.map +1 -0
  618. package/version-history/DiffViewer.js +60 -0
  619. package/version-history/DiffViewer.js.map +1 -0
  620. package/version-history/MultiFileDiffView.d.ts +30 -0
  621. package/version-history/MultiFileDiffView.d.ts.map +1 -0
  622. package/version-history/MultiFileDiffView.js +40 -0
  623. package/version-history/MultiFileDiffView.js.map +1 -0
  624. package/version-history/VersionTimeline.d.ts +29 -0
  625. package/version-history/VersionTimeline.d.ts.map +1 -0
  626. package/version-history/VersionTimeline.js +87 -0
  627. package/version-history/VersionTimeline.js.map +1 -0
  628. package/version-history/VersionTimelineEntry.d.ts +22 -0
  629. package/version-history/VersionTimelineEntry.d.ts.map +1 -0
  630. package/version-history/VersionTimelineEntry.js +98 -0
  631. package/version-history/VersionTimelineEntry.js.map +1 -0
  632. package/version-history/computeDiff.d.ts +16 -0
  633. package/version-history/computeDiff.d.ts.map +1 -0
  634. package/version-history/computeDiff.js +54 -0
  635. package/version-history/computeDiff.js.map +1 -0
  636. package/version-history/computeMultiFileDiff.d.ts +15 -0
  637. package/version-history/computeMultiFileDiff.d.ts.map +1 -0
  638. package/version-history/computeMultiFileDiff.js +83 -0
  639. package/version-history/computeMultiFileDiff.js.map +1 -0
  640. package/version-history/index.d.ts +14 -0
  641. package/version-history/index.d.ts.map +1 -0
  642. package/version-history/index.js +9 -0
  643. package/version-history/index.js.map +1 -0
  644. package/version-history/types.d.ts +106 -0
  645. package/version-history/types.d.ts.map +1 -0
  646. package/version-history/types.js +2 -0
  647. package/version-history/types.js.map +1 -0
  648. package/library/ResourceListView.d.ts +0 -174
  649. package/library/ResourceListView.d.ts.map +0 -1
  650. package/library/ResourceListView.js +0 -318
  651. package/library/ResourceListView.js.map +0 -1
  652. package/src/library/ResourceListView.tsx +0 -956
@@ -0,0 +1,220 @@
1
+ import type { ReactNode } from "react";
2
+ import type { SearchResult } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
3
+
4
+ // ---------------------------------------------------------------------------
5
+ // View modes
6
+ // ---------------------------------------------------------------------------
7
+
8
+ /** Available layout modes for the resource workbench. */
9
+ export type ViewMode = "table" | "cards" | "list";
10
+
11
+ // ---------------------------------------------------------------------------
12
+ // Status
13
+ // ---------------------------------------------------------------------------
14
+
15
+ /**
16
+ * Resource status phases that map to `--stgm-status-*` design tokens.
17
+ *
18
+ * Each phase corresponds to a token group defined in `@stigmer/theme`
19
+ * (e.g. `--stgm-status-ready`, `--stgm-status-failed-subtle`).
20
+ */
21
+ export type StatusPhase =
22
+ | "ready"
23
+ | "running"
24
+ | "pending"
25
+ | "degraded"
26
+ | "failed"
27
+ | "disabled"
28
+ | "draft";
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Column definitions
32
+ // ---------------------------------------------------------------------------
33
+
34
+ /**
35
+ * Defines a single column in the {@link ResourceTable}.
36
+ *
37
+ * Generic over `TData` so platform builders can use richer item types
38
+ * beyond `SearchResult` while the Console uses `SearchResult` directly.
39
+ */
40
+ export interface WorkbenchColumnDef<TData = SearchResult> {
41
+ /** Stable column identifier (used for visibility persistence and URL state). */
42
+ readonly id: string;
43
+ /** Column header label. */
44
+ readonly header: string;
45
+ /**
46
+ * Accessor function that extracts the cell value from a row item.
47
+ * Return a `ReactNode` for custom cell rendering.
48
+ */
49
+ readonly cell: (item: TData) => ReactNode;
50
+ /**
51
+ * Whether this column is sortable. When `true`, clicking the header
52
+ * toggles sort direction.
53
+ * @default false
54
+ */
55
+ readonly sortable?: boolean;
56
+ /**
57
+ * Whether this column is visible by default.
58
+ * Users can toggle visibility via column preferences.
59
+ * @default true
60
+ */
61
+ readonly defaultVisible?: boolean;
62
+ /**
63
+ * Minimum column width in pixels. The table uses this as a CSS
64
+ * `min-width` to prevent content collapse.
65
+ */
66
+ readonly minWidth?: number;
67
+ /**
68
+ * Relative flex weight for distributing remaining horizontal space.
69
+ * Columns with higher weight receive more space.
70
+ * @default 1
71
+ */
72
+ readonly flex?: number;
73
+ }
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // Filter definitions
77
+ // ---------------------------------------------------------------------------
78
+
79
+ /** Operator for a single filter expression. */
80
+ export type FilterOperator =
81
+ | "eq"
82
+ | "neq"
83
+ | "contains"
84
+ | "gt"
85
+ | "lt"
86
+ | "gte"
87
+ | "lte"
88
+ | "in";
89
+
90
+ /** A single active filter value applied to the collection. */
91
+ export interface FilterValue {
92
+ /** The filter definition ID this value applies to. */
93
+ readonly filterId: string;
94
+ /** Comparison operator. */
95
+ readonly operator: FilterOperator;
96
+ /**
97
+ * Filter value(s). A string for scalar operators, an array for `in`.
98
+ */
99
+ readonly value: string | readonly string[];
100
+ }
101
+
102
+ /**
103
+ * Defines a filterable property for the {@link FilterBar}.
104
+ *
105
+ * Platform builders declare which properties are filterable and how
106
+ * they appear in the filter UI.
107
+ */
108
+ export interface FilterDef {
109
+ /** Stable filter identifier (used in URL state serialization). */
110
+ readonly id: string;
111
+ /** Human-readable label shown in the filter picker and chips. */
112
+ readonly label: string;
113
+ /** Filter input type. */
114
+ readonly type: "text" | "select" | "multi-select" | "date";
115
+ /**
116
+ * Available options for `select` and `multi-select` types.
117
+ * Ignored for `text` and `date`.
118
+ */
119
+ readonly options?: readonly FilterOption[];
120
+ /**
121
+ * Allowed operators. Defaults to `["eq"]` for selects,
122
+ * `["contains"]` for text, and `["gte", "lte"]` for dates.
123
+ */
124
+ readonly operators?: readonly FilterOperator[];
125
+ }
126
+
127
+ /** A selectable option within a `select` or `multi-select` filter. */
128
+ export interface FilterOption {
129
+ /** The value sent in the filter expression. */
130
+ readonly value: string;
131
+ /** Display label. */
132
+ readonly label: string;
133
+ /** Optional icon rendered before the label. */
134
+ readonly icon?: ReactNode;
135
+ }
136
+
137
+ // ---------------------------------------------------------------------------
138
+ // Sort definitions
139
+ // ---------------------------------------------------------------------------
140
+
141
+ /** Sort direction. */
142
+ export type SortDirection = "asc" | "desc";
143
+
144
+ /** A single active sort applied to the collection. */
145
+ export interface SortValue {
146
+ /** Column or property ID to sort by. */
147
+ readonly id: string;
148
+ /** Sort direction. */
149
+ readonly direction: SortDirection;
150
+ }
151
+
152
+ /**
153
+ * Defines a sortable property. Used by hooks to validate incoming sort
154
+ * state and by the UI to render sort options in column headers and
155
+ * sort dropdowns.
156
+ */
157
+ export interface SortDef {
158
+ /** Stable identifier matching a column ID or virtual sort key. */
159
+ readonly id: string;
160
+ /** Human-readable label (e.g. "Name", "Last updated"). */
161
+ readonly label: string;
162
+ /** Default direction when this sort is first activated. @default "asc" */
163
+ readonly defaultDirection?: SortDirection;
164
+ }
165
+
166
+ // ---------------------------------------------------------------------------
167
+ // Actions
168
+ // ---------------------------------------------------------------------------
169
+
170
+ /** A single action available for a resource item (shown in context menus). */
171
+ export interface ResourceAction<TData = SearchResult> {
172
+ /** Stable action identifier. */
173
+ readonly id: string;
174
+ /** Display label. */
175
+ readonly label: string;
176
+ /** Icon rendered before the label. */
177
+ readonly icon?: ReactNode;
178
+ /** Keyboard shortcut hint displayed in the menu. */
179
+ readonly shortcut?: string;
180
+ /** Visual variant. @default "default" */
181
+ readonly variant?: "default" | "destructive";
182
+ /** Called when the action is selected. Receives the target item. */
183
+ readonly onAction: (item: TData) => void;
184
+ /** When `true`, the action is shown but non-interactive. */
185
+ readonly disabled?: boolean;
186
+ }
187
+
188
+ /** A bulk action available when multiple items are selected. */
189
+ export interface BulkAction<TData = SearchResult> {
190
+ /** Stable action identifier. */
191
+ readonly id: string;
192
+ /** Display label (e.g. "Delete", "Change visibility"). */
193
+ readonly label: string;
194
+ /** Icon rendered before the label. */
195
+ readonly icon?: ReactNode;
196
+ /** Visual variant. @default "default" */
197
+ readonly variant?: "default" | "destructive";
198
+ /** Called with the full set of selected items. */
199
+ readonly onAction: (items: readonly TData[]) => void;
200
+ /** When `true`, the action is shown but non-interactive. */
201
+ readonly disabled?: boolean;
202
+ }
203
+
204
+ // ---------------------------------------------------------------------------
205
+ // Workbench state (for URL sync callbacks)
206
+ // ---------------------------------------------------------------------------
207
+
208
+ /**
209
+ * Serializable snapshot of the workbench's filter, sort, pagination,
210
+ * and view state. Passed to `onStateChange` so consumers can sync
211
+ * this state to URL search params or other persistence layers.
212
+ */
213
+ export interface WorkbenchState {
214
+ readonly filters: readonly FilterValue[];
215
+ readonly sort: SortValue | null;
216
+ readonly page: number;
217
+ readonly pageSize: number;
218
+ readonly query: string;
219
+ readonly viewMode: ViewMode;
220
+ }
@@ -0,0 +1,410 @@
1
+ "use client";
2
+
3
+ import { useEffect, useRef } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { timestampDate } from "@bufbuild/protobuf/wkt";
6
+ import { RunnerPhase } from "@stigmer/protos/ai/stigmer/agentic/runner/v1/enum_pb";
7
+ import { useRunner, type UseRunnerOptions } from "./useRunner";
8
+ import { phaseLabel, phaseDotColor, isTransitionalPhase } from "./phase";
9
+ import { ErrorMessage } from "../error/ErrorMessage";
10
+ import { ResourceDetailShell } from "../resource-detail/ResourceDetailShell";
11
+ import type { DetailAction, ResourceHeaderMeta } from "../resource-detail/types";
12
+ import type { StatusPhase } from "../resource-workbench/types";
13
+
14
+ /** Props for {@link RunnerDetailView}. */
15
+ export interface RunnerDetailViewProps {
16
+ /** Runner ID. */
17
+ readonly id: string;
18
+ /**
19
+ * Called once when the runner resource has been fetched successfully.
20
+ * Provides the resource display name for use cases like breadcrumbs
21
+ * or document titles.
22
+ */
23
+ readonly onResourceLoad?: (meta: { name: string; id: string }) => void;
24
+ /**
25
+ * Primary action rendered as a visible button in the header area.
26
+ */
27
+ readonly primaryAction?: DetailAction;
28
+ /**
29
+ * Secondary actions rendered in the kebab overflow menu.
30
+ */
31
+ readonly actions?: readonly DetailAction[];
32
+ /** Additional CSS classes for the root container. */
33
+ readonly className?: string;
34
+ }
35
+
36
+ const TRANSITIONAL_POLL_MS = 5_000;
37
+
38
+ /**
39
+ * Operational detail view for a Runner.
40
+ *
41
+ * Fetches the runner via {@link useRunner} internally and renders its
42
+ * status, connection information, and machine details inside a
43
+ * {@link ResourceDetailShell}. Polls automatically when the runner is
44
+ * in a transitional phase (Starting, Pending).
45
+ *
46
+ * Handles loading, error, and not-found states automatically.
47
+ * Zero Console dependencies — safe for platform builder embedding.
48
+ * All visual properties flow through `--stgm-*` design tokens.
49
+ *
50
+ * @example
51
+ * ```tsx
52
+ * <RunnerDetailView id={runnerId} />
53
+ * ```
54
+ */
55
+ export function RunnerDetailView({
56
+ id,
57
+ onResourceLoad,
58
+ primaryAction,
59
+ actions,
60
+ className,
61
+ }: RunnerDetailViewProps) {
62
+ const phase = useRef<RunnerPhase>(RunnerPhase.UNSPECIFIED);
63
+
64
+ const opts: UseRunnerOptions = {
65
+ refetchInterval: isTransitionalPhase(phase.current)
66
+ ? TRANSITIONAL_POLL_MS
67
+ : false,
68
+ };
69
+
70
+ const { runner, isLoading, error, refetch } = useRunner(id, opts);
71
+
72
+ if (runner?.status?.phase != null) {
73
+ phase.current = runner.status.phase;
74
+ }
75
+
76
+ const onResourceLoadRef = useRef(onResourceLoad);
77
+ onResourceLoadRef.current = onResourceLoad;
78
+
79
+ useEffect(() => {
80
+ if (runner?.metadata?.name) {
81
+ onResourceLoadRef.current?.({
82
+ name: runner.metadata.name,
83
+ id: runner.metadata.id,
84
+ });
85
+ }
86
+ }, [runner]);
87
+
88
+ if (isLoading) return <LoadingSkeleton className={className} />;
89
+ if (error)
90
+ return <ErrorMessage error={error} retry={refetch} className={className} />;
91
+ if (!runner) return <NotFoundState className={className} />;
92
+
93
+ const meta = runner.metadata;
94
+ const status = runner.status;
95
+ const info = status?.connectionInfo;
96
+ const runnerPhase = status?.phase ?? RunnerPhase.UNSPECIFIED;
97
+
98
+ const headerMeta: ResourceHeaderMeta = {
99
+ name: meta?.name || meta?.id || "Unnamed Runner",
100
+ id: meta?.id || id,
101
+ org: meta?.org,
102
+ icon: <RunnerIcon className="size-6 text-muted-foreground" />,
103
+ status: phaseToStatusPhase(runnerPhase),
104
+ statusLabel: phaseLabel(runnerPhase),
105
+ };
106
+
107
+ return (
108
+ <ResourceDetailShell
109
+ header={headerMeta}
110
+ primaryAction={primaryAction}
111
+ actions={actions}
112
+ className={className}
113
+ >
114
+ <div className="flex flex-col gap-6 pt-2">
115
+ <StatusSection
116
+ phase={runnerPhase}
117
+ lastHeartbeat={
118
+ status?.lastHeartbeatAt
119
+ ? timestampDate(status.lastHeartbeatAt)
120
+ : null
121
+ }
122
+ currentExecutions={status?.currentExecutions ?? 0}
123
+ taskQueue={status?.taskQueue}
124
+ />
125
+
126
+ {info && (
127
+ <ConnectionInfoSection
128
+ hostname={info.hostname}
129
+ os={info.os}
130
+ arch={info.arch}
131
+ runnerVersion={info.runnerVersion}
132
+ />
133
+ )}
134
+ </div>
135
+ </ResourceDetailShell>
136
+ );
137
+ }
138
+
139
+ // ---------------------------------------------------------------------------
140
+ // Phase → StatusPhase mapping
141
+ // ---------------------------------------------------------------------------
142
+
143
+ function phaseToStatusPhase(phase: RunnerPhase): StatusPhase {
144
+ switch (phase) {
145
+ case RunnerPhase.READY:
146
+ return "ready";
147
+ case RunnerPhase.BUSY:
148
+ return "running";
149
+ case RunnerPhase.STARTING:
150
+ case RunnerPhase.PENDING:
151
+ return "pending";
152
+ case RunnerPhase.FAILED:
153
+ return "failed";
154
+ case RunnerPhase.STOPPED:
155
+ return "disabled";
156
+ default:
157
+ return "draft";
158
+ }
159
+ }
160
+
161
+ // ---------------------------------------------------------------------------
162
+ // Sections
163
+ // ---------------------------------------------------------------------------
164
+
165
+ function StatusSection({
166
+ phase,
167
+ lastHeartbeat,
168
+ currentExecutions,
169
+ taskQueue,
170
+ }: {
171
+ readonly phase: RunnerPhase;
172
+ readonly lastHeartbeat: Date | null;
173
+ readonly currentExecutions: number;
174
+ readonly taskQueue?: string;
175
+ }) {
176
+ return (
177
+ <Section title="Status">
178
+ <div className="grid grid-cols-2 gap-4 p-4 sm:grid-cols-4">
179
+ <StatusItem label="Phase">
180
+ <div className="flex items-center gap-2">
181
+ <span
182
+ className={cn(
183
+ "size-2 shrink-0 rounded-full",
184
+ phaseDotColor(phase),
185
+ )}
186
+ aria-hidden="true"
187
+ />
188
+ <span className="text-sm font-medium text-foreground">
189
+ {phaseLabel(phase)}
190
+ </span>
191
+ </div>
192
+ </StatusItem>
193
+ <StatusItem label="Executions">
194
+ <span className="text-sm font-medium text-foreground">
195
+ {currentExecutions}
196
+ </span>
197
+ </StatusItem>
198
+ <StatusItem label="Last heartbeat">
199
+ <span className="text-sm text-foreground">
200
+ {lastHeartbeat ? formatRelativeTime(lastHeartbeat) : "—"}
201
+ </span>
202
+ </StatusItem>
203
+ {taskQueue && (
204
+ <StatusItem label="Task queue">
205
+ <code className="rounded bg-muted px-1.5 py-0.5 font-mono text-xs text-foreground">
206
+ {taskQueue}
207
+ </code>
208
+ </StatusItem>
209
+ )}
210
+ </div>
211
+ </Section>
212
+ );
213
+ }
214
+
215
+ function StatusItem({
216
+ label,
217
+ children,
218
+ }: {
219
+ readonly label: string;
220
+ readonly children: React.ReactNode;
221
+ }) {
222
+ return (
223
+ <div className="flex flex-col gap-1">
224
+ <span className="text-[11px] font-medium text-muted-foreground">
225
+ {label}
226
+ </span>
227
+ {children}
228
+ </div>
229
+ );
230
+ }
231
+
232
+ function ConnectionInfoSection({
233
+ hostname,
234
+ os,
235
+ arch,
236
+ runnerVersion,
237
+ }: {
238
+ readonly hostname?: string;
239
+ readonly os?: string;
240
+ readonly arch?: string;
241
+ readonly runnerVersion?: string;
242
+ }) {
243
+ const osArch = os && arch ? `${os}/${arch}` : os || arch || undefined;
244
+ const hasAnyInfo = hostname || osArch || runnerVersion;
245
+ if (!hasAnyInfo) return null;
246
+
247
+ return (
248
+ <Section title="Machine">
249
+ <div className="flex flex-col divide-y divide-border">
250
+ {hostname && (
251
+ <InfoRow label="Hostname" value={hostname} />
252
+ )}
253
+ {osArch && (
254
+ <InfoRow label="Platform" value={osArch} mono />
255
+ )}
256
+ {runnerVersion && (
257
+ <InfoRow label="Runner version" value={runnerVersion} mono />
258
+ )}
259
+ </div>
260
+ </Section>
261
+ );
262
+ }
263
+
264
+ function InfoRow({
265
+ label,
266
+ value,
267
+ mono,
268
+ }: {
269
+ readonly label: string;
270
+ readonly value: string;
271
+ readonly mono?: boolean;
272
+ }) {
273
+ return (
274
+ <div className="flex items-baseline justify-between px-4 py-2.5">
275
+ <span className="text-xs font-medium text-muted-foreground">
276
+ {label}
277
+ </span>
278
+ <span
279
+ className={cn(
280
+ "text-sm text-foreground",
281
+ mono && "font-mono text-xs",
282
+ )}
283
+ >
284
+ {value}
285
+ </span>
286
+ </div>
287
+ );
288
+ }
289
+
290
+ // ---------------------------------------------------------------------------
291
+ // Shared layout primitives
292
+ // ---------------------------------------------------------------------------
293
+
294
+ function Section({
295
+ title,
296
+ children,
297
+ }: {
298
+ readonly title: string;
299
+ readonly children: React.ReactNode;
300
+ }) {
301
+ return (
302
+ <section>
303
+ <h3 className="mb-2 text-xs font-medium uppercase tracking-wider text-muted-foreground">
304
+ {title}
305
+ </h3>
306
+ <div className="overflow-hidden rounded-lg border border-border">
307
+ {children}
308
+ </div>
309
+ </section>
310
+ );
311
+ }
312
+
313
+ // ---------------------------------------------------------------------------
314
+ // Non-happy states
315
+ // ---------------------------------------------------------------------------
316
+
317
+ function LoadingSkeleton({ className }: { readonly className?: string }) {
318
+ return (
319
+ <div
320
+ className={cn("flex flex-col gap-6", className)}
321
+ aria-busy="true"
322
+ aria-label="Loading runner details"
323
+ >
324
+ <div className="flex items-start gap-3">
325
+ <div className="mt-1 size-6 shrink-0 animate-pulse rounded bg-muted" />
326
+ <div className="flex-1 space-y-2">
327
+ <div className="h-5 w-48 animate-pulse rounded bg-muted" />
328
+ <div className="h-3 w-32 animate-pulse rounded bg-muted" />
329
+ </div>
330
+ </div>
331
+ <div className="space-y-2">
332
+ <div className="h-3 w-16 animate-pulse rounded bg-muted" />
333
+ <div
334
+ className="animate-pulse rounded-lg border border-border bg-muted-faint"
335
+ style={{ height: "96px" }}
336
+ />
337
+ </div>
338
+ <div className="space-y-2">
339
+ <div className="h-3 w-20 animate-pulse rounded bg-muted" />
340
+ <div
341
+ className="animate-pulse rounded-lg border border-border bg-muted-faint"
342
+ style={{ height: "96px" }}
343
+ />
344
+ </div>
345
+ </div>
346
+ );
347
+ }
348
+
349
+ function NotFoundState({ className }: { readonly className?: string }) {
350
+ return (
351
+ <div
352
+ role="status"
353
+ className={cn(
354
+ "flex flex-col items-center gap-2 py-12 text-center",
355
+ className,
356
+ )}
357
+ >
358
+ <RunnerIcon className="size-10 text-muted-foreground-faint" />
359
+ <p className="text-sm font-medium text-muted-foreground">
360
+ Runner not found
361
+ </p>
362
+ <p className="text-xs text-muted-foreground-subtle">
363
+ This runner doesn&apos;t exist or has been removed.
364
+ </p>
365
+ </div>
366
+ );
367
+ }
368
+
369
+ // ---------------------------------------------------------------------------
370
+ // Utilities
371
+ // ---------------------------------------------------------------------------
372
+
373
+ function formatRelativeTime(date: Date): string {
374
+ const now = Date.now();
375
+ const diffMs = now - date.getTime();
376
+ const diffSec = Math.floor(diffMs / 1000);
377
+
378
+ if (diffSec < 10) return "Just now";
379
+ if (diffSec < 60) return `${diffSec}s ago`;
380
+ const diffMin = Math.floor(diffSec / 60);
381
+ if (diffMin < 60) return `${diffMin}m ago`;
382
+ const diffHour = Math.floor(diffMin / 60);
383
+ if (diffHour < 24) return `${diffHour}h ago`;
384
+ return date.toLocaleDateString("en-US", {
385
+ month: "short",
386
+ day: "numeric",
387
+ });
388
+ }
389
+
390
+ // ---------------------------------------------------------------------------
391
+ // Icon
392
+ // ---------------------------------------------------------------------------
393
+
394
+ function RunnerIcon({ className }: { readonly className?: string }) {
395
+ return (
396
+ <svg
397
+ className={className}
398
+ viewBox="0 0 16 16"
399
+ fill="none"
400
+ stroke="currentColor"
401
+ strokeWidth="1.5"
402
+ strokeLinecap="round"
403
+ strokeLinejoin="round"
404
+ aria-hidden="true"
405
+ >
406
+ <rect x="2" y="4" width="12" height="9" rx="1.5" />
407
+ <path d="M5 1v3M11 1v3M5 8.5h6" />
408
+ </svg>
409
+ );
410
+ }