@stigmer/react 0.4.8 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/action-menu/ActionMenu.d.ts +64 -0
  2. package/action-menu/ActionMenu.d.ts.map +1 -0
  3. package/action-menu/ActionMenu.js +78 -0
  4. package/action-menu/ActionMenu.js.map +1 -0
  5. package/action-menu/index.d.ts +3 -0
  6. package/action-menu/index.d.ts.map +1 -0
  7. package/action-menu/index.js +2 -0
  8. package/action-menu/index.js.map +1 -0
  9. package/action-menu/types.d.ts +65 -0
  10. package/action-menu/types.d.ts.map +1 -0
  11. package/action-menu/types.js +2 -0
  12. package/action-menu/types.js.map +1 -0
  13. package/agent/AgentCreationWizard.d.ts +55 -0
  14. package/agent/AgentCreationWizard.d.ts.map +1 -0
  15. package/agent/AgentCreationWizard.js +115 -0
  16. package/agent/AgentCreationWizard.js.map +1 -0
  17. package/agent/AgentDetailView.d.ts +77 -9
  18. package/agent/AgentDetailView.d.ts.map +1 -1
  19. package/agent/AgentDetailView.js +265 -87
  20. package/agent/AgentDetailView.js.map +1 -1
  21. package/agent/index.d.ts +8 -0
  22. package/agent/index.d.ts.map +1 -1
  23. package/agent/index.js +4 -0
  24. package/agent/index.js.map +1 -1
  25. package/agent/internal/agentToInput.d.ts +12 -0
  26. package/agent/internal/agentToInput.d.ts.map +1 -0
  27. package/agent/internal/agentToInput.js +72 -0
  28. package/agent/internal/agentToInput.js.map +1 -0
  29. package/agent/steps/CapabilitiesStep.d.ts +16 -0
  30. package/agent/steps/CapabilitiesStep.d.ts.map +1 -0
  31. package/agent/steps/CapabilitiesStep.js +80 -0
  32. package/agent/steps/CapabilitiesStep.js.map +1 -0
  33. package/agent/steps/IdentityStep.d.ts +18 -0
  34. package/agent/steps/IdentityStep.d.ts.map +1 -0
  35. package/agent/steps/IdentityStep.js +43 -0
  36. package/agent/steps/IdentityStep.js.map +1 -0
  37. package/agent/steps/ReviewStep.d.ts +23 -0
  38. package/agent/steps/ReviewStep.d.ts.map +1 -0
  39. package/agent/steps/ReviewStep.js +73 -0
  40. package/agent/steps/ReviewStep.js.map +1 -0
  41. package/agent/steps/types.d.ts +35 -0
  42. package/agent/steps/types.d.ts.map +1 -0
  43. package/agent/steps/types.js +16 -0
  44. package/agent/steps/types.js.map +1 -0
  45. package/agent/useCreateAgent.d.ts +45 -0
  46. package/agent/useCreateAgent.d.ts.map +1 -0
  47. package/agent/useCreateAgent.js +50 -0
  48. package/agent/useCreateAgent.js.map +1 -0
  49. package/agent/useUpdateAgent.d.ts +24 -0
  50. package/agent/useUpdateAgent.d.ts.map +1 -0
  51. package/agent/useUpdateAgent.js +35 -0
  52. package/agent/useUpdateAgent.js.map +1 -0
  53. package/dependency-graph/DependencyGraph.d.ts +37 -0
  54. package/dependency-graph/DependencyGraph.d.ts.map +1 -0
  55. package/dependency-graph/DependencyGraph.js +88 -0
  56. package/dependency-graph/DependencyGraph.js.map +1 -0
  57. package/dependency-graph/DependencyTreeNode.d.ts +23 -0
  58. package/dependency-graph/DependencyTreeNode.d.ts.map +1 -0
  59. package/dependency-graph/DependencyTreeNode.js +99 -0
  60. package/dependency-graph/DependencyTreeNode.js.map +1 -0
  61. package/dependency-graph/index.d.ts +4 -0
  62. package/dependency-graph/index.d.ts.map +1 -0
  63. package/dependency-graph/index.js +5 -0
  64. package/dependency-graph/index.js.map +1 -0
  65. package/dependency-graph/types.d.ts +130 -0
  66. package/dependency-graph/types.d.ts.map +1 -0
  67. package/dependency-graph/types.js +2 -0
  68. package/dependency-graph/types.js.map +1 -0
  69. package/dependency-graph/useDependencyGraph.d.ts +27 -0
  70. package/dependency-graph/useDependencyGraph.d.ts.map +1 -0
  71. package/dependency-graph/useDependencyGraph.js +129 -0
  72. package/dependency-graph/useDependencyGraph.js.map +1 -0
  73. package/empty-state/EmptyState.d.ts +29 -0
  74. package/empty-state/EmptyState.d.ts.map +1 -0
  75. package/empty-state/EmptyState.js +45 -0
  76. package/empty-state/EmptyState.js.map +1 -0
  77. package/empty-state/index.d.ts +4 -0
  78. package/empty-state/index.d.ts.map +1 -0
  79. package/empty-state/index.js +3 -0
  80. package/empty-state/index.js.map +1 -0
  81. package/empty-state/types.d.ts +73 -0
  82. package/empty-state/types.d.ts.map +1 -0
  83. package/empty-state/types.js +2 -0
  84. package/empty-state/types.js.map +1 -0
  85. package/empty-state/useEmptyState.d.ts +18 -0
  86. package/empty-state/useEmptyState.d.ts.map +1 -0
  87. package/empty-state/useEmptyState.js +72 -0
  88. package/empty-state/useEmptyState.js.map +1 -0
  89. package/feedback/StigmerToaster.d.ts +18 -0
  90. package/feedback/StigmerToaster.d.ts.map +1 -0
  91. package/feedback/StigmerToaster.js +31 -0
  92. package/feedback/StigmerToaster.js.map +1 -0
  93. package/feedback/index.d.ts +4 -0
  94. package/feedback/index.d.ts.map +1 -0
  95. package/feedback/index.js +3 -0
  96. package/feedback/index.js.map +1 -0
  97. package/feedback/toast.d.ts +14 -0
  98. package/feedback/toast.d.ts.map +1 -0
  99. package/feedback/toast.js +14 -0
  100. package/feedback/toast.js.map +1 -0
  101. package/feedback/types.d.ts +4 -0
  102. package/feedback/types.d.ts.map +1 -0
  103. package/feedback/types.js +2 -0
  104. package/feedback/types.js.map +1 -0
  105. package/index.d.ts +30 -10
  106. package/index.d.ts.map +1 -1
  107. package/index.js +29 -9
  108. package/index.js.map +1 -1
  109. package/inline-edit/InlineEditImage.d.ts +20 -0
  110. package/inline-edit/InlineEditImage.d.ts.map +1 -0
  111. package/inline-edit/InlineEditImage.js +85 -0
  112. package/inline-edit/InlineEditImage.js.map +1 -0
  113. package/inline-edit/InlineEditKeyValue.d.ts +29 -0
  114. package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
  115. package/inline-edit/InlineEditKeyValue.js +67 -0
  116. package/inline-edit/InlineEditKeyValue.js.map +1 -0
  117. package/inline-edit/InlineEditResourceList.d.ts +34 -0
  118. package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
  119. package/inline-edit/InlineEditResourceList.js +99 -0
  120. package/inline-edit/InlineEditResourceList.js.map +1 -0
  121. package/inline-edit/InlineEditSelect.d.ts +18 -0
  122. package/inline-edit/InlineEditSelect.d.ts.map +1 -0
  123. package/inline-edit/InlineEditSelect.js +54 -0
  124. package/inline-edit/InlineEditSelect.js.map +1 -0
  125. package/inline-edit/InlineEditText.d.ts +23 -0
  126. package/inline-edit/InlineEditText.d.ts.map +1 -0
  127. package/inline-edit/InlineEditText.js +79 -0
  128. package/inline-edit/InlineEditText.js.map +1 -0
  129. package/inline-edit/InlineEditTextarea.d.ts +22 -0
  130. package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
  131. package/inline-edit/InlineEditTextarea.js +83 -0
  132. package/inline-edit/InlineEditTextarea.js.map +1 -0
  133. package/inline-edit/index.d.ts +16 -0
  134. package/inline-edit/index.d.ts.map +1 -0
  135. package/inline-edit/index.js +8 -0
  136. package/inline-edit/index.js.map +1 -0
  137. package/inline-edit/types.d.ts +42 -0
  138. package/inline-edit/types.d.ts.map +1 -0
  139. package/inline-edit/types.js +2 -0
  140. package/inline-edit/types.js.map +1 -0
  141. package/inline-edit/useInlineFieldSave.d.ts +23 -0
  142. package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
  143. package/inline-edit/useInlineFieldSave.js +44 -0
  144. package/inline-edit/useInlineFieldSave.js.map +1 -0
  145. package/internal/Tabs.d.ts +4 -38
  146. package/internal/Tabs.d.ts.map +1 -1
  147. package/internal/Tabs.js +3 -62
  148. package/internal/Tabs.js.map +1 -1
  149. package/library/ImportResourceDialog.d.ts +43 -0
  150. package/library/ImportResourceDialog.d.ts.map +1 -0
  151. package/library/ImportResourceDialog.js +90 -0
  152. package/library/ImportResourceDialog.js.map +1 -0
  153. package/library/index.d.ts +7 -4
  154. package/library/index.d.ts.map +1 -1
  155. package/library/index.js +4 -2
  156. package/library/index.js.map +1 -1
  157. package/library/serialize-resource-yaml.d.ts +53 -0
  158. package/library/serialize-resource-yaml.d.ts.map +1 -1
  159. package/library/serialize-resource-yaml.js +275 -0
  160. package/library/serialize-resource-yaml.js.map +1 -1
  161. package/library/useExportResource.d.ts +56 -0
  162. package/library/useExportResource.d.ts.map +1 -0
  163. package/library/useExportResource.js +137 -0
  164. package/library/useExportResource.js.map +1 -0
  165. package/library/useImportResource.d.ts +84 -0
  166. package/library/useImportResource.d.ts.map +1 -0
  167. package/library/useImportResource.js +188 -0
  168. package/library/useImportResource.js.map +1 -0
  169. package/mcp-server/McpServerCreationWizard.d.ts +55 -0
  170. package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
  171. package/mcp-server/McpServerCreationWizard.js +121 -0
  172. package/mcp-server/McpServerCreationWizard.js.map +1 -0
  173. package/mcp-server/McpServerDetailView.d.ts +21 -1
  174. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  175. package/mcp-server/McpServerDetailView.js +113 -20
  176. package/mcp-server/McpServerDetailView.js.map +1 -1
  177. package/mcp-server/index.d.ts +8 -0
  178. package/mcp-server/index.d.ts.map +1 -1
  179. package/mcp-server/index.js +4 -0
  180. package/mcp-server/index.js.map +1 -1
  181. package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
  182. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
  183. package/mcp-server/internal/mcpServerToInput.js +81 -0
  184. package/mcp-server/internal/mcpServerToInput.js.map +1 -0
  185. package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
  186. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
  187. package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
  188. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
  189. package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
  190. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
  191. package/mcp-server/steps/IdentityTransportStep.js +73 -0
  192. package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
  193. package/mcp-server/steps/ReviewStep.d.ts +23 -0
  194. package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
  195. package/mcp-server/steps/ReviewStep.js +137 -0
  196. package/mcp-server/steps/ReviewStep.js.map +1 -0
  197. package/mcp-server/steps/types.d.ts +56 -0
  198. package/mcp-server/steps/types.d.ts.map +1 -0
  199. package/mcp-server/steps/types.js +27 -0
  200. package/mcp-server/steps/types.js.map +1 -0
  201. package/mcp-server/useCreateMcpServer.d.ts +45 -0
  202. package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
  203. package/mcp-server/useCreateMcpServer.js +50 -0
  204. package/mcp-server/useCreateMcpServer.js.map +1 -0
  205. package/mcp-server/useUpdateMcpServer.d.ts +24 -0
  206. package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
  207. package/mcp-server/useUpdateMcpServer.js +35 -0
  208. package/mcp-server/useUpdateMcpServer.js.map +1 -0
  209. package/package.json +8 -4
  210. package/resource-creation/CreationPicker.d.ts +60 -0
  211. package/resource-creation/CreationPicker.d.ts.map +1 -0
  212. package/resource-creation/CreationPicker.js +74 -0
  213. package/resource-creation/CreationPicker.js.map +1 -0
  214. package/resource-creation/StepIndicator.d.ts +28 -0
  215. package/resource-creation/StepIndicator.d.ts.map +1 -0
  216. package/resource-creation/StepIndicator.js +40 -0
  217. package/resource-creation/StepIndicator.js.map +1 -0
  218. package/resource-creation/TemplateCard.d.ts +24 -0
  219. package/resource-creation/TemplateCard.d.ts.map +1 -0
  220. package/resource-creation/TemplateCard.js +68 -0
  221. package/resource-creation/TemplateCard.js.map +1 -0
  222. package/resource-creation/TemplateGallery.d.ts +43 -0
  223. package/resource-creation/TemplateGallery.d.ts.map +1 -0
  224. package/resource-creation/TemplateGallery.js +78 -0
  225. package/resource-creation/TemplateGallery.js.map +1 -0
  226. package/resource-creation/WizardNav.d.ts +31 -0
  227. package/resource-creation/WizardNav.d.ts.map +1 -0
  228. package/resource-creation/WizardNav.js +29 -0
  229. package/resource-creation/WizardNav.js.map +1 -0
  230. package/resource-creation/WizardShell.d.ts +41 -0
  231. package/resource-creation/WizardShell.d.ts.map +1 -0
  232. package/resource-creation/WizardShell.js +55 -0
  233. package/resource-creation/WizardShell.js.map +1 -0
  234. package/resource-creation/index.d.ts +21 -0
  235. package/resource-creation/index.d.ts.map +1 -0
  236. package/resource-creation/index.js +14 -0
  237. package/resource-creation/index.js.map +1 -0
  238. package/resource-creation/templates/agent-templates.d.ts +15 -0
  239. package/resource-creation/templates/agent-templates.d.ts.map +1 -0
  240. package/resource-creation/templates/agent-templates.js +148 -0
  241. package/resource-creation/templates/agent-templates.js.map +1 -0
  242. package/resource-creation/templates/index.d.ts +5 -0
  243. package/resource-creation/templates/index.d.ts.map +1 -0
  244. package/resource-creation/templates/index.js +5 -0
  245. package/resource-creation/templates/index.js.map +1 -0
  246. package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
  247. package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
  248. package/resource-creation/templates/mcp-server-templates.js +92 -0
  249. package/resource-creation/templates/mcp-server-templates.js.map +1 -0
  250. package/resource-creation/templates/types.d.ts +48 -0
  251. package/resource-creation/templates/types.d.ts.map +1 -0
  252. package/resource-creation/templates/types.js +16 -0
  253. package/resource-creation/templates/types.js.map +1 -0
  254. package/resource-creation/types.d.ts +88 -0
  255. package/resource-creation/types.d.ts.map +1 -0
  256. package/resource-creation/types.js +2 -0
  257. package/resource-creation/types.js.map +1 -0
  258. package/resource-creation/useTemplateFilter.d.ts +43 -0
  259. package/resource-creation/useTemplateFilter.d.ts.map +1 -0
  260. package/resource-creation/useTemplateFilter.js +73 -0
  261. package/resource-creation/useTemplateFilter.js.map +1 -0
  262. package/resource-creation/useWizardState.d.ts +67 -0
  263. package/resource-creation/useWizardState.d.ts.map +1 -0
  264. package/resource-creation/useWizardState.js +143 -0
  265. package/resource-creation/useWizardState.js.map +1 -0
  266. package/resource-detail/ConfirmDialog.d.ts +44 -0
  267. package/resource-detail/ConfirmDialog.d.ts.map +1 -0
  268. package/resource-detail/ConfirmDialog.js +62 -0
  269. package/resource-detail/ConfirmDialog.js.map +1 -0
  270. package/resource-detail/ResourceActionBar.d.ts +42 -0
  271. package/resource-detail/ResourceActionBar.d.ts.map +1 -0
  272. package/resource-detail/ResourceActionBar.js +64 -0
  273. package/resource-detail/ResourceActionBar.js.map +1 -0
  274. package/resource-detail/ResourceDetailShell.d.ts +36 -0
  275. package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
  276. package/resource-detail/ResourceDetailShell.js +65 -0
  277. package/resource-detail/ResourceDetailShell.js.map +1 -0
  278. package/resource-detail/Section.d.ts +18 -0
  279. package/resource-detail/Section.d.ts.map +1 -0
  280. package/resource-detail/Section.js +18 -0
  281. package/resource-detail/Section.js.map +1 -0
  282. package/resource-detail/index.d.ts +15 -0
  283. package/resource-detail/index.d.ts.map +1 -0
  284. package/resource-detail/index.js +10 -0
  285. package/resource-detail/index.js.map +1 -0
  286. package/resource-detail/types.d.ts +146 -0
  287. package/resource-detail/types.d.ts.map +1 -0
  288. package/resource-detail/types.js +2 -0
  289. package/resource-detail/types.js.map +1 -0
  290. package/resource-detail/useConfirmAction.d.ts +41 -0
  291. package/resource-detail/useConfirmAction.d.ts.map +1 -0
  292. package/resource-detail/useConfirmAction.js +30 -0
  293. package/resource-detail/useConfirmAction.js.map +1 -0
  294. package/resource-detail/useCopyResource.d.ts +28 -0
  295. package/resource-detail/useCopyResource.d.ts.map +1 -0
  296. package/resource-detail/useCopyResource.js +46 -0
  297. package/resource-detail/useCopyResource.js.map +1 -0
  298. package/resource-detail/useDeleteResource.d.ts +40 -0
  299. package/resource-detail/useDeleteResource.d.ts.map +1 -0
  300. package/resource-detail/useDeleteResource.js +83 -0
  301. package/resource-detail/useDeleteResource.js.map +1 -0
  302. package/resource-detail/useDetailTabs.d.ts +46 -0
  303. package/resource-detail/useDetailTabs.d.ts.map +1 -0
  304. package/resource-detail/useDetailTabs.js +47 -0
  305. package/resource-detail/useDetailTabs.js.map +1 -0
  306. package/resource-workbench/components/BulkActionBar.d.ts +36 -0
  307. package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
  308. package/resource-workbench/components/BulkActionBar.js +35 -0
  309. package/resource-workbench/components/BulkActionBar.js.map +1 -0
  310. package/resource-workbench/components/ColumnHeader.d.ts +23 -0
  311. package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
  312. package/resource-workbench/components/ColumnHeader.js +25 -0
  313. package/resource-workbench/components/ColumnHeader.js.map +1 -0
  314. package/resource-workbench/components/FilterBar.d.ts +33 -0
  315. package/resource-workbench/components/FilterBar.d.ts.map +1 -0
  316. package/resource-workbench/components/FilterBar.js +72 -0
  317. package/resource-workbench/components/FilterBar.js.map +1 -0
  318. package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
  319. package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
  320. package/resource-workbench/components/ResourceAvatar.js +51 -0
  321. package/resource-workbench/components/ResourceAvatar.js.map +1 -0
  322. package/resource-workbench/components/ResourceCards.d.ts +39 -0
  323. package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
  324. package/resource-workbench/components/ResourceCards.js +41 -0
  325. package/resource-workbench/components/ResourceCards.js.map +1 -0
  326. package/resource-workbench/components/ResourceInspector.d.ts +26 -0
  327. package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
  328. package/resource-workbench/components/ResourceInspector.js +22 -0
  329. package/resource-workbench/components/ResourceInspector.js.map +1 -0
  330. package/resource-workbench/components/ResourceList.d.ts +39 -0
  331. package/resource-workbench/components/ResourceList.d.ts.map +1 -0
  332. package/resource-workbench/components/ResourceList.js +41 -0
  333. package/resource-workbench/components/ResourceList.js.map +1 -0
  334. package/resource-workbench/components/ResourceTable.d.ts +47 -0
  335. package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
  336. package/resource-workbench/components/ResourceTable.js +78 -0
  337. package/resource-workbench/components/ResourceTable.js.map +1 -0
  338. package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
  339. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
  340. package/resource-workbench/components/ResourceWorkbench.js +170 -0
  341. package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
  342. package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
  343. package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
  344. package/resource-workbench/components/SelectionCheckbox.js +16 -0
  345. package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
  346. package/resource-workbench/components/StatusBadge.d.ts +31 -0
  347. package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
  348. package/resource-workbench/components/StatusBadge.js +75 -0
  349. package/resource-workbench/components/StatusBadge.js.map +1 -0
  350. package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
  351. package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
  352. package/resource-workbench/components/ViewSwitcher.js +37 -0
  353. package/resource-workbench/components/ViewSwitcher.js.map +1 -0
  354. package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
  355. package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
  356. package/resource-workbench/hooks/useResourceCollection.js +133 -0
  357. package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
  358. package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
  359. package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
  360. package/resource-workbench/hooks/useResourceFilters.js +105 -0
  361. package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
  362. package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
  363. package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
  364. package/resource-workbench/hooks/useResourceSelection.js +123 -0
  365. package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
  366. package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
  367. package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
  368. package/resource-workbench/hooks/useViewPreference.js +60 -0
  369. package/resource-workbench/hooks/useViewPreference.js.map +1 -0
  370. package/resource-workbench/index.d.ts +34 -0
  371. package/resource-workbench/index.d.ts.map +1 -0
  372. package/resource-workbench/index.js +19 -0
  373. package/resource-workbench/index.js.map +1 -0
  374. package/resource-workbench/types.d.ts +165 -0
  375. package/resource-workbench/types.d.ts.map +1 -0
  376. package/resource-workbench/types.js +2 -0
  377. package/resource-workbench/types.js.map +1 -0
  378. package/runner/RunnerDetailView.d.ts +44 -0
  379. package/runner/RunnerDetailView.d.ts.map +1 -0
  380. package/runner/RunnerDetailView.js +154 -0
  381. package/runner/RunnerDetailView.js.map +1 -0
  382. package/runner/RunnerListPanel.d.ts +26 -1
  383. package/runner/RunnerListPanel.d.ts.map +1 -1
  384. package/runner/RunnerListPanel.js +68 -46
  385. package/runner/RunnerListPanel.js.map +1 -1
  386. package/runner/index.d.ts +7 -1
  387. package/runner/index.d.ts.map +1 -1
  388. package/runner/index.js +3 -0
  389. package/runner/index.js.map +1 -1
  390. package/runner/shared.d.ts +31 -0
  391. package/runner/shared.d.ts.map +1 -0
  392. package/runner/shared.js +55 -0
  393. package/runner/shared.js.map +1 -0
  394. package/runner/useRunner.d.ts +37 -0
  395. package/runner/useRunner.d.ts.map +1 -0
  396. package/runner/useRunner.js +24 -0
  397. package/runner/useRunner.js.map +1 -0
  398. package/session/__tests__/group-sessions.test.js +3 -3
  399. package/session/__tests__/group-sessions.test.js.map +1 -1
  400. package/skill/SkillDetailView.d.ts +70 -7
  401. package/skill/SkillDetailView.d.ts.map +1 -1
  402. package/skill/SkillDetailView.js +107 -39
  403. package/skill/SkillDetailView.js.map +1 -1
  404. package/skill/SkillDiffDialog.d.ts +42 -0
  405. package/skill/SkillDiffDialog.d.ts.map +1 -0
  406. package/skill/SkillDiffDialog.js +72 -0
  407. package/skill/SkillDiffDialog.js.map +1 -0
  408. package/skill/SkillFileBrowser.d.ts +31 -0
  409. package/skill/SkillFileBrowser.d.ts.map +1 -0
  410. package/skill/SkillFileBrowser.js +105 -0
  411. package/skill/SkillFileBrowser.js.map +1 -0
  412. package/skill/SkillUploader.d.ts +39 -0
  413. package/skill/SkillUploader.d.ts.map +1 -0
  414. package/skill/SkillUploader.js +141 -0
  415. package/skill/SkillUploader.js.map +1 -0
  416. package/skill/index.d.ts +18 -0
  417. package/skill/index.d.ts.map +1 -1
  418. package/skill/index.js +9 -0
  419. package/skill/index.js.map +1 -1
  420. package/skill/internal/computeArtifactHash.d.ts +9 -0
  421. package/skill/internal/computeArtifactHash.d.ts.map +1 -0
  422. package/skill/internal/computeArtifactHash.js +14 -0
  423. package/skill/internal/computeArtifactHash.js.map +1 -0
  424. package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
  425. package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
  426. package/skill/internal/fetchAndUnpackArtifact.js +34 -0
  427. package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
  428. package/skill/usePushSkill.d.ts +53 -0
  429. package/skill/usePushSkill.d.ts.map +1 -0
  430. package/skill/usePushSkill.js +57 -0
  431. package/skill/usePushSkill.js.map +1 -0
  432. package/skill/useSkillArtifact.d.ts +37 -0
  433. package/skill/useSkillArtifact.d.ts.map +1 -0
  434. package/skill/useSkillArtifact.js +76 -0
  435. package/skill/useSkillArtifact.js.map +1 -0
  436. package/skill/useSkillDiff.d.ts +31 -0
  437. package/skill/useSkillDiff.d.ts.map +1 -0
  438. package/skill/useSkillDiff.js +97 -0
  439. package/skill/useSkillDiff.js.map +1 -0
  440. package/skill/useSkillDuplicateCheck.d.ts +34 -0
  441. package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
  442. package/skill/useSkillDuplicateCheck.js +58 -0
  443. package/skill/useSkillDuplicateCheck.js.map +1 -0
  444. package/skill/useSkillUpload.d.ts +69 -0
  445. package/skill/useSkillUpload.d.ts.map +1 -0
  446. package/skill/useSkillUpload.js +157 -0
  447. package/skill/useSkillUpload.js.map +1 -0
  448. package/skill/useSkillVersions.d.ts +46 -0
  449. package/skill/useSkillVersions.d.ts.map +1 -0
  450. package/skill/useSkillVersions.js +104 -0
  451. package/skill/useSkillVersions.js.map +1 -0
  452. package/src/action-menu/ActionMenu.tsx +151 -0
  453. package/src/action-menu/index.ts +9 -0
  454. package/src/action-menu/types.ts +70 -0
  455. package/src/agent/AgentCreationWizard.tsx +201 -0
  456. package/src/agent/AgentDetailView.tsx +817 -321
  457. package/src/agent/index.ts +16 -0
  458. package/src/agent/internal/agentToInput.ts +95 -0
  459. package/src/agent/steps/CapabilitiesStep.tsx +363 -0
  460. package/src/agent/steps/IdentityStep.tsx +259 -0
  461. package/src/agent/steps/ReviewStep.tsx +211 -0
  462. package/src/agent/steps/types.ts +53 -0
  463. package/src/agent/useCreateAgent.ts +76 -0
  464. package/src/agent/useUpdateAgent.ts +55 -0
  465. package/src/dependency-graph/DependencyGraph.tsx +153 -0
  466. package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
  467. package/src/dependency-graph/index.ts +15 -0
  468. package/src/dependency-graph/types.ts +131 -0
  469. package/src/dependency-graph/useDependencyGraph.ts +158 -0
  470. package/src/empty-state/EmptyState.tsx +90 -0
  471. package/src/empty-state/index.ts +9 -0
  472. package/src/empty-state/types.ts +81 -0
  473. package/src/empty-state/useEmptyState.ts +85 -0
  474. package/src/feedback/StigmerToaster.tsx +45 -0
  475. package/src/feedback/index.ts +3 -0
  476. package/src/feedback/toast.ts +13 -0
  477. package/src/feedback/types.ts +7 -0
  478. package/src/index.ts +270 -8
  479. package/src/inline-edit/InlineEditImage.tsx +208 -0
  480. package/src/inline-edit/InlineEditKeyValue.tsx +278 -0
  481. package/src/inline-edit/InlineEditResourceList.tsx +325 -0
  482. package/src/inline-edit/InlineEditSelect.tsx +150 -0
  483. package/src/inline-edit/InlineEditText.tsx +211 -0
  484. package/src/inline-edit/InlineEditTextarea.tsx +209 -0
  485. package/src/inline-edit/index.ts +28 -0
  486. package/src/inline-edit/types.ts +47 -0
  487. package/src/inline-edit/useInlineFieldSave.ts +62 -0
  488. package/src/internal/Tabs.tsx +4 -164
  489. package/src/library/ImportResourceDialog.tsx +227 -0
  490. package/src/library/index.ts +18 -8
  491. package/src/library/serialize-resource-yaml.ts +356 -0
  492. package/src/library/useExportResource.ts +183 -0
  493. package/src/library/useImportResource.ts +253 -0
  494. package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
  495. package/src/mcp-server/McpServerDetailView.tsx +392 -105
  496. package/src/mcp-server/index.ts +16 -0
  497. package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
  498. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
  499. package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
  500. package/src/mcp-server/steps/ReviewStep.tsx +297 -0
  501. package/src/mcp-server/steps/types.ts +85 -0
  502. package/src/mcp-server/useCreateMcpServer.ts +76 -0
  503. package/src/mcp-server/useUpdateMcpServer.ts +55 -0
  504. package/src/resource-creation/CreationPicker.tsx +292 -0
  505. package/src/resource-creation/StepIndicator.tsx +156 -0
  506. package/src/resource-creation/TemplateCard.tsx +143 -0
  507. package/src/resource-creation/TemplateGallery.tsx +222 -0
  508. package/src/resource-creation/WizardNav.tsx +163 -0
  509. package/src/resource-creation/WizardShell.tsx +124 -0
  510. package/src/resource-creation/index.ts +45 -0
  511. package/src/resource-creation/templates/agent-templates.ts +160 -0
  512. package/src/resource-creation/templates/index.ts +7 -0
  513. package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
  514. package/src/resource-creation/templates/types.ts +64 -0
  515. package/src/resource-creation/types.ts +105 -0
  516. package/src/resource-creation/useTemplateFilter.ts +117 -0
  517. package/src/resource-creation/useWizardState.ts +223 -0
  518. package/src/resource-detail/ConfirmDialog.tsx +127 -0
  519. package/src/resource-detail/ResourceActionBar.tsx +157 -0
  520. package/src/resource-detail/ResourceDetailShell.tsx +184 -0
  521. package/src/resource-detail/Section.tsx +78 -0
  522. package/src/resource-detail/index.ts +34 -0
  523. package/src/resource-detail/types.ts +177 -0
  524. package/src/resource-detail/useConfirmAction.ts +70 -0
  525. package/src/resource-detail/useCopyResource.ts +74 -0
  526. package/src/resource-detail/useDeleteResource.ts +110 -0
  527. package/src/resource-detail/useDetailTabs.ts +93 -0
  528. package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
  529. package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
  530. package/src/resource-workbench/components/FilterBar.tsx +173 -0
  531. package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
  532. package/src/resource-workbench/components/ResourceCards.tsx +126 -0
  533. package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
  534. package/src/resource-workbench/components/ResourceList.tsx +121 -0
  535. package/src/resource-workbench/components/ResourceTable.tsx +222 -0
  536. package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
  537. package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
  538. package/src/resource-workbench/components/StatusBadge.tsx +119 -0
  539. package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
  540. package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
  541. package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
  542. package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
  543. package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
  544. package/src/resource-workbench/index.ts +73 -0
  545. package/src/resource-workbench/types.ts +220 -0
  546. package/src/runner/RunnerDetailView.tsx +410 -0
  547. package/src/runner/RunnerListPanel.tsx +126 -111
  548. package/src/runner/index.ts +13 -1
  549. package/src/runner/shared.tsx +124 -0
  550. package/src/runner/useRunner.ts +59 -0
  551. package/src/session/__tests__/group-sessions.test.ts +5 -3
  552. package/src/skill/SkillDetailView.tsx +371 -165
  553. package/src/skill/SkillDiffDialog.tsx +213 -0
  554. package/src/skill/SkillFileBrowser.tsx +289 -0
  555. package/src/skill/SkillUploader.tsx +481 -0
  556. package/src/skill/index.ts +34 -0
  557. package/src/skill/internal/computeArtifactHash.ts +13 -0
  558. package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
  559. package/src/skill/usePushSkill.ts +101 -0
  560. package/src/skill/useSkillArtifact.ts +107 -0
  561. package/src/skill/useSkillDiff.ts +128 -0
  562. package/src/skill/useSkillDuplicateCheck.ts +92 -0
  563. package/src/skill/useSkillUpload.ts +231 -0
  564. package/src/skill/useSkillVersions.ts +165 -0
  565. package/src/styles.css +28 -0
  566. package/src/tabs/Tabs.tsx +184 -0
  567. package/src/tabs/index.ts +2 -0
  568. package/src/version-history/DiffFileList.tsx +111 -0
  569. package/src/version-history/DiffSummary.tsx +61 -0
  570. package/src/version-history/DiffViewer.tsx +163 -0
  571. package/src/version-history/MultiFileDiffView.tsx +114 -0
  572. package/src/version-history/VersionTimeline.tsx +232 -0
  573. package/src/version-history/VersionTimelineEntry.tsx +254 -0
  574. package/src/version-history/computeDiff.ts +61 -0
  575. package/src/version-history/computeMultiFileDiff.ts +97 -0
  576. package/src/version-history/index.ts +22 -0
  577. package/src/version-history/types.ts +129 -0
  578. package/styles.css +1 -1
  579. package/tabs/Tabs.d.ts +58 -0
  580. package/tabs/Tabs.d.ts.map +1 -0
  581. package/tabs/Tabs.js +80 -0
  582. package/tabs/Tabs.js.map +1 -0
  583. package/tabs/index.d.ts +3 -0
  584. package/tabs/index.d.ts.map +1 -0
  585. package/tabs/index.js +2 -0
  586. package/tabs/index.js.map +1 -0
  587. package/version-history/DiffFileList.d.ts +22 -0
  588. package/version-history/DiffFileList.d.ts.map +1 -0
  589. package/version-history/DiffFileList.js +37 -0
  590. package/version-history/DiffFileList.js.map +1 -0
  591. package/version-history/DiffSummary.d.ts +21 -0
  592. package/version-history/DiffSummary.d.ts.map +1 -0
  593. package/version-history/DiffSummary.js +16 -0
  594. package/version-history/DiffSummary.js.map +1 -0
  595. package/version-history/DiffViewer.d.ts +31 -0
  596. package/version-history/DiffViewer.d.ts.map +1 -0
  597. package/version-history/DiffViewer.js +60 -0
  598. package/version-history/DiffViewer.js.map +1 -0
  599. package/version-history/MultiFileDiffView.d.ts +30 -0
  600. package/version-history/MultiFileDiffView.d.ts.map +1 -0
  601. package/version-history/MultiFileDiffView.js +40 -0
  602. package/version-history/MultiFileDiffView.js.map +1 -0
  603. package/version-history/VersionTimeline.d.ts +29 -0
  604. package/version-history/VersionTimeline.d.ts.map +1 -0
  605. package/version-history/VersionTimeline.js +87 -0
  606. package/version-history/VersionTimeline.js.map +1 -0
  607. package/version-history/VersionTimelineEntry.d.ts +22 -0
  608. package/version-history/VersionTimelineEntry.d.ts.map +1 -0
  609. package/version-history/VersionTimelineEntry.js +98 -0
  610. package/version-history/VersionTimelineEntry.js.map +1 -0
  611. package/version-history/computeDiff.d.ts +16 -0
  612. package/version-history/computeDiff.d.ts.map +1 -0
  613. package/version-history/computeDiff.js +54 -0
  614. package/version-history/computeDiff.js.map +1 -0
  615. package/version-history/computeMultiFileDiff.d.ts +15 -0
  616. package/version-history/computeMultiFileDiff.d.ts.map +1 -0
  617. package/version-history/computeMultiFileDiff.js +83 -0
  618. package/version-history/computeMultiFileDiff.js.map +1 -0
  619. package/version-history/index.d.ts +14 -0
  620. package/version-history/index.d.ts.map +1 -0
  621. package/version-history/index.js +9 -0
  622. package/version-history/index.js.map +1 -0
  623. package/version-history/types.d.ts +106 -0
  624. package/version-history/types.d.ts.map +1 -0
  625. package/version-history/types.js +2 -0
  626. package/version-history/types.js.map +1 -0
  627. package/library/ResourceListView.d.ts +0 -174
  628. package/library/ResourceListView.d.ts.map +0 -1
  629. package/library/ResourceListView.js +0 -318
  630. package/library/ResourceListView.js.map +0 -1
  631. package/src/library/ResourceListView.tsx +0 -956
@@ -15,6 +15,8 @@ import { ValidationState } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1
15
15
  import type { EnvVarDeclaration } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/spec_pb";
16
16
  import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
17
17
  import { useMcpServer } from "./useMcpServer";
18
+ import { useUpdateMcpServer } from "./useUpdateMcpServer";
19
+ import { mcpServerToInput } from "./internal/mcpServerToInput";
18
20
  import { useMcpServerConnect } from "./useMcpServerConnect";
19
21
  import { useMcpServerCredentials } from "./useMcpServerCredentials";
20
22
  import { useMcpServerOAuthConnect } from "./useMcpServerOAuthConnect";
@@ -26,7 +28,16 @@ import { ErrorMessage } from "../error/ErrorMessage";
26
28
  import { EnvVarForm } from "../environment/EnvVarForm";
27
29
  import type { EnvVarFormVariable } from "../environment/EnvVarForm";
28
30
  import { VisibilityToggle } from "../library/VisibilityToggle";
29
- import { Tabs, type TabItem } from "../internal/Tabs";
31
+ import { Tabs, type TabItem } from "../tabs/Tabs";
32
+ import { ResourceActionBar } from "../resource-detail/ResourceActionBar";
33
+ import { Section } from "../resource-detail/Section";
34
+ import type { DetailAction } from "../resource-detail/types";
35
+ import { InlineEditText } from "../inline-edit/InlineEditText";
36
+ import { InlineEditTextarea } from "../inline-edit/InlineEditTextarea";
37
+ import { InlineEditImage } from "../inline-edit/InlineEditImage";
38
+ import { InlineEditSelect } from "../inline-edit/InlineEditSelect";
39
+ import { InlineEditKeyValue } from "../inline-edit/InlineEditKeyValue";
40
+ import type { KeyValueRow, SelectOption } from "../inline-edit/types";
30
41
 
31
42
  /** Tab identifier for the MCP server capability panel. */
32
43
  export type CapabilityTab = "tools" | "policies" | "resources";
@@ -85,6 +96,24 @@ export interface McpServerDetailViewProps {
85
96
  * When omitted, falls back to the `org` prop (MCP server's org).
86
97
  */
87
98
  readonly activeOrg?: string;
99
+ /**
100
+ * Primary action rendered as a visible button in the header area.
101
+ */
102
+ readonly primaryAction?: DetailAction;
103
+ /**
104
+ * Secondary actions rendered in the kebab overflow menu.
105
+ */
106
+ readonly actions?: readonly DetailAction[];
107
+ /**
108
+ * When `true`, fields on the detail view become click-to-edit.
109
+ * Each field saves independently via `stigmer.mcpServer.update()`.
110
+ * @default false
111
+ */
112
+ readonly editable?: boolean;
113
+ /**
114
+ * Called after a successful inline field save with the updated server.
115
+ */
116
+ readonly onResourceUpdated?: (server: McpServer) => void;
88
117
  /** Additional CSS classes for the root container. */
89
118
  readonly className?: string;
90
119
  }
@@ -123,9 +152,34 @@ export function McpServerDetailView({
123
152
  defaultShowCredentialForm = false,
124
153
  credentialPoolValues,
125
154
  activeOrg,
155
+ primaryAction,
156
+ actions,
157
+ editable = false,
158
+ onResourceUpdated,
126
159
  className,
127
160
  }: McpServerDetailViewProps) {
128
161
  const { mcpServer, isLoading, error, refetch } = useMcpServer(org, slug);
162
+ const { update: updateMcpServer, isUpdating } = useUpdateMcpServer();
163
+
164
+ const saveMcpField = useCallback(
165
+ async <K extends keyof import("@stigmer/sdk").McpServerInput>(
166
+ field: K,
167
+ value: import("@stigmer/sdk").McpServerInput[K],
168
+ ): Promise<boolean> => {
169
+ if (!mcpServer) return false;
170
+ const input = mcpServerToInput(mcpServer);
171
+ (input as unknown as Record<string, unknown>)[field] = value;
172
+ try {
173
+ const updated = await updateMcpServer(input);
174
+ onResourceUpdated?.(updated);
175
+ refetch();
176
+ return true;
177
+ } catch {
178
+ return false;
179
+ }
180
+ },
181
+ [mcpServer, updateMcpServer, onResourceUpdated, refetch],
182
+ );
129
183
  const credentials = useMcpServerCredentials(activeOrg ?? org, mcpServer ?? null);
130
184
  const connection = useMcpServerConnect();
131
185
  const oauth = useMcpServerOAuthConnect();
@@ -312,33 +366,73 @@ export function McpServerDetailView({
312
366
  <ValidationBanner message={status.validationMessage} />
313
367
  )}
314
368
 
315
- <Header
316
- server={mcpServer}
317
- createdAt={
318
- specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null
319
- }
320
- updatedAt={
321
- specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null
322
- }
323
- lastDiscoveredAt={
324
- capabilities?.lastDiscoveredAt
325
- ? timestampDate(capabilities.lastDiscoveredAt)
326
- : null
327
- }
328
- onVisibilityChange={onVisibilityChange}
329
- isVisibilityPending={isVisibilityPending}
330
- />
369
+ <div className="flex items-start justify-between gap-4">
370
+ <Header
371
+ server={mcpServer}
372
+ createdAt={
373
+ specAudit?.createdAt ? timestampDate(specAudit.createdAt) : null
374
+ }
375
+ updatedAt={
376
+ specAudit?.updatedAt ? timestampDate(specAudit.updatedAt) : null
377
+ }
378
+ lastDiscoveredAt={
379
+ capabilities?.lastDiscoveredAt
380
+ ? timestampDate(capabilities.lastDiscoveredAt)
381
+ : null
382
+ }
383
+ onVisibilityChange={onVisibilityChange}
384
+ isVisibilityPending={isVisibilityPending}
385
+ editable={editable}
386
+ isSaving={isUpdating}
387
+ saveMcpField={saveMcpField}
388
+ />
389
+ <ResourceActionBar
390
+ primaryAction={primaryAction}
391
+ actions={actions}
392
+ className="shrink-0"
393
+ />
394
+ </div>
395
+
396
+ {(editable || spec?.description) && (
397
+ <Section title="Description">
398
+ {editable && saveMcpField ? (
399
+ <div className="max-h-20 overflow-y-auto p-3">
400
+ <InlineEditTextarea
401
+ value={spec?.description || ""}
402
+ onSave={(v) => saveMcpField("description", v || undefined)}
403
+ isSaving={isUpdating}
404
+ placeholder="Add a description"
405
+ minRows={2}
406
+ />
407
+ </div>
408
+ ) : (
409
+ <div className="p-3">
410
+ <pre className="whitespace-pre-wrap break-words text-sm text-foreground font-sans">
411
+ {spec?.description}
412
+ </pre>
413
+ </div>
414
+ )}
415
+ </Section>
416
+ )}
331
417
 
332
418
  {hasSource && <SourceSection spec={spec} />}
333
419
 
334
- {spec?.serverType.case && (
335
- <ServerConfigSection serverType={spec.serverType} />
420
+ {(editable || spec?.serverType.case) && (
421
+ <ServerConfigSection
422
+ serverType={spec?.serverType}
423
+ editable={editable}
424
+ isSaving={isUpdating}
425
+ saveMcpField={saveMcpField}
426
+ />
336
427
  )}
337
428
 
338
- {spec?.env && Object.keys(spec.env).length > 0 && (
429
+ {(editable || (spec?.env && Object.keys(spec.env).length > 0)) && (
339
430
  <EnvSection
340
- data={spec.env}
431
+ data={spec?.env ?? {}}
341
432
  oauthTargetEnvVar={credentials.oauthTargetEnvVar}
433
+ editable={editable}
434
+ isSaving={isUpdating}
435
+ saveMcpField={saveMcpField}
342
436
  />
343
437
  )}
344
438
 
@@ -455,7 +549,9 @@ export function McpServerDetailView({
455
549
  </Tabs>
456
550
  </Section>
457
551
 
458
- {spec && spec.tags.length > 0 && <TagsSection tags={spec.tags} />}
552
+ {(editable || (spec && spec.tags.length > 0)) && (
553
+ <TagsSection tags={spec?.tags ?? []} editable={editable} isSaving={isUpdating} saveMcpField={saveMcpField} />
554
+ )}
459
555
  </div>
460
556
  );
461
557
  }
@@ -1039,6 +1135,9 @@ function Header({
1039
1135
  lastDiscoveredAt,
1040
1136
  onVisibilityChange,
1041
1137
  isVisibilityPending,
1138
+ editable,
1139
+ isSaving,
1140
+ saveMcpField,
1042
1141
  }: {
1043
1142
  readonly server: McpServer;
1044
1143
  readonly createdAt: Date | null;
@@ -1046,6 +1145,12 @@ function Header({
1046
1145
  readonly lastDiscoveredAt: Date | null;
1047
1146
  readonly onVisibilityChange?: (v: ApiResourceVisibility) => void;
1048
1147
  readonly isVisibilityPending?: boolean;
1148
+ readonly editable?: boolean;
1149
+ readonly isSaving?: boolean;
1150
+ readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
1151
+ field: K,
1152
+ value: import("@stigmer/sdk").McpServerInput[K],
1153
+ ) => Promise<boolean>;
1049
1154
  }) {
1050
1155
  const meta = server.metadata;
1051
1156
  const spec = server.spec;
@@ -1056,7 +1161,15 @@ function Header({
1056
1161
 
1057
1162
  return (
1058
1163
  <div className="flex items-start gap-3">
1059
- {spec?.iconUrl ? (
1164
+ {editable && saveMcpField ? (
1165
+ <InlineEditImage
1166
+ value={spec?.iconUrl ?? ""}
1167
+ onSave={(v) => saveMcpField("iconUrl", v || undefined)}
1168
+ isSaving={isSaving}
1169
+ fallback={<McpServerIcon className="size-6 text-muted-foreground" />}
1170
+ size="md"
1171
+ />
1172
+ ) : spec?.iconUrl ? (
1060
1173
  <img
1061
1174
  src={spec.iconUrl}
1062
1175
  alt=""
@@ -1067,9 +1180,20 @@ function Header({
1067
1180
  )}
1068
1181
  <div className="min-w-0 flex-1">
1069
1182
  <div className="flex items-center gap-2">
1070
- <h2 className="truncate text-lg font-semibold text-foreground">
1071
- {displayName}
1072
- </h2>
1183
+ {editable && saveMcpField ? (
1184
+ <InlineEditText
1185
+ value={meta?.name || ""}
1186
+ onSave={(v) => saveMcpField("name", v)}
1187
+ isSaving={isSaving}
1188
+ variant="heading"
1189
+ placeholder="Server name"
1190
+ validate={(v) => (v.trim() ? null : "Name is required")}
1191
+ />
1192
+ ) : (
1193
+ <h2 className="truncate text-lg font-semibold text-foreground">
1194
+ {displayName}
1195
+ </h2>
1196
+ )}
1073
1197
  {onVisibilityChange && meta ? (
1074
1198
  <VisibilityToggle
1075
1199
  visibility={meta.visibility}
@@ -1113,11 +1237,6 @@ function Header({
1113
1237
  </>
1114
1238
  )}
1115
1239
  </div>
1116
- {spec?.description && (
1117
- <p className="mt-2 text-sm text-muted-foreground">
1118
- {spec.description}
1119
- </p>
1120
- )}
1121
1240
  </div>
1122
1241
  </div>
1123
1242
  );
@@ -1151,13 +1270,40 @@ function ValidationStateBadge({
1151
1270
  }
1152
1271
  }
1153
1272
 
1273
+ const TRANSPORT_OPTIONS: SelectOption[] = [
1274
+ { value: "http", label: "HTTP", description: "Connect via HTTP/SSE endpoint" },
1275
+ { value: "stdio", label: "Stdio", description: "Launch a local process with stdin/stdout" },
1276
+ ];
1277
+
1154
1278
  function ServerConfigSection({
1155
1279
  serverType,
1280
+ editable,
1281
+ isSaving,
1282
+ saveMcpField,
1156
1283
  }: {
1157
- readonly serverType: NonNullable<
1158
- import("@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/spec_pb").McpServerSpec["serverType"]
1159
- >;
1284
+ readonly serverType?: import("@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/spec_pb").McpServerSpec["serverType"];
1285
+ readonly editable?: boolean;
1286
+ readonly isSaving?: boolean;
1287
+ readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
1288
+ field: K,
1289
+ value: import("@stigmer/sdk").McpServerInput[K],
1290
+ ) => Promise<boolean>;
1160
1291
  }) {
1292
+ const handleTransportChange = useCallback(
1293
+ async (newType: string) => {
1294
+ if (!saveMcpField) return false;
1295
+ if (newType === "http") {
1296
+ const ok = await saveMcpField("http", { url: "" });
1297
+ if (ok) await saveMcpField("stdio", undefined);
1298
+ return ok;
1299
+ }
1300
+ const ok = await saveMcpField("stdio", { command: "" });
1301
+ if (ok) await saveMcpField("http", undefined);
1302
+ return ok;
1303
+ },
1304
+ [saveMcpField],
1305
+ );
1306
+
1161
1307
  return (
1162
1308
  <Section title="Server Configuration">
1163
1309
  <div className="flex flex-col gap-2 p-3">
@@ -1165,54 +1311,125 @@ function ServerConfigSection({
1165
1311
  <span className="text-xs font-medium text-muted-foreground">
1166
1312
  Type
1167
1313
  </span>
1168
- <span className="rounded bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground">
1169
- {serverType.case}
1170
- </span>
1314
+ {editable && saveMcpField ? (
1315
+ <InlineEditSelect
1316
+ value={serverType?.case ?? "http"}
1317
+ options={TRANSPORT_OPTIONS}
1318
+ onSave={handleTransportChange}
1319
+ isSaving={isSaving}
1320
+ />
1321
+ ) : (
1322
+ <span className="rounded bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground">
1323
+ {serverType?.case ?? "none"}
1324
+ </span>
1325
+ )}
1171
1326
  </div>
1172
1327
 
1173
- {serverType.case === "stdio" && (
1328
+ {serverType?.case === "stdio" && (
1174
1329
  <>
1175
1330
  <div className="flex items-baseline gap-2">
1176
1331
  <span className="text-xs font-medium text-muted-foreground">
1177
1332
  Command
1178
1333
  </span>
1179
- <code className="font-mono text-sm text-foreground">
1180
- {serverType.value.command}
1181
- {serverType.value.args.length > 0 &&
1182
- ` ${serverType.value.args.join(" ")}`}
1183
- </code>
1334
+ {editable && saveMcpField ? (
1335
+ <InlineEditText
1336
+ value={`${serverType.value.command}${serverType.value.args.length > 0 ? ` ${serverType.value.args.join(" ")}` : ""}`}
1337
+ onSave={async (v) => {
1338
+ const parts = v.trim().split(/\s+/);
1339
+ return saveMcpField("stdio", {
1340
+ command: parts[0] || "",
1341
+ args: parts.slice(1),
1342
+ });
1343
+ }}
1344
+ isSaving={isSaving}
1345
+ placeholder="e.g. npx -y @modelcontextprotocol/server"
1346
+ />
1347
+ ) : (
1348
+ <code className="font-mono text-sm text-foreground">
1349
+ {serverType.value.command}
1350
+ {serverType.value.args.length > 0 &&
1351
+ ` ${serverType.value.args.join(" ")}`}
1352
+ </code>
1353
+ )}
1184
1354
  </div>
1185
- {serverType.value.workingDir && (
1355
+ {(editable || serverType.value.workingDir) && (
1186
1356
  <div className="flex items-baseline gap-2">
1187
1357
  <span className="text-xs font-medium text-muted-foreground">
1188
1358
  Working Dir
1189
1359
  </span>
1190
- <code className="font-mono text-xs text-foreground">
1191
- {serverType.value.workingDir}
1192
- </code>
1360
+ {editable && saveMcpField ? (
1361
+ <InlineEditText
1362
+ value={serverType.value.workingDir ?? ""}
1363
+ onSave={async (v) =>
1364
+ saveMcpField("stdio", {
1365
+ command: serverType.value.command,
1366
+ args: [...serverType.value.args],
1367
+ workingDir: v || undefined,
1368
+ })
1369
+ }
1370
+ isSaving={isSaving}
1371
+ placeholder="/path/to/working/dir"
1372
+ />
1373
+ ) : (
1374
+ <code className="font-mono text-xs text-foreground">
1375
+ {serverType.value.workingDir}
1376
+ </code>
1377
+ )}
1193
1378
  </div>
1194
1379
  )}
1195
1380
  </>
1196
1381
  )}
1197
1382
 
1198
- {serverType.case === "http" && (
1383
+ {serverType?.case === "http" && (
1199
1384
  <>
1200
1385
  <div className="flex items-baseline gap-2">
1201
1386
  <span className="text-xs font-medium text-muted-foreground">
1202
1387
  URL
1203
1388
  </span>
1204
- <code className="break-all font-mono text-sm text-foreground">
1205
- {serverType.value.url}
1206
- </code>
1389
+ {editable && saveMcpField ? (
1390
+ <InlineEditText
1391
+ value={serverType.value.url}
1392
+ onSave={async (v) =>
1393
+ saveMcpField("http", {
1394
+ url: v,
1395
+ timeoutSeconds: serverType.value.timeoutSeconds || undefined,
1396
+ })
1397
+ }
1398
+ isSaving={isSaving}
1399
+ placeholder="https://example.com/mcp"
1400
+ />
1401
+ ) : (
1402
+ <code className="break-all font-mono text-sm text-foreground">
1403
+ {serverType.value.url}
1404
+ </code>
1405
+ )}
1207
1406
  </div>
1208
- {serverType.value.timeoutSeconds > 0 && (
1407
+ {(editable || serverType.value.timeoutSeconds > 0) && (
1209
1408
  <div className="flex items-baseline gap-2">
1210
1409
  <span className="text-xs font-medium text-muted-foreground">
1211
1410
  Timeout
1212
1411
  </span>
1213
- <span className="text-xs text-foreground">
1214
- {serverType.value.timeoutSeconds}s
1215
- </span>
1412
+ {editable && saveMcpField ? (
1413
+ <InlineEditText
1414
+ value={serverType.value.timeoutSeconds > 0 ? String(serverType.value.timeoutSeconds) : ""}
1415
+ onSave={async (v) =>
1416
+ saveMcpField("http", {
1417
+ url: serverType.value.url,
1418
+ timeoutSeconds: v ? Number(v) : undefined,
1419
+ })
1420
+ }
1421
+ isSaving={isSaving}
1422
+ placeholder="30"
1423
+ validate={(v) => {
1424
+ if (v && (isNaN(Number(v)) || Number(v) < 0)) return "Must be a positive number";
1425
+ return null;
1426
+ }}
1427
+ />
1428
+ ) : (
1429
+ <span className="text-xs text-foreground">
1430
+ {serverType.value.timeoutSeconds}s
1431
+ </span>
1432
+ )}
1216
1433
  </div>
1217
1434
  )}
1218
1435
  </>
@@ -1294,53 +1511,138 @@ function ResourceTemplatesList({
1294
1511
  function EnvSection({
1295
1512
  data,
1296
1513
  oauthTargetEnvVar,
1514
+ editable,
1515
+ isSaving,
1516
+ saveMcpField,
1297
1517
  }: {
1298
1518
  readonly data: { [key: string]: EnvVarDeclaration };
1299
1519
  readonly oauthTargetEnvVar: string | null;
1520
+ readonly editable?: boolean;
1521
+ readonly isSaving?: boolean;
1522
+ readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
1523
+ field: K,
1524
+ value: import("@stigmer/sdk").McpServerInput[K],
1525
+ ) => Promise<boolean>;
1300
1526
  }) {
1301
1527
  const entries = Object.entries(data).sort(([a], [b]) =>
1302
1528
  a.localeCompare(b),
1303
1529
  );
1304
1530
 
1531
+ const envRows: KeyValueRow[] = useMemo(
1532
+ () =>
1533
+ entries.map(([key, decl]) => ({
1534
+ key,
1535
+ value: "",
1536
+ isSecret: decl.isSecret,
1537
+ description: decl.description,
1538
+ optional: decl.optional,
1539
+ })),
1540
+ [entries],
1541
+ );
1542
+
1543
+ const handleEnvSave = useCallback(
1544
+ async (rows: KeyValueRow[]) => {
1545
+ if (!saveMcpField) return false;
1546
+ const env: Record<string, { isSecret?: boolean; description?: string; optional?: boolean }> = {};
1547
+ for (const row of rows) {
1548
+ if (row.key.trim()) {
1549
+ env[row.key.trim()] = {
1550
+ isSecret: row.isSecret || undefined,
1551
+ description: row.description || undefined,
1552
+ optional: row.optional || undefined,
1553
+ };
1554
+ }
1555
+ }
1556
+ return saveMcpField("env", Object.keys(env).length > 0 ? env : undefined);
1557
+ },
1558
+ [saveMcpField],
1559
+ );
1560
+
1561
+ const [envEditing, setEnvEditing] = useState(false);
1562
+
1305
1563
  return (
1306
- <Section title={`Environment Variables (${entries.length})`}>
1307
- <div className="flex flex-col divide-y divide-border">
1308
- {entries.map(([name, env]) => {
1309
- const isOAuthManaged = name === oauthTargetEnvVar;
1310
- return (
1311
- <div key={name} className="flex items-start gap-3 px-3 py-2">
1312
- <code className="shrink-0 font-mono text-sm font-medium text-foreground">
1313
- {name}
1314
- </code>
1315
- <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
1316
- {env.isSecret ? "secret" : "config"}
1317
- </span>
1318
- {isOAuthManaged && (
1319
- <span className="shrink-0 rounded bg-primary-subtle px-1.5 py-0.5 text-[10px] font-medium text-primary">
1320
- oauth
1321
- </span>
1322
- )}
1323
- {env.optional && (
1324
- <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground-subtle">
1325
- optional
1326
- </span>
1327
- )}
1328
- {env.description && (
1329
- <span className="text-xs text-muted-foreground">
1330
- {env.description}
1564
+ <Section title="Environment Variables" count={entries.length} onEdit={editable ? () => setEnvEditing((v) => !v) : undefined}>
1565
+ {editable ? (
1566
+ <InlineEditKeyValue
1567
+ value={envRows}
1568
+ onSave={handleEnvSave}
1569
+ isSaving={isSaving}
1570
+ editing={envEditing}
1571
+ onEditingChange={setEnvEditing}
1572
+ showSecretToggle
1573
+ showOptionalToggle
1574
+ showDescription
1575
+ keyLabel="Variable name"
1576
+ />
1577
+ ) : (
1578
+ <div className="flex flex-col divide-y divide-border">
1579
+ {entries.map(([name, env]) => {
1580
+ const isOAuthManaged = name === oauthTargetEnvVar;
1581
+ return (
1582
+ <div key={name} className="flex items-start gap-3 px-3 py-2">
1583
+ <code className="shrink-0 font-mono text-sm font-medium text-foreground">
1584
+ {name}
1585
+ </code>
1586
+ <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground">
1587
+ {env.isSecret ? "secret" : "config"}
1331
1588
  </span>
1332
- )}
1333
- </div>
1334
- );
1335
- })}
1336
- </div>
1589
+ {isOAuthManaged && (
1590
+ <span className="shrink-0 rounded bg-primary-subtle px-1.5 py-0.5 text-[10px] font-medium text-primary">
1591
+ oauth
1592
+ </span>
1593
+ )}
1594
+ {env.optional && (
1595
+ <span className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground-subtle">
1596
+ optional
1597
+ </span>
1598
+ )}
1599
+ {env.description && (
1600
+ <span className="text-xs text-muted-foreground">
1601
+ {env.description}
1602
+ </span>
1603
+ )}
1604
+ </div>
1605
+ );
1606
+ })}
1607
+ </div>
1608
+ )}
1337
1609
  </Section>
1338
1610
  );
1339
1611
  }
1340
1612
 
1341
- function TagsSection({ tags }: { readonly tags: readonly string[] }) {
1613
+ function TagsSection({
1614
+ tags,
1615
+ editable,
1616
+ isSaving,
1617
+ saveMcpField,
1618
+ }: {
1619
+ readonly tags: readonly string[];
1620
+ readonly editable?: boolean;
1621
+ readonly isSaving?: boolean;
1622
+ readonly saveMcpField?: <K extends keyof import("@stigmer/sdk").McpServerInput>(
1623
+ field: K,
1624
+ value: import("@stigmer/sdk").McpServerInput[K],
1625
+ ) => Promise<boolean>;
1626
+ }) {
1627
+ const tagRows: KeyValueRow[] = useMemo(
1628
+ () => tags.map((t) => ({ key: t, value: "" })),
1629
+ [tags],
1630
+ );
1631
+
1632
+ const handleTagsSave = useCallback(
1633
+ async (rows: KeyValueRow[]) => {
1634
+ if (!saveMcpField) return false;
1635
+ // Tags are stored as string[] on the spec but not directly on McpServerInput.
1636
+ // For now, save them through the full input by modifying the spec.
1637
+ // Tags don't have a direct field on McpServerInput, so we handle this at
1638
+ // a higher level if needed. For now, show read-only in edit mode.
1639
+ return false;
1640
+ },
1641
+ [saveMcpField],
1642
+ );
1643
+
1342
1644
  return (
1343
- <Section title={`Tags (${tags.length})`}>
1645
+ <Section title="Tags" count={tags.length}>
1344
1646
  <div className="flex flex-wrap gap-1.5 p-3">
1345
1647
  {tags.map((tag) => (
1346
1648
  <span
@@ -1350,6 +1652,9 @@ function TagsSection({ tags }: { readonly tags: readonly string[] }) {
1350
1652
  {tag}
1351
1653
  </span>
1352
1654
  ))}
1655
+ {editable && tags.length === 0 && (
1656
+ <p className="text-xs text-muted-foreground italic">No tags</p>
1657
+ )}
1353
1658
  </div>
1354
1659
  </Section>
1355
1660
  );
@@ -1484,24 +1789,6 @@ function PolicyGroup({
1484
1789
  // Shared layout primitives
1485
1790
  // ---------------------------------------------------------------------------
1486
1791
 
1487
- function Section({
1488
- title,
1489
- children,
1490
- }: {
1491
- readonly title: string;
1492
- readonly children: React.ReactNode;
1493
- }) {
1494
- return (
1495
- <section>
1496
- <h3 className="mb-2 text-xs font-medium uppercase tracking-wider text-muted-foreground">
1497
- {title}
1498
- </h3>
1499
- <div className="overflow-hidden rounded-lg border border-border">
1500
- {children}
1501
- </div>
1502
- </section>
1503
- );
1504
- }
1505
1792
 
1506
1793
  function Dot() {
1507
1794
  return (
@@ -85,3 +85,19 @@ export type {
85
85
 
86
86
  export { McpServerConnectDialog } from "./McpServerConnectDialog";
87
87
  export type { McpServerConnectDialogProps } from "./McpServerConnectDialog";
88
+
89
+ export { useCreateMcpServer } from "./useCreateMcpServer";
90
+ export type { UseCreateMcpServerReturn } from "./useCreateMcpServer";
91
+
92
+ export { useUpdateMcpServer } from "./useUpdateMcpServer";
93
+ export type { UseUpdateMcpServerReturn } from "./useUpdateMcpServer";
94
+
95
+ export { mcpServerToInput } from "./internal/mcpServerToInput";
96
+
97
+ export { McpServerCreationWizard } from "./McpServerCreationWizard";
98
+ export type {
99
+ McpServerCreationWizardProps,
100
+ McpServerCreationResult,
101
+ } from "./McpServerCreationWizard";
102
+
103
+ export type { McpServerWizardData } from "./steps/types";