@stigmer/react 0.4.8 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (709) 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/composer/ContextChip.d.ts +7 -2
  54. package/composer/ContextChip.d.ts.map +1 -1
  55. package/composer/ContextChip.js +2 -1
  56. package/composer/ContextChip.js.map +1 -1
  57. package/composer/SessionComposer.d.ts +11 -0
  58. package/composer/SessionComposer.d.ts.map +1 -1
  59. package/composer/SessionComposer.js +33 -4
  60. package/composer/SessionComposer.js.map +1 -1
  61. package/dependency-graph/DependencyGraph.d.ts +37 -0
  62. package/dependency-graph/DependencyGraph.d.ts.map +1 -0
  63. package/dependency-graph/DependencyGraph.js +88 -0
  64. package/dependency-graph/DependencyGraph.js.map +1 -0
  65. package/dependency-graph/DependencyTreeNode.d.ts +23 -0
  66. package/dependency-graph/DependencyTreeNode.d.ts.map +1 -0
  67. package/dependency-graph/DependencyTreeNode.js +99 -0
  68. package/dependency-graph/DependencyTreeNode.js.map +1 -0
  69. package/dependency-graph/index.d.ts +4 -0
  70. package/dependency-graph/index.d.ts.map +1 -0
  71. package/dependency-graph/index.js +5 -0
  72. package/dependency-graph/index.js.map +1 -0
  73. package/dependency-graph/types.d.ts +130 -0
  74. package/dependency-graph/types.d.ts.map +1 -0
  75. package/dependency-graph/types.js +2 -0
  76. package/dependency-graph/types.js.map +1 -0
  77. package/dependency-graph/useDependencyGraph.d.ts +27 -0
  78. package/dependency-graph/useDependencyGraph.d.ts.map +1 -0
  79. package/dependency-graph/useDependencyGraph.js +129 -0
  80. package/dependency-graph/useDependencyGraph.js.map +1 -0
  81. package/empty-state/EmptyState.d.ts +29 -0
  82. package/empty-state/EmptyState.d.ts.map +1 -0
  83. package/empty-state/EmptyState.js +45 -0
  84. package/empty-state/EmptyState.js.map +1 -0
  85. package/empty-state/index.d.ts +4 -0
  86. package/empty-state/index.d.ts.map +1 -0
  87. package/empty-state/index.js +3 -0
  88. package/empty-state/index.js.map +1 -0
  89. package/empty-state/types.d.ts +73 -0
  90. package/empty-state/types.d.ts.map +1 -0
  91. package/empty-state/types.js +2 -0
  92. package/empty-state/types.js.map +1 -0
  93. package/empty-state/useEmptyState.d.ts +18 -0
  94. package/empty-state/useEmptyState.d.ts.map +1 -0
  95. package/empty-state/useEmptyState.js +72 -0
  96. package/empty-state/useEmptyState.js.map +1 -0
  97. package/environment/usePersonalEnvironment.d.ts.map +1 -1
  98. package/environment/usePersonalEnvironment.js +1 -0
  99. package/environment/usePersonalEnvironment.js.map +1 -1
  100. package/feedback/StigmerToaster.d.ts +18 -0
  101. package/feedback/StigmerToaster.d.ts.map +1 -0
  102. package/feedback/StigmerToaster.js +31 -0
  103. package/feedback/StigmerToaster.js.map +1 -0
  104. package/feedback/index.d.ts +4 -0
  105. package/feedback/index.d.ts.map +1 -0
  106. package/feedback/index.js +3 -0
  107. package/feedback/index.js.map +1 -0
  108. package/feedback/toast.d.ts +14 -0
  109. package/feedback/toast.d.ts.map +1 -0
  110. package/feedback/toast.js +14 -0
  111. package/feedback/toast.js.map +1 -0
  112. package/feedback/types.d.ts +4 -0
  113. package/feedback/types.d.ts.map +1 -0
  114. package/feedback/types.js +2 -0
  115. package/feedback/types.js.map +1 -0
  116. package/index.d.ts +32 -12
  117. package/index.d.ts.map +1 -1
  118. package/index.js +30 -10
  119. package/index.js.map +1 -1
  120. package/inline-edit/InlineEditImage.d.ts +20 -0
  121. package/inline-edit/InlineEditImage.d.ts.map +1 -0
  122. package/inline-edit/InlineEditImage.js +85 -0
  123. package/inline-edit/InlineEditImage.js.map +1 -0
  124. package/inline-edit/InlineEditKeyValue.d.ts +33 -0
  125. package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
  126. package/inline-edit/InlineEditKeyValue.js +67 -0
  127. package/inline-edit/InlineEditKeyValue.js.map +1 -0
  128. package/inline-edit/InlineEditResourceList.d.ts +34 -0
  129. package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
  130. package/inline-edit/InlineEditResourceList.js +99 -0
  131. package/inline-edit/InlineEditResourceList.js.map +1 -0
  132. package/inline-edit/InlineEditSelect.d.ts +18 -0
  133. package/inline-edit/InlineEditSelect.d.ts.map +1 -0
  134. package/inline-edit/InlineEditSelect.js +54 -0
  135. package/inline-edit/InlineEditSelect.js.map +1 -0
  136. package/inline-edit/InlineEditText.d.ts +23 -0
  137. package/inline-edit/InlineEditText.d.ts.map +1 -0
  138. package/inline-edit/InlineEditText.js +79 -0
  139. package/inline-edit/InlineEditText.js.map +1 -0
  140. package/inline-edit/InlineEditTextarea.d.ts +22 -0
  141. package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
  142. package/inline-edit/InlineEditTextarea.js +83 -0
  143. package/inline-edit/InlineEditTextarea.js.map +1 -0
  144. package/inline-edit/index.d.ts +16 -0
  145. package/inline-edit/index.d.ts.map +1 -0
  146. package/inline-edit/index.js +8 -0
  147. package/inline-edit/index.js.map +1 -0
  148. package/inline-edit/types.d.ts +42 -0
  149. package/inline-edit/types.d.ts.map +1 -0
  150. package/inline-edit/types.js +2 -0
  151. package/inline-edit/types.js.map +1 -0
  152. package/inline-edit/useInlineFieldSave.d.ts +23 -0
  153. package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
  154. package/inline-edit/useInlineFieldSave.js +44 -0
  155. package/inline-edit/useInlineFieldSave.js.map +1 -0
  156. package/internal/Tabs.d.ts +4 -38
  157. package/internal/Tabs.d.ts.map +1 -1
  158. package/internal/Tabs.js +3 -62
  159. package/internal/Tabs.js.map +1 -1
  160. package/internal/useFetch.js +2 -2
  161. package/internal/useFetch.js.map +1 -1
  162. package/library/ImportResourceDialog.d.ts +43 -0
  163. package/library/ImportResourceDialog.d.ts.map +1 -0
  164. package/library/ImportResourceDialog.js +90 -0
  165. package/library/ImportResourceDialog.js.map +1 -0
  166. package/library/index.d.ts +7 -4
  167. package/library/index.d.ts.map +1 -1
  168. package/library/index.js +4 -2
  169. package/library/index.js.map +1 -1
  170. package/library/serialize-resource-yaml.d.ts +53 -0
  171. package/library/serialize-resource-yaml.d.ts.map +1 -1
  172. package/library/serialize-resource-yaml.js +275 -0
  173. package/library/serialize-resource-yaml.js.map +1 -1
  174. package/library/useExportResource.d.ts +56 -0
  175. package/library/useExportResource.d.ts.map +1 -0
  176. package/library/useExportResource.js +137 -0
  177. package/library/useExportResource.js.map +1 -0
  178. package/library/useImportResource.d.ts +84 -0
  179. package/library/useImportResource.d.ts.map +1 -0
  180. package/library/useImportResource.js +188 -0
  181. package/library/useImportResource.js.map +1 -0
  182. package/mcp-server/McpServerCreationWizard.d.ts +55 -0
  183. package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
  184. package/mcp-server/McpServerCreationWizard.js +121 -0
  185. package/mcp-server/McpServerCreationWizard.js.map +1 -0
  186. package/mcp-server/McpServerDetailView.d.ts +21 -1
  187. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  188. package/mcp-server/McpServerDetailView.js +235 -43
  189. package/mcp-server/McpServerDetailView.js.map +1 -1
  190. package/mcp-server/index.d.ts +8 -0
  191. package/mcp-server/index.d.ts.map +1 -1
  192. package/mcp-server/index.js +4 -0
  193. package/mcp-server/index.js.map +1 -1
  194. package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
  195. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
  196. package/mcp-server/internal/mcpServerToInput.js +81 -0
  197. package/mcp-server/internal/mcpServerToInput.js.map +1 -0
  198. package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
  199. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
  200. package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
  201. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
  202. package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
  203. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
  204. package/mcp-server/steps/IdentityTransportStep.js +73 -0
  205. package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
  206. package/mcp-server/steps/ReviewStep.d.ts +23 -0
  207. package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
  208. package/mcp-server/steps/ReviewStep.js +137 -0
  209. package/mcp-server/steps/ReviewStep.js.map +1 -0
  210. package/mcp-server/steps/types.d.ts +56 -0
  211. package/mcp-server/steps/types.d.ts.map +1 -0
  212. package/mcp-server/steps/types.js +27 -0
  213. package/mcp-server/steps/types.js.map +1 -0
  214. package/mcp-server/useCreateMcpServer.d.ts +45 -0
  215. package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
  216. package/mcp-server/useCreateMcpServer.js +50 -0
  217. package/mcp-server/useCreateMcpServer.js.map +1 -0
  218. package/mcp-server/useUpdateMcpServer.d.ts +24 -0
  219. package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
  220. package/mcp-server/useUpdateMcpServer.js +35 -0
  221. package/mcp-server/useUpdateMcpServer.js.map +1 -0
  222. package/models/ModelRegistryContext.d.ts +2 -0
  223. package/models/ModelRegistryContext.d.ts.map +1 -1
  224. package/models/ModelRegistryContext.js +1 -0
  225. package/models/ModelRegistryContext.js.map +1 -1
  226. package/models/ModelSelector.d.ts.map +1 -1
  227. package/models/ModelSelector.js +2 -2
  228. package/models/ModelSelector.js.map +1 -1
  229. package/models/__tests__/useModelRegistry.test.js +4 -3
  230. package/models/__tests__/useModelRegistry.test.js.map +1 -1
  231. package/models/useModelRegistry.d.ts +2 -0
  232. package/models/useModelRegistry.d.ts.map +1 -1
  233. package/models/useModelRegistry.js +3 -2
  234. package/models/useModelRegistry.js.map +1 -1
  235. package/package.json +8 -4
  236. package/provider.d.ts.map +1 -1
  237. package/provider.js +69 -22
  238. package/provider.js.map +1 -1
  239. package/resource-creation/CreationPicker.d.ts +60 -0
  240. package/resource-creation/CreationPicker.d.ts.map +1 -0
  241. package/resource-creation/CreationPicker.js +74 -0
  242. package/resource-creation/CreationPicker.js.map +1 -0
  243. package/resource-creation/StepIndicator.d.ts +28 -0
  244. package/resource-creation/StepIndicator.d.ts.map +1 -0
  245. package/resource-creation/StepIndicator.js +40 -0
  246. package/resource-creation/StepIndicator.js.map +1 -0
  247. package/resource-creation/TemplateCard.d.ts +24 -0
  248. package/resource-creation/TemplateCard.d.ts.map +1 -0
  249. package/resource-creation/TemplateCard.js +68 -0
  250. package/resource-creation/TemplateCard.js.map +1 -0
  251. package/resource-creation/TemplateGallery.d.ts +43 -0
  252. package/resource-creation/TemplateGallery.d.ts.map +1 -0
  253. package/resource-creation/TemplateGallery.js +78 -0
  254. package/resource-creation/TemplateGallery.js.map +1 -0
  255. package/resource-creation/WizardNav.d.ts +31 -0
  256. package/resource-creation/WizardNav.d.ts.map +1 -0
  257. package/resource-creation/WizardNav.js +29 -0
  258. package/resource-creation/WizardNav.js.map +1 -0
  259. package/resource-creation/WizardShell.d.ts +41 -0
  260. package/resource-creation/WizardShell.d.ts.map +1 -0
  261. package/resource-creation/WizardShell.js +55 -0
  262. package/resource-creation/WizardShell.js.map +1 -0
  263. package/resource-creation/index.d.ts +21 -0
  264. package/resource-creation/index.d.ts.map +1 -0
  265. package/resource-creation/index.js +14 -0
  266. package/resource-creation/index.js.map +1 -0
  267. package/resource-creation/templates/agent-templates.d.ts +15 -0
  268. package/resource-creation/templates/agent-templates.d.ts.map +1 -0
  269. package/resource-creation/templates/agent-templates.js +148 -0
  270. package/resource-creation/templates/agent-templates.js.map +1 -0
  271. package/resource-creation/templates/index.d.ts +5 -0
  272. package/resource-creation/templates/index.d.ts.map +1 -0
  273. package/resource-creation/templates/index.js +5 -0
  274. package/resource-creation/templates/index.js.map +1 -0
  275. package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
  276. package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
  277. package/resource-creation/templates/mcp-server-templates.js +92 -0
  278. package/resource-creation/templates/mcp-server-templates.js.map +1 -0
  279. package/resource-creation/templates/types.d.ts +48 -0
  280. package/resource-creation/templates/types.d.ts.map +1 -0
  281. package/resource-creation/templates/types.js +16 -0
  282. package/resource-creation/templates/types.js.map +1 -0
  283. package/resource-creation/types.d.ts +88 -0
  284. package/resource-creation/types.d.ts.map +1 -0
  285. package/resource-creation/types.js +2 -0
  286. package/resource-creation/types.js.map +1 -0
  287. package/resource-creation/useTemplateFilter.d.ts +43 -0
  288. package/resource-creation/useTemplateFilter.d.ts.map +1 -0
  289. package/resource-creation/useTemplateFilter.js +73 -0
  290. package/resource-creation/useTemplateFilter.js.map +1 -0
  291. package/resource-creation/useWizardState.d.ts +67 -0
  292. package/resource-creation/useWizardState.d.ts.map +1 -0
  293. package/resource-creation/useWizardState.js +143 -0
  294. package/resource-creation/useWizardState.js.map +1 -0
  295. package/resource-detail/ConfirmDialog.d.ts +44 -0
  296. package/resource-detail/ConfirmDialog.d.ts.map +1 -0
  297. package/resource-detail/ConfirmDialog.js +62 -0
  298. package/resource-detail/ConfirmDialog.js.map +1 -0
  299. package/resource-detail/ResourceActionBar.d.ts +42 -0
  300. package/resource-detail/ResourceActionBar.d.ts.map +1 -0
  301. package/resource-detail/ResourceActionBar.js +64 -0
  302. package/resource-detail/ResourceActionBar.js.map +1 -0
  303. package/resource-detail/ResourceDetailShell.d.ts +36 -0
  304. package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
  305. package/resource-detail/ResourceDetailShell.js +65 -0
  306. package/resource-detail/ResourceDetailShell.js.map +1 -0
  307. package/resource-detail/Section.d.ts +18 -0
  308. package/resource-detail/Section.d.ts.map +1 -0
  309. package/resource-detail/Section.js +18 -0
  310. package/resource-detail/Section.js.map +1 -0
  311. package/resource-detail/index.d.ts +15 -0
  312. package/resource-detail/index.d.ts.map +1 -0
  313. package/resource-detail/index.js +10 -0
  314. package/resource-detail/index.js.map +1 -0
  315. package/resource-detail/types.d.ts +146 -0
  316. package/resource-detail/types.d.ts.map +1 -0
  317. package/resource-detail/types.js +2 -0
  318. package/resource-detail/types.js.map +1 -0
  319. package/resource-detail/useConfirmAction.d.ts +41 -0
  320. package/resource-detail/useConfirmAction.d.ts.map +1 -0
  321. package/resource-detail/useConfirmAction.js +30 -0
  322. package/resource-detail/useConfirmAction.js.map +1 -0
  323. package/resource-detail/useCopyResource.d.ts +28 -0
  324. package/resource-detail/useCopyResource.d.ts.map +1 -0
  325. package/resource-detail/useCopyResource.js +46 -0
  326. package/resource-detail/useCopyResource.js.map +1 -0
  327. package/resource-detail/useDeleteResource.d.ts +40 -0
  328. package/resource-detail/useDeleteResource.d.ts.map +1 -0
  329. package/resource-detail/useDeleteResource.js +83 -0
  330. package/resource-detail/useDeleteResource.js.map +1 -0
  331. package/resource-detail/useDetailTabs.d.ts +46 -0
  332. package/resource-detail/useDetailTabs.d.ts.map +1 -0
  333. package/resource-detail/useDetailTabs.js +47 -0
  334. package/resource-detail/useDetailTabs.js.map +1 -0
  335. package/resource-workbench/components/BulkActionBar.d.ts +36 -0
  336. package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
  337. package/resource-workbench/components/BulkActionBar.js +35 -0
  338. package/resource-workbench/components/BulkActionBar.js.map +1 -0
  339. package/resource-workbench/components/ColumnHeader.d.ts +23 -0
  340. package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
  341. package/resource-workbench/components/ColumnHeader.js +25 -0
  342. package/resource-workbench/components/ColumnHeader.js.map +1 -0
  343. package/resource-workbench/components/FilterBar.d.ts +33 -0
  344. package/resource-workbench/components/FilterBar.d.ts.map +1 -0
  345. package/resource-workbench/components/FilterBar.js +72 -0
  346. package/resource-workbench/components/FilterBar.js.map +1 -0
  347. package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
  348. package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
  349. package/resource-workbench/components/ResourceAvatar.js +51 -0
  350. package/resource-workbench/components/ResourceAvatar.js.map +1 -0
  351. package/resource-workbench/components/ResourceCards.d.ts +39 -0
  352. package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
  353. package/resource-workbench/components/ResourceCards.js +41 -0
  354. package/resource-workbench/components/ResourceCards.js.map +1 -0
  355. package/resource-workbench/components/ResourceInspector.d.ts +26 -0
  356. package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
  357. package/resource-workbench/components/ResourceInspector.js +22 -0
  358. package/resource-workbench/components/ResourceInspector.js.map +1 -0
  359. package/resource-workbench/components/ResourceList.d.ts +39 -0
  360. package/resource-workbench/components/ResourceList.d.ts.map +1 -0
  361. package/resource-workbench/components/ResourceList.js +41 -0
  362. package/resource-workbench/components/ResourceList.js.map +1 -0
  363. package/resource-workbench/components/ResourceTable.d.ts +47 -0
  364. package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
  365. package/resource-workbench/components/ResourceTable.js +78 -0
  366. package/resource-workbench/components/ResourceTable.js.map +1 -0
  367. package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
  368. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
  369. package/resource-workbench/components/ResourceWorkbench.js +170 -0
  370. package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
  371. package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
  372. package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
  373. package/resource-workbench/components/SelectionCheckbox.js +16 -0
  374. package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
  375. package/resource-workbench/components/StatusBadge.d.ts +31 -0
  376. package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
  377. package/resource-workbench/components/StatusBadge.js +75 -0
  378. package/resource-workbench/components/StatusBadge.js.map +1 -0
  379. package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
  380. package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
  381. package/resource-workbench/components/ViewSwitcher.js +37 -0
  382. package/resource-workbench/components/ViewSwitcher.js.map +1 -0
  383. package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
  384. package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
  385. package/resource-workbench/hooks/useResourceCollection.js +133 -0
  386. package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
  387. package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
  388. package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
  389. package/resource-workbench/hooks/useResourceFilters.js +105 -0
  390. package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
  391. package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
  392. package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
  393. package/resource-workbench/hooks/useResourceSelection.js +123 -0
  394. package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
  395. package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
  396. package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
  397. package/resource-workbench/hooks/useViewPreference.js +60 -0
  398. package/resource-workbench/hooks/useViewPreference.js.map +1 -0
  399. package/resource-workbench/index.d.ts +34 -0
  400. package/resource-workbench/index.d.ts.map +1 -0
  401. package/resource-workbench/index.js +19 -0
  402. package/resource-workbench/index.js.map +1 -0
  403. package/resource-workbench/types.d.ts +165 -0
  404. package/resource-workbench/types.d.ts.map +1 -0
  405. package/resource-workbench/types.js +2 -0
  406. package/resource-workbench/types.js.map +1 -0
  407. package/runner/RunnerDetailView.d.ts +44 -0
  408. package/runner/RunnerDetailView.d.ts.map +1 -0
  409. package/runner/RunnerDetailView.js +154 -0
  410. package/runner/RunnerDetailView.js.map +1 -0
  411. package/runner/RunnerListPanel.d.ts +26 -1
  412. package/runner/RunnerListPanel.d.ts.map +1 -1
  413. package/runner/RunnerListPanel.js +68 -46
  414. package/runner/RunnerListPanel.js.map +1 -1
  415. package/runner/index.d.ts +7 -1
  416. package/runner/index.d.ts.map +1 -1
  417. package/runner/index.js +3 -0
  418. package/runner/index.js.map +1 -1
  419. package/runner/shared.d.ts +31 -0
  420. package/runner/shared.d.ts.map +1 -0
  421. package/runner/shared.js +55 -0
  422. package/runner/shared.js.map +1 -0
  423. package/runner/useRunner.d.ts +37 -0
  424. package/runner/useRunner.d.ts.map +1 -0
  425. package/runner/useRunner.js +24 -0
  426. package/runner/useRunner.js.map +1 -0
  427. package/session/__tests__/group-sessions.test.js +3 -3
  428. package/session/__tests__/group-sessions.test.js.map +1 -1
  429. package/session/__tests__/session-spec-converters.test.d.ts +2 -0
  430. package/session/__tests__/session-spec-converters.test.d.ts.map +1 -0
  431. package/session/__tests__/session-spec-converters.test.js +162 -0
  432. package/session/__tests__/session-spec-converters.test.js.map +1 -0
  433. package/session/__tests__/useNewSessionFlow.test.js +2 -2
  434. package/session/__tests__/useNewSessionFlow.test.js.map +1 -1
  435. package/session/__tests__/usePersistedModel.test.js +1 -1
  436. package/session/__tests__/usePersistedModel.test.js.map +1 -1
  437. package/session/group-sessions.d.ts +17 -0
  438. package/session/group-sessions.d.ts.map +1 -1
  439. package/session/group-sessions.js +46 -0
  440. package/session/group-sessions.js.map +1 -1
  441. package/session/index.d.ts +4 -2
  442. package/session/index.d.ts.map +1 -1
  443. package/session/index.js +2 -1
  444. package/session/index.js.map +1 -1
  445. package/session/session-spec-converters.d.ts +24 -0
  446. package/session/session-spec-converters.d.ts.map +1 -0
  447. package/session/session-spec-converters.js +72 -0
  448. package/session/session-spec-converters.js.map +1 -0
  449. package/session/useSessionConversation.d.ts.map +1 -1
  450. package/session/useSessionConversation.js +1 -56
  451. package/session/useSessionConversation.js.map +1 -1
  452. package/session/useSessionPageFlow.d.ts +5 -0
  453. package/session/useSessionPageFlow.d.ts.map +1 -1
  454. package/session/useSessionPageFlow.js +20 -6
  455. package/session/useSessionPageFlow.js.map +1 -1
  456. package/session/useSessionSearch.d.ts +57 -0
  457. package/session/useSessionSearch.d.ts.map +1 -0
  458. package/session/useSessionSearch.js +94 -0
  459. package/session/useSessionSearch.js.map +1 -0
  460. package/skill/SkillDetailView.d.ts +70 -7
  461. package/skill/SkillDetailView.d.ts.map +1 -1
  462. package/skill/SkillDetailView.js +107 -39
  463. package/skill/SkillDetailView.js.map +1 -1
  464. package/skill/SkillDiffDialog.d.ts +42 -0
  465. package/skill/SkillDiffDialog.d.ts.map +1 -0
  466. package/skill/SkillDiffDialog.js +72 -0
  467. package/skill/SkillDiffDialog.js.map +1 -0
  468. package/skill/SkillFileBrowser.d.ts +31 -0
  469. package/skill/SkillFileBrowser.d.ts.map +1 -0
  470. package/skill/SkillFileBrowser.js +105 -0
  471. package/skill/SkillFileBrowser.js.map +1 -0
  472. package/skill/SkillUploader.d.ts +39 -0
  473. package/skill/SkillUploader.d.ts.map +1 -0
  474. package/skill/SkillUploader.js +141 -0
  475. package/skill/SkillUploader.js.map +1 -0
  476. package/skill/index.d.ts +18 -0
  477. package/skill/index.d.ts.map +1 -1
  478. package/skill/index.js +9 -0
  479. package/skill/index.js.map +1 -1
  480. package/skill/internal/computeArtifactHash.d.ts +9 -0
  481. package/skill/internal/computeArtifactHash.d.ts.map +1 -0
  482. package/skill/internal/computeArtifactHash.js +14 -0
  483. package/skill/internal/computeArtifactHash.js.map +1 -0
  484. package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
  485. package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
  486. package/skill/internal/fetchAndUnpackArtifact.js +34 -0
  487. package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
  488. package/skill/usePushSkill.d.ts +53 -0
  489. package/skill/usePushSkill.d.ts.map +1 -0
  490. package/skill/usePushSkill.js +57 -0
  491. package/skill/usePushSkill.js.map +1 -0
  492. package/skill/useSkillArtifact.d.ts +37 -0
  493. package/skill/useSkillArtifact.d.ts.map +1 -0
  494. package/skill/useSkillArtifact.js +76 -0
  495. package/skill/useSkillArtifact.js.map +1 -0
  496. package/skill/useSkillDiff.d.ts +31 -0
  497. package/skill/useSkillDiff.d.ts.map +1 -0
  498. package/skill/useSkillDiff.js +97 -0
  499. package/skill/useSkillDiff.js.map +1 -0
  500. package/skill/useSkillDuplicateCheck.d.ts +34 -0
  501. package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
  502. package/skill/useSkillDuplicateCheck.js +58 -0
  503. package/skill/useSkillDuplicateCheck.js.map +1 -0
  504. package/skill/useSkillUpload.d.ts +69 -0
  505. package/skill/useSkillUpload.d.ts.map +1 -0
  506. package/skill/useSkillUpload.js +157 -0
  507. package/skill/useSkillUpload.js.map +1 -0
  508. package/skill/useSkillVersions.d.ts +46 -0
  509. package/skill/useSkillVersions.d.ts.map +1 -0
  510. package/skill/useSkillVersions.js +104 -0
  511. package/skill/useSkillVersions.js.map +1 -0
  512. package/src/action-menu/ActionMenu.tsx +151 -0
  513. package/src/action-menu/index.ts +9 -0
  514. package/src/action-menu/types.ts +70 -0
  515. package/src/agent/AgentCreationWizard.tsx +201 -0
  516. package/src/agent/AgentDetailView.tsx +817 -321
  517. package/src/agent/index.ts +16 -0
  518. package/src/agent/internal/agentToInput.ts +95 -0
  519. package/src/agent/steps/CapabilitiesStep.tsx +363 -0
  520. package/src/agent/steps/IdentityStep.tsx +259 -0
  521. package/src/agent/steps/ReviewStep.tsx +211 -0
  522. package/src/agent/steps/types.ts +53 -0
  523. package/src/agent/useCreateAgent.ts +76 -0
  524. package/src/agent/useUpdateAgent.ts +55 -0
  525. package/src/composer/ContextChip.tsx +20 -11
  526. package/src/composer/SessionComposer.tsx +52 -3
  527. package/src/dependency-graph/DependencyGraph.tsx +153 -0
  528. package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
  529. package/src/dependency-graph/index.ts +15 -0
  530. package/src/dependency-graph/types.ts +131 -0
  531. package/src/dependency-graph/useDependencyGraph.ts +158 -0
  532. package/src/empty-state/EmptyState.tsx +90 -0
  533. package/src/empty-state/index.ts +9 -0
  534. package/src/empty-state/types.ts +81 -0
  535. package/src/empty-state/useEmptyState.ts +85 -0
  536. package/src/environment/usePersonalEnvironment.ts +1 -0
  537. package/src/feedback/StigmerToaster.tsx +45 -0
  538. package/src/feedback/index.ts +3 -0
  539. package/src/feedback/toast.ts +13 -0
  540. package/src/feedback/types.ts +7 -0
  541. package/src/index.ts +275 -8
  542. package/src/inline-edit/InlineEditImage.tsx +208 -0
  543. package/src/inline-edit/InlineEditKeyValue.tsx +301 -0
  544. package/src/inline-edit/InlineEditResourceList.tsx +325 -0
  545. package/src/inline-edit/InlineEditSelect.tsx +150 -0
  546. package/src/inline-edit/InlineEditText.tsx +211 -0
  547. package/src/inline-edit/InlineEditTextarea.tsx +209 -0
  548. package/src/inline-edit/index.ts +28 -0
  549. package/src/inline-edit/types.ts +47 -0
  550. package/src/inline-edit/useInlineFieldSave.ts +62 -0
  551. package/src/internal/Tabs.tsx +4 -164
  552. package/src/internal/useFetch.ts +2 -2
  553. package/src/library/ImportResourceDialog.tsx +227 -0
  554. package/src/library/index.ts +18 -8
  555. package/src/library/serialize-resource-yaml.ts +356 -0
  556. package/src/library/useExportResource.ts +183 -0
  557. package/src/library/useImportResource.ts +253 -0
  558. package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
  559. package/src/mcp-server/McpServerDetailView.tsx +816 -155
  560. package/src/mcp-server/index.ts +16 -0
  561. package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
  562. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
  563. package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
  564. package/src/mcp-server/steps/ReviewStep.tsx +297 -0
  565. package/src/mcp-server/steps/types.ts +85 -0
  566. package/src/mcp-server/useCreateMcpServer.ts +76 -0
  567. package/src/mcp-server/useUpdateMcpServer.ts +55 -0
  568. package/src/models/ModelRegistryContext.ts +3 -0
  569. package/src/models/ModelSelector.tsx +25 -2
  570. package/src/models/__tests__/useModelRegistry.test.tsx +5 -3
  571. package/src/models/useModelRegistry.ts +5 -2
  572. package/src/provider.tsx +69 -18
  573. package/src/resource-creation/CreationPicker.tsx +292 -0
  574. package/src/resource-creation/StepIndicator.tsx +156 -0
  575. package/src/resource-creation/TemplateCard.tsx +143 -0
  576. package/src/resource-creation/TemplateGallery.tsx +222 -0
  577. package/src/resource-creation/WizardNav.tsx +163 -0
  578. package/src/resource-creation/WizardShell.tsx +124 -0
  579. package/src/resource-creation/index.ts +45 -0
  580. package/src/resource-creation/templates/agent-templates.ts +160 -0
  581. package/src/resource-creation/templates/index.ts +7 -0
  582. package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
  583. package/src/resource-creation/templates/types.ts +64 -0
  584. package/src/resource-creation/types.ts +105 -0
  585. package/src/resource-creation/useTemplateFilter.ts +117 -0
  586. package/src/resource-creation/useWizardState.ts +223 -0
  587. package/src/resource-detail/ConfirmDialog.tsx +127 -0
  588. package/src/resource-detail/ResourceActionBar.tsx +157 -0
  589. package/src/resource-detail/ResourceDetailShell.tsx +184 -0
  590. package/src/resource-detail/Section.tsx +78 -0
  591. package/src/resource-detail/index.ts +34 -0
  592. package/src/resource-detail/types.ts +177 -0
  593. package/src/resource-detail/useConfirmAction.ts +70 -0
  594. package/src/resource-detail/useCopyResource.ts +74 -0
  595. package/src/resource-detail/useDeleteResource.ts +110 -0
  596. package/src/resource-detail/useDetailTabs.ts +93 -0
  597. package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
  598. package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
  599. package/src/resource-workbench/components/FilterBar.tsx +173 -0
  600. package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
  601. package/src/resource-workbench/components/ResourceCards.tsx +126 -0
  602. package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
  603. package/src/resource-workbench/components/ResourceList.tsx +121 -0
  604. package/src/resource-workbench/components/ResourceTable.tsx +222 -0
  605. package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
  606. package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
  607. package/src/resource-workbench/components/StatusBadge.tsx +119 -0
  608. package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
  609. package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
  610. package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
  611. package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
  612. package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
  613. package/src/resource-workbench/index.ts +73 -0
  614. package/src/resource-workbench/types.ts +220 -0
  615. package/src/runner/RunnerDetailView.tsx +410 -0
  616. package/src/runner/RunnerListPanel.tsx +126 -111
  617. package/src/runner/index.ts +13 -1
  618. package/src/runner/shared.tsx +124 -0
  619. package/src/runner/useRunner.ts +59 -0
  620. package/src/session/__tests__/group-sessions.test.ts +5 -3
  621. package/src/session/__tests__/session-spec-converters.test.ts +185 -0
  622. package/src/session/__tests__/useNewSessionFlow.test.tsx +2 -2
  623. package/src/session/__tests__/usePersistedModel.test.tsx +1 -1
  624. package/src/session/group-sessions.ts +65 -0
  625. package/src/session/index.ts +8 -2
  626. package/src/session/session-spec-converters.ts +86 -0
  627. package/src/session/useSessionConversation.ts +5 -64
  628. package/src/session/useSessionPageFlow.ts +28 -7
  629. package/src/session/useSessionSearch.ts +149 -0
  630. package/src/skill/SkillDetailView.tsx +371 -165
  631. package/src/skill/SkillDiffDialog.tsx +213 -0
  632. package/src/skill/SkillFileBrowser.tsx +289 -0
  633. package/src/skill/SkillUploader.tsx +481 -0
  634. package/src/skill/index.ts +34 -0
  635. package/src/skill/internal/computeArtifactHash.ts +13 -0
  636. package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
  637. package/src/skill/usePushSkill.ts +101 -0
  638. package/src/skill/useSkillArtifact.ts +107 -0
  639. package/src/skill/useSkillDiff.ts +128 -0
  640. package/src/skill/useSkillDuplicateCheck.ts +92 -0
  641. package/src/skill/useSkillUpload.ts +231 -0
  642. package/src/skill/useSkillVersions.ts +165 -0
  643. package/src/styles.css +28 -0
  644. package/src/tabs/Tabs.tsx +184 -0
  645. package/src/tabs/index.ts +2 -0
  646. package/src/version-history/DiffFileList.tsx +111 -0
  647. package/src/version-history/DiffSummary.tsx +61 -0
  648. package/src/version-history/DiffViewer.tsx +163 -0
  649. package/src/version-history/MultiFileDiffView.tsx +114 -0
  650. package/src/version-history/VersionTimeline.tsx +232 -0
  651. package/src/version-history/VersionTimelineEntry.tsx +254 -0
  652. package/src/version-history/computeDiff.ts +61 -0
  653. package/src/version-history/computeMultiFileDiff.ts +97 -0
  654. package/src/version-history/index.ts +22 -0
  655. package/src/version-history/types.ts +129 -0
  656. package/styles.css +1 -1
  657. package/tabs/Tabs.d.ts +58 -0
  658. package/tabs/Tabs.d.ts.map +1 -0
  659. package/tabs/Tabs.js +80 -0
  660. package/tabs/Tabs.js.map +1 -0
  661. package/tabs/index.d.ts +3 -0
  662. package/tabs/index.d.ts.map +1 -0
  663. package/tabs/index.js +2 -0
  664. package/tabs/index.js.map +1 -0
  665. package/version-history/DiffFileList.d.ts +22 -0
  666. package/version-history/DiffFileList.d.ts.map +1 -0
  667. package/version-history/DiffFileList.js +37 -0
  668. package/version-history/DiffFileList.js.map +1 -0
  669. package/version-history/DiffSummary.d.ts +21 -0
  670. package/version-history/DiffSummary.d.ts.map +1 -0
  671. package/version-history/DiffSummary.js +16 -0
  672. package/version-history/DiffSummary.js.map +1 -0
  673. package/version-history/DiffViewer.d.ts +31 -0
  674. package/version-history/DiffViewer.d.ts.map +1 -0
  675. package/version-history/DiffViewer.js +60 -0
  676. package/version-history/DiffViewer.js.map +1 -0
  677. package/version-history/MultiFileDiffView.d.ts +30 -0
  678. package/version-history/MultiFileDiffView.d.ts.map +1 -0
  679. package/version-history/MultiFileDiffView.js +40 -0
  680. package/version-history/MultiFileDiffView.js.map +1 -0
  681. package/version-history/VersionTimeline.d.ts +29 -0
  682. package/version-history/VersionTimeline.d.ts.map +1 -0
  683. package/version-history/VersionTimeline.js +87 -0
  684. package/version-history/VersionTimeline.js.map +1 -0
  685. package/version-history/VersionTimelineEntry.d.ts +22 -0
  686. package/version-history/VersionTimelineEntry.d.ts.map +1 -0
  687. package/version-history/VersionTimelineEntry.js +98 -0
  688. package/version-history/VersionTimelineEntry.js.map +1 -0
  689. package/version-history/computeDiff.d.ts +16 -0
  690. package/version-history/computeDiff.d.ts.map +1 -0
  691. package/version-history/computeDiff.js +54 -0
  692. package/version-history/computeDiff.js.map +1 -0
  693. package/version-history/computeMultiFileDiff.d.ts +15 -0
  694. package/version-history/computeMultiFileDiff.d.ts.map +1 -0
  695. package/version-history/computeMultiFileDiff.js +83 -0
  696. package/version-history/computeMultiFileDiff.js.map +1 -0
  697. package/version-history/index.d.ts +14 -0
  698. package/version-history/index.d.ts.map +1 -0
  699. package/version-history/index.js +9 -0
  700. package/version-history/index.js.map +1 -0
  701. package/version-history/types.d.ts +106 -0
  702. package/version-history/types.d.ts.map +1 -0
  703. package/version-history/types.js +2 -0
  704. package/version-history/types.js.map +1 -0
  705. package/library/ResourceListView.d.ts +0 -174
  706. package/library/ResourceListView.d.ts.map +0 -1
  707. package/library/ResourceListView.js +0 -318
  708. package/library/ResourceListView.js.map +0 -1
  709. package/src/library/ResourceListView.tsx +0 -956
@@ -0,0 +1,695 @@
1
+ "use client";
2
+
3
+ import { useCallback, useRef, useState, type ReactNode } from "react";
4
+ import type { SearchResult } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
5
+ import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
6
+ import type { ListParams, ListResult } from "@stigmer/sdk";
7
+ import { cn } from "@stigmer/theme";
8
+ import type {
9
+ WorkbenchColumnDef,
10
+ FilterDef,
11
+ FilterValue,
12
+ SortValue,
13
+ BulkAction,
14
+ ViewMode,
15
+ } from "../types";
16
+ import { useResourceCollection } from "../hooks/useResourceCollection";
17
+ import { useResourceFilters } from "../hooks/useResourceFilters";
18
+ import { useResourceSelection } from "../hooks/useResourceSelection";
19
+ import { useViewPreference } from "../hooks/useViewPreference";
20
+ import { ResourceTable } from "./ResourceTable";
21
+ import { ResourceCards } from "./ResourceCards";
22
+ import { ResourceList } from "./ResourceList";
23
+ import { FilterBar } from "./FilterBar";
24
+ import { ViewSwitcher } from "./ViewSwitcher";
25
+ import { BulkActionBar } from "./BulkActionBar";
26
+ import { ResourceInspector } from "./ResourceInspector";
27
+ import { EmptyState } from "../../empty-state";
28
+ import { ResourceAvatar } from "./ResourceAvatar";
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Props
32
+ // ---------------------------------------------------------------------------
33
+
34
+ /** Props for {@link ResourceWorkbench}. */
35
+ export interface ResourceWorkbenchProps<TData = SearchResult> {
36
+ /**
37
+ * Async function that fetches a page of resources. Receives `ListParams`
38
+ * and returns `ListResult`. Pass `null` to disable fetching.
39
+ */
40
+ readonly listFn: ((params: ListParams) => Promise<ListResult>) | null;
41
+ /** Organization slug. Pass `null` to disable fetching. */
42
+ readonly org: string | null;
43
+
44
+ // --- View configuration ------------------------------------------------
45
+
46
+ /** Column definitions for the table view. */
47
+ readonly columns?: readonly WorkbenchColumnDef<TData>[];
48
+ /** Available filter definitions. */
49
+ readonly filterDefs?: readonly FilterDef[];
50
+ /** Available view modes. @default ["table", "cards", "list"] */
51
+ readonly viewModes?: readonly ViewMode[];
52
+ /** Default view mode. @default "table" */
53
+ readonly defaultViewMode?: ViewMode;
54
+ /**
55
+ * localStorage key for persisting view mode preference.
56
+ * Pass `undefined` to disable persistence.
57
+ */
58
+ readonly viewModeStorageKey?: string;
59
+
60
+ // --- Rendering slots ---------------------------------------------------
61
+
62
+ /**
63
+ * Custom card renderer for card view. Receives the item and its index.
64
+ * When omitted, the workbench falls back to a default card layout.
65
+ */
66
+ readonly renderCard?: (item: TData, index: number) => ReactNode;
67
+ /**
68
+ * Custom row renderer for list view. Receives the item and its index.
69
+ * When omitted, falls back to a default row layout.
70
+ */
71
+ readonly renderRow?: (item: TData, index: number) => ReactNode;
72
+ /** Per-item action renderer (shown in table rows, card corners, list ends). */
73
+ readonly renderItemAction?: (item: TData) => ReactNode;
74
+ /**
75
+ * Inspector content renderer. When provided, clicking an item opens
76
+ * the split-panel inspector with this content. When omitted, the
77
+ * inspector is disabled.
78
+ */
79
+ readonly renderInspector?: (item: TData) => ReactNode;
80
+
81
+ // --- Actions -----------------------------------------------------------
82
+
83
+ /** Bulk actions available when items are selected. */
84
+ readonly bulkActions?: readonly BulkAction<TData>[];
85
+ /** Called when an item is clicked (navigates to detail, etc.). */
86
+ readonly onItemClick?: (item: TData) => void;
87
+
88
+ // --- State & persistence -----------------------------------------------
89
+
90
+ /** Initial filter values (e.g. restored from URL on mount). */
91
+ readonly initialFilters?: readonly FilterValue[];
92
+ /** Initial sort (e.g. restored from URL on mount). */
93
+ readonly initialSort?: SortValue | null;
94
+ /** Initial search query (e.g. restored from URL on mount). */
95
+ readonly initialQuery?: string;
96
+ /** Scope for resource visibility. @default "org" */
97
+ readonly scope?: "org" | "all";
98
+ /** Called when scope changes (for Console to persist). */
99
+ readonly onScopeChange?: (scope: "org" | "all") => void;
100
+ /** Called when any filter/sort/query state changes (for URL sync). */
101
+ readonly onStateChange?: (state: {
102
+ filters: readonly FilterValue[];
103
+ sort: SortValue | null;
104
+ query: string;
105
+ }) => void;
106
+
107
+ // --- Selection ---------------------------------------------------------
108
+
109
+ /** Enable selection checkboxes and bulk actions. @default false */
110
+ readonly enableSelection?: boolean;
111
+ /** Extracts a unique ID from an item (for selection tracking). */
112
+ readonly getItemId?: (item: TData) => string;
113
+
114
+ // --- Empty & error states ----------------------------------------------
115
+
116
+ /** Icon for the empty state. */
117
+ readonly emptyIcon?: ReactNode;
118
+ /** Title for the empty state. */
119
+ readonly emptyTitle?: string;
120
+ /** Description for the empty state. */
121
+ readonly emptyDescription?: string;
122
+ /**
123
+ * Custom CTA rendered in the first-use empty state (no items, no
124
+ * active filters). Use this to provide a creation entry point that
125
+ * is visually co-located with the "no resources yet" message.
126
+ *
127
+ * Accepts any ReactNode — typically a `<Link>` or `<button>`.
128
+ */
129
+ readonly emptyAction?: ReactNode;
130
+ /** Called when the user clicks "Retry" after an error. */
131
+ readonly onRetry?: () => void;
132
+
133
+ // --- Header action -----------------------------------------------------
134
+
135
+ /**
136
+ * Primary action rendered right-aligned in the toolbar, after the
137
+ * view mode switcher. Use this for the workbench's main creation
138
+ * entry point — e.g. a "Create agent" button or link.
139
+ *
140
+ * Accepts any ReactNode so consumers control routing and styling.
141
+ */
142
+ readonly headerAction?: ReactNode;
143
+
144
+ // --- Layout ------------------------------------------------------------
145
+
146
+ /** Search input placeholder text. @default "Search\u2026" */
147
+ readonly searchPlaceholder?: string;
148
+ /** Accessible label for the workbench region. @default "Resource workbench" */
149
+ readonly "aria-label"?: string;
150
+ /** Additional CSS classes for the root container. */
151
+ readonly className?: string;
152
+ }
153
+
154
+ // ---------------------------------------------------------------------------
155
+ // Component
156
+ // ---------------------------------------------------------------------------
157
+
158
+ const DEBOUNCE_MS = 300;
159
+
160
+ /**
161
+ * Full-featured resource collection workbench that composes headless
162
+ * hooks and focused view components into a complete browsing experience.
163
+ *
164
+ * Provides:
165
+ * - Toolbar with search input, filter chips, and view mode switcher
166
+ * - Three view modes: table, cards, and compact list
167
+ * - Row/card selection with bulk action bar
168
+ * - Optional split-panel inspector for item previews
169
+ * - Empty, loading, and error states
170
+ * - Pagination
171
+ *
172
+ * The workbench is the "drop-in" tier of the resource collection
173
+ * architecture. Platform builders who want more control use the
174
+ * individual hooks and view components directly.
175
+ *
176
+ * @example
177
+ * ```tsx
178
+ * <ResourceWorkbench
179
+ * listFn={(params) => stigmer.agent.list(params)}
180
+ * org={activeOrg}
181
+ * columns={agentColumns}
182
+ * filterDefs={agentFilterDefs}
183
+ * renderItemAction={(item) => <AgentActionMenu item={item} />}
184
+ * onItemClick={(item) => navigate(`/agents/${item.slug}`)}
185
+ * emptyTitle="No agents yet"
186
+ * emptyDescription="Create an agent to get started."
187
+ * />
188
+ * ```
189
+ */
190
+ export function ResourceWorkbench<TData = SearchResult>({
191
+ listFn,
192
+ org,
193
+ columns = [],
194
+ filterDefs = [],
195
+ viewModes = ["table", "cards", "list"],
196
+ defaultViewMode = "table",
197
+ viewModeStorageKey,
198
+ renderCard,
199
+ renderRow,
200
+ renderItemAction,
201
+ renderInspector,
202
+ bulkActions = [],
203
+ onItemClick,
204
+ initialFilters,
205
+ initialSort,
206
+ initialQuery,
207
+ scope: controlledScope = "org",
208
+ onScopeChange,
209
+ onStateChange,
210
+ enableSelection = false,
211
+ getItemId = defaultGetId as (item: TData) => string,
212
+ emptyIcon,
213
+ emptyTitle = "No resources found",
214
+ emptyDescription = "Try adjusting your search or filters.",
215
+ emptyAction,
216
+ onRetry,
217
+ headerAction,
218
+ searchPlaceholder = "Search\u2026",
219
+ "aria-label": ariaLabel = "Resource workbench",
220
+ className,
221
+ }: ResourceWorkbenchProps<TData>) {
222
+ // --- View preference ---------------------------------------------------
223
+ const { viewMode, setViewMode } = useViewPreference(
224
+ viewModeStorageKey,
225
+ defaultViewMode,
226
+ );
227
+
228
+ // --- Filter/sort/query state -------------------------------------------
229
+ const filtersHook = useResourceFilters({
230
+ filterDefs,
231
+ initialFilters,
232
+ initialSort,
233
+ initialQuery,
234
+ onStateChange,
235
+ queryDebounceMs: DEBOUNCE_MS,
236
+ });
237
+
238
+ // --- Pagination --------------------------------------------------------
239
+ const [page, setPage] = useState(1);
240
+ const prevQueryRef = useRef(filtersHook.debouncedQuery);
241
+ if (prevQueryRef.current !== filtersHook.debouncedQuery) {
242
+ prevQueryRef.current = filtersHook.debouncedQuery;
243
+ setPage(1);
244
+ }
245
+
246
+ // --- Collection data ---------------------------------------------------
247
+ const collection = useResourceCollection<TData>({
248
+ listFn: listFn as ((params: ListParams) => Promise<ListResult>) | null,
249
+ org,
250
+ query: filtersHook.debouncedQuery,
251
+ scope: controlledScope,
252
+ page,
253
+ sort: filtersHook.sort,
254
+ onSortChange: filtersHook.setSort,
255
+ columns: columns as WorkbenchColumnDef<TData>[],
256
+ enableSelection,
257
+ });
258
+
259
+ // --- Selection ---------------------------------------------------------
260
+ const selection = useResourceSelection(collection.items, getItemId);
261
+
262
+ // --- Inspector ---------------------------------------------------------
263
+ const [inspectedItem, setInspectedItem] = useState<TData | null>(null);
264
+ const inspectorEnabled = !!renderInspector;
265
+
266
+ const handleItemClick = useCallback(
267
+ (item: TData) => {
268
+ if (inspectorEnabled) {
269
+ setInspectedItem(item);
270
+ }
271
+ onItemClick?.(item);
272
+ },
273
+ [inspectorEnabled, onItemClick],
274
+ );
275
+
276
+ // --- Content resolution ------------------------------------------------
277
+ const showSkeletons = collection.isLoading && collection.items.length === 0;
278
+ const showError = !!collection.error && !collection.isLoading;
279
+ const showEmpty =
280
+ !collection.isLoading && !collection.error && collection.items.length === 0;
281
+ const showContent = collection.items.length > 0;
282
+ const showPagination = collection.totalPages > 1;
283
+
284
+ // --- Selected IDs as Set for cards/list views --------------------------
285
+ const selectedIdSet = selection.selectedIds;
286
+
287
+ return (
288
+ <div
289
+ aria-label={ariaLabel}
290
+ className={cn("flex flex-col gap-3", className)}
291
+ >
292
+ {/* --- Toolbar: search + filters + view switcher --- */}
293
+ <div className="flex flex-wrap items-center gap-2">
294
+ <div className="relative flex-1">
295
+ <SearchIcon className="pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground-subtle" />
296
+ <input
297
+ type="text"
298
+ value={filtersHook.query}
299
+ onChange={(e) => filtersHook.setQuery(e.target.value)}
300
+ placeholder={searchPlaceholder}
301
+ aria-label={searchPlaceholder}
302
+ className={cn(
303
+ "w-full rounded-md border border-input bg-background py-1.5 pl-8 pr-3 text-sm",
304
+ "placeholder:text-muted-foreground-subtle",
305
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
306
+ )}
307
+ />
308
+ </div>
309
+ {viewModes.length > 1 && (
310
+ <ViewSwitcher
311
+ value={viewMode}
312
+ onChange={setViewMode}
313
+ modes={viewModes}
314
+ />
315
+ )}
316
+ {headerAction}
317
+ </div>
318
+
319
+ {/* --- Active filter chips --- */}
320
+ <FilterBar
321
+ filters={filtersHook.filters}
322
+ filterDefs={filterDefs}
323
+ onRemoveFilter={filtersHook.removeFilter}
324
+ onClearAll={filtersHook.clearFilters}
325
+ />
326
+
327
+ {/* --- Main content area with optional inspector --- */}
328
+ <div className="flex min-h-0 flex-1">
329
+ <div
330
+ className={cn(
331
+ "min-w-0 flex-1",
332
+ collection.isRefetching &&
333
+ "pointer-events-none opacity-60 transition-opacity",
334
+ )}
335
+ >
336
+ {showSkeletons && <SkeletonPlaceholder viewMode={viewMode} />}
337
+
338
+ {showError && (
339
+ <EmptyState
340
+ variant="error"
341
+ errorMessage={collection.error!.message}
342
+ action={
343
+ onRetry
344
+ ? { label: "Retry", onClick: onRetry ?? collection.refetch }
345
+ : undefined
346
+ }
347
+ />
348
+ )}
349
+
350
+ {showEmpty && (
351
+ <EmptyState
352
+ variant={
353
+ filtersHook.hasActiveFilters || filtersHook.debouncedQuery
354
+ ? "zero-results"
355
+ : "first-use"
356
+ }
357
+ icon={emptyIcon}
358
+ title={
359
+ filtersHook.hasActiveFilters || filtersHook.debouncedQuery
360
+ ? "No results match your filters"
361
+ : emptyTitle
362
+ }
363
+ description={
364
+ filtersHook.hasActiveFilters || filtersHook.debouncedQuery
365
+ ? "Try adjusting your search or removing some filters."
366
+ : emptyDescription
367
+ }
368
+ action={
369
+ filtersHook.hasActiveFilters
370
+ ? {
371
+ label: "Clear filters",
372
+ onClick: filtersHook.clearFilters,
373
+ }
374
+ : undefined
375
+ }
376
+ >
377
+ {!filtersHook.hasActiveFilters && !filtersHook.debouncedQuery
378
+ ? emptyAction
379
+ : undefined}
380
+ </EmptyState>
381
+ )}
382
+
383
+ {showContent && viewMode === "table" && collection.table && (
384
+ <ResourceTable
385
+ table={collection.table}
386
+ enableSelection={enableSelection}
387
+ renderRowAction={renderItemAction}
388
+ onRowClick={handleItemClick}
389
+ />
390
+ )}
391
+
392
+ {showContent && viewMode === "cards" && (
393
+ <ResourceCards
394
+ items={collection.items}
395
+ renderCard={
396
+ renderCard ??
397
+ ((item) => <DefaultCardContent item={item as unknown as SearchResult} />)
398
+ }
399
+ enableSelection={enableSelection}
400
+ selectedIds={selectedIdSet}
401
+ onToggleSelection={selection.toggleItem}
402
+ getItemId={getItemId}
403
+ renderCardAction={renderItemAction}
404
+ onCardClick={handleItemClick}
405
+ />
406
+ )}
407
+
408
+ {showContent && viewMode === "list" && (
409
+ <ResourceList
410
+ items={collection.items}
411
+ renderRow={
412
+ renderRow ??
413
+ ((item) => <DefaultRowContent item={item as unknown as SearchResult} />)
414
+ }
415
+ enableSelection={enableSelection}
416
+ selectedIds={selectedIdSet}
417
+ onToggleSelection={selection.toggleItem}
418
+ getItemId={getItemId}
419
+ renderRowAction={renderItemAction}
420
+ onRowClick={handleItemClick}
421
+ />
422
+ )}
423
+
424
+ {showPagination && (
425
+ <PaginationBar
426
+ currentPage={collection.currentPage}
427
+ totalPages={collection.totalPages}
428
+ totalCount={collection.totalCount}
429
+ onPageChange={setPage}
430
+ />
431
+ )}
432
+ </div>
433
+
434
+ {/* --- Inspector panel --- */}
435
+ {inspectorEnabled && (
436
+ <ResourceInspector
437
+ open={inspectedItem !== null}
438
+ onClose={() => setInspectedItem(null)}
439
+ >
440
+ {inspectedItem && renderInspector!(inspectedItem)}
441
+ </ResourceInspector>
442
+ )}
443
+ </div>
444
+
445
+ {/* --- Bulk action bar --- */}
446
+ {enableSelection && selection.hasSelection && (
447
+ <BulkActionBar
448
+ selectedCount={selection.selectedCount}
449
+ selectedItems={selection.selectedItems}
450
+ actions={bulkActions}
451
+ onCancel={selection.clearSelection}
452
+ />
453
+ )}
454
+ </div>
455
+ );
456
+ }
457
+
458
+ // ---------------------------------------------------------------------------
459
+ // Internal helpers
460
+ // ---------------------------------------------------------------------------
461
+
462
+ function defaultGetId(item: unknown): string {
463
+ const r = item as Record<string, unknown>;
464
+ if (typeof r.id === "string") return r.id;
465
+ if (typeof r.slug === "string") return r.slug;
466
+ return "";
467
+ }
468
+
469
+ function DefaultCardContent({ item }: { readonly item: SearchResult }) {
470
+ const isSkill = item.kind === ApiResourceKind.skill;
471
+ return (
472
+ <div className="flex items-start gap-3">
473
+ <ResourceAvatar
474
+ name={item.name || item.slug}
475
+ slug={item.slug}
476
+ iconUrl={item.iconUrl || undefined}
477
+ hidden={isSkill}
478
+ />
479
+ <div className="min-w-0 flex-1">
480
+ <span className="text-sm font-medium text-foreground">
481
+ {item.name || item.slug}
482
+ </span>
483
+ {item.org && (
484
+ <p className="text-xs text-muted-foreground">{item.org}</p>
485
+ )}
486
+ {item.description && (
487
+ <p className="mt-0.5 line-clamp-2 text-xs text-muted-foreground">
488
+ {item.description}
489
+ </p>
490
+ )}
491
+ </div>
492
+ </div>
493
+ );
494
+ }
495
+
496
+ function DefaultRowContent({ item }: { readonly item: SearchResult }) {
497
+ const isSkill = item.kind === ApiResourceKind.skill;
498
+ return (
499
+ <div className="flex items-center gap-2">
500
+ <ResourceAvatar
501
+ name={item.name || item.slug}
502
+ slug={item.slug}
503
+ iconUrl={item.iconUrl || undefined}
504
+ hidden={isSkill}
505
+ size="sm"
506
+ />
507
+ <span className="text-sm font-medium text-foreground">
508
+ {item.name || item.slug}
509
+ </span>
510
+ {item.org && (
511
+ <span className="text-xs text-muted-foreground">{item.org}</span>
512
+ )}
513
+ {item.description && (
514
+ <>
515
+ <span className="text-muted-foreground-subtle" aria-hidden="true">
516
+ {"\u00B7"}
517
+ </span>
518
+ <span className="truncate text-xs text-muted-foreground">
519
+ {item.description}
520
+ </span>
521
+ </>
522
+ )}
523
+ </div>
524
+ );
525
+ }
526
+
527
+ // ---------------------------------------------------------------------------
528
+ // Skeleton placeholder
529
+ // ---------------------------------------------------------------------------
530
+
531
+ function SkeletonPlaceholder({
532
+ viewMode,
533
+ }: {
534
+ readonly viewMode: ViewMode;
535
+ }) {
536
+ if (viewMode === "cards") {
537
+ return (
538
+ <div
539
+ className="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"
540
+ aria-busy="true"
541
+ >
542
+ {Array.from({ length: 6 }, (_, i) => (
543
+ <div
544
+ key={i}
545
+ className="flex flex-col gap-3 rounded-lg border border-border bg-card p-4"
546
+ aria-hidden="true"
547
+ >
548
+ <div className="h-4 w-3/5 animate-pulse rounded bg-muted" />
549
+ <div className="h-3 w-2/5 animate-pulse rounded bg-muted" />
550
+ <div className="h-3 w-full animate-pulse rounded bg-muted" />
551
+ </div>
552
+ ))}
553
+ </div>
554
+ );
555
+ }
556
+
557
+ return (
558
+ <div aria-busy="true">
559
+ {Array.from({ length: 5 }, (_, i) => (
560
+ <div
561
+ key={i}
562
+ className="flex items-center gap-3 px-3 py-2.5"
563
+ aria-hidden="true"
564
+ >
565
+ <div className="h-4 w-4 shrink-0 animate-pulse rounded bg-muted" />
566
+ <div className="flex-1 space-y-2">
567
+ <div
568
+ className="h-4 animate-pulse rounded bg-muted"
569
+ style={{ width: `${30 + (i * 7) % 25}%` }}
570
+ />
571
+ <div
572
+ className="h-3 animate-pulse rounded bg-muted"
573
+ style={{ width: `${55 + (i * 5) % 20}%` }}
574
+ />
575
+ </div>
576
+ </div>
577
+ ))}
578
+ </div>
579
+ );
580
+ }
581
+
582
+ // ---------------------------------------------------------------------------
583
+ // Pagination
584
+ // ---------------------------------------------------------------------------
585
+
586
+ function PaginationBar({
587
+ currentPage,
588
+ totalPages,
589
+ totalCount,
590
+ onPageChange,
591
+ }: {
592
+ readonly currentPage: number;
593
+ readonly totalPages: number;
594
+ readonly totalCount: number;
595
+ readonly onPageChange: (page: number) => void;
596
+ }) {
597
+ const navBtnClass = cn(
598
+ "inline-flex items-center rounded-md p-1.5",
599
+ "border border-input bg-background text-foreground",
600
+ "hover:bg-accent hover:text-accent-foreground",
601
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
602
+ "disabled:pointer-events-none disabled:opacity-50",
603
+ );
604
+
605
+ return (
606
+ <nav
607
+ aria-label="Pagination"
608
+ className="flex items-center justify-between border-t border-border pt-3"
609
+ >
610
+ <span className="text-xs text-muted-foreground">
611
+ {totalCount.toLocaleString()}{" "}
612
+ {totalCount === 1 ? "result" : "results"}
613
+ </span>
614
+ <div className="flex items-center gap-2">
615
+ <button
616
+ type="button"
617
+ onClick={() => onPageChange(currentPage - 1)}
618
+ disabled={currentPage <= 1}
619
+ aria-label="Previous page"
620
+ className={navBtnClass}
621
+ >
622
+ <ChevronLeftIcon />
623
+ </button>
624
+ <span className="text-xs text-muted-foreground">
625
+ Page {currentPage} of {totalPages}
626
+ </span>
627
+ <button
628
+ type="button"
629
+ onClick={() => onPageChange(currentPage + 1)}
630
+ disabled={currentPage >= totalPages}
631
+ aria-label="Next page"
632
+ className={navBtnClass}
633
+ >
634
+ <ChevronRightIcon />
635
+ </button>
636
+ </div>
637
+ </nav>
638
+ );
639
+ }
640
+
641
+ // ---------------------------------------------------------------------------
642
+ // Icons
643
+ // ---------------------------------------------------------------------------
644
+
645
+ function SearchIcon({ className }: { readonly className?: string }) {
646
+ return (
647
+ <svg
648
+ className={className}
649
+ viewBox="0 0 16 16"
650
+ fill="none"
651
+ stroke="currentColor"
652
+ strokeWidth="1.5"
653
+ strokeLinecap="round"
654
+ strokeLinejoin="round"
655
+ aria-hidden="true"
656
+ >
657
+ <circle cx="6.5" cy="6.5" r="4.5" />
658
+ <path d="m10 10 4 4" />
659
+ </svg>
660
+ );
661
+ }
662
+
663
+ function ChevronLeftIcon() {
664
+ return (
665
+ <svg
666
+ className="h-3.5 w-3.5"
667
+ viewBox="0 0 16 16"
668
+ fill="none"
669
+ stroke="currentColor"
670
+ strokeWidth="1.5"
671
+ strokeLinecap="round"
672
+ strokeLinejoin="round"
673
+ aria-hidden="true"
674
+ >
675
+ <path d="m10 3-5 5 5 5" />
676
+ </svg>
677
+ );
678
+ }
679
+
680
+ function ChevronRightIcon() {
681
+ return (
682
+ <svg
683
+ className="h-3.5 w-3.5"
684
+ viewBox="0 0 16 16"
685
+ fill="none"
686
+ stroke="currentColor"
687
+ strokeWidth="1.5"
688
+ strokeLinecap="round"
689
+ strokeLinejoin="round"
690
+ aria-hidden="true"
691
+ >
692
+ <path d="m6 3 5 5-5 5" />
693
+ </svg>
694
+ );
695
+ }