@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,411 @@
1
+ "use client";
2
+
3
+ import { useCallback, useMemo, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { Popover } from "@base-ui/react/popover";
6
+ import { create, type JsonValue } from "@bufbuild/protobuf";
7
+ import { RecordConditionOp } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/record_io_pb";
8
+ import {
9
+ FieldDeclarationSchema,
10
+ type CollectionDeclaration,
11
+ type FieldDeclaration,
12
+ } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/spec_pb";
13
+ import { useStigmerPortalContainer } from "../portal-container.js";
14
+ import { FIELD_INPUT_CLASSES, FieldValueControl } from "./FieldValueControl.js";
15
+ import {
16
+ filterableFields,
17
+ formatConditionChip,
18
+ isConditionComplete,
19
+ type FilterableField,
20
+ type RecordConditionDraft,
21
+ } from "./recordFilter.js";
22
+ import {
23
+ isListOperator,
24
+ isValuelessOperator,
25
+ OPERATOR_LABELS,
26
+ } from "./recordValues.js";
27
+
28
+ /** Props for {@link RecordFilterBuilder}. */
29
+ export interface RecordFilterBuilderProps {
30
+ /** The collection whose declared schema drives fields and operators. */
31
+ readonly collection: CollectionDeclaration;
32
+ /** Active conditions (AND-combined, per the DD-005 grammar). */
33
+ readonly conditions: readonly RecordConditionDraft[];
34
+ /** Called with the full condition set on add/remove/clear. */
35
+ readonly onChange: (conditions: readonly RecordConditionDraft[]) => void;
36
+ /** Additional CSS classes for the root container. */
37
+ readonly className?: string;
38
+ }
39
+
40
+ /**
41
+ * Schema-aware filter builder for the records browser (DD-008 SD-3):
42
+ * active conditions render as removable chips; the "Add filter" popover
43
+ * is draft-then-apply — a condition takes effect only on Apply, so
44
+ * half-built drafts never fire queries.
45
+ *
46
+ * The builder can express nothing `findRecords` cannot serve (DD-008
47
+ * invariant 2): fields come from the declarations plus the filterable
48
+ * system fields, operators from the per-type matrix (an unservable
49
+ * operator is structurally unofferable), and values from the same typed
50
+ * controls the record form uses.
51
+ *
52
+ * All visual properties flow through `--stgm-*` design tokens.
53
+ * Zero Console dependencies — safe for platform builder embedding.
54
+ */
55
+ export function RecordFilterBuilder({
56
+ collection,
57
+ conditions,
58
+ onChange,
59
+ className,
60
+ }: RecordFilterBuilderProps) {
61
+ const fields = useMemo(() => filterableFields(collection), [collection]);
62
+
63
+ const removeCondition = useCallback(
64
+ (index: number) => onChange(conditions.filter((_, i) => i !== index)),
65
+ [conditions, onChange],
66
+ );
67
+
68
+ const addCondition = useCallback(
69
+ (draft: RecordConditionDraft) => onChange([...conditions, draft]),
70
+ [conditions, onChange],
71
+ );
72
+
73
+ return (
74
+ <div
75
+ role="toolbar"
76
+ aria-label="Record filters"
77
+ className={cn("flex flex-wrap items-center gap-1.5", className)}
78
+ >
79
+ {conditions.map((condition, index) => (
80
+ <span
81
+ key={`${condition.field}:${index}`}
82
+ className="inline-flex items-center gap-1 rounded-full border border-border bg-muted px-2 py-0.5 text-xs text-foreground"
83
+ >
84
+ {formatConditionChip(condition)}
85
+ <button
86
+ type="button"
87
+ onClick={() => removeCondition(index)}
88
+ aria-label={`Remove filter ${formatConditionChip(condition)}`}
89
+ className={cn(
90
+ "inline-flex size-3.5 items-center justify-center rounded-full text-muted-foreground",
91
+ "hover:bg-accent hover:text-foreground",
92
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
93
+ )}
94
+ >
95
+ <CrossIcon className="size-2.5" />
96
+ </button>
97
+ </span>
98
+ ))}
99
+
100
+ <AddFilterPopover fields={fields} onApply={addCondition} />
101
+
102
+ {conditions.length > 1 && (
103
+ <button
104
+ type="button"
105
+ onClick={() => onChange([])}
106
+ className={cn(
107
+ "text-xs text-muted-foreground underline-offset-2 hover:text-foreground hover:underline",
108
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
109
+ )}
110
+ >
111
+ Clear all
112
+ </button>
113
+ )}
114
+ </div>
115
+ );
116
+ }
117
+
118
+ // ---------------------------------------------------------------------------
119
+ // The draft-then-apply popover
120
+ // ---------------------------------------------------------------------------
121
+
122
+ function AddFilterPopover({
123
+ fields,
124
+ onApply,
125
+ }: {
126
+ readonly fields: readonly FilterableField[];
127
+ readonly onApply: (draft: RecordConditionDraft) => void;
128
+ }) {
129
+ const portalContainer = useStigmerPortalContainer();
130
+ const [open, setOpen] = useState(false);
131
+
132
+ const [fieldName, setFieldName] = useState("");
133
+ const [op, setOp] = useState<RecordConditionOp>(RecordConditionOp.record_condition_op_unspecified);
134
+ const [value, setValue] = useState<JsonValue | undefined>(undefined);
135
+ const [values, setValues] = useState<readonly JsonValue[]>([]);
136
+
137
+ const selected = fields.find((f) => f.name === fieldName);
138
+
139
+ const reset = useCallback(() => {
140
+ setFieldName("");
141
+ setOp(RecordConditionOp.record_condition_op_unspecified);
142
+ setValue(undefined);
143
+ setValues([]);
144
+ }, []);
145
+
146
+ const handleOpenChange = useCallback(
147
+ (next: boolean) => {
148
+ setOpen(next);
149
+ if (!next) reset();
150
+ },
151
+ [reset],
152
+ );
153
+
154
+ const selectField = useCallback(
155
+ (name: string) => {
156
+ setFieldName(name);
157
+ setOp(RecordConditionOp.record_condition_op_unspecified);
158
+ setValue(undefined);
159
+ setValues([]);
160
+ },
161
+ [],
162
+ );
163
+
164
+ const draft: RecordConditionDraft = {
165
+ field: fieldName,
166
+ op,
167
+ value: isListOperator(op) || isValuelessOperator(op) ? undefined : value,
168
+ values: isListOperator(op) ? values : undefined,
169
+ };
170
+ const canApply = fieldName !== "" && isConditionComplete(draft);
171
+
172
+ const apply = useCallback(() => {
173
+ // Rebuild from state rather than closing over the render's draft.
174
+ const applied: RecordConditionDraft = {
175
+ field: fieldName,
176
+ op,
177
+ value: isListOperator(op) || isValuelessOperator(op) ? undefined : value,
178
+ values: isListOperator(op) ? values : undefined,
179
+ };
180
+ onApply(applied);
181
+ handleOpenChange(false);
182
+ }, [onApply, handleOpenChange, fieldName, op, value, values]);
183
+
184
+ return (
185
+ <Popover.Root open={open} onOpenChange={handleOpenChange}>
186
+ <Popover.Trigger
187
+ className={cn(
188
+ "inline-flex items-center gap-1 rounded-full border border-dashed border-input px-2 py-0.5 text-xs text-muted-foreground",
189
+ "hover:border-ring hover:text-foreground",
190
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
191
+ )}
192
+ >
193
+ <PlusIcon className="size-3" />
194
+ Add filter
195
+ </Popover.Trigger>
196
+ <Popover.Portal container={portalContainer}>
197
+ <Popover.Positioner sideOffset={8} align="start">
198
+ <Popover.Popup
199
+ className={cn(
200
+ "z-popover w-72 rounded-lg border border-border bg-popover p-3 text-popover-foreground shadow-md",
201
+ "flex flex-col gap-2",
202
+ )}
203
+ >
204
+ <label className="flex flex-col gap-1 text-xs font-medium text-muted-foreground">
205
+ Field
206
+ <select
207
+ className={FIELD_INPUT_CLASSES}
208
+ value={fieldName}
209
+ onChange={(e) => selectField(e.target.value)}
210
+ >
211
+ <option value="">— Select —</option>
212
+ {fields.map((f) => (
213
+ <option key={f.name} value={f.name}>
214
+ {f.name}
215
+ </option>
216
+ ))}
217
+ </select>
218
+ </label>
219
+
220
+ {selected && (
221
+ <label className="flex flex-col gap-1 text-xs font-medium text-muted-foreground">
222
+ Operator
223
+ <select
224
+ className={FIELD_INPUT_CLASSES}
225
+ value={op === RecordConditionOp.record_condition_op_unspecified ? "" : String(op)}
226
+ onChange={(e) => {
227
+ setOp(
228
+ e.target.value === ""
229
+ ? RecordConditionOp.record_condition_op_unspecified
230
+ : (Number(e.target.value) as RecordConditionOp),
231
+ );
232
+ setValue(undefined);
233
+ setValues([]);
234
+ }}
235
+ >
236
+ <option value="">— Select —</option>
237
+ {selected.operators.map((o) => (
238
+ <option key={o} value={o}>
239
+ {OPERATOR_LABELS.get(o)}
240
+ </option>
241
+ ))}
242
+ </select>
243
+ </label>
244
+ )}
245
+
246
+ {selected &&
247
+ op !== RecordConditionOp.record_condition_op_unspecified &&
248
+ !isValuelessOperator(op) &&
249
+ (isListOperator(op) ? (
250
+ <ListValueEditor field={selected} values={values} onChange={setValues} />
251
+ ) : (
252
+ <div className="flex flex-col gap-1 text-xs font-medium text-muted-foreground">
253
+ Value
254
+ <FieldValueControl
255
+ field={controlDeclaration(selected)}
256
+ value={value}
257
+ onChange={setValue}
258
+ aria-label={`Filter value for ${selected.name}`}
259
+ />
260
+ </div>
261
+ ))}
262
+
263
+ <div className="mt-1 flex justify-end gap-2">
264
+ <button
265
+ type="button"
266
+ onClick={() => handleOpenChange(false)}
267
+ className={cn(
268
+ "rounded-md border border-input bg-background px-2.5 py-1 text-xs font-medium text-foreground",
269
+ "hover:bg-accent hover:text-accent-foreground",
270
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
271
+ )}
272
+ >
273
+ Cancel
274
+ </button>
275
+ <button
276
+ type="button"
277
+ onClick={apply}
278
+ disabled={!canApply}
279
+ className={cn(
280
+ "rounded-md bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground",
281
+ "hover:bg-primary-hover",
282
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
283
+ "disabled:pointer-events-none disabled:opacity-50",
284
+ )}
285
+ >
286
+ Apply
287
+ </button>
288
+ </div>
289
+ </Popover.Popup>
290
+ </Popover.Positioner>
291
+ </Popover.Portal>
292
+ </Popover.Root>
293
+ );
294
+ }
295
+
296
+ /**
297
+ * The declaration handed to the value control: the declared field
298
+ * itself, or a synthetic declaration for system fields (`id` as string,
299
+ * audit timestamps as timestamp).
300
+ */
301
+ function controlDeclaration(field: FilterableField): FieldDeclaration {
302
+ return (
303
+ field.declaration ??
304
+ create(FieldDeclarationSchema, { name: field.name, type: field.type })
305
+ );
306
+ }
307
+
308
+ // ---------------------------------------------------------------------------
309
+ // List-value entry for in / not_in
310
+ // ---------------------------------------------------------------------------
311
+
312
+ function ListValueEditor({
313
+ field,
314
+ values,
315
+ onChange,
316
+ }: {
317
+ readonly field: FilterableField;
318
+ readonly values: readonly JsonValue[];
319
+ readonly onChange: (values: readonly JsonValue[]) => void;
320
+ }) {
321
+ const [pending, setPending] = useState<JsonValue | undefined>(undefined);
322
+
323
+ const add = useCallback(() => {
324
+ if (pending === undefined) return;
325
+ onChange([...values, pending]);
326
+ setPending(undefined);
327
+ }, [pending, values, onChange]);
328
+
329
+ return (
330
+ <div className="flex flex-col gap-1 text-xs font-medium text-muted-foreground">
331
+ Values
332
+ {values.length > 0 && (
333
+ <div className="flex flex-wrap gap-1">
334
+ {values.map((v, i) => (
335
+ <span
336
+ key={i}
337
+ className="inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs font-normal text-foreground"
338
+ >
339
+ {typeof v === "string" ? v : JSON.stringify(v)}
340
+ <button
341
+ type="button"
342
+ onClick={() => onChange(values.filter((_, j) => j !== i))}
343
+ aria-label={`Remove value ${typeof v === "string" ? v : JSON.stringify(v)}`}
344
+ className="inline-flex size-3 items-center justify-center rounded-full text-muted-foreground hover:text-foreground"
345
+ >
346
+ <CrossIcon className="size-2" />
347
+ </button>
348
+ </span>
349
+ ))}
350
+ </div>
351
+ )}
352
+ <div className="flex items-center gap-1.5">
353
+ <FieldValueControl
354
+ field={controlDeclaration(field)}
355
+ value={pending}
356
+ onChange={setPending}
357
+ aria-label={`Add filter value for ${field.name}`}
358
+ />
359
+ <button
360
+ type="button"
361
+ onClick={add}
362
+ disabled={pending === undefined}
363
+ className={cn(
364
+ "shrink-0 rounded-md border border-input bg-background px-2 py-1 text-xs font-medium text-foreground",
365
+ "hover:bg-accent hover:text-accent-foreground",
366
+ "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
367
+ "disabled:pointer-events-none disabled:opacity-50",
368
+ )}
369
+ >
370
+ Add
371
+ </button>
372
+ </div>
373
+ </div>
374
+ );
375
+ }
376
+
377
+ // ---------------------------------------------------------------------------
378
+ // Icons (inline SVG — no icon-library dependency)
379
+ // ---------------------------------------------------------------------------
380
+
381
+ function PlusIcon({ className }: { readonly className?: string }) {
382
+ return (
383
+ <svg
384
+ className={className}
385
+ viewBox="0 0 16 16"
386
+ fill="none"
387
+ stroke="currentColor"
388
+ strokeWidth="1.5"
389
+ strokeLinecap="round"
390
+ aria-hidden="true"
391
+ >
392
+ <path d="M8 3v10M3 8h10" />
393
+ </svg>
394
+ );
395
+ }
396
+
397
+ function CrossIcon({ className }: { readonly className?: string }) {
398
+ return (
399
+ <svg
400
+ className={className}
401
+ viewBox="0 0 16 16"
402
+ fill="none"
403
+ stroke="currentColor"
404
+ strokeWidth="1.5"
405
+ strokeLinecap="round"
406
+ aria-hidden="true"
407
+ >
408
+ <path d="M4 4l8 8M12 4l-8 8" />
409
+ </svg>
410
+ );
411
+ }