@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,202 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage } from "@stigmer/sdk";
6
+ import type { Datastore } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
7
+ import { toast } from "../feedback/toast.js";
8
+ import { FIELD_INPUT_CLASSES } from "./FieldValueControl.js";
9
+ import { useDeleteDatastore } from "./useDeleteDatastore.js";
10
+
11
+ /** Props for {@link DeleteDatastoreDialog}. */
12
+ export interface DeleteDatastoreDialogProps {
13
+ /** Whether the dialog is open. */
14
+ readonly open: boolean;
15
+ /** Called when the dialog requests to close. */
16
+ readonly onOpenChange: (open: boolean) => void;
17
+ /** The loaded datastore (metadata + status feed the counts). */
18
+ readonly datastore: Datastore | null;
19
+ /** Called after a successful delete (navigate away). */
20
+ readonly onDeleted?: () => void;
21
+ }
22
+
23
+ /**
24
+ * The guarded delete flow for the platform's only record-destroying
25
+ * resource action (DD-008 SD-6) — a status-informed acknowledgment
26
+ * replacing the generic one-shot confirm:
27
+ *
28
+ * - Counts are pre-filled from the already-loaded `status` ("holds N
29
+ * records across M collections").
30
+ * - A **non-empty** datastore requires **typing the datastore slug** to
31
+ * arm the delete — the strongest-friction confirm. Arming sends the
32
+ * `force` acknowledgment.
33
+ * - An **empty** datastore keeps the standard destructive confirm.
34
+ * - The server's guards stay authoritative: on refusal (agent
35
+ * references, count drift) the `FAILED_PRECONDITION` message renders
36
+ * **verbatim** inside the dialog with fresh server counts — the
37
+ * console renders the guard, never pre-empts it. The agent-reference
38
+ * block names the referencing agents; detaching them is the operator's
39
+ * next step, and the block is deliberately not acknowledgeable-through.
40
+ *
41
+ * All visual properties flow through `--stgm-*` design tokens.
42
+ * Zero Console dependencies — safe for platform builder embedding.
43
+ */
44
+ export function DeleteDatastoreDialog({
45
+ open,
46
+ onOpenChange,
47
+ datastore,
48
+ onDeleted,
49
+ }: DeleteDatastoreDialogProps) {
50
+ const dialogRef = useRef<HTMLDialogElement>(null);
51
+ const { deleteDatastore, isDeleting, error, clearError } = useDeleteDatastore();
52
+ const [slugInput, setSlugInput] = useState("");
53
+
54
+ const slug = datastore?.metadata?.slug ?? "";
55
+ const resourceId = datastore?.metadata?.id ?? "";
56
+
57
+ // BigInt literals (0n) are avoided: consumer apps compile SDK sources
58
+ // with targets below ES2020.
59
+ const { totalRecords, nonEmptyCollections } = useMemo(() => {
60
+ let records = BigInt(0);
61
+ let collections = 0;
62
+ for (const coll of datastore?.status?.collections ?? []) {
63
+ if (coll.recordCount > BigInt(0)) {
64
+ records += coll.recordCount;
65
+ collections += 1;
66
+ }
67
+ }
68
+ return { totalRecords: records, nonEmptyCollections: collections };
69
+ }, [datastore]);
70
+
71
+ const isEmpty = totalRecords === BigInt(0);
72
+ const armed = isEmpty || slugInput === slug;
73
+
74
+ useEffect(() => {
75
+ if (open) {
76
+ setSlugInput("");
77
+ clearError();
78
+ }
79
+ }, [open, clearError]);
80
+
81
+ useEffect(() => {
82
+ const dialog = dialogRef.current;
83
+ if (!dialog) return;
84
+ if (open && !dialog.open) dialog.showModal();
85
+ else if (!open && dialog.open) dialog.close();
86
+ }, [open]);
87
+
88
+ const handleDialogCancel = useCallback(
89
+ (e: React.SyntheticEvent) => {
90
+ e.preventDefault();
91
+ onOpenChange(false);
92
+ },
93
+ [onOpenChange],
94
+ );
95
+
96
+ const handleDelete = useCallback(async () => {
97
+ if (!resourceId || !armed) return;
98
+ try {
99
+ // A non-empty delete carries force — the acknowledgment the
100
+ // slug-typing arms. Empty datastores need no acknowledgment.
101
+ await deleteDatastore({ resourceId, force: !isEmpty });
102
+ toast.success(`Datastore "${slug}" deleted`);
103
+ onOpenChange(false);
104
+ onDeleted?.();
105
+ } catch {
106
+ // The guard's message renders inline via `error` — with fresh
107
+ // counts on drift; the server stays authoritative.
108
+ }
109
+ }, [resourceId, armed, isEmpty, deleteDatastore, slug, onOpenChange, onDeleted]);
110
+
111
+ if (!open || !datastore) return null;
112
+
113
+ return (
114
+ <dialog
115
+ ref={dialogRef}
116
+ onCancel={handleDialogCancel}
117
+ aria-label={`Delete datastore ${slug}`}
118
+ className={cn(
119
+ "fixed inset-0 z-50 m-auto w-full max-w-md rounded-lg border border-border bg-popover p-0 text-popover-foreground shadow-lg",
120
+ "backdrop:bg-black/50",
121
+ "open:animate-in open:fade-in-0 open:zoom-in-95",
122
+ )}
123
+ >
124
+ <div className="flex flex-col gap-4 p-6">
125
+ <div className="flex flex-col gap-1.5">
126
+ <h3 className="text-base font-semibold text-foreground">
127
+ Delete datastore “{slug}”?
128
+ </h3>
129
+ {isEmpty ? (
130
+ <p className="text-sm text-muted-foreground">
131
+ This datastore holds no records. Its declared collections will be
132
+ removed. This cannot be undone.
133
+ </p>
134
+ ) : (
135
+ <p className="text-sm text-muted-foreground">
136
+ “{slug}” holds{" "}
137
+ <strong className="font-semibold text-foreground">
138
+ {String(totalRecords)} record{totalRecords === BigInt(1) ? "" : "s"}
139
+ </strong>{" "}
140
+ across{" "}
141
+ <strong className="font-semibold text-foreground">
142
+ {nonEmptyCollections} collection{nonEmptyCollections === 1 ? "" : "s"}
143
+ </strong>
144
+ . Deleting the datastore destroys them all. This cannot be undone.
145
+ </p>
146
+ )}
147
+ </div>
148
+
149
+ {error && (
150
+ <div
151
+ role="alert"
152
+ className="rounded-md border border-destructive bg-card px-3 py-2 text-sm text-destructive"
153
+ >
154
+ {getUserMessage(error)}
155
+ </div>
156
+ )}
157
+
158
+ {!isEmpty && (
159
+ <label className="flex flex-col gap-1 text-xs font-medium text-muted-foreground">
160
+ Type <span className="font-mono text-foreground">{slug}</span> to confirm
161
+ <input
162
+ type="text"
163
+ className={FIELD_INPUT_CLASSES}
164
+ value={slugInput}
165
+ onChange={(e) => setSlugInput(e.target.value)}
166
+ autoComplete="off"
167
+ spellCheck={false}
168
+ aria-label={`Type ${slug} to confirm deletion`}
169
+ />
170
+ </label>
171
+ )}
172
+
173
+ <div className="flex justify-end gap-2">
174
+ <button
175
+ type="button"
176
+ onClick={() => onOpenChange(false)}
177
+ className={cn(
178
+ "rounded-md border border-input bg-background px-3 py-1.5 text-sm font-medium text-foreground",
179
+ "hover:bg-accent hover:text-accent-foreground",
180
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
181
+ )}
182
+ >
183
+ Cancel
184
+ </button>
185
+ <button
186
+ type="button"
187
+ onClick={handleDelete}
188
+ disabled={!armed || isDeleting}
189
+ className={cn(
190
+ "rounded-md bg-destructive px-3 py-1.5 text-sm font-medium text-destructive-foreground",
191
+ "hover:bg-destructive-hover",
192
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
193
+ "disabled:pointer-events-none disabled:opacity-50",
194
+ )}
195
+ >
196
+ {isDeleting ? "Deleting…" : "Delete datastore"}
197
+ </button>
198
+ </div>
199
+ </div>
200
+ </dialog>
201
+ );
202
+ }
@@ -0,0 +1,289 @@
1
+ "use client";
2
+
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type { JsonValue } from "@bufbuild/protobuf";
6
+ import {
7
+ FieldType,
8
+ type FieldDeclaration,
9
+ } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
10
+
11
+ /**
12
+ * Standard input styling for datastore value controls — the
13
+ * token-compliant idiom (semantic Tailwind classes over `--stgm-*`
14
+ * tokens; no pixel font sizes, no hex fallbacks).
15
+ */
16
+ export const FIELD_INPUT_CLASSES = cn(
17
+ "w-full rounded-md border border-input bg-background px-2.5 py-1.5 text-xs text-foreground",
18
+ "placeholder:text-muted-foreground",
19
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
20
+ "disabled:pointer-events-none disabled:opacity-50",
21
+ );
22
+
23
+ /** Props for {@link FieldValueControl}. */
24
+ export interface FieldValueControlProps {
25
+ /** The field declaration driving the control type. */
26
+ readonly field: FieldDeclaration;
27
+ /**
28
+ * Current value in its canonical encoding (DD-004), or `undefined`
29
+ * when empty/unset. The control never receives explicit `null` — the
30
+ * clear affordance is the owner's (a form row renders it; the control
31
+ * only edits values).
32
+ */
33
+ readonly value: JsonValue | undefined;
34
+ /**
35
+ * Called with the canonical value on every valid edit, or `undefined`
36
+ * when the input empties. Invalid intermediate states (half-typed
37
+ * JSON, unparseable numbers) stay local to the control and are never
38
+ * emitted — the precedent set by the workflow config form.
39
+ */
40
+ readonly onChange: (value: JsonValue | undefined) => void;
41
+ /** Disables the input. */
42
+ readonly disabled?: boolean;
43
+ /** DOM id for external `<label htmlFor>` wiring. */
44
+ readonly id?: string;
45
+ /** Accessible name when no external label is wired. */
46
+ readonly "aria-label"?: string;
47
+ }
48
+
49
+ /**
50
+ * The typed value control for a declared datastore field — one
51
+ * controlled input per `FieldType`, emitting canonical encodings
52
+ * (DD-004). Shared by `RecordFormPanel` (field editing) and
53
+ * `RecordFilterBuilder` (condition values), so a field always offers
54
+ * the same input affordance everywhere.
55
+ *
56
+ * Type dispatch:
57
+ * - `string` — text input; enum-select when `enum_values` declared
58
+ * - `integer` / `number` — numeric input (step 1 / any)
59
+ * - `bool` — select with true/false (a checkbox conflates
60
+ * "false" with "unset", which the tri-state
61
+ * write model must not do)
62
+ * - `date` — native date picker (emits `YYYY-MM-DD`)
63
+ * - `time` — native time picker (emits zero-padded `HH:MM[:SS]`)
64
+ * - `timestamp` — native datetime-local picker in the operator's
65
+ * zone, converted to RFC 3339 UTC
66
+ * - `json` — mono textarea with local parse state; only
67
+ * valid JSON is emitted
68
+ */
69
+ export function FieldValueControl(props: FieldValueControlProps) {
70
+ const { field } = props;
71
+ switch (field.type) {
72
+ case FieldType.string:
73
+ return field.enumValues.length > 0 ? <EnumControl {...props} /> : <StringControl {...props} />;
74
+ case FieldType.integer:
75
+ case FieldType.number:
76
+ return <NumberControl {...props} />;
77
+ case FieldType.bool:
78
+ return <BoolControl {...props} />;
79
+ case FieldType.date:
80
+ return <DateControl {...props} />;
81
+ case FieldType.time:
82
+ return <TimeControl {...props} />;
83
+ case FieldType.timestamp:
84
+ return <TimestampControl {...props} />;
85
+ case FieldType.json:
86
+ default:
87
+ return <JsonControl {...props} />;
88
+ }
89
+ }
90
+
91
+ // ---------------------------------------------------------------------------
92
+ // Per-type controls
93
+ // ---------------------------------------------------------------------------
94
+
95
+ function StringControl({ value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
96
+ return (
97
+ <input
98
+ id={id}
99
+ type="text"
100
+ className={FIELD_INPUT_CLASSES}
101
+ value={typeof value === "string" ? value : ""}
102
+ onChange={(e) => onChange(e.target.value === "" ? undefined : e.target.value)}
103
+ disabled={disabled}
104
+ aria-label={ariaLabel}
105
+ />
106
+ );
107
+ }
108
+
109
+ function EnumControl({ field, value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
110
+ return (
111
+ <select
112
+ id={id}
113
+ className={FIELD_INPUT_CLASSES}
114
+ value={typeof value === "string" ? value : ""}
115
+ onChange={(e) => onChange(e.target.value === "" ? undefined : e.target.value)}
116
+ disabled={disabled}
117
+ aria-label={ariaLabel}
118
+ >
119
+ <option value="">— Select —</option>
120
+ {field.enumValues.map((v) => (
121
+ <option key={v} value={v}>
122
+ {v}
123
+ </option>
124
+ ))}
125
+ </select>
126
+ );
127
+ }
128
+
129
+ function NumberControl({ field, value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
130
+ const isInteger = field.type === FieldType.integer;
131
+ return (
132
+ <input
133
+ id={id}
134
+ type="number"
135
+ step={isInteger ? 1 : "any"}
136
+ className={FIELD_INPUT_CLASSES}
137
+ value={typeof value === "number" ? value : ""}
138
+ onChange={(e) => {
139
+ const raw = e.target.value;
140
+ if (raw === "") {
141
+ onChange(undefined);
142
+ return;
143
+ }
144
+ const parsed = isInteger ? Number.parseInt(raw, 10) : Number.parseFloat(raw);
145
+ if (!Number.isNaN(parsed)) onChange(parsed);
146
+ }}
147
+ disabled={disabled}
148
+ aria-label={ariaLabel}
149
+ />
150
+ );
151
+ }
152
+
153
+ function BoolControl({ value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
154
+ return (
155
+ <select
156
+ id={id}
157
+ className={FIELD_INPUT_CLASSES}
158
+ value={value === true ? "true" : value === false ? "false" : ""}
159
+ onChange={(e) => {
160
+ const v = e.target.value;
161
+ onChange(v === "" ? undefined : v === "true");
162
+ }}
163
+ disabled={disabled}
164
+ aria-label={ariaLabel}
165
+ >
166
+ <option value="">— Select —</option>
167
+ <option value="true">true</option>
168
+ <option value="false">false</option>
169
+ </select>
170
+ );
171
+ }
172
+
173
+ function DateControl({ value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
174
+ return (
175
+ <input
176
+ id={id}
177
+ type="date"
178
+ className={FIELD_INPUT_CLASSES}
179
+ value={typeof value === "string" ? value : ""}
180
+ onChange={(e) => onChange(e.target.value === "" ? undefined : e.target.value)}
181
+ disabled={disabled}
182
+ aria-label={ariaLabel}
183
+ />
184
+ );
185
+ }
186
+
187
+ function TimeControl({ value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
188
+ return (
189
+ <input
190
+ id={id}
191
+ type="time"
192
+ step={1}
193
+ className={FIELD_INPUT_CLASSES}
194
+ value={typeof value === "string" ? value : ""}
195
+ onChange={(e) => onChange(e.target.value === "" ? undefined : e.target.value)}
196
+ disabled={disabled}
197
+ aria-label={ariaLabel}
198
+ />
199
+ );
200
+ }
201
+
202
+ function TimestampControl({ value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
203
+ return (
204
+ <input
205
+ id={id}
206
+ type="datetime-local"
207
+ step={1}
208
+ className={FIELD_INPUT_CLASSES}
209
+ value={typeof value === "string" ? utcToLocalInput(value) : ""}
210
+ onChange={(e) => {
211
+ const raw = e.target.value;
212
+ onChange(raw === "" ? undefined : localInputToUtc(raw));
213
+ }}
214
+ disabled={disabled}
215
+ aria-label={ariaLabel}
216
+ />
217
+ );
218
+ }
219
+
220
+ /**
221
+ * Canonical RFC 3339 UTC → the datetime-local widget's value (the
222
+ * operator's local zone, no zone suffix). Unparseable input renders
223
+ * empty rather than throwing — the value may be mid-edit.
224
+ */
225
+ function utcToLocalInput(canonical: string): string {
226
+ const ms = Date.parse(canonical);
227
+ if (Number.isNaN(ms)) return "";
228
+ const d = new Date(ms);
229
+ const pad = (n: number) => String(n).padStart(2, "0");
230
+ return (
231
+ `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}` +
232
+ `T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
233
+ );
234
+ }
235
+
236
+ /** The widget's local value → canonical RFC 3339 UTC. */
237
+ function localInputToUtc(local: string): string {
238
+ const ms = Date.parse(local); // no zone suffix — parsed as local time
239
+ if (Number.isNaN(ms)) return local; // let coercion report it on submit
240
+ return new Date(ms).toISOString().replace(/\.000Z$/, "Z");
241
+ }
242
+
243
+ function JsonControl({ value, onChange, disabled, id, "aria-label": ariaLabel }: FieldValueControlProps) {
244
+ const initial = value !== undefined ? JSON.stringify(value, null, 2) : "";
245
+ const [raw, setRaw] = useState(initial);
246
+ const [parseError, setParseError] = useState<string | null>(null);
247
+
248
+ const handleChange = useCallback(
249
+ (e: React.ChangeEvent<HTMLTextAreaElement>) => {
250
+ const text = e.target.value;
251
+ setRaw(text);
252
+ if (text.trim() === "") {
253
+ setParseError(null);
254
+ onChange(undefined);
255
+ return;
256
+ }
257
+ try {
258
+ const parsed = JSON.parse(text) as JsonValue;
259
+ setParseError(null);
260
+ onChange(parsed);
261
+ } catch {
262
+ // Invalid JSON stays local — never emitted.
263
+ setParseError("Invalid JSON");
264
+ }
265
+ },
266
+ [onChange],
267
+ );
268
+
269
+ return (
270
+ <div className="flex flex-col gap-1">
271
+ <textarea
272
+ id={id}
273
+ rows={4}
274
+ className={cn(FIELD_INPUT_CLASSES, "resize-y font-mono")}
275
+ value={raw}
276
+ onChange={handleChange}
277
+ placeholder="{}"
278
+ disabled={disabled}
279
+ aria-label={ariaLabel}
280
+ aria-invalid={parseError !== null}
281
+ />
282
+ {parseError && (
283
+ <span role="alert" className="text-xs text-destructive">
284
+ {parseError}
285
+ </span>
286
+ )}
287
+ </div>
288
+ );
289
+ }