@stigmer/react 3.2.3 → 3.3.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 (402) hide show
  1. package/agent/steps/ReviewStep.d.ts.map +1 -1
  2. package/agent/steps/ReviewStep.js +2 -3
  3. package/agent/steps/ReviewStep.js.map +1 -1
  4. package/billing/BaselineEditor.d.ts +9 -0
  5. package/billing/BaselineEditor.d.ts.map +1 -0
  6. package/billing/BaselineEditor.js +253 -0
  7. package/billing/BaselineEditor.js.map +1 -0
  8. package/billing/ModelCatalogPanel.d.ts +28 -0
  9. package/billing/ModelCatalogPanel.d.ts.map +1 -0
  10. package/billing/ModelCatalogPanel.js +102 -0
  11. package/billing/ModelCatalogPanel.js.map +1 -0
  12. package/billing/ModelGovernanceDetail.d.ts +8 -0
  13. package/billing/ModelGovernanceDetail.d.ts.map +1 -0
  14. package/billing/ModelGovernanceDetail.js +64 -0
  15. package/billing/ModelGovernanceDetail.js.map +1 -0
  16. package/billing/OperatorAccessNotice.d.ts +12 -0
  17. package/billing/OperatorAccessNotice.d.ts.map +1 -0
  18. package/billing/OperatorAccessNotice.js +15 -0
  19. package/billing/OperatorAccessNotice.js.map +1 -0
  20. package/billing/PricingGovernanceConsole.d.ts +57 -0
  21. package/billing/PricingGovernanceConsole.d.ts.map +1 -0
  22. package/billing/PricingGovernanceConsole.js +164 -0
  23. package/billing/PricingGovernanceConsole.js.map +1 -0
  24. package/billing/PricingGovernancePanel.d.ts +26 -0
  25. package/billing/PricingGovernancePanel.d.ts.map +1 -0
  26. package/billing/PricingGovernancePanel.js +64 -0
  27. package/billing/PricingGovernancePanel.js.map +1 -0
  28. package/billing/RetireConfirm.d.ts +9 -0
  29. package/billing/RetireConfirm.d.ts.map +1 -0
  30. package/billing/RetireConfirm.js +19 -0
  31. package/billing/RetireConfirm.js.map +1 -0
  32. package/billing/form-primitives.d.ts +18 -0
  33. package/billing/form-primitives.d.ts.map +1 -0
  34. package/billing/form-primitives.js +19 -0
  35. package/billing/form-primitives.js.map +1 -0
  36. package/billing/governance-primitives.d.ts +33 -0
  37. package/billing/governance-primitives.d.ts.map +1 -0
  38. package/billing/governance-primitives.js +43 -0
  39. package/billing/governance-primitives.js.map +1 -0
  40. package/billing/index.d.ts +18 -0
  41. package/billing/index.d.ts.map +1 -1
  42. package/billing/index.js +9 -0
  43. package/billing/index.js.map +1 -1
  44. package/billing/pricing-format.d.ts +12 -0
  45. package/billing/pricing-format.d.ts.map +1 -0
  46. package/billing/pricing-format.js +50 -0
  47. package/billing/pricing-format.js.map +1 -0
  48. package/billing/useDecidePricingOverride.d.ts +46 -0
  49. package/billing/useDecidePricingOverride.d.ts.map +1 -0
  50. package/billing/useDecidePricingOverride.js +44 -0
  51. package/billing/useDecidePricingOverride.js.map +1 -0
  52. package/billing/useModelGovernanceView.d.ts +103 -0
  53. package/billing/useModelGovernanceView.d.ts.map +1 -0
  54. package/billing/useModelGovernanceView.js +144 -0
  55. package/billing/useModelGovernanceView.js.map +1 -0
  56. package/billing/useModelPricingBaselines.d.ts +40 -0
  57. package/billing/useModelPricingBaselines.d.ts.map +1 -0
  58. package/billing/useModelPricingBaselines.js +32 -0
  59. package/billing/useModelPricingBaselines.js.map +1 -0
  60. package/billing/usePricingGovernance.d.ts +39 -0
  61. package/billing/usePricingGovernance.d.ts.map +1 -0
  62. package/billing/usePricingGovernance.js +31 -0
  63. package/billing/usePricingGovernance.js.map +1 -0
  64. package/billing/useRetireModelPricingBaseline.d.ts +31 -0
  65. package/billing/useRetireModelPricingBaseline.d.ts.map +1 -0
  66. package/billing/useRetireModelPricingBaseline.js +36 -0
  67. package/billing/useRetireModelPricingBaseline.js.map +1 -0
  68. package/billing/useUpsertModelPricingBaseline.d.ts +38 -0
  69. package/billing/useUpsertModelPricingBaseline.d.ts.map +1 -0
  70. package/billing/useUpsertModelPricingBaseline.js +37 -0
  71. package/billing/useUpsertModelPricingBaseline.js.map +1 -0
  72. package/channel/AgentChannelsPanel.d.ts.map +1 -1
  73. package/channel/AgentChannelsPanel.js +11 -5
  74. package/channel/AgentChannelsPanel.js.map +1 -1
  75. package/composer/SessionComposer.d.ts +1 -1
  76. package/cursor-accounts/CursorAccountEditor.d.ts +28 -0
  77. package/cursor-accounts/CursorAccountEditor.d.ts.map +1 -0
  78. package/cursor-accounts/CursorAccountEditor.js +51 -0
  79. package/cursor-accounts/CursorAccountEditor.js.map +1 -0
  80. package/cursor-accounts/CursorAccountsAccessNotice.d.ts +11 -0
  81. package/cursor-accounts/CursorAccountsAccessNotice.d.ts.map +1 -0
  82. package/cursor-accounts/CursorAccountsAccessNotice.js +14 -0
  83. package/cursor-accounts/CursorAccountsAccessNotice.js.map +1 -0
  84. package/cursor-accounts/CursorAccountsConsole.d.ts +28 -0
  85. package/cursor-accounts/CursorAccountsConsole.d.ts.map +1 -0
  86. package/cursor-accounts/CursorAccountsConsole.js +275 -0
  87. package/cursor-accounts/CursorAccountsConsole.js.map +1 -0
  88. package/cursor-accounts/cursor-account-format.d.ts +10 -0
  89. package/cursor-accounts/cursor-account-format.d.ts.map +1 -0
  90. package/cursor-accounts/cursor-account-format.js +26 -0
  91. package/cursor-accounts/cursor-account-format.js.map +1 -0
  92. package/cursor-accounts/index.d.ts +18 -0
  93. package/cursor-accounts/index.d.ts.map +1 -0
  94. package/cursor-accounts/index.js +13 -0
  95. package/cursor-accounts/index.js.map +1 -0
  96. package/cursor-accounts/useCursorAccountView.d.ts +30 -0
  97. package/cursor-accounts/useCursorAccountView.d.ts.map +1 -0
  98. package/cursor-accounts/useCursorAccountView.js +25 -0
  99. package/cursor-accounts/useCursorAccountView.js.map +1 -0
  100. package/cursor-accounts/useCursorAccounts.d.ts +33 -0
  101. package/cursor-accounts/useCursorAccounts.d.ts.map +1 -0
  102. package/cursor-accounts/useCursorAccounts.js +25 -0
  103. package/cursor-accounts/useCursorAccounts.js.map +1 -0
  104. package/cursor-accounts/useCursorMemberKeyActions.d.ts +49 -0
  105. package/cursor-accounts/useCursorMemberKeyActions.d.ts.map +1 -0
  106. package/cursor-accounts/useCursorMemberKeyActions.js +38 -0
  107. package/cursor-accounts/useCursorMemberKeyActions.js.map +1 -0
  108. package/cursor-accounts/useDeleteCursorAccount.d.ts +30 -0
  109. package/cursor-accounts/useDeleteCursorAccount.d.ts.map +1 -0
  110. package/cursor-accounts/useDeleteCursorAccount.js +32 -0
  111. package/cursor-accounts/useDeleteCursorAccount.js.map +1 -0
  112. package/cursor-accounts/useSyncCursorAccount.d.ts +23 -0
  113. package/cursor-accounts/useSyncCursorAccount.d.ts.map +1 -0
  114. package/cursor-accounts/useSyncCursorAccount.js +31 -0
  115. package/cursor-accounts/useSyncCursorAccount.js.map +1 -0
  116. package/cursor-accounts/useUpsertCursorAccount.d.ts +26 -0
  117. package/cursor-accounts/useUpsertCursorAccount.d.ts.map +1 -0
  118. package/cursor-accounts/useUpsertCursorAccount.js +34 -0
  119. package/cursor-accounts/useUpsertCursorAccount.js.map +1 -0
  120. package/datastore/CollectionRecordsBrowser.d.ts +34 -0
  121. package/datastore/CollectionRecordsBrowser.d.ts.map +1 -0
  122. package/datastore/CollectionRecordsBrowser.js +209 -0
  123. package/datastore/CollectionRecordsBrowser.js.map +1 -0
  124. package/datastore/CollectionSchemaView.d.ts +29 -0
  125. package/datastore/CollectionSchemaView.d.ts.map +1 -0
  126. package/datastore/CollectionSchemaView.js +93 -0
  127. package/datastore/CollectionSchemaView.js.map +1 -0
  128. package/datastore/DatastoreDetailView.d.ts +44 -0
  129. package/datastore/DatastoreDetailView.d.ts.map +1 -0
  130. package/datastore/DatastoreDetailView.js +76 -0
  131. package/datastore/DatastoreDetailView.js.map +1 -0
  132. package/datastore/DatastoreSyncReport.d.ts +19 -0
  133. package/datastore/DatastoreSyncReport.d.ts.map +1 -0
  134. package/datastore/DatastoreSyncReport.js +45 -0
  135. package/datastore/DatastoreSyncReport.js.map +1 -0
  136. package/datastore/DeleteDatastoreDialog.d.ts +35 -0
  137. package/datastore/DeleteDatastoreDialog.d.ts.map +1 -0
  138. package/datastore/DeleteDatastoreDialog.js +90 -0
  139. package/datastore/DeleteDatastoreDialog.js.map +1 -0
  140. package/datastore/FieldValueControl.d.ts +55 -0
  141. package/datastore/FieldValueControl.d.ts.map +1 -0
  142. package/datastore/FieldValueControl.js +138 -0
  143. package/datastore/FieldValueControl.js.map +1 -0
  144. package/datastore/RecordFilterBuilder.d.ts +30 -0
  145. package/datastore/RecordFilterBuilder.d.ts.map +1 -0
  146. package/datastore/RecordFilterBuilder.js +122 -0
  147. package/datastore/RecordFilterBuilder.js.map +1 -0
  148. package/datastore/RecordFormPanel.d.ts +45 -0
  149. package/datastore/RecordFormPanel.d.ts.map +1 -0
  150. package/datastore/RecordFormPanel.js +215 -0
  151. package/datastore/RecordFormPanel.js.map +1 -0
  152. package/datastore/index.d.ts +43 -0
  153. package/datastore/index.d.ts.map +1 -0
  154. package/datastore/index.js +22 -0
  155. package/datastore/index.js.map +1 -0
  156. package/datastore/recordFilter.d.ts +54 -0
  157. package/datastore/recordFilter.d.ts.map +1 -0
  158. package/datastore/recordFilter.js +93 -0
  159. package/datastore/recordFilter.js.map +1 -0
  160. package/datastore/recordValues.d.ts +85 -0
  161. package/datastore/recordValues.d.ts.map +1 -0
  162. package/datastore/recordValues.js +282 -0
  163. package/datastore/recordValues.js.map +1 -0
  164. package/datastore/useDatastore.d.ts +39 -0
  165. package/datastore/useDatastore.d.ts.map +1 -0
  166. package/datastore/useDatastore.js +44 -0
  167. package/datastore/useDatastore.js.map +1 -0
  168. package/datastore/useDatastoreCount.d.ts +48 -0
  169. package/datastore/useDatastoreCount.d.ts.map +1 -0
  170. package/datastore/useDatastoreCount.js +27 -0
  171. package/datastore/useDatastoreCount.js.map +1 -0
  172. package/datastore/useDatastoreDescription.d.ts +54 -0
  173. package/datastore/useDatastoreDescription.d.ts.map +1 -0
  174. package/datastore/useDatastoreDescription.js +50 -0
  175. package/datastore/useDatastoreDescription.js.map +1 -0
  176. package/datastore/useDatastoreList.d.ts +57 -0
  177. package/datastore/useDatastoreList.d.ts.map +1 -0
  178. package/datastore/useDatastoreList.js +29 -0
  179. package/datastore/useDatastoreList.js.map +1 -0
  180. package/datastore/useDatastoreSearch.d.ts +19 -0
  181. package/datastore/useDatastoreSearch.d.ts.map +1 -0
  182. package/datastore/useDatastoreSearch.js +22 -0
  183. package/datastore/useDatastoreSearch.js.map +1 -0
  184. package/datastore/useDeleteDatastore.d.ts +53 -0
  185. package/datastore/useDeleteDatastore.d.ts.map +1 -0
  186. package/datastore/useDeleteDatastore.js +40 -0
  187. package/datastore/useDeleteDatastore.js.map +1 -0
  188. package/datastore/useDeleteRecord.d.ts +34 -0
  189. package/datastore/useDeleteRecord.d.ts.map +1 -0
  190. package/datastore/useDeleteRecord.js +43 -0
  191. package/datastore/useDeleteRecord.js.map +1 -0
  192. package/datastore/useInsertRecord.d.ts +50 -0
  193. package/datastore/useInsertRecord.d.ts.map +1 -0
  194. package/datastore/useInsertRecord.js +55 -0
  195. package/datastore/useInsertRecord.js.map +1 -0
  196. package/datastore/useRecordCollection.d.ts +104 -0
  197. package/datastore/useRecordCollection.d.ts.map +1 -0
  198. package/datastore/useRecordCollection.js +136 -0
  199. package/datastore/useRecordCollection.js.map +1 -0
  200. package/datastore/useRecordList.d.ts +66 -0
  201. package/datastore/useRecordList.d.ts.map +1 -0
  202. package/datastore/useRecordList.js +58 -0
  203. package/datastore/useRecordList.js.map +1 -0
  204. package/datastore/useUpdateRecord.d.ts +52 -0
  205. package/datastore/useUpdateRecord.d.ts.map +1 -0
  206. package/datastore/useUpdateRecord.js +55 -0
  207. package/datastore/useUpdateRecord.js.map +1 -0
  208. package/environment/EnvironmentListPanel.d.ts.map +1 -1
  209. package/environment/EnvironmentListPanel.js +12 -7
  210. package/environment/EnvironmentListPanel.js.map +1 -1
  211. package/iam-policy/index.d.ts +1 -1
  212. package/iam-policy/index.d.ts.map +1 -1
  213. package/iam-policy/index.js.map +1 -1
  214. package/iam-policy/useCheckPermission.d.ts +32 -11
  215. package/iam-policy/useCheckPermission.d.ts.map +1 -1
  216. package/iam-policy/useCheckPermission.js +24 -19
  217. package/iam-policy/useCheckPermission.js.map +1 -1
  218. package/index.d.ts +12 -6
  219. package/index.d.ts.map +1 -1
  220. package/index.js +14 -3
  221. package/index.js.map +1 -1
  222. package/library/index.d.ts +0 -7
  223. package/library/index.d.ts.map +1 -1
  224. package/library/index.js +0 -4
  225. package/library/index.js.map +1 -1
  226. package/library/useApplyResource.d.ts +12 -12
  227. package/library/useApplyResource.d.ts.map +1 -1
  228. package/library/useApplyResource.js +16 -25
  229. package/library/useApplyResource.js.map +1 -1
  230. package/library/useExportResource.d.ts +13 -9
  231. package/library/useExportResource.d.ts.map +1 -1
  232. package/library/useExportResource.js +18 -36
  233. package/library/useExportResource.js.map +1 -1
  234. package/manifest/ApplyManifestDialog.d.ts +48 -0
  235. package/manifest/ApplyManifestDialog.d.ts.map +1 -0
  236. package/manifest/ApplyManifestDialog.js +135 -0
  237. package/manifest/ApplyManifestDialog.js.map +1 -0
  238. package/manifest/EditResourceYamlDialog.d.ts +51 -0
  239. package/manifest/EditResourceYamlDialog.d.ts.map +1 -0
  240. package/manifest/EditResourceYamlDialog.js +104 -0
  241. package/manifest/EditResourceYamlDialog.js.map +1 -0
  242. package/manifest/RedactedSecretsNotice.d.ts +14 -0
  243. package/manifest/RedactedSecretsNotice.d.ts.map +1 -0
  244. package/manifest/RedactedSecretsNotice.js +14 -0
  245. package/manifest/RedactedSecretsNotice.js.map +1 -0
  246. package/manifest/YamlEditor.d.ts +44 -0
  247. package/manifest/YamlEditor.d.ts.map +1 -0
  248. package/manifest/YamlEditor.js +216 -0
  249. package/manifest/YamlEditor.js.map +1 -0
  250. package/manifest/index.d.ts +13 -0
  251. package/manifest/index.d.ts.map +1 -0
  252. package/manifest/index.js +13 -0
  253. package/manifest/index.js.map +1 -0
  254. package/manifest/useApplyManifest.d.ts +82 -0
  255. package/manifest/useApplyManifest.d.ts.map +1 -0
  256. package/manifest/useApplyManifest.js +180 -0
  257. package/manifest/useApplyManifest.js.map +1 -0
  258. package/manifest/useEditResourceYaml.d.ts +106 -0
  259. package/manifest/useEditResourceYaml.d.ts.map +1 -0
  260. package/manifest/useEditResourceYaml.js +168 -0
  261. package/manifest/useEditResourceYaml.js.map +1 -0
  262. package/mcp-server/steps/ReviewStep.d.ts.map +1 -1
  263. package/mcp-server/steps/ReviewStep.js +2 -3
  264. package/mcp-server/steps/ReviewStep.js.map +1 -1
  265. package/package.json +4 -4
  266. package/resource-creation/templates/workflow-templates.js +4 -4
  267. package/session/useEditSessionPrep.js +3 -3
  268. package/session/useEditSessionPrep.js.map +1 -1
  269. package/settings/index.d.ts +2 -1
  270. package/settings/index.d.ts.map +1 -1
  271. package/settings/index.js +2 -1
  272. package/settings/index.js.map +1 -1
  273. package/settings/settings-nav.d.ts +22 -0
  274. package/settings/settings-nav.d.ts.map +1 -1
  275. package/settings/settings-nav.js +32 -1
  276. package/settings/settings-nav.js.map +1 -1
  277. package/settings/useSettingsNavGroups.d.ts +29 -0
  278. package/settings/useSettingsNavGroups.d.ts.map +1 -0
  279. package/settings/useSettingsNavGroups.js +61 -0
  280. package/settings/useSettingsNavGroups.js.map +1 -0
  281. package/src/agent/steps/ReviewStep.tsx +2 -3
  282. package/src/billing/BaselineEditor.tsx +619 -0
  283. package/src/billing/ModelCatalogPanel.tsx +283 -0
  284. package/src/billing/ModelGovernanceDetail.tsx +289 -0
  285. package/src/billing/OperatorAccessNotice.tsx +32 -0
  286. package/src/billing/PricingGovernanceConsole.tsx +465 -0
  287. package/src/billing/PricingGovernancePanel.tsx +166 -0
  288. package/src/billing/RetireConfirm.tsx +82 -0
  289. package/src/billing/__tests__/ModelCatalogPanel.test.tsx +253 -0
  290. package/src/billing/__tests__/PricingGovernanceConsole.test.tsx +410 -0
  291. package/src/billing/__tests__/useModelGovernanceView.test.tsx +308 -0
  292. package/src/billing/form-primitives.tsx +68 -0
  293. package/src/billing/governance-primitives.tsx +133 -0
  294. package/src/billing/index.ts +37 -0
  295. package/src/billing/pricing-format.ts +53 -0
  296. package/src/billing/useDecidePricingOverride.ts +78 -0
  297. package/src/billing/useModelGovernanceView.ts +290 -0
  298. package/src/billing/useModelPricingBaselines.ts +69 -0
  299. package/src/billing/usePricingGovernance.ts +57 -0
  300. package/src/billing/useRetireModelPricingBaseline.ts +65 -0
  301. package/src/billing/useUpsertModelPricingBaseline.ts +72 -0
  302. package/src/channel/AgentChannelsPanel.tsx +27 -1
  303. package/src/composer/SessionComposer.tsx +1 -1
  304. package/src/cursor-accounts/CursorAccountEditor.tsx +181 -0
  305. package/src/cursor-accounts/CursorAccountsAccessNotice.tsx +36 -0
  306. package/src/cursor-accounts/CursorAccountsConsole.tsx +810 -0
  307. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +384 -0
  308. package/src/cursor-accounts/cursor-account-format.ts +29 -0
  309. package/src/cursor-accounts/index.ts +29 -0
  310. package/src/cursor-accounts/useCursorAccountView.ts +49 -0
  311. package/src/cursor-accounts/useCursorAccounts.ts +49 -0
  312. package/src/cursor-accounts/useCursorMemberKeyActions.ts +106 -0
  313. package/src/cursor-accounts/useDeleteCursorAccount.ts +62 -0
  314. package/src/cursor-accounts/useSyncCursorAccount.ts +54 -0
  315. package/src/cursor-accounts/useUpsertCursorAccount.ts +57 -0
  316. package/src/datastore/CollectionRecordsBrowser.tsx +544 -0
  317. package/src/datastore/CollectionSchemaView.tsx +247 -0
  318. package/src/datastore/DatastoreDetailView.tsx +201 -0
  319. package/src/datastore/DatastoreSyncReport.tsx +105 -0
  320. package/src/datastore/DeleteDatastoreDialog.tsx +202 -0
  321. package/src/datastore/FieldValueControl.tsx +289 -0
  322. package/src/datastore/RecordFilterBuilder.tsx +411 -0
  323. package/src/datastore/RecordFormPanel.tsx +432 -0
  324. package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +207 -0
  325. package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +133 -0
  326. package/src/datastore/__tests__/FieldValueControl.test.tsx +160 -0
  327. package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +141 -0
  328. package/src/datastore/__tests__/RecordFormPanel.test.tsx +227 -0
  329. package/src/datastore/__tests__/recordFilter.test.ts +156 -0
  330. package/src/datastore/__tests__/recordMutations.test.tsx +195 -0
  331. package/src/datastore/__tests__/recordValues.test.ts +359 -0
  332. package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +142 -0
  333. package/src/datastore/__tests__/useDatastoreDescription.test.tsx +143 -0
  334. package/src/datastore/__tests__/useRecordCollection.test.tsx +250 -0
  335. package/src/datastore/__tests__/useRecordList.test.tsx +85 -0
  336. package/src/datastore/index.ts +111 -0
  337. package/src/datastore/recordFilter.ts +140 -0
  338. package/src/datastore/recordValues.ts +327 -0
  339. package/src/datastore/useDatastore.ts +67 -0
  340. package/src/datastore/useDatastoreCount.ts +67 -0
  341. package/src/datastore/useDatastoreDescription.ts +90 -0
  342. package/src/datastore/useDatastoreList.ts +79 -0
  343. package/src/datastore/useDatastoreSearch.ts +39 -0
  344. package/src/datastore/useDeleteDatastore.ts +87 -0
  345. package/src/datastore/useDeleteRecord.ts +77 -0
  346. package/src/datastore/useInsertRecord.ts +92 -0
  347. package/src/datastore/useRecordCollection.ts +256 -0
  348. package/src/datastore/useRecordList.ts +131 -0
  349. package/src/datastore/useUpdateRecord.ts +95 -0
  350. package/src/environment/EnvironmentListPanel.tsx +24 -0
  351. package/src/execution/__tests__/useArtifactInspection.test.tsx +12 -2
  352. package/src/iam-policy/__tests__/useCheckPermission.test.tsx +221 -0
  353. package/src/iam-policy/index.ts +1 -0
  354. package/src/iam-policy/useCheckPermission.ts +45 -19
  355. package/src/index.ts +163 -13
  356. package/src/library/index.ts +0 -20
  357. package/src/library/useApplyResource.ts +27 -34
  358. package/src/library/useExportResource.ts +21 -40
  359. package/src/manifest/ApplyManifestDialog.tsx +315 -0
  360. package/src/manifest/EditResourceYamlDialog.tsx +265 -0
  361. package/src/manifest/RedactedSecretsNotice.tsx +30 -0
  362. package/src/manifest/YamlEditor.tsx +272 -0
  363. package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +118 -0
  364. package/src/manifest/__tests__/useApplyManifest.test.tsx +237 -0
  365. package/src/manifest/__tests__/useEditResourceYaml.test.tsx +252 -0
  366. package/src/manifest/index.ts +33 -0
  367. package/src/manifest/useApplyManifest.ts +270 -0
  368. package/src/manifest/useEditResourceYaml.ts +273 -0
  369. package/src/mcp-server/steps/ReviewStep.tsx +2 -3
  370. package/src/resource-creation/templates/workflow-templates.ts +4 -4
  371. package/src/session/useEditSessionPrep.ts +3 -3
  372. package/src/settings/__tests__/useSettingsNavGroups.test.tsx +138 -0
  373. package/src/settings/index.ts +5 -1
  374. package/src/settings/settings-nav.ts +43 -0
  375. package/src/settings/useSettingsNavGroups.ts +81 -0
  376. package/src/workflow/WorkflowYamlEditor.tsx +6 -270
  377. package/styles.css +1 -1
  378. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  379. package/workflow/WorkflowYamlEditor.d.ts +2 -42
  380. package/workflow/WorkflowYamlEditor.d.ts.map +1 -1
  381. package/workflow/WorkflowYamlEditor.js +5 -214
  382. package/workflow/WorkflowYamlEditor.js.map +1 -1
  383. package/library/ImportResourceDialog.d.ts +0 -43
  384. package/library/ImportResourceDialog.d.ts.map +0 -1
  385. package/library/ImportResourceDialog.js +0 -90
  386. package/library/ImportResourceDialog.js.map +0 -1
  387. package/library/parse-resource-yaml.d.ts +0 -63
  388. package/library/parse-resource-yaml.d.ts.map +0 -1
  389. package/library/parse-resource-yaml.js +0 -407
  390. package/library/parse-resource-yaml.js.map +0 -1
  391. package/library/serialize-resource-yaml.d.ts +0 -103
  392. package/library/serialize-resource-yaml.d.ts.map +0 -1
  393. package/library/serialize-resource-yaml.js +0 -565
  394. package/library/serialize-resource-yaml.js.map +0 -1
  395. package/library/useImportResource.d.ts +0 -84
  396. package/library/useImportResource.d.ts.map +0 -1
  397. package/library/useImportResource.js +0 -188
  398. package/library/useImportResource.js.map +0 -1
  399. package/src/library/ImportResourceDialog.tsx +0 -227
  400. package/src/library/parse-resource-yaml.ts +0 -630
  401. package/src/library/serialize-resource-yaml.ts +0 -756
  402. package/src/library/useImportResource.ts +0 -253
@@ -0,0 +1,252 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { renderHook, act } from "@testing-library/react";
3
+ import type { ReactNode } from "react";
4
+ import { create } from "@bufbuild/protobuf";
5
+ import { AgentSchema } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
6
+ import { StigmerContext } from "../../context";
7
+ import { useEditResourceYaml } from "../useEditResourceYaml";
8
+
9
+ // The hooks run the real manifest engine (serializeManifest/parseManifest
10
+ // from @stigmer/sdk); only the network-facing manifest client is mocked.
11
+ function createMockStigmer(overrides: {
12
+ apply?: (...args: unknown[]) => Promise<unknown>;
13
+ getByReference?: (...args: unknown[]) => Promise<unknown>;
14
+ } = {}) {
15
+ return {
16
+ manifest: {
17
+ apply:
18
+ overrides.apply ??
19
+ vi.fn().mockResolvedValue({
20
+ yamlKind: "Agent",
21
+ displayName: "Agent",
22
+ name: "clinic-patient-assistant",
23
+ slug: "clinic-patient-assistant",
24
+ org: "rakeshreddi098",
25
+ id: "agt_01",
26
+ }),
27
+ getByReference:
28
+ overrides.getByReference ?? vi.fn().mockResolvedValue({ metadata: {} }),
29
+ },
30
+ } as never;
31
+ }
32
+
33
+ function wrapper(client: unknown) {
34
+ return function Wrapper({ children }: { children: ReactNode }) {
35
+ return (
36
+ <StigmerContext.Provider value={client as never}>
37
+ {children}
38
+ </StigmerContext.Provider>
39
+ );
40
+ };
41
+ }
42
+
43
+ const agent = create(AgentSchema, {
44
+ metadata: {
45
+ id: "agt_01",
46
+ name: "clinic-patient-assistant",
47
+ slug: "clinic-patient-assistant",
48
+ org: "rakeshreddi098",
49
+ },
50
+ spec: { instructions: "Short messages." },
51
+ });
52
+
53
+ // The create-vs-update check debounces across keystrokes.
54
+ const DEBOUNCE_MS = 400;
55
+
56
+ describe("useEditResourceYaml", () => {
57
+ beforeEach(() => {
58
+ vi.useFakeTimers();
59
+ });
60
+
61
+ afterEach(() => {
62
+ vi.useRealTimers();
63
+ });
64
+
65
+ it("seeds the editor from the serialized resource", () => {
66
+ const { result } = renderHook(
67
+ () => useEditResourceYaml({ resource: agent }),
68
+ { wrapper: wrapper(createMockStigmer()) },
69
+ );
70
+
71
+ expect(result.current.yaml).toContain("kind: Agent");
72
+ expect(result.current.yaml).toContain("clinic-patient-assistant");
73
+ expect(result.current.yaml).not.toContain("status:");
74
+ expect(result.current.isDirty).toBe(false);
75
+ expect(result.current.validation.status).toBe("valid");
76
+ });
77
+
78
+ it("reports schema violations inline as the user edits", () => {
79
+ const { result } = renderHook(
80
+ () => useEditResourceYaml({ resource: agent }),
81
+ { wrapper: wrapper(createMockStigmer()) },
82
+ );
83
+
84
+ act(() => {
85
+ result.current.setYaml(
86
+ result.current.yaml.replace("instructions:", "instrctions:"),
87
+ );
88
+ });
89
+
90
+ expect(result.current.validation).toMatchObject({
91
+ status: "invalid",
92
+ message: expect.stringContaining("Invalid Agent"),
93
+ });
94
+ });
95
+
96
+ it("rejects a kind change, pointing at the Apply YAML flow instead", () => {
97
+ const { result } = renderHook(
98
+ () => useEditResourceYaml({ resource: agent }),
99
+ { wrapper: wrapper(createMockStigmer()) },
100
+ );
101
+
102
+ act(() => {
103
+ // A structurally valid Environment — the schema accepts it, so the
104
+ // kind guard (not the schema) must be what rejects it.
105
+ result.current.setYaml(
106
+ [
107
+ "apiVersion: agentic.stigmer.ai/v1",
108
+ "kind: Environment",
109
+ "metadata:",
110
+ " name: clinic-patient-db",
111
+ " org: rakeshreddi098",
112
+ "spec:",
113
+ " description: not an agent",
114
+ ].join("\n"),
115
+ );
116
+ });
117
+
118
+ expect(result.current.validation).toMatchObject({
119
+ status: "invalid",
120
+ message: expect.stringContaining("kind changed from Agent to Environment"),
121
+ });
122
+ });
123
+
124
+ it("resolves the target to 'update' when the reference exists", async () => {
125
+ const getByReference = vi.fn().mockResolvedValue({ metadata: {} });
126
+ const { result } = renderHook(
127
+ () => useEditResourceYaml({ resource: agent }),
128
+ { wrapper: wrapper(createMockStigmer({ getByReference })) },
129
+ );
130
+
131
+ act(() => {
132
+ result.current.setYaml(
133
+ result.current.yaml.replace("Short messages.", "Long messages."),
134
+ );
135
+ });
136
+
137
+ await act(async () => {
138
+ await vi.advanceTimersByTimeAsync(DEBOUNCE_MS + 10);
139
+ });
140
+
141
+ expect(getByReference).toHaveBeenCalledWith(
142
+ "Agent",
143
+ "rakeshreddi098",
144
+ "clinic-patient-assistant",
145
+ );
146
+ expect(result.current.target).toEqual({
147
+ action: "update",
148
+ slug: "clinic-patient-assistant",
149
+ });
150
+ });
151
+
152
+ it("resolves the target to 'create' after a rename (honest preview)", async () => {
153
+ const getByReference = vi.fn().mockResolvedValue(null);
154
+ const { result } = renderHook(
155
+ () => useEditResourceYaml({ resource: agent }),
156
+ { wrapper: wrapper(createMockStigmer({ getByReference })) },
157
+ );
158
+
159
+ act(() => {
160
+ // Rename name AND slug — the slug is the apply routing key, so this
161
+ // is the edit that would land as a brand-new resource.
162
+ result.current.setYaml(
163
+ result.current.yaml.replaceAll(
164
+ "clinic-patient-assistant",
165
+ "renamed-assistant",
166
+ ),
167
+ );
168
+ });
169
+
170
+ await act(async () => {
171
+ await vi.advanceTimersByTimeAsync(DEBOUNCE_MS + 10);
172
+ });
173
+
174
+ expect(getByReference).toHaveBeenCalledWith(
175
+ "Agent",
176
+ "rakeshreddi098",
177
+ "renamed-assistant",
178
+ );
179
+ expect(result.current.target).toEqual({
180
+ action: "create",
181
+ slug: "renamed-assistant",
182
+ });
183
+ });
184
+
185
+ it("applies the edited document and clears the dirty flag", async () => {
186
+ const apply = vi.fn().mockResolvedValue({
187
+ yamlKind: "Agent",
188
+ displayName: "Agent",
189
+ name: "clinic-patient-assistant",
190
+ slug: "clinic-patient-assistant",
191
+ org: "rakeshreddi098",
192
+ id: "agt_01",
193
+ });
194
+ const { result } = renderHook(
195
+ () => useEditResourceYaml({ resource: agent }),
196
+ { wrapper: wrapper(createMockStigmer({ apply })) },
197
+ );
198
+
199
+ act(() => {
200
+ result.current.setYaml(
201
+ result.current.yaml.replace("Short messages.", "Long messages."),
202
+ );
203
+ });
204
+ expect(result.current.isDirty).toBe(true);
205
+
206
+ await act(async () => {
207
+ const applied = await result.current.apply();
208
+ expect(applied?.slug).toBe("clinic-patient-assistant");
209
+ });
210
+
211
+ expect(apply).toHaveBeenCalledTimes(1);
212
+ expect(result.current.isDirty).toBe(false);
213
+ expect(result.current.error).toBeNull();
214
+ });
215
+
216
+ it("surfaces apply failures as error state and re-throws", async () => {
217
+ const apply = vi.fn().mockRejectedValue(new Error("permission denied"));
218
+ const { result } = renderHook(
219
+ () => useEditResourceYaml({ resource: agent }),
220
+ { wrapper: wrapper(createMockStigmer({ apply })) },
221
+ );
222
+
223
+ act(() => {
224
+ result.current.setYaml(
225
+ result.current.yaml.replace("Short messages.", "Long messages."),
226
+ );
227
+ });
228
+
229
+ await act(async () => {
230
+ await expect(result.current.apply()).rejects.toThrow("permission denied");
231
+ });
232
+
233
+ expect(result.current.error?.message).toBe("permission denied");
234
+ });
235
+
236
+ it("flags redacted secret markers in the content", () => {
237
+ const { result } = renderHook(
238
+ () => useEditResourceYaml({ resource: agent }),
239
+ { wrapper: wrapper(createMockStigmer()) },
240
+ );
241
+
242
+ expect(result.current.hasRedactedSecrets).toBe(false);
243
+
244
+ act(() => {
245
+ result.current.setYaml(
246
+ result.current.yaml.replace("Short messages.", "***REDACTED***"),
247
+ );
248
+ });
249
+
250
+ expect(result.current.hasRedactedSecrets).toBe(true);
251
+ });
252
+ });
@@ -0,0 +1,33 @@
1
+ // Manifest domain: the console-facing YAML edit/apply experience for every
2
+ // registry-supported resource kind, built on the @stigmer/sdk manifest
3
+ // engine (parseManifest / serializeManifest / stigmer.manifest).
4
+ //
5
+ // Headless-first (DD-003): the hooks are independently importable; the
6
+ // dialogs compose them with the shared YamlEditor.
7
+
8
+ export { YamlEditor } from "./YamlEditor.js";
9
+ export type { YamlEditorProps } from "./YamlEditor.js";
10
+
11
+ export { useEditResourceYaml } from "./useEditResourceYaml.js";
12
+ export type {
13
+ EditYamlTarget,
14
+ EditYamlValidation,
15
+ UseEditResourceYamlOptions,
16
+ UseEditResourceYamlReturn,
17
+ } from "./useEditResourceYaml.js";
18
+
19
+ export { useApplyManifest } from "./useApplyManifest.js";
20
+ export type {
21
+ ManifestEntryStatus,
22
+ ManifestPreviewEntry,
23
+ UseApplyManifestReturn,
24
+ } from "./useApplyManifest.js";
25
+
26
+ export { EditResourceYamlDialog } from "./EditResourceYamlDialog.js";
27
+ export type { EditResourceYamlDialogProps } from "./EditResourceYamlDialog.js";
28
+
29
+ export { ApplyManifestDialog } from "./ApplyManifestDialog.js";
30
+ export type { ApplyManifestDialogProps } from "./ApplyManifestDialog.js";
31
+
32
+ export { RedactedSecretsNotice } from "./RedactedSecretsNotice.js";
33
+ export type { RedactedSecretsNoticeProps } from "./RedactedSecretsNotice.js";
@@ -0,0 +1,270 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import {
5
+ containsRedactedSecrets,
6
+ parseManifest,
7
+ type AppliedManifest,
8
+ type ManifestDocument,
9
+ } from "@stigmer/sdk";
10
+ import { useStigmer } from "../hooks.js";
11
+ import { toError } from "../internal/toError.js";
12
+
13
+ /** Per-document apply lifecycle within one manifest. */
14
+ export type ManifestEntryStatus =
15
+ | "pending"
16
+ | "applying"
17
+ | "applied"
18
+ | "failed"
19
+ /** A prior document failed; this one was not attempted. */
20
+ | "skipped";
21
+
22
+ /** One document of the manifest, with its preview and apply state. */
23
+ export interface ManifestPreviewEntry {
24
+ /** The parsed document (kind handler, message, name/slug/org). */
25
+ readonly document: ManifestDocument;
26
+ /** What applying will do, resolved against live server state. */
27
+ readonly action: "create" | "update" | "unknown";
28
+ /** Apply lifecycle status. */
29
+ readonly status: ManifestEntryStatus;
30
+ /** The applied resource, present when `status` is `"applied"`. */
31
+ readonly result?: AppliedManifest;
32
+ /** User-facing failure message, present when `status` is `"failed"`. */
33
+ readonly errorMessage?: string;
34
+ }
35
+
36
+ /** Return value of {@link useApplyManifest}. */
37
+ export interface UseApplyManifestReturn {
38
+ /** Current manifest text (paste target). */
39
+ readonly content: string;
40
+ /** Update the manifest text. Re-validates (debounced). */
41
+ readonly setContent: (value: string) => void;
42
+ /** Read a `.yaml`/`.yml`/`.json` file into `content`. */
43
+ readonly readFile: (file: File) => Promise<void>;
44
+ /**
45
+ * Validated per-document preview in dependency apply order, or `null`
46
+ * while the content is empty or invalid.
47
+ */
48
+ readonly entries: readonly ManifestPreviewEntry[] | null;
49
+ /** Validation error for the current content, or `null` when valid. */
50
+ readonly validationError: string | null;
51
+ /** `true` while the (debounced) validation + existence checks run. */
52
+ readonly isValidating: boolean;
53
+ /** `true` when the content contains `***REDACTED***` secret markers. */
54
+ readonly hasRedactedSecrets: boolean;
55
+ /**
56
+ * Apply all documents sequentially in dependency order. Entries update
57
+ * live. Stops at the first failure (later entries become `"skipped"`).
58
+ * Resolves `true` when every document applied.
59
+ */
60
+ readonly applyAll: () => Promise<boolean>;
61
+ /** `true` while applies are in flight. */
62
+ readonly isApplying: boolean;
63
+ /** Clear all state (content, preview, errors). */
64
+ readonly reset: () => void;
65
+ }
66
+
67
+ // Validation parses + resolves existence server-side; wait for a typing pause.
68
+ const VALIDATE_DEBOUNCE_MS = 500;
69
+
70
+ /**
71
+ * Headless "apply a YAML manifest" flow for any registry-supported kind —
72
+ * the console counterpart of `stigmer apply -f`.
73
+ *
74
+ * Orchestrates: paste or upload → strict parse against generated proto
75
+ * schemas ({@link parseManifest}) → per-document create-vs-update preview
76
+ * (server existence check) → sequential apply in dependency order with
77
+ * live per-document status.
78
+ *
79
+ * Accepts multi-document manifests (`---` separators) and JSON content
80
+ * (YAML is a superset). The target `org` is injected into documents that
81
+ * omit `metadata.org`; documents naming a *different* org are honored and
82
+ * apply there (matching `stigmer apply` semantics — the org-mismatch
83
+ * warning surfaces on the parsed document).
84
+ *
85
+ * @param org - Target organization slug for `metadata.org` injection.
86
+ *
87
+ * @example
88
+ * ```tsx
89
+ * const manifest = useApplyManifest(activeOrg);
90
+ *
91
+ * <textarea value={manifest.content}
92
+ * onChange={(e) => manifest.setContent(e.target.value)} />
93
+ * {manifest.entries?.map((e) => (
94
+ * <PreviewRow key={e.document.slug} entry={e} />
95
+ * ))}
96
+ * <button onClick={manifest.applyAll} disabled={!manifest.entries}>Apply</button>
97
+ * ```
98
+ *
99
+ * @see {@link ApplyManifestDialog} for the styled component composing this hook
100
+ * @see {@link useEditResourceYaml} for the edit-in-place counterpart
101
+ */
102
+ export function useApplyManifest(org: string): UseApplyManifestReturn {
103
+ const stigmer = useStigmer();
104
+
105
+ const [content, setContentState] = useState("");
106
+ const [entries, setEntries] = useState<readonly ManifestPreviewEntry[] | null>(null);
107
+ const [validationError, setValidationError] = useState<string | null>(null);
108
+ const [isValidating, setIsValidating] = useState(false);
109
+ const [isApplying, setIsApplying] = useState(false);
110
+
111
+ const orgRef = useRef(org);
112
+ orgRef.current = org;
113
+
114
+ const setContent = useCallback((value: string) => {
115
+ setContentState(value);
116
+ }, []);
117
+
118
+ const readFile = useCallback(async (file: File) => {
119
+ let text: string;
120
+ try {
121
+ text = await file.text();
122
+ } catch {
123
+ setContentState("");
124
+ setEntries(null);
125
+ setValidationError(`Failed to read ${file.name}.`);
126
+ return;
127
+ }
128
+ setContentState(text);
129
+ }, []);
130
+
131
+ const reset = useCallback(() => {
132
+ setContentState("");
133
+ setEntries(null);
134
+ setValidationError(null);
135
+ setIsValidating(false);
136
+ setIsApplying(false);
137
+ }, []);
138
+
139
+ // Debounced validation + existence resolution, cancellation-safe. Applies
140
+ // freeze the preview: entries carry live statuses the validator must not
141
+ // clobber mid-run.
142
+ const validateSeq = useRef(0);
143
+ useEffect(() => {
144
+ if (isApplying) return;
145
+
146
+ const seq = ++validateSeq.current;
147
+
148
+ if (!content.trim()) {
149
+ setEntries(null);
150
+ setValidationError(null);
151
+ setIsValidating(false);
152
+ return;
153
+ }
154
+
155
+ setIsValidating(true);
156
+
157
+ const timer = setTimeout(async () => {
158
+ let documents: ManifestDocument[];
159
+ try {
160
+ documents = parseManifest(content, { org: orgRef.current });
161
+ } catch (err) {
162
+ if (validateSeq.current === seq) {
163
+ setEntries(null);
164
+ setValidationError(toError(err).message);
165
+ setIsValidating(false);
166
+ }
167
+ return;
168
+ }
169
+
170
+ const resolved = await Promise.all(
171
+ documents.map(async (document): Promise<ManifestPreviewEntry> => {
172
+ let action: ManifestPreviewEntry["action"];
173
+ try {
174
+ const existing = await stigmer.manifest.getByReference(
175
+ document.handler.yamlKind,
176
+ document.org,
177
+ document.slug,
178
+ );
179
+ action = existing !== null ? "update" : "create";
180
+ } catch {
181
+ action = "unknown";
182
+ }
183
+ return { document, action, status: "pending" };
184
+ }),
185
+ );
186
+
187
+ if (validateSeq.current === seq) {
188
+ setEntries(resolved);
189
+ setValidationError(null);
190
+ setIsValidating(false);
191
+ }
192
+ }, VALIDATE_DEBOUNCE_MS);
193
+
194
+ return () => clearTimeout(timer);
195
+ }, [content, stigmer, isApplying]);
196
+
197
+ const applyAll = useCallback(async (): Promise<boolean> => {
198
+ if (!entries || entries.length === 0) return false;
199
+
200
+ // Invalidate any in-flight validation so it cannot clobber apply statuses.
201
+ validateSeq.current++;
202
+ setIsApplying(true);
203
+
204
+ // Local working copy — React state is updated per transition so the
205
+ // dialog renders progress live.
206
+ const working = entries.map((entry): ManifestPreviewEntry => ({ ...entry, status: "pending" }));
207
+ const commit = () => setEntries([...working]);
208
+
209
+ let allApplied = true;
210
+
211
+ for (let i = 0; i < working.length; i++) {
212
+ if (!allApplied) {
213
+ working[i] = { ...working[i], status: "skipped" };
214
+ continue;
215
+ }
216
+
217
+ working[i] = { ...working[i], status: "applying" };
218
+ commit();
219
+
220
+ try {
221
+ const result = await stigmer.manifest.apply(working[i].document);
222
+ working[i] = { ...working[i], status: "applied", result };
223
+ } catch (err) {
224
+ working[i] = {
225
+ ...working[i],
226
+ status: "failed",
227
+ errorMessage: toError(err).message,
228
+ };
229
+ allApplied = false;
230
+ }
231
+ commit();
232
+ }
233
+
234
+ commit();
235
+ setIsApplying(false);
236
+ return allApplied;
237
+ }, [entries, stigmer]);
238
+
239
+ const hasRedactedSecrets = useMemo(
240
+ () => containsRedactedSecrets(content),
241
+ [content],
242
+ );
243
+
244
+ return useMemo(
245
+ () => ({
246
+ content,
247
+ setContent,
248
+ readFile,
249
+ entries,
250
+ validationError,
251
+ isValidating,
252
+ hasRedactedSecrets,
253
+ applyAll,
254
+ isApplying,
255
+ reset,
256
+ }),
257
+ [
258
+ content,
259
+ setContent,
260
+ readFile,
261
+ entries,
262
+ validationError,
263
+ isValidating,
264
+ hasRedactedSecrets,
265
+ applyAll,
266
+ isApplying,
267
+ reset,
268
+ ],
269
+ );
270
+ }